abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 3
    dnes 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 13
    dnes 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    dnes 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 2
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 13
    KDE Plasma 6
     (72%)
     (10%)
     (2%)
     (17%)
    Celkem 695 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Doporučte ACID kompatibilní NoSQL databázi

    20.5.2012 17:19 kris
    Doporučte ACID kompatibilní NoSQL databázi
    Přečteno: 899×
    Ahoj. Hledám NoSQL databázi, která umí pracovat transakčně. Potřebuji do ní ukládat uživatelské účty. Každý uživatelský účet má schématem definované povinné atributy a nepovinné. Kromě toho musí databáze umožňovat přidávat uživateli libovolné atributy bez schématu (jen definuji datový typ a název atributu). Také budu potřebovat rychle vyhledávat a filtrovat uživatele jak podle schémových tak podle neschémových atributů. Je mi jasné, že toto se nedá implementovat v klasické sql databázi, proto se poohlížím po NoSQL řešení. Docela mě zaujala OrientDB, ale NoSQL databází je celá řada a proto bych byl rád, kdybyste mi nějakou doporučili. Nejlépe nějakou, která umí dobře komunikovat s PHP.

    Odpovědi

    20.5.2012 19:54 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    PostgreSQL s modulem hstore?
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    20.5.2012 21:01 Kit
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Na uživatelské účty se obvykle nejlépe hodí LDAP. Podle zadání by asi vyhovovalo MongoDB.

    Ovšem dlužno dodat, že nedotažená analýza už pohřbila hodně projektů. Dá se to realizovat i v SQL, přinejhorším v EAV. Je to však jen berlička, které se databázoví návrháři vyhýbají.
    21.5.2012 00:22 kris
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    No tohle není typická databáze uživatelů. LDAP je strašně omezující kvůli nutnosti existence schématu a kvůli nepodpoře transakcí. Ve standardní relační databázi je to nerealizovatelné, to jsem zkoušel. Jediné rozumné schéma je to EAV, nicméně napsat pak na to dotazy a i samotná rychlost tohoto řešení je katastrofa.
    21.5.2012 00:19 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Proč se to nedá dělat v klasické SQL databázi? Jednak jsou tu rozšíření typu hstore - jak říkal předřečník, jednak, pokud uživatelů nebude deset milionů, tak EAV struktura (user_id, property_name, property_value) naprosto dostačuje jak výkonem, tak i komfortem pro programování

    Tím neříkám, že to není vhodné dělat v NoSQL databázi: pokud nechceš žádnou jinou fíčuru SQL, tak může bý NoSQL dobrou volbou. Jen bych silně polemizoval s tím, že se to v SQL nedá dělat. Ale zrovna podpora transakcí bývá v nosql dosti omezená až žádná (co vím, tak se zpravidla omezuje na atomické operace).

    21.5.2012 00:35 kris
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    No možná by bylo úplně nejlepší řešit to 2 databázemi: relační + nosql. Nemohu být konkrétnější, ale v principu jde o to, že uživatel má pevně definovaný formát v hlavní databázi centrálního systému. Pak prostě někdo přijde a připojí k tomuto systému nějaký jiný, v tu chvíli si z něj centrální systém načte potřebné údaje a uživateli tak přibudou dynamické atributy. Po odpojení systému ty atributy zase zmizí.
    21.5.2012 04:13 kris
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Jen tak pro zajímavost - jak by se toto dalo řešit v relační databázi? Osobně bych raději použil relační databázi, protože ty narozdíl od no sql alespoň nějak ovládám. Já vím o jediném řešení v sql: dočasně vytvořit tabulku pro připojený systém a pak ji zase smazat. Je to rychlé a efektivní, ale takové docela znásilnění relačního schématu. Co si o tom myslíte? Nemyslím si, že by mi hstore typ pomohl jinak než ušetřením příp. redundance.
    21.5.2012 06:27 Kit
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Do EAV dej jen dynamické atributy. Na ostatní udělej standardní schéma.
    21.5.2012 17:06 kris
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    To se skoro nevyplatí. Dynamických atributů je asi 100, standardních 8.
    21.5.2012 17:53 Kit
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Tak si udělej pro každý atribut další tabulku, kde primárním klíčem bude cizí klíč do hlavní tabulky. Bude to rychlé a elegantní.
    21.5.2012 20:32 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Fuj :-)

    Rychlé a elegantní - obzvlášť, pokud bude chtít získat všechny atributy jednoho uživatele.

    Díky, jdu zvracet :-)

    PS: Evidentně, estetika (a elegance) je velmi subjektivní
    21.5.2012 21:15 Kit
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Tušil jsem, že tě pobavím :-)

    Těžko si dovedu představit, že by 100 atributů nebylo možné rozčlenit do skupin. Asi bych od sebe neodděloval jednotlivé položky adresy bydliště uživatele apod. Už jsem také viděl tabulku, ve které u každého druhého sloupce bylo datum jeho poslední modifikace a kdo ji provedl...

    Problém je v tom, že o té aplikaci dohromady nic nevíme. Mám představu, že je to třeba nějaká matrika se 100 atributy a každá osoba má vyplněných třeba jen 5 údajů. Ostatní zůstávají prázdné. V tu chvíli mi mé řešení připadá logické. Ano, pokud budu chtít vypsat všechny atributy jednoho uživatele, bude select asi delší, než výstup. Ovšem v případě EAV to nemusí být o mnoho lepší.

    Padlo tady EAV, hstore, hromada tabulek, NoSQL,... Najde se ještě něco?
    23.5.2012 03:35 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    :-) Co je špatného na EAV? Že databáze vysype ke každému atributu znova jméno? A? Fór je v tom, že databáze to unese (pokud ne, tak se bavíme o takovym molochu, že Tvoje řešení taktéž není vhodné). Ale psaní dotazů - teda práce programátora - bude oproti Tvému řešení triviální. Jak v Tvém řešení získáš jednoduchým selectem všechny atributy daného uživatele?

    Tím, že to rozdělíš do tabulek, tak naprosto ztratíš možnost s atributy pracovat dohromady. Kromě o nemnoho rychlejších některých dotazů tím ale nezískáš nic: z EAV struktury jsem totiž schopný naprosto triviálně emulovat dotaz jakoby nad (rozdělenou) tabulkou obsahující daný atribut. Opačně (pokud neberu jako alternativu hromadu unionů) to ale nejde.
    21.5.2012 11:58 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Jakou tabulku pro připojený systém, zdá se mi, že to řešíš trochu za roh. Chceš mít uživatele: ok, budou tam tabulka uživatelé. Každý uživatel může mít N vlastností. Ok, bude tam tabulka vlastnosti s relací N:1 k uživatelům. Každá vlastnost má dva atributy: název a hodnotu. Pokud potřebuješ rozlišovat uživatele dle aplikace, tak prostě přidej uživateli sloupec aplikace, popř. pokud má být uživatel víceaplikační, tak další tabulku s vazbou N:1 (todle řešení bych preferoval, protože i když to neplánuješ teď, tak....). Kde je problém?

    Hstore ti pomůže tím, že Ti umožní ukládat data bez schématu do jednoho pole, aniž bys ztratil výhodu indexace a rychlého vyhledávání.

    SQL a NoSQL databáze bych nekombinoval, jestli to má bejt spolehlivý, zaděláš si na problémy s jejich vzájemnou synchronizací, synchronním zálohováním atd.
    21.5.2012 17:11 kris
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    ... popř. pokud má být uživatel víceaplikační, tak další tabulku s vazbou N:1 (todle řešení bych preferoval, protože i když to neplánuješ teď, tak....).
    Tohle jsem nepochopil. Co by v téhle tabulce bylo?
    21.5.2012 20:31 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    No pokud by chtěl, aby jeden uživatel mohl být v N aplikacích a ukládat si v kterých. - Jo, asi něco takovýho potřebovat nebude. Jen jsem vymýšlel jsem, co všechno by mu mohlo vadit, aby to "nemoh" napsat v SQL databázi, když to je typický EAV pattern.
    21.5.2012 08:43 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Co si představujete pod „umí pracovat transakčně“? Respektive jaké má být použití? Možná je požadavek na ACID zbytečně silný.
    22.5.2012 02:08 kris
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Pokud něco měním v databázi ve vícero tabulkách, tak je správný jen původní a cílový stav. Nikdo jiný se mi v tom zároveň nesmí hrabat. Pokud se něco nedokončí, nesmí se dokončit nic. Na to je transakční izolace perfektní.
    22.5.2012 07:58 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Já jsem se neptal na to, co obecně jsou transakce, ale na to, k čemu je potřebuje tazatel. Pokud bude mít informace o jednom uživateli v jednom dokumentu v dokumentové databázi, tak nemusí transakce přes víc dokumentů řešit, protože operace s dokumentem je atomická, takže paralelní přístup nevadí – pokud do DB zapíšou jeden dokument dva klienti naráz, bude v DB buď jeden, nebo druhý, ale ne nějaký mix. A pokud se použije třeba verzování, zapíše se první změna a druhý zápis skončí s chybou. Proto jsem se ptal, co konkrétně potřebuje tazatel, protože to často jde řešit i bez ACID transakcí, a často snáz.
    21.5.2012 09:05 Ivan
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    SleepyCat.

    Pokud bys' pouzil SQL databazi tak se posivej na EAV.
    21.5.2012 13:16 Ivan
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Jeste bys' mohl pouzit Oracle Express(ta je zadarmo). Udelas si "tridu" t_BaseClass.
    CREATE TYPE t_baseclass as OBJECT (... nejake zakladni attributy ...)
    Pak tuto "abstraktni" (NOT FINAL) tridu ulozit do tabulky:
    CREATE TABLE base OF t_baseclass;
    Do tabulky base pak muzes ulozit vsechny potomky tridy t_baseclass, vcetne vsech jejich dodatecnych atributu.
    21.5.2012 16:41 ztmr
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Zkuste MUMPS -- at uz GT.M nebo Caché, resp. GlobalsDB. V MUMPSu se da napsat i logika, a pripadne kooperovat i pres ruzne bindingy do C/C++, Perlu, Erlangu, Node.js, PHP, ... Na prvni pohled to vypada trosku uchylne, ale je to tezce navykove a clovek se pak uz jen tezko vraci k cemukoliv relacnimu.

    Za pozornost stoji take opensource balicky od M/Gateway: http://gradvs1.mgateway.com/main/, resp. https://github.com/robtweed.

    Dalsi zdroje jsou/budou treba tady.
    22.5.2012 09:58 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Podle mne je MUMPSová idea "globálních" (tj. persistentních) proměnných jediný rozumný přístup k práci s daty. Ale programovat v M? To je úchylárna na entou.
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Josef Kufner avatar 22.5.2012 18:19 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Pokud nepotřebuješ ty dynamické parametry dál zpracovávat, například podle nich hledat, můžeš je nacpat všechny seserializované třeba v JSONu do jednoho sloupce. Vím, zní to děsně, ale pokud se na takový sloupec budeš dívat jako na typ "struct {a, b, c}", tak to už je celkem hezké.

    Nevýhodou je, že se s takovým sloupcem nedá pracovat na úrovni databáze. V aplikaci to je v pohodě, např. v PHP pak stačí udělat po selectu toto:
    $item = $result->fetch();
    $item['attr'] = json_decode($item['attr']);
    
    A obdobně před updatem/insertem.

    Velkou výhodou je implementační jednoduchost. Pokud máš složitější data a potřebuješ je jen uložit/načíst, jednodušší způsob asi nenajdeš.

    Pokud nad nějakou omezenou množinou dynamických attributů potřebuješ postavit index, například kvůli řazení, ulož je (duplicitně) do pomocného sloupce.

    Pokud se to hodí, můžeš tyto dynamické parametry umístit do samostatné tabulky, kde primárním klíčem bude ID uživatele a ID aplikace. Pak bude snadné smazat data patřící dané aplikaci.

    V praxi jsem tohle použil a dopadlo to dobře.
    Hello world ! Segmentation fault (core dumped)
    23.5.2012 03:39 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    No nevím. Pokud člověk opravdu v databázi s tím nic nepotřebuje dělat, tak možná - ale pak opravdu bude lepší NoSQL (protože tam nebudou ani vazby).

    V okamžiku, kdy s tím něco bude potřeba dělat - už třeba ty indexy - tak to začne bejt opruz. A přitom to je řešení v podstatě ekvivalentní k hstore, se kterym jdou dělat všemožný vopičárny.

    Takže moc nevim, kdy bych todle řešení použil: moc si nedovedu představit, kdy má todle řešení výhodu nad NoSQL nebo hstore.
    Josef Kufner avatar 23.5.2012 11:25 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Výhodou oproti NoSQL je, že pořád ještě máš k dispozici SQL pro to okolo. Oproti hstore to umožňuje uložit i stromová data a funguje to v MySQL.
    Hello world ! Segmentation fault (core dumped)
    23.5.2012 14:55 l0gik | skóre: 22
    Rozbalit Rozbalit vše Re: Doporučte ACID kompatibilní NoSQL databázi
    Uložení stromových dat jasně. Ale v zadání žádná stromová data nebyla. Uložení stromových dat je úplně jiná úloha.

    Výhoda funguje to i v mysql je pro mne dosti pofidérní. Když to přeženu, taky nebudu psát něco 16bitově, by to běželo v DOSu (noflame, please) :-). Pokud není člověk vyloženě nucenej použít mysql (což zde evidentně není), tak to není argument: a zde je evidentně volnost v použitých prostředcích.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.