Markus Stolpe M-T-S[AT]GMX.NET: Shared Memory / Semaphoren - Verständnisproblem

Beitrag lesen

hallo,

ich hoffe, mir kann jemand bei nachfolgendem problem:

angenommen, ich hab eine datenbank...sagen wir telefonbuch. es gibt da verschiedene namen, zu jedem namen noch telefonnummer usw.
insgesamt 2 millionen. die zahl ist nicht fest, sondern steigend.

abfragen will ich mit semaphoren ermöglichen. hierzu verwende ich PHP 4.0, 4 GB RAM,...

da ja shared memory segmente bzw. semaphoren (hab den unterschied nicht ganz verstanden) bestimmte grössenrestriktionen haben, die man nicht ganz nach belieben ändern kann, will ich nun also die ganzen einträge alphabetisch unterteilen.
dies kann ich jeweils nach dem anfangsbuchstaben oder nach den ersten beiden anfangsbuchstaben machen.

nach meinen laienhaften berechnungen benötige ich so je buchstabe derzeit 20 bis 110 MB (s gibt's öfter als z.b. q).

da ja die ersten dinger (shared memory segmente?) an MB-Zahlen zwischen 1 - 128 MB bei Linux gebunden sind, verwende ich demnach 24 segmente + 10 segmente für zahlen.
das ganze über PHP mittels: shm_attach()

so ein segment scheint aus semaphoren zu bestehen, die ich mittels
sem_get() bzw. shm_get_var() aufrufe. hierbei verwende ich auch einen Key, den ich durch den (oder: die beiden) anfangsbuchstaben generiert habe.  ...das, was ich dort heraushole, ist ein $array, in dem wiederum den eigentlichen werte herauslese.

das ganze funktionierte auch, bis ich dann auf irgendwelche restriktionen seitens der standardinstallation von linux/apache gestossen bin. ich wollte dann verschiedene werte ändern, um es zu ermöglichen, dabei fiel mir allerdings auf, dass ich gar nicht weiss, ob ich nun semaphore, segment oder sonstwas erweitern soll bzw. wo ich meine "ach-so-tolle" alphabetische unterteilung nun wirklich anbringen soll und wo ich meine arrays mit den ganzen werten reinschreiben soll.

zur veranschaulichung hier so ein kleiner aufbau (wie gesagt, ich weiss nun nicht, was "höher" steht: semaphore (shm_get) oder shared memory segment (shm_attach).

SEGMENTE: gesamt 24 fürs alphabet + 10 für zahlen

--> SEMAPHOREN: Keys hierfür ebenso generiert aus den anfangsbuchstaben/zahlen

---> in die semaphoren greif ich dann rein und hol mir mittels des ermittelten sem_varkeys (selbe wie keys) für semaphoren das entsprechende array raus, aus dem ich dann den wert lese.

WIE UNTERTEILE ICH DAS GANZE ALSO AM BESTEN?

  • welche werte (SHMMIN, SHMMAX, SHMALL, ...) habe ich bei dem server (apache/linux) zu ändern bei gesamt 2 Millionen+ eintragungen (beachte: sind schlussendlich in $arrays drin!)

kann übrigens sein, dass ich gänzlich einen grundlegenden fehler beim aufbau begangen habe....

für jedwede hilfe bin ich äusserst dankbar! ebenso für tipps, verweise etc.!

besten dank!!

Markus Stolpe