• ú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
    XCHAOS
    XCHAOS --- ---
    REDGUY: ...ale já právě počítal s tím, že by se v takovýchto tabulkách pak místo číselných primárních klíčů používaly přímo pointery... přesto by ale kód vznikl kompilací "human readable" SQL dotazu. akorát by např. to id v takovéto tabulce pochopitelně byl vždy přímo pointer, a relace by byly přímo do paměti.
    XCHAOS
    XCHAOS --- ---
    REDGUY: to je samozřejmě zajímavá teorie... teď teda nezbývá počkat, než mi nějaká SQL databáze ukáže různé DESCRIBE pro různé obsahy tabulek. zatím mě vždy přišlo, že na to má vliv jen struktura dotazu a struktura klíčů u tabulek.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: připouštím, že nemám představu, jak uvnitř vypadá databáze... ale na základě chyb, které mi hází MySQL, si postupně nějakou dělám :-)
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: kvůli té životnosti jsem se přeorientoval na Linux/POSIX - víceméně, rozkoukávám se v unixovém světě cca od roku 1994, a i když nějaké použitelné výsledky mám teprve tak asi tak maximáně posledních 10 let, tak to, co bych naprogramoval v roce 1994 např. v Bashi (nebo i v Céčku, možná v Perlu), to by mi běhalo (šlo přeložit) nejspíš i letos. Tedy důvodem proč jsem se přeorientoval, byla právě potřeba nadčasové platformy, která přežije i výměnou generací hardware (takových výměn hardware/OS jsem v té době měl za sebou už několik - a pochopitelně mi naštvalo, že cokoliv jsem do té doby naprogramoval, se vždy stalo bezpředmětné...)

    Výrazným rysem samotného jazyka C je zpětná kompatibilita - specifikace C99 je podle mých zkušeností zpětně kompatibilní s C89, a to zase bylo víceméně kompatibilní s původním K&R C

    Něco podobného slibovala Java - ale upřímně: nevím, jak to tam je se zpětnou kompatibilitou reálně. (Pokud vím, tak javové aplikace ani nebyly přenositelné mezi mobilními telefony a webovými browsery)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: A me jednou neco jinyho spadlo na segfault! Hruuuuza!
    XCHAOS: Ano, resit zivotnost SW v desitkach let v prostredi/obdobi, kdy po deseti letech mas problem sehnat HW na kterym to muze bezet mi prijde absolutne mimo. Neco jinyho by bylo, kdyby si byl i vyrobce dotycnyho HW, tak by to davalo smysl.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Nemam. Pokud mas data natolik jednoduchy ze je muzes mit ve vlastni pameti ve vlastnim procesu, nemas pouzivat SQL.
    Pokud je nemas natolik jednoduchy, tak si ten pointer nevymyslis.
    Mne to cim dal tim vic zni jako ze bud pouzivat MySQL na neco na co to je zbytecny, nebo nemas predstavu jak vypada uvnitr databaze (a tudiz si to stylem sobe vlastnim predstavujes jak hurvinek valku).
    REDGUY
    REDGUY --- ---
    XCHAOS: fakt mě přijde, že toto jsou tak samozřejmé věci, že o nich prostě nemluvím. - me spis prijde ze o tom nemluvis proto, ze to je problem 8))

    tam samozřejmě kapituluju - no slava.

    ovšem o tomto typu optimalizace mi např. DESCRIBE u MySQL neříká nic - jak, nerika? Rika. Tedy, nevim jestli MySQL pri optimalizaci bere do uvahy velikosti a obsahy tabulek, ale pokud ano, tak vysledek DESCRIBE ti rika, jak bude dotaz vypadat pro AKTUALNI data. Neni duvod proc by ti rikal, jak by se dotaz provadel kdyby v tabulkach byly uplne jiny data.
    REDGUY
    REDGUY --- ---
    XCHAOS: ale dostat rovnou pointery do paměti - podivej, pokud mas rovnou pointery do pameti, tak se fakt nemusis srat se SQL datovym modelem kde jsi omezenej na hejno tabulek. Kdyz to mas v pameti, tak proc delat nejakou bizarni relaci mezi tabulkama Users, Posts a UserPosts, kdyz muzu proste muzu mit objekt User kterej bude mit pole/list/whatever pointeru na objekty Posts. Proste pouzijes normalni datovy struktury urceny pro praci s datama v pameti.
    XCHAOS
    XCHAOS --- ---
    no nic. čau.
    XCHAOS
    XCHAOS --- ---
    REDGUY: tak z podstaty pre-kompilace tak nějak vyplývá, že v případě modifikace těch tabulek by bylo nutné aplikaci kompilovat znova. fakt mě přijde, že toto jsou tak samozřejmé věci, že o nich prostě nemluvím. (jeden z důvodů, proč chci optimalizovat je, abych mohl SVOJE vlastní aplikace provozovat i bez adminů - protože ti se historicky ukázali jako nejnákladnější a nejnepředvídatelnější položka vůbec...)

    co se optimalizace query podle obsahu a nikoliv podle struktury týče - tam samozřejmě kapituluju. (ovšem o tomto typu optimalizace mi např. DESCRIBE u MySQL neříká nic...)
    REDGUY
    REDGUY --- ---
    XCHAOS: 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. - coze? Ty v dobe kompilace presne vis, jake indexy bude mit ten program za pul roku k dispozici? Wow, magic. A i kdyby, znamena to, ze pri kazde zmene databaze (treba pridani indexu), ktera u normalniho SQL vubec nevadi, budes muset prekompilovat aplikaci? To zni skvele.

    A hlavne, stale ignorujes (nebo proste nechapes) fakt, ze query optimizer bere do uvahy i _obsah_ databaze, ne jenom jeji strukturu. Opravdu jsi takovej vizionar, ze pul roku dopredu znas nejen strukturu, ale i obsah databaze?
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH:
    DAVIDOWITCH: ... snad alespoň ty bys mohl mít pochopení pro to, že podstatou celé myšlenky bylo netlačit data přes socket, ale dostat rovnou pointery do paměti... tedy eliminovat z procesu tlačení dat přes socket.

    protiargumentem bylo, že v éře CPU cache (to je věc, která se začala běžně používat až poté, co já si běžně přestal hrát se strojovým kódem - takže pro mě intuitivní dělení je pořád "paměť vs. disk" ačkoliv dnes je to častěji "cache vs. paměť vs. disk") , nota bene v éře swapování na disk :-) je mi stejně pointer do paměti platnej asi jako kreditní karta k účtu, na kterým vůbec nemusí být peníze. bohužel to asi protiargument bude, tak se soustředím nadále na to, čím tráví PHP tu půl sekundu času...
    XCHAOS
    XCHAOS --- ---
    REDGUY: je asi jednodušší ponechat ti poslední slovo, než snažit ti podesáté něco vysvětlit.
    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.
    Kliknutím sem můžete změnit nastavení reklam