• ú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
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: Konkretneji: Jestlize ve svym projektu nevyuzijes schopnost databazoveho stroje patricne si sam zvolit jak se dotycny dotaz ma udelat (SQL je deklarativni, nikoliv imperativni jazyk) a vyhody, ktere ti to prinasi (neresis v ktery z dotycnych tabulek je kolik zaznamu a podle jakych indexu se ma dohledavat. nepotrebujes ani izolacni urovne transakci ci napriklad nepotrebujes ACID), a zaroven se ti vyplati resit takovy veci jako predkopilovany dotazy z SQL do C, tak by jsi mel pouzit nejaky jiny zpusob jak ukladat/nacitat data, a nemel by jsi pouzivat SQL databazi.
    REDGUY
    REDGUY --- ---
    XCHAOS: že se to tady začíná zvrhávat na diskuzi "proč není potřeba C". - wut? Kde prosim nekdo rika neco takoveho? Tj. obecne, bez nejakych kvantifikatoru? Ze by zase tvoje oblibene strawman fallacy? 8))

    do jaké míry je ENGINE = MEMORY v MySQL pomalejší či méně paměťově efektivní, než memcached - sorry, ale jestli tohle srovnani myslis vazne, tak zcela zjevne nevis o cem mluvis. memcached je hashtable na steroidech: strcis do nej klic, vypadne ti hromadka bitu. (My)SQL je relacni databaze: strcis do ni jednoduchy nebo slozity dotaz, vypadne ti strukturovanej vysledek. Jo, jasne, muzes pouzit (My)SQL misto memcached a pro typickej upatlanej blogovej server s dvema uzivatelema za odpoledne to bude fungovat. Ale to nic nemeni na tom ze to jsou dve sakra rozdilne veci. Sice obe ukladaji data, cilene pouziti je u kazde o necem jinem. Pokud je potrebujes porovnavat mezi sebou, znamena to, ze jedno nebo druhe (nebo oboje) pouzivas k necemu, k cemu to neni urcene.

    A porad bych rad slysel nejakej konkretni, real-world priklad kdy tvoje predparsovane sql prikazy budou michat kartama 8))
    XCHAOS
    XCHAOS --- ---
    REDGUY: mno, tedy přesněji, v mém případě bylo potřeba použít max_heap_table_size = 256M v my.cnf (default je asi 16 MB... každopádně se to zaplnilo skoro hned). zvýšení výkonu je dost citelné, na druhou stranu - asi by bylo zajímavé to srovnat s nativní datovou strukturou přímo ve sdílené paměti (což možná časem zkusím).

    no každopádně se mi nelíbí, že se to tady začíná zvrhávat na diskuzi "proč není potřeba C". zatím jsem minimálně dokázal, že není potřeba se srát s memcached :-) (tedy samozřejmě je otázka, do jaké míry je ENGINE = MEMORY v MySQL pomalejší či méně paměťově efektivní, než memcached - ale současně výhoda spočívající v unifikovanosti a možnosti použití složitých SQL konstrukcí je zřejmá (memcached nabízí v podstatě jen něco jako "hodně enviroment proměnných via socket").

    (ale jo... možná skončím u toho, že místo sraní se se složitou shared datovou strukturou použiju pro svojí příští libmysqlclient webovou aplikaci napsanou v céčku prostě jako rychlé úložiště dočasnou SQL tabulku forcnutou do paměti - a bude vymalováno - minimálně ten zdroják bude hodně blbuvzdorný a čitelný, což je ostatně i mým cílem...)

    TENCOKACISTROMY: to je tak obecné tvrzení, že vlastně nevím, co ti na to mám odpovědět, ani jestli odpovídáš na to, o čem mluvím :-)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: Jinymy slovy chces pouzit neco, co je mnoho a mnoho let vyvijeno a vypiplavano k nejakemu ucelu, s cilem pouzit to uplne k jinemu ucelu? Pak bych na tvym miste pouzil neco uplne jinyho a nesnazil se hackovat SQL databaze.
    REDGUY
    REDGUY --- ---
    XCHAOS: Ano, mam s tim zkusenosti. Funguje to.


    XCHAOS: vývoj podvratného free software. - coz porad neni ten konkretni real-world example kde tvuj dalsi genialni napad zamicha kartama. Proc konkretne myslis by tvoje myslenka prospela podvratnemu software?
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: já chci jít přesně druhou cestou :) uznávám užitečnost SQL enginů - které dokážou balancovat, co má cenu cacheovat, i např. napříč více databázemi/uživateli a tedy i více aplikacemi - ale v jiných ohledech chci kompetence SQL serveru naopak omezit a přenést je zpět k programátorovi frontendu.

    prostě uznávám, že tam existuje ta hranice, a že je nesmyslné snažit se databázové servery vymýtit (asi jako je nesmysl se snažit vymýtit filesystém, ve jméne kompetencí aplikačních programátorů). ale současně - můžeš načíst z filesystému adresář tak, že ze zavoláš "ls *" - a nebo může použít opendir() a readdir() - nebo jak se tomu v POSIXu říká.

    (tahle metafora jasně vysvětluje, že si rád zahrávám s posouvíním hranic skriptování vs. interpretovaný procedurální jazyk vs. kompilovaný procedurální jazyk - podle mě to nemusí být až tak pevně dané hranice, jak je zvykem...)
    XCHAOS
    XCHAOS --- ---
    ISTEVE: jo, query plan v SQL a výběr optimální cesty v BGP - to jsou oboje dvoje věci, kvůli kterým připouštím, že by už stálo za to docházet včas na přednášky a cvičení na nějaké škole... :-)

    jinými slovy - jo. tohle je skutečně omezení každé prekompilace SQL dotazu. (leda bys měl tak správně oindexované tabulky, aby to bylo jednoznačné... což je věc, se kterou mi rozhodně baví hrát si... ale jsme tu už offtopic)
    XCHAOS
    XCHAOS --- ---
    REDGUY: vývoj podvratného free software. chápej - rád bych napsal něco aspoň tak podvratného, jako Bittorent :-)
    XCHAOS
    XCHAOS --- ---
    ha..... zajímavé... je to tu sice offtopic, ale když jsem nakousl prekompilaci SQL dotazů... máte někdo zkušenosti s tímto?
    MySQL :: MySQL 5.1 Reference Manual :: 14.9 The MEMORY Storage Engine
    http://dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html
    (teď mi padala jedna často přistupovaná tabulka, kerou bych po útěku z PHP / MySQL chtěl právě nahradit nějakým tím smget() udělátorem... přešel jsem z MyISAM na InnoDB, ale nevím)
    BLAMI
    BLAMI --- ---
    REDGUY: sorry, ale nemuzu jinak, musim to rict - je to navrh solarnich letadel. Jinde to proste kartama zamichat nemuze.
    ISTEVE
    ISTEVE --- ---
    A kdyz rikas "predkompilovane", co tim vlastne myslis?

    Predparsovany? To ti neprinese temer nic, tech par CPU cyklu je oproti pruchodu velkym datasetem (i kdyz by byl nakrasne v pameti) v podstate zanedbatelnej *). Doporucuju slidy od Jeffa Deana -- konkretne hledej slide s nadpisem "Numbers everyone should know". You should too.

    Predpripraveny i s konstantnim query planem? Query plan se ti typicky bude menit na zaklade dat co v db mas (kolik jich je atd.) a statistik pristup k nemu, ponevadz query plan kterej byl dobrej kdyz jsi mel sto radku bude dementni kdyz jsi mel deset milionu radku, a naopak (a plati to i pro min extremni pripady).

    Neco jinyho? Co?

    *) pokud nedelas while (true) { SELECT 1 FROM DUAL; } ;)
    REDGUY
    REDGUY --- ---
    XCHAOS: Předkompilované SQL by mohlo pořád zamíchat karty aspoň v tom oboru, ve kterém se snažím působit já.... - porad by bylo prima vedet ten konkretni, real-world priklad kde by to "michalo kartama".
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: Nepochopil jsi me. Nemam problem se zjistenim co trva. To jsem zjistil celkem rychle. Je to prave kvuli reuse kodu - volani ruznych view/tabulkovych funkci a v nich dalsi view/tabulkove funkce atd...

    Do urcite miry, to dokaze zpracovat v +- idealne, ale ne vzdy to lze (napriklad kdyz v nejakem view ktere se pouziva "dole" joinujes tabulky ktere "nahore" nepotrevujes).

    Predkopilovane SQL prave ziskas (nebo alespon ja ziskavam) prave tim, ze si vytvorim view / tabuklove funkce / procedury - ty si pak sql server sam predkompiluje. A co vic, on si je schopen si je predkompilovat i pro ruzne zadani parametru.

    A to je to ceho chces dosahnout, jestil se nepletu.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Takze viz ISTEVE?
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: pokud se naučíš používat např. DESCRIBE (případně EXPLAIN - ono je to dialekt od dialektu jiné, v tomhle má SQL blízko k Basicu :-) tak můžeš velmi snadno zjistit, proč ztrácíš výkon :-)

    Faktem je, že SQL je jazyk, který přemýšlí za tebe. Ale mě samozřejmě štve, že nevím, co se děje "uvnitř" (a když se to snažím si to představit, tak se samozřejmě chytám za hlavu :-) Předkompilované SQL by mohlo pořád zamíchat karty aspoň v tom oboru, ve kterém se snažím působit já....
    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?
    Kliknutím sem můžete změnit nastavení reklam