MariaDB vs Postgres vs SQL Server

PanVP

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #15 kdy: 17. 04. 2021, 00:40:02 »
Když nepotřebuji horizontální škálování (a eshop pro střední evropu nic takového nepotřebuje), tak nemám důvod používat NoSQL (když umím SQL).

Myslím si, že v tomhle případě argument obracíte tak, aby seděl do vašeho vidění světa.
Velmi snadno můžete říct "Proč použít SQL databázi, když zákazník, objednávka i produkt jsou vlastně jen objekty/dokumenty."

NoSQL databáze velmi snadno obslouží většinu webových projektů, troufnu si říct, že i s úsporou 2/3 času programátora.
Jistě, pokud používáte věci jako NHibernate ... tak můžete použít SQL databázi. Jenže NHibernate je jen "rovnák na ohýbák", tedy vytváří z SQL databáze NoSQL databázi ;D

A co si budeme povídat, NHibernate je oblíbené právě proto, že spousta lidí chce udělat z SQL databáze NoSQL databázi.
Když si MongoDB zkusíte, zjistíte - alespoň v C# - že se používá snáz a příjemněji než NHibernate a to s velmi podobným výsledkem. Samozřejmě, o nějakém výkonu nemůže být řeč, ale překvapivě velké množství projektů není na rychlost citlivých.

Neberte mě prosím příliš vážně, ale zkuste nad tím popřemýšlet, jestli na tom vlastně není kousek pravdy.
« Poslední změna: 17. 04. 2021, 00:46:02 od PanVP »


Re:MariaDB vs Postgres vs SQL Server
« Odpověď #16 kdy: 17. 04. 2021, 01:17:16 »
Když nepotřebuji horizontální škálování (a eshop pro střední evropu nic takového nepotřebuje), tak nemám důvod používat NoSQL (když umím SQL).

Myslím si, že v tomhle případě argument obracíte tak, aby seděl do vašeho vidění světa.
Velmi snadno můžete říct "Proč použít SQL databázi, když zákazník, objednávka i produkt jsou vlastně jen objekty/dokumenty."

NoSQL databáze velmi snadno obslouží většinu webových projektů, troufnu si říct, že i s úsporou 2/3 času programátora.
Jistě, pokud používáte věci jako NHibernate ... tak můžete použít SQL databázi. Jenže NHibernate je jen "rovnák na ohýbák", tedy vytváří z SQL databáze NoSQL databázi ;D

A co si budeme povídat, NHibernate je oblíbené právě proto, že spousta lidí chce udělat z SQL databáze NoSQL databázi.
Když si MongoDB zkusíte, zjistíte - alespoň v C# - že se používá snáz a příjemněji než NHibernate a to s velmi podobným výsledkem. Samozřejmě, o nějakém výkonu nemůže být řeč, ale překvapivě velké množství projektů není na rychlost citlivých.

Neberte mě prosím příliš vážně, ale zkuste nad tím popřemýšlet, jestli na tom vlastně není kousek pravdy.

Ano - relační databáze s NHibernete může být stejně pomalá jako Mongo. Ale vaše argumentace je zcestná. Co není objektem, co není dokumentem? Samozřejmě, že můžete použít NoSQL databázi i na účetnictví (ale s ACIDem to bude pomalé, bez ACIDu nezabepečené) , a upíšete se, až budete psát reporty, a navíc vaše aplikace bude šnek - nebo to budete muset honit železem. SQL je jazyk na psaní reportů, na práci s daty. Proč bych měl používat Javascript, který je navržený aby handloval alert, když píšu report.

Uložit data je jednoduché. Na to vám stačí NoSQL databáze - na to mi stačí memcache. Ale pracovat s daty je komplikovanější, a když chcete výsledek nad miliónem řádků do pár vteřin, tak to musíte udělat dobře - nebo musíte horizontálně škálovat - a to vás stojí licence, železo - ono dobré železo na AWSku není zadarmo, a je rozdíl jestli platíte 10 serverů nebo 100 serverů.

Pravda je jen jedna. Ale každý můžeme mít svůj názor :-).

Ono je někdy nemožné odlišit příčinnu a důsledek - MySQL mělo pomalé JOINy (protože to byla primitivní jednoduchá databáze a její autor je bastlíř), jejím uživatelům to bylo jedno, protože stejně neuměli joinovat a vůbec netušili jak a proč joinovat, a joiny nepoužívali, a potom autoři MySQL nebyli nuceni implementovat JOINY. Kruh se uzavřel - v rámci komunity ok. Problém byl, že uživatelé MySQL začali propagovat názor, že JOIN je špatně, protože je pomalý, ... ale nevěděli, že to platí pouze pro MySQL.

Dost lidí se trápí s relačními databázemi, a pak vidíte, že jejich aplikace je debilně navržená, proti samotným principům relačních db. Drtivá většina eshopů, které jsem viděl jsou ukázkou jak se to dělat nemá. A pak dostanou do ruky NoSQL a jsou šťastní. Problém je, že vědí málo, jak o relačních db, tak i o NoSQL. Ale samozřejmě, že mají názor.

Každá technologie by se měla posuzovat objektivně - je to jenom technologie - a ten kdo ji posuzuje, by měl mít znalosti, nikoliv názor nebo jen zkušenost. Názory i zkušenosti jsou subjektivní. V IT chybí znalosti - zatím v IT převládají zkušenosti - tohle mi fungovalo, tohle mi nefungovalo, ale jen málokdo dokáže říct, proč něco funguje a proč něco nefunguje.

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #17 kdy: 17. 04. 2021, 02:11:23 »
Velmi snadno můžete říct "Proč použít SQL databázi, když zákazník, objednávka i produkt jsou vlastně jen objekty/dokumenty."

NoSQL databáze velmi snadno obslouží většinu webových projektů, troufnu si říct, že i s úsporou 2/3 času programátora.
Jistě, pokud používáte věci jako NHibernate ...

A když použiju PG, v něm tabulku nosql, obsahující sloupce id a data, a do data budu ukládat dokumenty jako json; v čem jsem hůř než když bych použil MongoDB?

PanVP

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #18 kdy: 17. 04. 2021, 02:19:34 »
Samozřejmě, že můžete použít NoSQL databázi i na účetnictví

Já rozhodně nepropaguji NoSQL jako lék na všechno.
Jen tvrdím, že hřebík by se měl zatloukat kladivem a kombinačky použít na štípání drátu.
Vy svým způsobem tvrdíte, že můžete hřebík zatloukat pomocí kombinaček (strčit pod eshop SQL databázi) a že vám to půjde, s jistou praxí, stejně rychle jako s kladivem. No ano. S jistou praxí hřebík pomocí kombinaček zatlučete.
Ale jestli není náhodou lepší použít kladivo. Já eshopy dělal docela dlouho a když jsem pak začal pracovat s Mongo DB, jen jsem vrtěl hlavou, kolik kódu jsem zbytečně napsal.

No a účetnictví zase je (podle mého názoru) naprostý nesmysl dělat nad NoSQL databází.

Ad trápení se s relačními databázemi.
Jedním z důvodů může být i to, že se lidé snaží napasovat kulatý dílek do čtvercového otvoru.
Tedy použít SQL databázi na něco, co se pro ní přímo nehodí. Nebo obráceně.

Ad JOINy nebo komplikované dotazy obecně.
Osobně znám člověka, který z hlavy programuje v Brainf*cku.
Netuším, jestli na to má nějaký trik nebo jestli mu mozek skutečně tak dobře funguje.
Běžnější je hrát šachy s lidmi, kteří se vůbec nedívají na šachovnici, jen tak si leží a přesto vyhrají.
Tak jestli ty problémy nejsou i nějak spojené s SQL jazykem jako takovým.
Ostatně LinQ "nás má SQL zbavit".

A v případě zpracování ohromného množství čísel - na to bude asi ještě velmi dlouho nejlepší právě SQL.

PanVP

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #19 kdy: 17. 04. 2021, 02:29:57 »
A když použiju PG, v něm tabulku nosql, obsahující sloupce id a data, a do data budu ukládat dokumenty jako json; v čem jsem hůř než když bych použil MongoDB?

C# dovoluje objekt uložit přímo do Monga.
Stejně tak dovoluje tyto objekty z Monga získat.
Navíc mi dovoluje z Monga získat jen věci, které chci.
Vrať mi objekty, jejichž hodnota typ = auto a cena > 100000 a < 200000.

Nevím jak cizí, ale moje programy fungují tak, že uvedu referenci na Mongo, určím si objekty, které se ukládají do Monga a pokud chci provést změnu objektu, řeknu objektu "ulož se" a on se uloží. Vůbec se o nějakou databázi nezajímám.
Vlastně mě to zajímá jen v případě "SELECTU", kdy si na základě vlastností řeknu, které objekty chci z databáze načíst.

Ale pořád pracuji jen se svým objektem.
Práce s MongoDB je mnohem blíž NHibernate než práci s SQL databází bez ORM.
Měl byste si to zkusit, abyste to pochopil, to je nejsnazší.
« Poslední změna: 17. 04. 2021, 02:35:43 od PanVP »


PanVP

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #20 kdy: 17. 04. 2021, 02:45:50 »
Doplnění: A to všechno s desetinou snahy a 20% kódu oproti blbnutí s SQL. Předtím jsem dlouho nebyl z ničeho tak nadšený jako z MongoDB.

A protože jsem nedávno potřeboval udělal logování přístupů, použil jsem na to samozřejmě MáňaSQL.
Psát "docházku" pomocí MongoDB by nedávalo smysl. Do MáňaSQL pošlu číslo čipu a triger pro insert mi do toho záznamu sám doplní čas (na serveru) a ve správném formátu.

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #21 kdy: 17. 04. 2021, 05:34:43 »

Já rozhodně nepropaguji NoSQL jako lék na všechno.
Jen tvrdím, že hřebík by se měl zatloukat kladivem a kombinačky použít na štípání drátu.
Vy svým způsobem tvrdíte, že můžete hřebík zatloukat pomocí kombinaček (strčit pod eshop SQL databázi) a že vám to půjde, s jistou praxí, stejně rychle jako s kladivem. No ano. S jistou praxí hřebík pomocí kombinaček zatlučete.
Ale jestli není náhodou lepší použít kladivo. Já eshopy dělal docela dlouho a když jsem pak začal pracovat s Mongo DB, jen jsem vrtěl hlavou, kolik kódu jsem zbytečně napsal.


Popravdě nevím, co je na eshopu tak speciálního, že by tam nešla nasadit relační databáze. A čím by se eshop měl lišit od účetnictví, aby bylo tak skvělé pro NoSQL databázi. Moderní relační databáze vám umožní (z pohledu datového modelu) totéž jako dokumentová databáze.  Nemyslím si, že to je správný přístup, protože degradujete databázi na storage, ale někomu to může vyhovovat. A jsou use cases, kde se dokumentový přístup hodí (nebo kde se hodí nějaký hybridní přístup).

Já v Postgresu můžu mít jak relační tak dokumentový model (podle toho co se mi hodí, a podle toho, jaké operace budu nad daty dělat - např. třeba hromadné operace). V mongu máte jen dokumentový model, a když chcete dělat hromadné operace, tak si musíte před materializovat data, aby to mělo vůbec nějakou rychlost.

Ta degradace databáze na storage má svoje výhody (máte méně kódu), ale i svoje nevýhody (nikdo jiný než vaše aplikace) neumí s daty pracovat - nemáte garantováno, že vám někdo externě naleje data ve správném formátu. A při exportu musíte načítat generické json - ta data mohou být relativně komplikovaná, protože mícháte víc entit do jednoho dokumentu. U relační databáze máte vstupně výstupní formát mnohem jednodušší (není rekurzivní) a garantuje vám ho databáze.

Věřte mi, že SQL je jedna z nejlépe navržených věcí v IT. To, že ho někdo neumí používat je jen jeho mentální blok, nebo smůla, že měl špatné učitele, nebo lenost, že si neudělal čas (4-8 hodin), aby se jej naučil.

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #22 kdy: 17. 04. 2021, 05:59:24 »
A když použiju PG, v něm tabulku nosql, obsahující sloupce id a data, a do data budu ukládat dokumenty jako json; v čem jsem hůř než když bych použil MongoDB?

C# dovoluje objekt uložit přímo do Monga.
Stejně tak dovoluje tyto objekty z Monga získat.
Navíc mi dovoluje z Monga získat jen věci, které chci.
Vrať mi objekty, jejichž hodnota typ = auto a cena > 100000 a < 200000.

Nevím jak cizí, ale moje programy fungují tak, že uvedu referenci na Mongo, určím si objekty, které se ukládají do Monga a pokud chci provést změnu objektu, řeknu objektu "ulož se" a on se uloží. Vůbec se o nějakou databázi nezajímám.
Vlastně mě to zajímá jen v případě "SELECTU", kdy si na základě vlastností řeknu, které objekty chci z databáze načíst.

Ale pořád pracuji jen se svým objektem.
Práce s MongoDB je mnohem blíž NHibernate než práci s SQL databází bez ORM.
Měl byste si to zkusit, abyste to pochopil, to je nejsnazší.

To je otázka interface - a když použijete Linq, tak ani nemusíte vědět, co je pod tím. Ale pokud nepoužijete opravdovou objektovou databázi, tak stejně bude docházet k nějakému mapování. U serializace objektů si můžete vybrat, jak budete serializovat - jestli jednoduše a použijete dokumentový model nebo zkusíte ORM. Obojí ale vede k tomu, že moc nebudete umět provést hromadnou operaci (vždy musíte provádět deserializaci celého objektu). Pokud nepotřebujete hromadné operace - ok, je to jedno - ale ono je většinou potřebujete - a pokud máte víc než desítky tisíc operací, tak je objektový přístup zoufale neefektivní.

Dneska už mají zákazníci s kterými pracuji větší data - TB (a to jsou strukturovaná data, nejedná se o BLOBY), a tam je parádně vidět, jak omezený je objektový přístup. U SQL databází se to dá někdy zachránit, tím že vyskočíte z ORM a ručně napíšete SELECT, někdy je to tak zmršené, že ani to nejde. A přístup k optimalizaci Monga - tak tam dejte víc serverů, to nefunguje - vy potřebujete databázi zrychlit 10x - 100x. 10 serverů vám nikdo nezaplatí. Ne každý eshop má TB dat - drtivá většina eshopů budou mít v databázi možná pár GB - a tudíž pomalá hromadná operace bude v horizontu desítek sec, což je ještě akceptovatelné - tak tam asi nemá cenu extra řešit jestli SQL nebo NoSQL. Pokud vám SQL nejde nebo se nedokážete utrhnout od OOP, tak ok, použijte NoSQL nebo SQLite, nebo dokumentový model v MySQL. Ale u větších dat to fakt nefunguje (pokud děláte hromadné operace).

Viděl jsem aplikace, které velkou část dat cpala do NoSQL databáze - kde nebyl potřeba ACID, a hodilo se horizontální škálování, a bokem tlačila přes kavku data do relační databáze pro reporting a pro účetnictví. 

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #23 kdy: 17. 04. 2021, 11:43:14 »
Doplnění: A to všechno s desetinou snahy a 20% kódu oproti blbnutí s SQL. Předtím jsem dlouho nebyl z ničeho tak nadšený jako z MongoDB.

Domenove objekty ve vasi aplikaci mezi sebou maji vazby, ktere tvori graf, a ne strom. Jakym zpusobem grafove zavislosti ukladate do MongoDB? Vsude vidim jenom priklady na ukladani stromovych vazeb.

Jakmile budu muset krkolome roubovat grafovou strukturu na stromovou a zase zpatky, tak chci videt, jak napisu jen 20% kodu oproti klasice SQL + ORM. Navic stromova struktura automaticky znamena, ze budu mit dupiicity v datech - ani nebudu rikat co z toho plyne, to mate jako programator vedet.

Relacni databaze mi umoznuje 1:1 ukladat grafove struktury do databaze, zejmena dobre se to pouziva kdyz mam Hibernate. Specializovany Select na ktery mi ORM nestaci nebo by byl pomaly si muzu napsat rucne v SQL. A vytvorit si template s kompletnim stackem DB+Hibernate+Liquibase neni problem.

A dostanu tim univerzalni stack na reseni 99% potencionalnich uloh, kterymi moje aplikace bude zatizena. Kdezto s MongoDB se bude jednat o kompromisni reseni.

NoSQL databaze jsou dobre tak leda jako doplnkove k Relacnim, na reseni urcitych typu ukolu, ktere by byly v Relacnich potencionalne moc velky opruz. Pak jsou jeste dobre pro webvyvojare, kterym dostacuje trivialnost reseni ktere jim poskytnou.
« Poslední změna: 17. 04. 2021, 11:48:16 od registrovany123 »

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #24 kdy: 17. 04. 2021, 11:51:03 »
Citace
Pak jsou jeste dobre pro webvyvojare, kterym dostacuje trivialnost reseni ktere jim poskytnou.

A jeste poznamka: a jsou pro ne vyhodne zejmna pro to, ze webvyvojari pouzivani relacnich databazi a vubec nejakych pokrocilejsich technologii nezvladaji - jakmile to clovek uz umi, a pracuje v projektu s inzenyrama, tak to ztraci pointu.

Jenom jeste podotykam, ze pro "trivialni" aplikace muzu pouzit treba souborovou databazi SQLite, ktera je velice oblibena v Pythonu a je tam dokonce i ve standardni knihovne.

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #25 kdy: 17. 04. 2021, 13:33:05 »
Fajn diskuze možná bych přihodil, že rozdíl mezi
MySQL a MariaDB už je v úrovni jako mezi OpenOffice a LibreOffice.

Původní vývojáři jsou v MariaDB foundation a ORACLE to nějak nechává žít zřejmě pro své korporátní zákazníky.
Smysl tedy má bavit se o MariaDB 10.x

Pokud někdo hodně ujíždí na SQL jazyce je Postgres asi nejlepší volba. Společně s CitusData z toho lze udělat celkem zajímavý systém.

Zmíněná SQLite je vynikající věc, testoval jsem v tom síťovou analýzu (gis extenze) a nemám žádné výhrady na to jaké to je koťátko. Limit ale je jasný - víceuživatelský přístup a tedy velmi specifické využívání. SQLite je ale dneska skoro všude kam se člověk podívá.

Microsoftí server jsem odepsal dávno a popravdě častěji se narazí na ORACLE když už klient má peníze na rozhazování.
Není mi zcela jasné, jestli někdo má nějaký use-case, kde to dává smysl.
„Řemeslo se naučí každý. Umění nikdo.“
„Jednoduchost je nejvyšší úroveň sofistikovanosti.“
- Leonardo Da Vinci

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #26 kdy: 17. 04. 2021, 14:05:46 »
Původní vývojáři jsou v MariaDB foundation a ORACLE to nějak nechává žít zřejmě pro své korporátní zákazníky.
Smysl tedy má bavit se o MariaDB 10.x

Tady se musím zastat Oracle - Nabrali nové lidi, a 8čka rozhodně není databáze, kterou bych označil jako dožívající. Vůči 5.7 verzi je to ohromný pokrok. Samozřejmě, že je to Oracle - a nikdo neví, co mají v plánu.

Microsoftí server jsem odepsal dávno a popravdě častěji se narazí na ORACLE když už klient má peníze na rozhazování.
Není mi zcela jasné, jestli někdo má nějaký use-case, kde to dává smysl.

Tady hodně záleží, kde se člověk pohybuje - jsou oblasti a firmy, kde MSSQL dominuje - a když si vzpomenu na rozhovor s kamarádem, který je špičkový Oraclista, a dnes už zkušený a dobrý Postgresista, tak cca před dvěma roky velice pozitivně hodnotil MSSQL vůči Oracle. Oracle je jednak drahá databáze a druhak relativně náročná na administraci. Administrace MSSQL je výrazně jednodušší - a navíc Oracle začal dost brutálně tlačit svoje zákazníky do Oracle cloudu. A komu se do něj nechce, tak tomu hodně znepříjemňuje život.

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #27 kdy: 17. 04. 2021, 14:57:23 »
Microsoftí server jsem odepsal dávno a popravdě častěji se narazí na ORACLE když už klient má peníze na rozhazování.
Není mi zcela jasné, jestli někdo má nějaký use-case, kde to dává smysl.

Tady hodně záleží, kde se člověk pohybuje - jsou oblasti a firmy, kde MSSQL dominuje - ...
Moje zkušenost (nijak rozsáhlá samozřejmě) je taková, že MSSQL používají Windows vývojáři protože se stalo. Šáhli po tom, co se jim nabízelo, a co znali. Nijak zvlášť to nepromýšleli.

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #28 kdy: 17. 04. 2021, 15:02:32 »
A když použiju PG, v něm tabulku nosql, obsahující sloupce id a data, a do data budu ukládat dokumenty jako json; v čem jsem hůř než když bych použil MongoDB?

C# dovoluje objekt uložit přímo do Monga.
Stejně tak dovoluje tyto objekty z Monga získat.
Navíc mi dovoluje z Monga získat jen věci, které chci.
Vrať mi objekty, jejichž hodnota typ = auto a cena > 100000 a < 200000.
Ano. To s tou mou tabulkou v PG mohu úplně stejně.

Nevím jak cizí, ale moje programy fungují tak, že uvedu referenci na Mongo, určím si objekty, které se ukládají do Monga a pokud chci provést změnu objektu, řeknu objektu "ulož se" a on se uloží. Vůbec se o nějakou databázi nezajímám.
Vlastně mě to zajímá jen v případě "SELECTU", kdy si na základě vlastností řeknu, které objekty chci z databáze načíst.

Ale pořád pracuji jen se svým objektem.
Práce s MongoDB je mnohem blíž NHibernate než práci s SQL databází bez ORM.
Takže ta výhoda je v tom, že pro PostgreSQL musím napsat drobný wraper (odhadem na deset řádek), abych dosáhl toho samého co MongoDB? To zase není tak velká cena.

Měl byste si to zkusit, abyste to pochopil, to je nejsnazší.
Je mnoho software, které si žádá mou pozornost. Pokud nejste schopen obhájit jeho výhody, tak to asi nestojí za to :-)

Re:MariaDB vs Postgres vs SQL Server
« Odpověď #29 kdy: 17. 04. 2021, 16:25:05 »
To je otázka interface - a když použijete Linq, tak ani nemusíte vědět, co je pod tím. Ale pokud nepoužijete opravdovou objektovou databázi, tak stejně bude docházet k nějakému mapování
Ta degradace databáze na storage má svoje výhody (máte méně kódu), ale i svoje nevýhody (nikdo jiný než vaše aplikace) neumí s daty pracovat - nemáte garantováno, že vám někdo externě naleje data ve správném formátu. A při exportu musíte načítat generické json - ta data mohou být relativně komplikovaná, protože mícháte víc entit do jednoho dokumentu. U relační databáze máte vstupně výstupní formát mnohem jednodušší (není rekurzivní) a garantuje vám ho databáze.
Domenove objekty ve vasi aplikaci mezi sebou maji vazby, ktere tvori graf, a ne strom. Jakym zpusobem grafove zavislosti ukladate do MongoDB? Vsude vidim jenom priklady na ukladani stromovych vazeb.

...a to je mi právě záhada, proč se více neuchytily a nerozšířily objektové databáze. Podle mě by v pohodě nahradily 90% případů, kdy je sql použita neoptimálně a de fakto zbytečně. Dnes se do této oblasti tlačí NOSQL a dokumentové databáze, ale to mapování opět bolí.