Porovnání SQLite vs. MySQL

Re:Porovnání SQLite vs. MySQL
« Odpověď #30 kdy: 17. 09. 2016, 10:56:42 »
njn, takze DB te nema rada protoze nekdo napsal spatne dotazy a protoze delas select pred potvrzenim zmen a divis se, ze nevidis zmeny... omg.
Děkuji za možnost editace příspěvku.


pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #31 kdy: 17. 09. 2016, 11:06:32 »
První příklad je plně zdokumentovaná a zcela záměrná feature mysql, která jde samozřejmě vypnout https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html

Díky za informaci. Já se k MySQL dostávám jen jako "zákazník", databáze bývá součástí nějakého produktu. Na koho mám ale ukázat, když programátor říká "u mě to funguje", na webových stránkách jsou nesmysly a po pár dnech hrábání se v cizím produktu zjistím, že to je databáze, kdo s klidem schroustne nesmyslný dotaz?

pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #32 kdy: 17. 09. 2016, 11:09:37 »
... select pred potvrzenim zmen a divis se, ze nevidis zmeny...

Nebyly tam transakce. Nepomohlo restartovat databázi, pouze zrušit a vytvořit databázi znovu. Takto postižené záznamy na update nereagovaly a vracely vždy stejná, stará data. allah akbar, bože můj

Kit

Re:Porovnání SQLite vs. MySQL
« Odpověď #33 kdy: 17. 09. 2016, 11:14:12 »
Tady bych to viděl na neprovedený UPDATE. Je nutné po něm zjistit status a počet provedených změn. Může to být způsobeno třeba kolizí názvu s nějakým vyhrazeným slovem apod.

Ten update nebyl nepovedený, databáze nehlásila vůbec žádnou chybu. Jako status se zapisovaly číselné hodnoty. Kolize názvu s vyhrazeným slovem můžu vyloučit. Ta databáze to dělala, i když jsem to zkusil přímo z povelové řádky. Transakce tam žádné nebyly, v celé databázi byly jen dvě tabulky, které spolu nesouvisely, aplikace byla velmi primitivní a nevěřím, že programátor kdy o transakcích slyšel.

Je opravdu nutné databázi kontrolovat po každé provedené změně? Zjišťovat, co se do databáze skutečně zapsalo? Nemělo by stačit zkontrolovat v aplikaci návratový kód?

Psal jsem "neprovedený". Pro relační databázi není vůbec žádnou chybou, když při nesplnění podmínky žádný update neprovede. Pouze nahlásí, že změnila 0 záznamů a to je vše.

pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #34 kdy: 17. 09. 2016, 11:26:44 »
Psal jsem "neprovedený". Pro relační databázi není vůbec žádnou chybou, když při nesplnění podmínky žádný update neprovede. Pouze nahlásí, že změnila 0 záznamů a to je vše.

Rozumím. Měl jsem to v rukách tak pět let zpátky a předpokládám, že toho bych si asi všimnul. S databázemi dělám hodně. Navíc, jak jsem uvedl - postižené záznamy bylo možné opravit jen smazáním a obnovením databáze. Restart nepomohl. Transakce by restart asi nepřežila. Když byla databáze v tomto stavu, nebylo možné udělat update ani na povelové řádce. A tam jsem v transakci nebyl zcela určitě. Napadá mě - pokud pomohlo jen smazání a obnovení databáze, bylo vůbec možné ten postižený záznam smazat? Přiznám se, že tohle už si nepamatuju.


Kit

Re:Porovnání SQLite vs. MySQL
« Odpověď #35 kdy: 17. 09. 2016, 11:41:13 »
Psal jsem "neprovedený". Pro relační databázi není vůbec žádnou chybou, když při nesplnění podmínky žádný update neprovede. Pouze nahlásí, že změnila 0 záznamů a to je vše.

Rozumím. Měl jsem to v rukách tak pět let zpátky a předpokládám, že toho bych si asi všimnul. S databázemi dělám hodně. Navíc, jak jsem uvedl - postižené záznamy bylo možné opravit jen smazáním a obnovením databáze. Restart nepomohl. Transakce by restart asi nepřežila. Když byla databáze v tomto stavu, nebylo možné udělat update ani na povelové řádce. A tam jsem v transakci nebyl zcela určitě. Napadá mě - pokud pomohlo jen smazání a obnovení databáze, bylo vůbec možné ten postižený záznam smazat? Přiznám se, že tohle už si nepamatuju.

Tohle rozhodně není běžné chování MySQL. Nikdo by ji nepoužíval. Zdroj chyby může být kdekoli - od chyby HW, přes chybu konfigurace až po chybu v sestavení dotazu.

Ze kterého jazyka pocházel ten SQL dotaz? Který databázový ovladač byl použit? Byla databáze na localhostu nebo mimo?

pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #36 kdy: 17. 09. 2016, 11:59:28 »
Tohle rozhodně není běžné chování MySQL. Nikdo by ji nepoužíval. Zdroj chyby může být kdekoli - od chyby HW, přes chybu konfigurace až po chybu v sestavení dotazu.

Ze kterého jazyka pocházel ten SQL dotaz? Který databázový ovladač byl použit? Byla databáze na localhostu nebo mimo?

Taky si myslím, že tohle není normální. Do databáze se sypala data z perlu. Databázový ovladač... nevím - je to podstatné, když nefungoval ani update z povelové řádky? Databáze na localhost. Čtení dat z php (pouze čtení). Transakce vyloučené (myisam, programátor transakcemi netknut). Hardware bych taky vyloučil, neprojevovalo by se to na tolika strojích a po kompletním přepsání aplikace ty stroje fungují dodnes. Z dnešního pohledu odhaduji, že mohlo jít o nějaké špatné sestavení nějaké speciálně vybrané prehistorické verze MySQL v Debianu. Stálo mě to jen spoustu nervů a vysvětlování, proč by se měla aplikace zahodit a pořídit jinde (aplikace byla odpad i z mnoha jiných hledisek). Každopádně tenhle incident důkladně prohloubil moji nedůvěru v MySQL.

Kit

Re:Porovnání SQLite vs. MySQL
« Odpověď #37 kdy: 17. 09. 2016, 13:45:33 »
Tohle rozhodně není běžné chování MySQL. Nikdo by ji nepoužíval. Zdroj chyby může být kdekoli - od chyby HW, přes chybu konfigurace až po chybu v sestavení dotazu.

Ze kterého jazyka pocházel ten SQL dotaz? Který databázový ovladač byl použit? Byla databáze na localhostu nebo mimo?

Taky si myslím, že tohle není normální. Do databáze se sypala data z perlu. Databázový ovladač... nevím - je to podstatné, když nefungoval ani update z povelové řádky? Databáze na localhost. Čtení dat z php (pouze čtení). Transakce vyloučené (myisam, programátor transakcemi netknut). Hardware bych taky vyloučil, neprojevovalo by se to na tolika strojích a po kompletním přepsání aplikace ty stroje fungují dodnes. Z dnešního pohledu odhaduji, že mohlo jít o nějaké špatné sestavení nějaké speciálně vybrané prehistorické verze MySQL v Debianu. Stálo mě to jen spoustu nervů a vysvětlování, proč by se měla aplikace zahodit a pořídit jinde (aplikace byla odpad i z mnoha jiných hledisek). Každopádně tenhle incident důkladně prohloubil moji nedůvěru v MySQL.

Tak tohle vypadá na chybné použití databázového ovladače v Perlu. Vzpomínám si, že jsem kdysi dlouho hledal, proč mi MySQL neukládá data posílaná z Pythonu. Na vině bylo chybějící volání cursor.commit(), ačkoli jsem žádnou transakci neotevíral. Teď už to vím, protože mě to vyškolilo. Také vím, že při práci s databází se toho dá hodně pokazit.

Používání MyISAM se dnes už moc nedoporučuje, de facto k tomu ani není důvod. Vždyť ani pořádně neumí transakce. InnoDB je úplně jiný level. Nijak však nevylučuji, že se pro danou úlohu může hodit jiná databáze, např. SQLite ši PostgreSQL. Často bývá potřebný větší rozbor.

Re:Porovnání SQLite vs. MySQL
« Odpověď #38 kdy: 17. 09. 2016, 17:02:27 »
Tohle rozhodně není běžné chování MySQL. Nikdo by ji nepoužíval. Zdroj chyby může být kdekoli - od chyby HW, přes chybu konfigurace až po chybu v sestavení dotazu.

Ze kterého jazyka pocházel ten SQL dotaz? Který databázový ovladač byl použit? Byla databáze na localhostu nebo mimo?

Taky si myslím, že tohle není normální. Do databáze se sypala data z perlu. Databázový ovladač... nevím - je to podstatné, když nefungoval ani update z povelové řádky? Databáze na localhost. Čtení dat z php (pouze čtení). Transakce vyloučené (myisam, programátor transakcemi netknut). Hardware bych taky vyloučil, neprojevovalo by se to na tolika strojích a po kompletním přepsání aplikace ty stroje fungují dodnes. Z dnešního pohledu odhaduji, že mohlo jít o nějaké špatné sestavení nějaké speciálně vybrané prehistorické verze MySQL v Debianu. Stálo mě to jen spoustu nervů a vysvětlování, proč by se měla aplikace zahodit a pořídit jinde (aplikace byla odpad i z mnoha jiných hledisek). Každopádně tenhle incident důkladně prohloubil moji nedůvěru v MySQL.

Tak tohle vypadá na chybné použití databázového ovladače v Perlu. Vzpomínám si, že jsem kdysi dlouho hledal, proč mi MySQL neukládá data posílaná z Pythonu. Na vině bylo chybějící volání cursor.commit(), ačkoli jsem žádnou transakci neotevíral. Teď už to vím, protože mě to vyškolilo. Také vím, že při práci s databází se toho dá hodně pokazit.

Používání MyISAM se dnes už moc nedoporučuje, de facto k tomu ani není důvod. Vždyť ani pořádně neumí transakce. InnoDB je úplně jiný level. Nijak však nevylučuji, že se pro danou úlohu může hodit jiná databáze, např. SQLite ši PostgreSQL. Často bývá potřebný větší rozbor.
Jestli se používal MyISAM engine, tak není co řešit - ten transakce vůbec nepodporuje! Tudíž to, že po havárii jdou data přečíst je jen příjemná (nicméně negarantovaná) vlastnost. Fakticky netransakční engine (jako je např. MyISAM) vůbec negarantuje stav dat v případě havárie. To, že to programátoři zvesela používali, jen ukazuje jejich nevelké znalosti a nulovou odpovědnost.

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Porovnání SQLite vs. MySQL
« Odpověď #39 kdy: 17. 09. 2016, 17:16:12 »
Jestli se používal MyISAM engine, tak není co řešit - ten transakce vůbec nepodporuje! Tudíž to, že po havárii jdou data přečíst je jen příjemná (nicméně negarantovaná) vlastnost. Fakticky netransakční engine (jako je např. MyISAM) vůbec negarantuje stav dat v případě havárie. To, že to programátoři zvesela používali, jen ukazuje jejich nevelké znalosti a nulovou odpovědnost.
Firebird transakce má a u nás po havárii většinou dopadne hůř než MyISAM.

pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #40 kdy: 17. 09. 2016, 17:53:15 »
Jestli se používal MyISAM engine, tak není co řešit - ten transakce vůbec nepodporuje! Tudíž to, že po havárii jdou data přečíst je jen příjemná (nicméně negarantovaná) vlastnost. Fakticky netransakční engine (jako je např. MyISAM) vůbec negarantuje stav dat v případě havárie. To, že to programátoři zvesela používali, jen ukazuje jejich nevelké znalosti a nulovou odpovědnost.

Pokud server padnul a databáze nefungovala, zabralo repair table. To dokážu pochopit a netroufal bych si poukazovat na databázi. Měla tam být UPS. Ale ten problém s update neměl souvislost s pádem serveru nebo databáze. Stávalo se to typicky s uptimem dny až týdny, databáze fungovala celou tu dobu.

Kit

Re:Porovnání SQLite vs. MySQL
« Odpověď #41 kdy: 17. 09. 2016, 17:57:20 »
Jestli se používal MyISAM engine, tak není co řešit - ten transakce vůbec nepodporuje! Tudíž to, že po havárii jdou data přečíst je jen příjemná (nicméně negarantovaná) vlastnost. Fakticky netransakční engine (jako je např. MyISAM) vůbec negarantuje stav dat v případě havárie. To, že to programátoři zvesela používali, jen ukazuje jejich nevelké znalosti a nulovou odpovědnost.

Pokud server padnul a databáze nefungovala, zabralo repair table. To dokážu pochopit a netroufal bych si poukazovat na databázi. Měla tam být UPS. Ale ten problém s update neměl souvislost s pádem serveru nebo databáze. Stávalo se to typicky s uptimem dny až týdny, databáze fungovala celou tu dobu.

A jak ta aplikace fungovala po přehození databáze na InnoDB?

pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #42 kdy: 17. 09. 2016, 18:13:58 »
A jak ta aplikace fungovala po přehození databáze na InnoDB?

Ta aplikace se kompletně přepsala (byl to odpad) a teď běží na SQLite. Na InnoDB to nikdo nezkoušel.

rastik

Re:Porovnání SQLite vs. MySQL
« Odpověď #43 kdy: 17. 09. 2016, 18:22:09 »
... jsem se nikdy nesetkal s nekorektním výsledkem selectu...

create table abc (klic integer, jmeno text, hodnota integer);
insert into table abc (klic, jmeno, hodnota) values (1, 'A', 1);
insert into table abc (klic, jmeno, hodnota) values (1, 'B', 2);
select klic, jmeno, sum(hodnota) from abc group by klic;

Kterou hodnotu ve sloupci jmeno vrací náhodně vaše databáze?

Ktory expert takto uklada data do tabulky? Ak sa stlpec nastavi ako kluc, podla ktoreho sa nasledne hladaju zaznamy, ako mozu mat 2 rozne riadky rovnaky kluc? Programator, ktory takto navrhol dizajn tabulky, je debil (to je to miernejsia nadavka).

pb.

Re:Porovnání SQLite vs. MySQL
« Odpověď #44 kdy: 17. 09. 2016, 18:30:49 »
Ktory expert takto uklada data do tabulky? Ak sa stlpec nastavi ako kluc, podla ktoreho sa nasledne hladaju zaznamy, ako mozu mat 2 rozne riadky rovnaky kluc? Programator, ktory takto navrhol dizajn tabulky, je debil (to je to miernejsia nadavka).

Klid. To byl příklad. Ten klíč tam, to není unikátní klíč. Představte si tu tabulku třeba takto:

create table deti_zamestnance (
   osobni_cislo integer not null references zamestnanci(osobni_cislo)...,
   jmeno text not null,
   datum_narozeni date
   );

a dotazem se počítá průměrný datum narození dětí pro různé zaměstnance.