/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hvordan kan variable overleve?
Fra : Bertel Lund Hansen


Dato : 12-06-05 13:45

Hej alle

Jeg har en side med en formular, og en datafil der læses ind i
hukommelsen med file_get_contents() (Fidusos medlemsliste).

Man kan udfylde nogle felter og få data filtreret derefter.
Imidlertid ville det være smart om filen kun skal læses én gang
og man så kan filtrere på forskellig måde.

Jeg har ikke arbejdet med sessions, men så vidt jeg kunne se i
manualen, så serialiseres data der skal overleve - og så er man
jo lige vidt (det sparer ikke diskarbejde).

Jeg prøvede at lave en skjult knap og tildele den værdien af mit
array, men det virkede ikke (jeg formoder at variablen er alt for
stor).

Findes der en måde så indholdet kan huskes til hver gang når der
igen trykkes "Søg"?

I behøver ikke råde mig til gå over til en databasebaseret (smukt
ord) løsning, for jeg er godt klar over at det er der jeg skal
hen - engang.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

 
 
Peter Brodersen (12-06-2005)
Kommentar
Fra : Peter Brodersen


Dato : 12-06-05 14:14

On Sun, 12 Jun 2005 14:44:44 +0200, Bertel Lund Hansen
<nospamfilius@lundhansen.dk> wrote:

>Findes der en måde så indholdet kan huskes til hver gang når der
>igen trykkes "Søg"?

Der findes udvidelser til PHP, der giver mulighed for noget shared
memory management. Det er dog typisk ikke noget, der er installeret på
forhånd, og ligeledes noget, der kan øge kompleksiteten af ens sider.

Kig fx på http://dk.php.net/shmop , hvis du vil se nogle
PHP-eksempler. Men det er ikke sikkert, det er noget, du kan få lov
til at benytte hos din udbyder.

I praksis ville jeg blot overveje, om der var tale om et egentligt
problem. Handler det om at din side er reelt sløv, eller blot om at du
"bare" vil være hensynsfuld og belaste så lidt som muligt på serveren?
Man kunne forestille sig, at hvis filen i øvrigt tilgås ofte, og ikke
ændres, så vil den i forvejen være cached i filsystemet. Det er så
måske ikke tilfældet hos en udbyder med tusindevis af kunder, men
omvendt set, så er problemet måske heller ikke så stort.

Jeg tror, jeg ville erkende, at sortering af medlemsliste-siden
alligevel ikke er noget, der foretages hele tiden, så det enkelte
fil-opslag er rent marginalt. Generelt er min holdning, at lige præcis
ved søgninger må der godt bruges ressourcer (forudsat at søgningen
ikke opleves som at tage lang tid).

>I behøver ikke råde mig til gå over til en databasebaseret (smukt
>ord) løsning, for jeg er godt klar over at det er der jeg skal
>hen - engang.

Pas på, at du ikke falder i optimering-frem-for-funktionalitet-fælden.
Flere databaser har meget fornuftige indekseringsrutiner, der gør, at
det utroligt hurtigt fx at finde rækker, hvor personens navn starter
med "Bertel" - derimod er det ikke muligt at gøre brug af en
indeksering, hvis man søger på tekststykker inde i en streng, fx
"Lund" (her antaget at et fornavns-felt indeholder "Bertel Lund").

Når datamaterialet ikke er større end et par tusinde rækker, så vil
jeg foretrække, at man ofrer den mulige optimering (at man kun kan
søge på starten af ord, eventuelt hele ord ved en
fuldtekst-indeksering), til fordel for en mere fri søgemulighed. Det
skalerer selvfølgelig ikke i det uendelige, men det er så en
problemstilling, man må se på, når der er tilpas mange rækker.

I et projekt har jeg i øjeblikket ca. 3-4.000 poster, der dækker over
en række personer, bøger og begivenheder. Her har jeg uoptimalt valgt
at trække al data ud og sammenligne navne og titler med søgeordet vha.
similar_text() : http://php.net/similar-text - på den måde bliver
enkelte stave- og tastefejl også fanget.

Det er helt sikkert en opsætning, hvor belastningen er ligefrem
proportionel med datamængden. Men for det nuværende antal poster, så
virker det som et fint tradeoff. Belastningen er ikke så stor, at den
er mærkbar for brugeren.

--
- Peter Brodersen

Bertel Lund Hansen (12-06-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 12-06-05 14:22

Peter Brodersen skrev:

>I praksis ville jeg blot overveje, om der var tale om et egentligt
>problem. Handler det om at din side er reelt sløv, eller blot om at du
>"bare" vil være hensynsfuld og belaste så lidt som muligt på serveren?

Det sidste.

Tak for dine kommentarer. Jeg ignorerer 'problemet'.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Jacob Atzen (12-06-2005)
Kommentar
Fra : Jacob Atzen


Dato : 12-06-05 14:25

On 2005-06-12, Bertel Lund Hansen <nospamfilius@lundhansen.dk> wrote:
> Jeg har en side med en formular, og en datafil der læses ind i
> hukommelsen med file_get_contents() (Fidusos medlemsliste).

Jeg går ud fra, at du har påvist flaskehalsen ligger i indlæsningen af
denne. Hvis ikke, er det der jeg ville starte min optimering. En hurtig
test viser mig, at jeg kan læse en fil på 817KB ind med
file_get_contents() på 0.2-0.3 sekund.

> Man kan udfylde nogle felter og få data filtreret derefter.
> Imidlertid ville det være smart om filen kun skal læses én gang
> og man så kan filtrere på forskellig måde.
>
> Jeg har ikke arbejdet med sessions, men så vidt jeg kunne se i
> manualen, så serialiseres data der skal overleve - og så er man
> jo lige vidt (det sparer ikke diskarbejde).

Du kan vælge at benytte PHP's egen sessionhandler, der gemmer data i en
fil på disken eller du kan implementere din egen handler. Din egen
handler kan så gøre, hvad du synes er smart.

> Jeg prøvede at lave en skjult knap og tildele den værdien af mit
> array, men det virkede ikke (jeg formoder at variablen er alt for
> stor).

Bruger du kun din applikation lokalt? Det er jo i langt de fleste
tilfælde hurtigere at læse X byte fra disken end at sende dem over
netværket.

> Findes der en måde så indholdet kan huskes til hver gang når der
> igen trykkes "Søg"?

Hvis du er på et un*x system kan du benytte dig af SysV shared memory
(såfremt din PHP er oversat med understøttelse for dette). Så bliver
data gemt i et lagerområde, der normalt holdes i ram.

SysV funktionerne er beskrevet her:

<http://dk2.php.net/manual/en/ref.sem.php>

Der er desværre en forholdsvis lav grænse for hvor meget man kan gemme i
shared memory (128KB ifølge manualen).

> I behøver ikke råde mig til gå over til en databasebaseret (smukt ord)
> løsning, for jeg er godt klar over at det er der jeg skal hen -
> engang.

Det vil jeg så undlade, selvom det lyder lidt som om du er igang med at
implementere dit eget databasesystem

--
Med venlig hilsen
- Jacob Atzen

Bertel Lund Hansen (12-06-2005)
Kommentar
Fra : Bertel Lund Hansen


Dato : 12-06-05 17:11

Jacob Atzen skrev:

>Bruger du kun din applikation lokalt?

Fiduso ligger på et webhotel. Sitet er offentligt tilgængeligt.
Når PHP arbejder, sker det jo lokalt indtil resultatet sendes
afsted.

>Det vil jeg så undlade, selvom det lyder lidt som om du er igang med at
>implementere dit eget databasesystem

Det er i princippet rigtigt. Fidusossystemet er aldrig blevet
designet ordentligt. Det er vokset gradvis fra noget som jeg ikke
havde forestillet mig skulle blive særlig stort. Nu laver jeg en
god brugergrænseflade, og så må resten klares senere.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste