Mají tabulkové databáze v dnešní době smysl?

Re:Maji tabulkove databaze v dnesni dobe smysl?
« Odpověď #75 kdy: 10. 09. 2018, 15:29:23 »

Jednou z uplne prvnich databazi bylo IMS (a obcas se jeste pouziva), a ta uklada data (zaznamy) prave ve stromove strukture podle klice.

... Ale hlavni nevyhoda je, ze si musite vytvorit vlastni funkci (program), ktera ty zaznamy prochazi ...

ale to je také ta největší výhoda

Můžete to vysvětlit?


SB

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #76 kdy: 10. 09. 2018, 15:35:44 »
A pak přišla Java kde nebezpečné pointery úplně zmizely (ne jako v C++ kde si u velkého projektu nemůžete být jistý kdo kde použije paměť nebezpečným způsobem) což umožnilo zavést garbage collector a to je konečně bezpečné, rychlé a pohodlné programování.

Jen bych upozornil, že Java vznikla v nějakém 95. (nemluvě o kvalitě). Např. Smalltalk jako jazyk bez pointerů vyšel v roce 1980, což je ještě PŘED vznikem bastardu C++, takže představa, že OOL potřebuje pro programovou manipulaci s objekty pointery, byla tou dobou již překonaná!

SB

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #77 kdy: 10. 09. 2018, 15:38:44 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.

To jako fakt?! Hm, dobrá sračka...

MarSik

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #78 kdy: 10. 09. 2018, 16:02:09 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.

To jako fakt?! Hm, dobrá sračka...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

JSH

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #79 kdy: 10. 09. 2018, 16:46:00 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.
To jako fakt?! Hm, dobrá sračka...
No tak kdyby C++ zavedlo stejná omezení jako má Java, tak by ta binární kompatibilita šla jednoduše. Objekty alokované po jednom na haldě, takže volající nemusí znát jejich velikost. Všechny metody virtuální, takže žádné inlinování. Akorát ta cena za to je docela drsná.
V situacích, kdy se c++ obvykle používá, má občas neakceptovatelnou cenu i samotný objektový návrh.


JardaMira

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #80 kdy: 10. 09. 2018, 18:52:05 »
Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Diky za nazory

Protoze jsem tu videl jen skepticke reakce a pak offtopic diskuzi, zkusim neco jineho:

Radu let jsem pouzival pro male projekty MySQL. Funkcni, hezke nastroje k organizaci, interface do ruznych jazyku. Co pul roku mam zvyk se jen tak podivat na neco noveho. Tehdy to bylo MongoDB. Slozita neintuitivni instalace a zprovoznovani (2016), ale nakonec zafungovalo. Napsal jsem si skript na zapis/cteni. A nedavno jsem (hard) preinstaloval na Ubu1804 a mel zasadni problem s prevodem dat.

Vysledne dojmy?  : Uz bych nemenil.
  • Zalozeni nove tabulky (tady collection) nevyzaduje zadnou specialni akci
  • V pythonu je pymongo: ovladani se neda s mysql srovnavat, vsechno je jako DICT 
  •   Pouzivam 100x intenzivneji nez kdysi mysql, takze mam kolem milionu zaznamu, zapisuji kazdych 10 sec. a nevidim latenci 
  •   Menim tabulku za behu, proste zacnu pridavat dalsi parametr. 
  •   Mam dost ridkou tabulku, vetsina parametru je Nan, navazujici pymongo a pyplot jsou v pohode. 
  •   Clovek muze nechat bezet stejne MongoDB na vice strojich najednou, cimz ma duplicitu a pojisteni proti vypadku (ale nezkousel jsem) 
  •   ... a nakonec - MongoDB neni ta nejrychlejsi a nejlepsi NoSQL databaze na trhu.....   

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.

Franta <xkucf03/>

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #81 kdy: 10. 09. 2018, 19:03:49 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.

To jako fakt?! Hm, dobrá sračka...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

Jenže jak to udělat, abych mohl rozhraní rozšiřovat a nerozbil při tom binární kompatibilitu? I když mám čistě abstraktní/virtuální třídu, tak do ní nemohu jen tak přidat metodu.

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #82 kdy: 10. 09. 2018, 19:11:46 »
Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Diky za nazory

Protoze jsem tu videl jen skepticke reakce a pak offtopic diskuzi, zkusim neco jineho:

Radu let jsem pouzival pro male projekty MySQL. Funkcni, hezke nastroje k organizaci, interface do ruznych jazyku. Co pul roku mam zvyk se jen tak podivat na neco noveho. Tehdy to bylo MongoDB. Slozita neintuitivni instalace a zprovoznovani (2016), ale nakonec zafungovalo. Napsal jsem si skript na zapis/cteni. A nedavno jsem (hard) preinstaloval na Ubu1804 a mel zasadni problem s prevodem dat.

Vysledne dojmy?  : Uz bych nemenil.
  • Zalozeni nove tabulky (tady collection) nevyzaduje zadnou specialni akci
  • V pythonu je pymongo: ovladani se neda s mysql srovnavat, vsechno je jako DICT 
  •   Pouzivam 100x intenzivneji nez kdysi mysql, takze mam kolem milionu zaznamu, zapisuji kazdych 10 sec. a nevidim latenci 
  •   Menim tabulku za behu, proste zacnu pridavat dalsi parametr. 
  •   Mam dost ridkou tabulku, vetsina parametru je Nan, navazujici pymongo a pyplot jsou v pohode. 
  •   Clovek muze nechat bezet stejne MongoDB na vice strojich najednou, cimz ma duplicitu a pojisteni proti vypadku (ale nezkousel jsem) 
  •   ... a nakonec - MongoDB neni ta nejrychlejsi a nejlepsi NoSQL databaze na trhu.....   

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.

1M zaznamů máte celkem nebo za těch 10 sec?

JSH

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #83 kdy: 10. 09. 2018, 19:19:22 »
Tak se chci zeptat:
Maji tabulkove databaze na novych projektech smysl?
Migroval nekdo z vas existujici reseni z oraclu nebo jine tabulkove databaze na neco jineho?
Souhlasite, ze rychlost/pomalost rotacnich disku je jediny duvod proc takove databaze existuji?
Diky za nazory

Protoze jsem tu videl jen skepticke reakce a pak offtopic diskuzi, zkusim neco jineho:

Radu let jsem pouzival pro male projekty MySQL. Funkcni, hezke nastroje k organizaci, interface do ruznych jazyku. Co pul roku mam zvyk se jen tak podivat na neco noveho. Tehdy to bylo MongoDB. Slozita neintuitivni instalace a zprovoznovani (2016), ale nakonec zafungovalo. Napsal jsem si skript na zapis/cteni. A nedavno jsem (hard) preinstaloval na Ubu1804 a mel zasadni problem s prevodem dat.

Vysledne dojmy?  : Uz bych nemenil.
  • Zalozeni nove tabulky (tady collection) nevyzaduje zadnou specialni akci
  • V pythonu je pymongo: ovladani se neda s mysql srovnavat, vsechno je jako DICT 
  •   Pouzivam 100x intenzivneji nez kdysi mysql, takze mam kolem milionu zaznamu, zapisuji kazdych 10 sec. a nevidim latenci 
  •   Menim tabulku za behu, proste zacnu pridavat dalsi parametr. 
  •   Mam dost ridkou tabulku, vetsina parametru je Nan, navazujici pymongo a pyplot jsou v pohode. 
  •   Clovek muze nechat bezet stejne MongoDB na vice strojich najednou, cimz ma duplicitu a pojisteni proti vypadku (ale nezkousel jsem) 
  •   ... a nakonec - MongoDB neni ta nejrychlejsi a nejlepsi NoSQL databaze na trhu.....   

Takze tak. Minusy? Nenasel jsem zadnej skvelej program na udrzbu (jako mysql-workbench apod). Ale nechybi mi, na vsechno mam jeden skript.
Přiznám se, že nevím co si z tohohle příspěvku odnést. Jak se ta databáze vůbec používá? Jestli na veškerou údržbu stačí jeden script tak to IMO nezní moc komplikovaně.
- O MySQL se běžně povídá, že je to spíš parodie na databázi. Rozhodně to není dobrý reprezentant toho, co SQL databáze umí.
- Jeden zápis za 10s (zápis čeho?) nemusí znamenat nic. 10 milionů záznamů taky nemusí být nic (pokud jsem to pochopil jako 10M záznamů celkem).
- A ty zásadní problémy s převodem dat zní jako hodně velké minus.

JSH

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #84 kdy: 10. 09. 2018, 19:30:06 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.

To jako fakt?! Hm, dobrá sračka...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

Jenže jak to udělat, abych mohl rozhraní rozšiřovat a nerozbil při tom binární kompatibilitu? I když mám čistě abstraktní/virtuální třídu, tak do ní nemohu jen tak přidat metodu.
Do třídy se dají na konec přidávat další metody bez rozbití kompatibility. Nevím, jestli je to teoreticky OK, ale prakticky to funguje. Samozřejmě, že to rozhodí metody přidané v odvozených třídách.
Nebo je taky možné jít cestou, jakou používá Microsoft v D3D - Interfacy verzovat a staré verze držet v původní podobě.
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

Kit

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #85 kdy: 10. 09. 2018, 19:39:50 »
Pokud někdo používá SQL + ORM, tak to k NoSQL přímo vybízí, protože ORM neskutečně degradují relační databáze. Zapomeňte na ORM. Pokud neumíte přemýšlet relačně, jděte do NoSQL.

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #86 kdy: 10. 09. 2018, 20:18:59 »
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

Tohle mě zajímá. To jsi v reálu někde viděl? Kde?

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #87 kdy: 10. 09. 2018, 21:11:55 »
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

Tohle mě zajímá. To jsi v reálu někde viděl? Kde?

Tohle používá např. standardní knihovna libc++. Místo
Kód: [Vybrat]
namespace std { ... } tam je
Kód: [Vybrat]
namespace std { inline namespace __1 { ... } } Celé je to ještě zabalené v makrech, jméno inline namespace __1 pochází z makra _LIBCPP_ABI_VERSION.

Franta <xkucf03/>

Re:Zapouzdření C++: Co dělám špatně?
« Odpověď #88 kdy: 10. 09. 2018, 21:28:05 »
Zrovna tohle je v C++ špatně navržené. ... Ale považuji za chybu, že privátní metody a proměnné jsou vidět v hlavičkovém souboru a co hůř, jejich změna rozbije binární kompatibilitu.

To jako fakt?! Hm, dobrá sračka...

Ono to má technický důvod. Ty struktury mají fixní velikost, takže se rozjedou pointer offsety pro přístup k atributům. Pokud to ABI musí být stabilní, je potřeba to rozdělit na stabilní "proxy" interface a privátní data s negarantovanou strukturou.

Jenže jak to udělat, abych mohl rozhraní rozšiřovat a nerozbil při tom binární kompatibilitu? I když mám čistě abstraktní/virtuální třídu, tak do ní nemohu jen tak přidat metodu.
Do třídy se dají na konec přidávat další metody bez rozbití kompatibility. Nevím, jestli je to teoreticky OK, ale prakticky to funguje. Samozřejmě, že to rozhodí metody přidané v odvozených třídách.

Tohle jsem si zkoušel -- při přidání metody mezi ostatní se to rozbije (původní kód volá jinou metodu -- a pokud mají stejnou signaturu, tak to nespadne, ale dělá to něco jiného, než by mělo), zatímco když novou metodu přidám nakonec, tak se nic nerozbije. Ale pak jsem četl, že toto chování není zaručené a nelze se na něj spoléhat.

Interfacy verzovat a staré verze držet v původní podobě.
Pro účely zpětné kompatibility se taky zavedly inline namespace. Překladač vidí všechny namespacy s číslem verze, takže manglované názvy jsou pořád stejné. Pokud se zvedne verze, tak se vytvoří nový namespace s vyšším číslem verze a ty předchozí se nechají být. A v headeru se do neverzovaného namespace nainlinuje ten s nejvyšší verzí, takže při překladu se automaticky používá nejnovější verze.

To číslování tříd rozhraní se používá i jinde, i v Javě (setkal jsem se s tím např. v jednom Apachím projektu). Je to takovém ultimátní řešení, ale ne úplně elegantní. Řeší to i zdrojákovou kompatibilitu API. Na úrovni ABI kompatibility mi ale přijde škoda, když se s tím jazyk/platforma nedokáže vyrovnat a neumožňuje prosté přidávání metod, aniž by se rozbilo volání těch původních.


Abych dal konkrétní příklad: máme rozhraní, které bude implementovat někdo cizí a my ho budeme volat (tzn. SPI). V tomto rozhraní je metoda, které předáváme nějaká data. Protože těch parametrů je víc, předáváme je ve formě objektu/struktury. V budoucnu můžou přibýt nová doplňková data, které implementátor rozhraní může ale nemusí využít (číst je). V dalších verzích mu tam dáme prostě něco navíc, co by se mu mohlo hodit. Přirozenou cestou by bylo přidat do této třídy/struktury nové členy či get metody. Tuhle třídu stejně nikdo nedědí (instance vytváříme vždy my a předáváme je tomu SPI), takže nehrozí kolize jmen.



 

Franta <xkucf03/>

Re:Mají tabulkové databáze v dnešní době smysl?
« Odpověď #89 kdy: 10. 09. 2018, 21:36:59 »
Pokud někdo používá SQL + ORM, tak to k NoSQL přímo vybízí, protože ORM neskutečně degradují relační databáze. Zapomeňte na ORM. Pokud neumíte přemýšlet relačně, jděte do NoSQL.

Pokud někdo nezvládá ani poměrně jednoduchý a intuitivní koncept jako jsou relační databáze, tak bych ani nechtěl vidět, co spáchá s NoSQL databází a už vůbec bych po něm ten kód a data nechtěl spravovat.

Přijde mi to asi jako radit někomu, kdo nezvládá Javu, aby šel psát v Perlu.