hali,
épp egy tárolási problémával küszködök, és kéne némi tapasztalati vélemény.
az van, hogy van 50E+ user, nekik pedig vannak kapcsolataik egymással -- kivel leveleztek, ki nézett meg kit, ki kedvel kicsodát, stb. ez kb. 3-4M kapcsolati rekord.
mivel igen aggresszíven cache-elek (hogy ne kelljen átnézni állandóan ezeket a kapcsolati rekordokat), így az van, hogy tároláskor és cache-újraépítéskor kell csak a backendhez nyúlnom, ami jelenleg megosztva file (userenként 4 file) és mysql tábla (kapcsolatonként (típusok szerint is) 1 rekord).
mivel nemrég clusteresedtünk, ezért a file backend nfs-re került, de az nagyon omladozik a terhelés alatt (mivel leginkább írási műveletek történnek), így átmenetileg visszakoznom kellett a terheléselosztásos php módszertől. innentől eléggé egyértelmű, hogy a file backendet meg kell szüntetnem, és át kell raknom valamilyen db alapra. a mongot gondoltam kipróbálni erre, főleg, mert memóriában tudja tárolni az igazán aktív rekordokat.
a nagy gondom az, hogy melyik tárolási forma lenne a célszerű.
ha user/kapcsolattípus alapján 1-1 rekordot tárolnék (mint a klasszikus sql alapon), akkor legalább 3-4 millió rekordról lenne szó, ahol minimum 3 indexet kéne fenntartanom (user1 id, user2 id, típus) a hatékony lekéréshez -- ez viszont a cache-elés miatt nem tűnik annyira fontosnak.
a másik variáció az, hogy userenként 1 rekordot tartok fent, amin belül mondjuk json-ba kódolva a jelenlegi fájlok (illetve sql-ben tárolt adatok) tartalma kerül. ez kb. 50E+ rekordot jelent. így csak egy indexet kellene fenntartanom, a user ID-t. így persze vesztem azt, hogy szabadon csináljak lekéréseket a db-ben, de mint az a fentiekből látható, ez most sem lenne megoldható, és nincs is rá szükség. viszont így egy-egy entry viszonylag nagyobb méretű lehet, és kell némi logikát alkalmaznom a betöltéskor/mentéskor, plusz saját logikával kell átnéznem és módosítanom a "file" tartalmát.
per pillanat hajlok az utóbbi felé, mert attól tartok, az előbbinél a rekordok száma miatt az indexek nagyon sok operatív memóriát falnának fel, és eléggé fontos lenne, hogy minél több minden férjen be a ramba.
ti melyiket választanátok?