ugrás a tartalomhoz

node szerü tartalom mentése db-be

Kubi · 2012. Feb. 23. (Cs), 10.54
Sziasztok!

Ezt inkább vitatémának szánom, mert tudok rá megoldást, kettő megoldást (ha valaki tud egy harmadikat, ne tartsa magában) és megtudom találni melyik a legjobb :)

A cél: csm tartalom mentése adatbázisban, a cms oldalon lévő "slotokat" a felhasználó adhatja meg admin felületen, úgy mint szöveges mező, cím mező, kép mező, szám mező stb. A megadott template-el ezek lesznek megjelenítve.

A form/template/tipus megvalósítását most hagyjuk, adatbázisban az egyes oldalak elmentésére koncentrálok.

két lehetséges megoldáson gondolkozok, a 2-at részesítem előnyben:

1. megoldás, fő tábla node, erre vannak adattípusonként csatolva táblák, úgy mint node_string, node_integer, node_real, node_text, node_date, node_datetime stb.

előny: db-ben kevesebb helyet foglal a 2. megoldáshoz képest
hátrány: keresés megvalósítása bonyolultabb, egyes slot tipusoknál tárolnom kell, hogy milyen adattipus tartozik hozzá (bonyolítja a megvalósítást, 2. megoldásnál elég csak validálni az adatot)

2. megoldás, fő tábla node, erre van egy tábla node_content csatolva, amiben egy longtext mező tárolja az adatot és fulltext index van rátéve a kereséshez.

előny: nagyon egyszerű és gyors a keresés
hátrány: kisebb adatok (pl: szám, dátum) is egy longtext mezőbe írjuk bele, adatbázisban tárolás szempontjából ez így csúnya
----

mindkét esetben kérdéses a sebesség, leginkább a keresés sebessége, tesztelni fogom mondjuk 1 millió adattal (200.000 node, mindegyikhez 5 adattipus), fulltext search miatt a 2. talán gyorsabb lesz, nem tudom ekkora adat mennyiségnél hogy viselkedik...
 
1

Több megoldás

Poetro · 2012. Feb. 23. (Cs), 12.31
Az 1-essel az a baj, hogy ha egy mezőtípusból több van, akkor mind kb. a következőképpen néz ki: entity_id, field_id, value. Ugye ebben az esetben majd kell még egy lekérdezés, ami lekérdezi az entity típushoz, hogy melyik mezőnek mi a neve, és mi a mezőknek a sorrendje. A 200 ezer tartalom nem tűnik túl soknak, ennél sokkal több adattal is kényelmesen el kell boldogulnia az adatbázisnak.

A 2-es megoldást semmiképp se alkalmaznám, semmi előnye nincs, csak hátránya.

Bevezetnék egy harmadik megoldást, ami Document Store alapú, így az adat tárolásának gondja le van tudva, mivel eleve a táblákban dokumentumot tárolunk. Erre lehet például CouchDB-t vagy MongoDB esetleg Redis (bár ezt bonyolultabb megoldani).

A kereséshez minden esetben például Apache Solr-t illetve Sphinx-et használnék.
3

mysql vonalon kell

Kubi · 2012. Feb. 23. (Cs), 21.13
mysql vonalon kell gondolkoznom, 2. megoldásnál mi az amit hátránynak tekintesz?
4

Nincsenek mezők csak egy

Poetro · 2012. Feb. 23. (Cs), 21.18
Nincsenek mezők csak egy fulltext? Vagy nem értem mire gondoltál a fenti alatt.
5

szükséges mezők ott is

Kubi · 2012. Feb. 23. (Cs), 22.54
szükséges mezők ott is meglennének, úgy mint id, node_id, type_id, weight (slotok sorrendezéséhez), value ami longtext és fulltext index lenne rajta (fulltext search, lehet score alapján rangsorolni a találatokat)

Lekérdezésben így egyből rálehet csatolni a node-ra az összes tipust egy join-al. Nagyon szépen hangolható a keresés fulltext miatt, type_id megadásával lehet csak egyes tartalom tipusokban keresni. Létrehozásnál kell arra figyelni hogy adott node-ra az összes elvárt slot tipushoz legyen egy adatbázis bejegyzés, akkor is ha üres a tartalma.
2

SQLFS

janoszen · 2012. Feb. 23. (Cs), 19.39
En regen igy probaltam megoldani: http://blog.janoszen.hu/2010/05/02/sqlfs-filerendszer-sql-ben/

Ma mar lehet mas megoldast valasztanek, de meg nem mondom, mit.