Komentáře uživatele Marek Soldát
Re: Re: nereprezentativní test
Ač to běžně nedělám, pokusím se reagovat podobným tónem, jaký jste zvolil.
Je to o tom, že děláte věci způsobem, který pro to není určený, pak to musíte ošetřovat, úspěch potvrzujete pseudotesty a pak tvrdíte, že MySQL je k ničemu. Jak jste v článku správně podotkl, to, čemu věříte, není nic jiného, než fáma (a fámy by se měly vyvracet, o což se tady teď snažím).
Dojít k závěru, že je vždy lepší mít menší počet dotazů, a prokazovat to nízkou rychlostí zastaralé extenze PHP pro komunikaci s databází, je výrok, za který by se nemusel stydět ani Goebbels ;-)
Pro všechny ostatní - pro rychlé vyřízení více MySQL dotazů existuje funkce mysqli_multi_query, zde je příklad použití:
$c = mysqli_connect('server','user','password','database');
mysqli_multi_query($c, "
INSERT INTO `test` SET `name` = 'a';
INSERT INTO `test` SET `name` = 'sdfg';
INSERT INTO `test` SET `name` = 'dsf';
INSERT INTO `test` SET `name` = 'er';
INSERT INTO `test` SET `name` = 'twe';
INSERT INTO `test` SET `name` = 'ewrt';
INSERT INTO `test` SET `name` = 'ewrta';
INSERT INTO `test` SET `name` = 'wrea';
INSERT INTO `test` SET `name` = 'aer';
INSERT INTO `test` SET `name` = 'avbc';
INSERT INTO `test` SET `name` = 'avn';
INSERT INTO `test` SET `name` = 'adfgh';
INSERT INTO `test` SET `name` = 'asdfg';
INSERT INTO `test` SET `name` = 'aerwt';
");
Na závěr zopakuji své tvrzení z předchozího příspěvku, protože Administrátor zjevně nečte více, než jen názvy komentářů - *O počtu dotazů to není.*
nereprezentativní test
Teďka z hlavy si nevzpomenu na všechny technické podrobnosti testovaných příkazů, nicméně uvedený test (byť jsem ho proletěl jen orientačně) má hodně *ale*:
1) Veškeré dotazy jsou velmi primitivní a i MySQL na kancelářské mašině je zvládne provést do 0.0001 sec. Je to tím, že jiné operace, než zápisy na konec souboru (testované inserty) a updaty, které v tomto případě nezmění obsah disku, se zde netestují. Pominu-li to, že je dost dobře možné, že MySQL uvedené inserty a updaty může nějak optimalizovat (protože jde o skutečně průhledné a primitivní operace), tak většinu času při zadávání příkazů po jednom zabírá samotná komunikace s PHP, která je pochopitelně nenulová (pokud jsme chtěli tuto nenulovost prokázat, tak stačila prostá úvaha ;-)).
2) Mezi jednotlivými příkazy může server provádět další činnost (čas zpracování jednoho skriptu je tedy delší, nicméně ve výsledné zátěži je to jedno), jeden příkaz je zkrátka jedna operace (teď to malinko zjednodušuji, ale myšlenka platí).
3) Velice často není úplně možné všechny inserty a updaty na jednu stránku vložit do jednoho dotazu. (Určité možnosti, jak by se to dalo udělat, mě napadají, koneckonců, od čeho jsou transakce, nicméně otázka je, jestli celkové vytížení procesoru a paměti při běhu skriptu bude takovým řešením dostatečně kompenzováno.)
4) Radek Hulán před nedávnem prohlásil, při marné snaze vysvětlit, že MySQL je k ničemu, že v této DB engine se nedá programovat. Vyjímečně s ním musím souhlasit a přirovnal bych toto zjištění ke znovuobjevení Ameriky. MySQL totiž *není* programovací jazyk, nýbrž jazyk dotazovací, kde rychlost zpracování závisí na složitosti dotazu. Jedno načtení stránky, ke kterému je potřeba 1000 jednoduchých dotazů může trvat kratší dobu, než jeden dotaz, který zabere půl minuty na zpracování. *O počtu dotazů to tedy není* (tak trochu odpověď na nadpis článku ;-)).
5) K diskusi o velkých operacích typu synchronizace atp. - tady samozřejmě záleží na struktuře synchronizované databáze a na tom, co synchronizujeme s čím. Pokud tady padlo "portál typu srovnávač cen", tak jsem upřímně velmi zvědavý, jak chcete data z 32MB XML exportu nahrát do databáze jedním mysql_query příkazem (navíc z vlastní zkušenosti - většinu času při zpracovávání exportů zboží stejně zabere parsování XML a stahování obrázků k produktům, práce s databází v takovém případě, pokud je dobře navržená, zabere nula nula nic, byť je to třeba milion dotazů).
položek 0-2 z 2 [1 / 1]

RSS