Objektové úložisko

Objektové úložisko
« kdy: 10. 12. 2019, 17:11:37 »
Som na doma chorý a z nudy si robím vylepšenia svojho webu.

Naprogramoval som si možnosť komentovania článkov (frontend je v React-e a TS). Každý komentár môže obsahovať reakcie.

Každý komentár reprezentuje takáto dátová erntita:

Kód: [Vybrat]
export type TComment = {
    id: string;
    nick: string;
    email: string;
    dateTime: string;
    content: string;
    replies: TComment[];
    identity: {
        userId: number | null;
        articleId: number;
        ip: string;
        host: string;
    }
}

Pôvodne som chcel komentáre ukladať do RDBMS na ktorej beží celý web. Ale potom by som zbytočne musel objektový strom konvertovať na tabuľkové údaje ktoré by na seba odkazovali cez parentId a pri zobrazovaní komentárov zase naopak. Niežeby mi to robilo problém už som také niečo robil veľa krát.  Ale rozhodol som sa že vyskúšam iný spôsob.

Napadlo ma že by som použil nejaké úložisko ktoré je na tento účel stvorené... Také úložisko kde by som mohol vložiť rovno celý strom komentárov ako objekty. A ešte v nich aj vyhľadávať prípadne nad nimi robyť nejaké dopyty (dotazy)

To znamená buď OODBMS (objektovú db), ORDBMS (objektovo relačnú db) alebo nejakú dokumentovú db aspoň sa naučím novú technoogiu. Ktorú databázu by ste mi doporučili na ukladanie objektovej hierarchie "anemických" objektov. Z minulosti som mal skúsenosti s MongoDB, RavenDB a DB4O, ale popravde po rokoch si to už nepamatám. Chcel by som, naozaj skutočný DB server nie embedded db
« Poslední změna: 10. 12. 2019, 20:42:13 od Petr Krčmář »


Re:objektové úložisko...
« Odpověď #1 kdy: 10. 12. 2019, 17:53:43 »
No, řekl bych, že klíčové rozhodnutí bude:

Mají data povahu stromu (jsou hierarchická)? Jestli jo, bude ti stačit nějaká dokumentová databáze (Mongo atp), jestli jde o obecný graf (jsou tam cykly, článek obsahuje seznam komentářů a ty zas říkají, v jakém článku jsou), potřebuješ něco sofistikovanějšího. Doporučil bych se držet hierarchických dat, pokud je to možné.

Teď budu možná mít blbě terminologii, ale objektová databáze umožňuje ukládat objekty ve smyslu OOP, tj "data + kód" v databázi. Tak to alespoň dělá GemStone. To je něco ještě o úroveň složitějšího než co jsi tu popisoval, představ si třeba, že Virtual Machine nějaké běžící Java aplikace zároveň vykonává kód z více klientů najednou, a zároveň se persistuje na disk, když se vypne zapne počítač, je možné ji obnovit v tom stavu, v jakém byla před vypnutím.

Ale to je bohužel spíš zajímavost ze světa Smalltalku/GemStone, nevím jestli se to dnes někde jinde v praxi používá. Úvod je třeba tady: http://www.laputan.org/pub/sag/gem.PDF

Kit

  • *****
  • 656
    • Zobrazit profil
    • E-mail
Re:objektové úložisko...
« Odpověď #2 kdy: 10. 12. 2019, 18:49:18 »
Požaduješ vlastně KVS, což ti splní prakticky každá databáze, včetně embedded. Pokud v tom nebudeš potřebovat vyhledávat, použij cokoli a máš hotovo.

Zamysli se tedy nad tím, zda a co budeš chtít v těch datech vyhledávat.

L..

  • ***
  • 234
    • Zobrazit profil
    • E-mail
Re:objektové úložisko...
« Odpověď #3 kdy: 10. 12. 2019, 22:41:12 »
Mají data povahu stromu (jsou hierarchická)? Jestli jo, bude ti stačit nějaká dokumentová databáze (Mongo atp), jestli jde o obecný graf (jsou tam cykly, článek obsahuje seznam komentářů a ty zas říkají, v jakém článku jsou), potřebuješ něco sofistikovanějšího. Doporučil bych se držet hierarchických dat, pokud je to možné.

Ten obecný graf už zvládá i Mongo. Akorát je trochu komplikovanější třeba vyhledávat podle políček navázaného (nevnořeného) dokumentu.


luvar

  • ***
  • 197
    • Zobrazit profil
    • E-mail
Re:Objektové úložisko
« Odpověď #4 kdy: 12. 12. 2019, 17:21:01 »
Osobne by som skúsil (záleží ale na tvojom smere učenia) použiť postgresql (predpokladám, že na nej beží i web). Postgre vie ukladať dokumenty a vie ich aj normalizovať, indexovať, vyhladávať v nich a podobne.

Niekde som čítal, že nech je nová (v projekte zatial nepouzita) technologia akokolvek vhodna na vyriesenie problemu, je predsalen nova a s tym prichadza nutnost uciacej sa krivky.

Na druhej strane, nie je nic lepsie, ako si na nie-kritickom projekte vyskusat nieco nove a zaroven to pouzit v realnom nasadeni.

Prajem vela zabavy.