Soci (Soczó Zsolt) szakmai blogja

2011.05.19.

Alternatíva a gonosz EAV-val szemben?

Filed under: Adatbázisok,Architektúra,Design,Szakmai élet — Soczó Zsolt @ 22:24

Az üzleti igény egy olyan adatbázis struktúra létrehozása, amelyben az előre definiált táblák adatai mellé a kusztomerek saját maguk is fel tudnak venni plusz adatokat, anélkül, hogy ehhez az adatbázistáblákat és az alkalmazást módosítani kellene. Sajnos nem csak letárolják ezeket, de még keresni is akarnak egyesekre. Azaz egyfajta open schemat kellene megvalósítani. Erre jó lehet az Entity-Attribute-Value megoldás, de úton-útfélen gonosznak van kinevezve. Értem én, hogy szar belőle lekérdezni, marha nagy lehet, ha egyszerűen csinálják meg nem típusos (én minden típushoz akarok egy oszlopot létrehozni), de milyen használható alternatíva van vele szemben?
Olvastam a serialized blobot, pl. egy xml oszlopba rakjuk a plusz dolgokat. Elvileg lehet xqueryzni, meg indexelni, de érzésre ez se egyszerű, se gyors nem lesz.
A sparse colum esetén séma módosítással jár az új adat definíciója. Ez egyrészt nem tetszik secu okokból (alter table kell hozzá), másrészt elég gáz szervizelni az alkalmazást, ha 50 ügyfél saját oszlopokkal bővítheti a tábláinkat.
Szóval, mi a jó a feladatra? Nekem még mindig az EAV tűnik a legkezelhetőbbnek.

9 Comments

  1. Az adatbázis struktúra adatbázis-struktúra, viszont ez nagyon pojénosra sikeredett: … séma módosítással jár …
    Én meg a barátnőmmel járok :)

    Comment by helyesebb — 2011.05.20. @ 01:57

  2. Az EAV-val tényleg az a probléma, hogy az egyszerű lekérdezések bonyolultak vele, a bonyolultak meg k. bonyolultak.
    Be lehet vetni mondjuk egy Lucene-t, de akkor meg már bonyolultságban vagy ott, mint az XML-nél.

    Comment by gerely — 2011.05.20. @ 09:50

  3. EAV mellet.
    “Rendes” táblákban nem lehet mert nem rugalmas (az ügyfél felé). (De ha meg is csinálod, az üzemeltetés először furcsán fog nézni, aztán üldözni és ütlegelni kezd.) Az XML… erre pont ennyit tudok mondani: háááát.
    Akkor lehet EAV-zni, ha az ügyfél elfogadja, hogy egyszerűen kereshet benne, de nem lesz sum tól fölfelé semmi (értelemszerűen, nem normalizált tárolásra nem szeretnénk joinolni meg úgy általában semmit).
    Kereséshez meg offline/fulltext, ahogy a kolléga mondja.

    Comment by gerleim — 2011.05.20. @ 11:39

  4. Az igény úgy szól, hogy a monitor előtt ülő Gizike fog egyszercsak egy új adatot definiálni mondjuk egy üzleti partnerhez? Vagy a rendszert megrendelő ügyfél (cég) igényelhet ilyen új adatokat esetleg egy admin felületen? Szerintem a nagy versenyzők (pl. SAP) is csak külön fejlesztéssel tudnak ilyet, akkor viszont plusz táblákat vezetnek be és az alkalmazás-réteget is módosítják.
    Úgy képzelted egyébként, hogy minden táblához lesz egy standard, jól definiált, szép alapverzió, és mellé egy kusztomizálható?

    Comment by rgeorge — 2011.05.20. @ 12:13

  5. Használtuk a serialized blob-ot, de nem csak erre szorítkoztunk. Voltak “sima” mezők is + materializált mézők az xml-ből (ezek csak a könnyebb kereshetőség miatt).
    Ez a baj az EAV-val, meg ennek a serializált blob verziójával is, hogy lassú és csak részlegesen típusos.
    Sajnos az ilyen megoldásokkal, az a baj, hogy mindenre jó, de mindenre lassan/rosszul működik. Ilyen megoldások vannak a CRM rendszerek legtöbbjében is, ezért ezek nem is működnek túl jól. Ja és az XML rengeteg helyet foglal el, ha indexeled, akkor meg még többet! :(

    Comment by safi — 2011.05.20. @ 12:14

  6. SharePointban van egy tábla amely 10 oszlopot tartalmaz típusonként (tehát van vagy 50-60 oszlopa), és a SP Listák egyes mezői ebbe a táblába képződnek le. A leképezés a Lista metaadataiban van leírva. Ha egy típusból esetleg elfogyna a 10 oszlop, akkor nyit egy új DB rekordot a nem elférő SP mezőknek. Így egy SP lista sort a DB-ben 1-(3,4,5, lényeg, hogy kevés) rekord képez le. Tapasztalataim szerint legtöbbször egy SP sor egy DB rekordba belefér.

    Szerintem ez ilyen köztes megoldás, és szerintem a SharePointnál elég jól beválik.

    Comment by Szindbad — 2011.05.20. @ 21:35

  7. Még 1 ötlet: sparse column, és feladatokkal leírni,
    Hogy melyik mező, mit tartalmaz, hasonlóan mint
    a sharepoint. (és mint sok más portálserver)

    Comment by safi — 2011.05.21. @ 20:41

  8. Köszönöm mindenkinek a hozzászólásokat. A Szindbad által írt megoldás érdekes, teljesítmény szempontból okos kompromisszum, csak nehéz benne keresni (10x or a whereben).
    Egyelőre maradunk a gonosz sima EAV-nál, meglátjuk, hogy zenél.
    rgeorge: igen, lesznek alaptáblák, és azokat egészítik ki az ügyfelek saját adatokkal.

    Comment by Soczó Zsolt — 2011.05.22. @ 17:29

  9. feladatok = metaadatok

    htc sense kicserélte :(

    Comment by safi — 2011.05.22. @ 18:38

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress