• ú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 --- ---
    DAVIDOWITCH: takhle jsem si to představoval :) akorát tyhle zběsilosti fakt nehodlám programovat "ručně" - svojí roli vidím jako toho, kdo by třeba napsal ten pre-compiler z konvenčního SQL do C (a vymyslel nějaký markup, jak to celé poslepovat)
    XCHAOS
    XCHAOS --- ---
    TečkaCZ - Steve Jobs? Denis Ritchie, John McCarthy, Jack Tramiel
    http://teckacz.cz/1163-Steve-Jobs-Denis-Ritchie-John-McCarthy-Jack-Tramiel
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    ISTEVE: Aha, diky. Takze #2 je trochu jinak nez sem myslel, ale big picture furt rika "uz to existuje".
    ISTEVE
    ISTEVE --- ---
    Ulozena procedura je neco, co mas dlouhodobe v databazi (a muze to bejt kuprikladu tvoje jediny API, ostatne takhle nejak funguje tusim KOS). Priklad: PL/SQL (a PL/pgSQL) procedury budes mit ulozeny na databazi.

    To co mi prijde ze popisujes je prepared statement, viz http://www.postgresql.org/docs/9.0/static/sql-prepare.html ci http://dev.mysql.com/doc/refman/5.1/en/prepare.html

    disclaimer: necetl jsem extra pozorne:]
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    FLEGMA: Duvod proc sem to sepsal je vesmes troji:

    1) Resi to Jachymkovu namitku, ze by bylo nutno freeznout interni strukturu. A to tim, ze ona vnitrni reprezentace nemusi aplikaci davat zadnym zpusobem smysl, jen ji drzi.

    2) Tohle (s uchovavanim prelozeneho u databaze a ne v aplikaci) je asi nejpricetnejsi jak sem schopen se v uvahach dostat k puvodnimu zadani. Zaroven je to hrozne podobne tomu co si intuitivne predstavim pod pojmem "ulozena procedura." Otazka tedy z moji strany je, je tohle natolik podobne ulozenym proceduram, ze rozdily jsou vesmes kosmeticke?

    3) Otazka na XChaose, je tohle cca co sis predstavoval, nebo sem to pochopil uplne spatne?
    FLEGMA
    FLEGMA --- ---
    DAVIDOWITCH: Nevidim tam zadnej benefit proti ulozenejm proceduram, sry.
    REDGUY
    REDGUY --- ---
    DAVIDOWITCH: A usetris tim setinu casu, kterej ztratis kdyz ti nekdo zarve na disk 8)
    FLEGMA
    FLEGMA --- ---
    DAVIDOWITCH: Valenta byl bozi, akorat ten studackej toolik na ER modelling byl zabugovanej jak prase a clovek byl nucenej v tom naklikat semestralku.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    A teda, neprijde mi ze by "interni" API muselo nezbytne nutne locknout vnitrni reprezentaci. Jak bych si to dovedl predstavit je neco jako:

    // generovani
    const char* query_template = "Select Name, Surname from Foo join Bar where %1% == %2%";
    size_t query_size = database->get_internal_size(query_template);
    void* query_compiled = malloc(query_size);
    database->compile_query(query_template, query_compiled);

    // usage
    database->query(query_compiled, DATABASE_STRING, "Name", DATABASE_STRING, "Novak");

    Takze by se od databaze zjistilo kolik chce pameti, nechalo ji to predkompilovat query template do nejaky (pro nas transparentni) vnitrni formy, a po hozeni dotazu by se ji dala jednak tahle vnitrni forma, a druhak chybejici parametry.

    Chapu ze tahani vnitrni formy mezi procesama (a po siti atd) neni uplne optimalni, proto bych se priklanel spis k tomu, aby si to ten databazovej stroj nechaval u sebe a vracel jen nejakej identifikator (cislo, treba).

    A taky to asi nema smysl delat u dotazu ktery nejdou natemplatovat (tj. je tam tech moznosti TOLIK, ze to proste nejde realne "predchroustat"), takze by se to pouzivalo jen na ty hodne bezny.

    A ted mi nekdo prosimvas reknete, ze tohle jsou ty procedury co mu uz tu nekdo nabizel, ja mam pocit ze ano ale vim toho o databazich jen tolik co se Valentovi povedlo do mne na cviku nalejt. :-)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: Hele, s kafem to jde celkem v pohode.
    REDGUY
    REDGUY --- ---
    XCHAOS: no... zrychlení... já jsem hodně "slow design" člověk. já netvrdím, že to nutně dělám kvůli rychlosti ach jo. Takze kdyz jsi napr v [ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] vysvetloval jak je rychlost dulezita, tak jsi to vlastne nemyslel vazne a mame to ignorovat? Nebo zase jen retconujes?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    TENCOKACISTROMY: Aby nedoslo k mylce - tim se nechlubim. Tim mam na mysli, ze to je naprosto uplne bezny. SQL je ukecanej jazyk, kde se dost blbe resi nejakej reuse kodu (a kdyz ho pouzijes, zjistis ze ztracis vykon) a tudiz neni zadnej problem si nabobtnat dotaz na sto radek. A sto radek to zabira jen proto, ze v jednom radku by to bylo naprosto nesrozumitelny. Zrovna v tom SQL je formatovani kodu (novy radky, odsazovani, komentare uvnitr dotazu) dost dulezity. Defakto se tim supluje absence ficur v tom jazyce.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: Dvacetiradkovy dotazy pres pet tabulek radime mezi male, strucne dotazy.
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: je pravda, že zrovna to parsování asi hlavní problém nebude - i když to si asi ještě neviděl moje 20ti řádkové SQL dotazy před pět tabulek :-) - ale už jen třeba objem dat, které pak musíš zbytečně protlačit přes socket, by problém být mohl: když přitom přece stejně ta data jsou nejspíš někde v paměti, a stačilo by na ně získat pointer.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: My mame MMORTS postavenou nad SQL databazi, dotazy se tam delaj v SQL a teda zrovna parsovani toho SQL prikazu (pravda, z 99,99% to je volani pripravenejch funkci a procedur) netrva prakticky nic. V porovnani se servirovanim dat, reseni zamykani zaznamu u paralelnich pozadavku a vypoctu, to se jedna o mikrooptimalzaci.

    Nicmene naprosto souhlasim s tim, ze SQL je prezitek a tesim se, az do relacnich databazi zavedou srovnatelnou syntax a ficury jako ma napriklad LINQ v .netu/monu.
    ISTEVE
    ISTEVE --- ---
    ALMAD: ...a SQLite ma interne VM s regulernima operacema. Jestli si vzpominam dobre, tak to nebylo exposed, ale treba se to zmenilo.
    XCHAOS
    XCHAOS --- ---
    hehe, no taky zajímavý důvod k optimalizaci - aby bylo možné nadále používat 1 GB databázi zadarmo :-)
    Jfgeyelin's dev blog: Memcaching the right stuff
    http://www.jfgeyelin.com/2012/04/memcaching-right-stuff.html
    XCHAOS
    XCHAOS --- ---
    hmm, tak tohle taky není zrovna to, co chci: to co dělají, je složitě přetypedefovaná práce s obyčenými C strukturami, přijde mi :-) opět stringy fixní délky a taková zvěrstva...brr.
    c-treeDB C API Developer's Guide
    http://www.faircom.com/doc/ctreedb/
    XCHAOS
    XCHAOS --- ---
    tohle se tváří vznešeně - ale je to jen okázale kryptický způsob, jak poslat databázi query string:
    Accessing: MySQL Database using MySQL C API - CodeProject®
    http://www.codeproject.com/Articles/34646/Accessing-MySQL-data-base-using-MySQL-C-API
    jako jo - vy mě asi řeknete, že to je jako bych uvnitř programu chtěl mít vlastní implementaci filesystému... jenže... je a není :-) spíš je to něco jako používat file handlery otevřených souborů místo filenamů.
    XCHAOS
    XCHAOS --- ---
    JANFROG: jo... celá moje anabáze s tím tolik kritizovaným C<<1 makroprojektem byla o tom, že už mě unavovalo mít ve svých zdrojácích to věčné
    #define STRLEN něco :-) jako problém je, že programátoři v C si toto větinou uvědomí až v době, kdy už sami na rozsáhlejších projektech přestávají pracovat.
    Kliknutím sem můžete změnit nastavení reklam