• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    XCHAOSANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    (az doiterujes tu odpoved.. tak pro pripadne zrychleni se vyser na C API a koukni na predkompilovany procedury)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: jo. ne. totiž v té půlsekundě jsou asi věci jako komunikace s SQL server, protlačení dat socketem a tak.

    ale máš pravda - v první fázi budu pracovat s přístupem přes libmysqlclient z C aplikace a uvidím, jak se to bude chovat (oproti PHP). na to lowlevel SQL C API jsem se ptal pouze proto, jestli někdo netuší, zda to existuje - to samozřejmě připouštím, že výrazně přesahuje moje možnosti, něco takového vymyslet.
    XCHAOS
    XCHAOS --- ---
    REDGUY: no bylo by to něco jako ten DESCRIBE .. a tedy samozřejmě, pracovalo by se se strukturou tabulek v době kompilace. Nevím, jak tě mohlo napadnout, že ten precompiler by neměl informace o tom, nad kterými sloupci má k dispozici indexy a nad kterými ne - to je přece základ.
    REDGUY
    REDGUY --- ---
    XCHAOS: to beru jako finální argument, proč chci bastlit webové aplikace v Céčku místo v PHP - a zaroven je to finalni argument, proc je "kompilace SQL" pitomost.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Takze abych to shrnul, celej dotaz je nemeritelne rychlej, pricemz tusime (podle resi o tom jak se neco nevejde do pameti), ze parsovani asi nebude ani 50% tohohle nemeritelnyho useku, takze bych to uzavrel tim, ze predkompilovavani dotazu je ptakarna a spis by se mel clovek zamerit na optimalizaci databaze/dotazu?
    REDGUY
    REDGUY --- ---
    XCHAOS: nicméně třeba by pomohlo vidět ten vygenerovaný kód - no tak zaprve, ty bys cetl "vygenerovany kod"? To zni jako skvela zabava. A za druhe - porad nechapes, ze dokud nemas databazi a data, nemuzes poradne optimalizovat. Nevis jaky mas indexy, jak je ktera tabulka velka a tak dale.

    viz upřesňující zmínka o in-house vývoji i tak, "prdlajs".
    XCHAOS
    XCHAOS --- ---
    BTW můj typický jednoduchý dotaz do tabulky trvá 0.00 sekund (když se použije KEY a tak). vygenerování PHP stránky (jen samotný běh kódu - bez načtení do browseru) trvá typicky např. 0.56 sekund (ve stránce je použitý stejný SQL dotaz a hodnota se vypisuje dříve, než proběhne odeslání nějakého docela komplexního footeru, apod.). No dobře, je tam pár dalších subqueries - ale všechny trvají zanedbatelnou dobu, jsou do tabulek s mizivým množstvím dat, cacheuju je na úrovni PHP apod.

    to beru jako finální argument, proč chci bastlit webové aplikace v Céčku místo v PHP: někde někdo něco prostě implementuje hodně špatně a mě ta zbytečná půl sekunda navíc přijde jako obchodní příležitost.
    XCHAOS
    XCHAOS --- ---
    (co sakra sedíte u compu v neděli? mazejte někam ven)
    XCHAOS
    XCHAOS --- ---
    (pouze jsem chtěl předvést, že i špatný způsob jak řešit problém může vést k velmi zajímavým a plodným výsledkům :-)
    XCHAOS
    XCHAOS --- ---
    ok, končím offtopic vsuvku. a mimochodem, tématem jsou vhodné datové struktury do C aplikací :-) (tak nějak dlouhodobě)
    XCHAOS
    XCHAOS --- ---
    ha, teď to dokonce použvá dva kroky, oba s primary key! :-)

    mysql> describe SELECT UNIX_TIMESTAMP(datum) AS unixtime, jmeno, vzkaz, id, hodnoceni, hodnoticich FROM guestbook WHERE id IN (SELECT id FROM guestbook WHERE (UNIX_TIMESTAMP(datum) + 3600*24 < UNIX_TIMESTAMP(NOW()) AND hodnoceni >= 0)) ORDER BY id DESC LIMIT 64;
    +----+--------------------+-----------+-----------------+-------------------+---------+---------+------+-------+--------------------------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    +----+--------------------+-----------+-----------------+-------------------+---------+---------+------+-------+--------------------------+
    | 1 | PRIMARY | guestbook | index | NULL | PRIMARY | 4 | NULL | 11329 | Using where |
    | 2 | DEPENDENT SUBQUERY | guestbook | unique_subquery | PRIMARY,hodnoceni | PRIMARY | 4 | func | 1 | Using index; Using where |
    +----+--------------------+-----------+-----------------+-------------------+---------+---------+------+-------+--------------------------+
    2 rows in set (0.00 sec)

    mysql> describe SELECT id FROM guestbook WHERE (UNIX_TIMESTAMP(datum) + 3600*24 < UNIX_TIMESTAMP(NOW()) AND hodnoceni >= 0) ORDER BY id DESC LIMIT 64;
    +----+-------------+-----------+-------+---------------+-----------+---------+------+-------+-----------------------------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    +----+-------------+-----------+-------+---------------+-----------+---------+------+-------+-----------------------------+
    | 1 | SIMPLE | guestbook | range | hodnoceni | hodnoceni | 5 | NULL | 10333 | Using where; Using filesort |
    +----+-------------+-----------+-------+---------------+-----------+---------+------+-------+-----------------------------+
    1 row in set (0.00 sec)
    XCHAOS
    XCHAOS --- ---
    REDGUY: já top BTW vyřešil high-level SW optimalizací, která BTW funguje i teď, a mj. mi dělá filesort nad menším množstvím dat, než simple dotaz :-)
    XCHAOS
    XCHAOS --- ---
    REDGUY: to bylo až asi ve 4. výsledku, tahle rada :-)
    XCHAOS
    XCHAOS --- ---
    REDGUY: tak samozřejmě... jestli se něco vejde do paměti, nebo ne, to během compile-time nevím. nicméně třeba by pomohlo vidět ten vygenerovaný kód, abych viděl, co od toho čekat, nebo tak?

    prostě je víc způsobů, jak přemýšlet o nějaké aplikaci - skriptování vs. kompilovaná aplikace, SQL dotazy vs. nativní storage, objektový vs. neobjektový návrh aplikace, apod. - já hledám nějaký nový level, na který se posunout, protože se zatím plácám uprostřed stejného bastlení, jaké probíhá masově všude kolem mě (a představuje masivní plýtvání zdroji, podle mě)

    REDGUY: viz upřesňující zmínka o in-house vývoji :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: Ach jo. Njn. Proc proste pouzit to co radi google, kdyz je mozne "zasvecene" tlachat o pouzivani gdb, "ostude" MySQL ktera se pry rozbije kdyz se neco nevejde do pameti, pripadne o hloupych adminech kteri resi problemy prikupovanim pameti, coz? Jak u blbejch 8(
    REDGUY
    REDGUY --- ---
    XCHAOS: , že cosi, co se projevuje až od určitého množství záznamů, ti většina adminů bude řešit přiobjednáním paměti - ale prdlajs.
    REDGUY
    REDGUY --- ---
    XCHAOS: protože se předem dovím, že jsem napsal dotaz, který třeba nejde jednoduše překompilovat, či tak něco - co myslis tim "jednoduse prekompilovat"? Nechces spis rict "dostatecne zoptimalizovat"? To se sazmorejme nedozvis ani v tvem pripade, protoze ta optimalizace zalezi na databazi a tu behem compile time nemas. Takze, co "tak neco"?
    XCHAOS
    XCHAOS --- ---
    REDGUY: jo, REPAIR table pomohlo, to je fakt :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: Sorry, ale fakt nechapu co se vlastne snazis rict. Nejdriv placas neco o tom, ze je ostuda kdyz ma mysql problemy kdyz cela tabulka nevejde do pameti i kdyz se se sloupcema nepracuje (wtf, mimochodem), ted najednou rikas ze velikost sloupcu nehraje roli. Co se vlastne snazis rict? Ze to mas rozbity a netusis proc? Zkousel jsi ten repair table, jak jsem psal? Jakej storage engine ma ta tabulka?
    XCHAOS
    XCHAOS --- ---
    ISTEVE: faktem je, že s velikostí paměti vs. tabulky to nejspíš souvisí, protože chyba se začala projevovat až od určitého množství záznamů - a i výsledky které mi našel na tenhle MySQL error Google naznačují to samé - že se to začalo projevovat až po řádově podobném množstvím záznamů (přes 10 000).

    a faktem je, že cosi, co se projevuje až od určitého množství záznamů, ti většina adminů bude řešit přiobjednáním paměti (zvlášť pokud vývoj aplikace neprobíhá in-house, což je u opensource/free software velmi běžné, citatation doufám not needed :-)
    Kliknutím sem můžete změnit nastavení reklam