• ú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
    REDGUY
    REDGUY --- ---
    Hele, XChaosi, muzes zkusit v jedne zprave nejak konzistente shrnout co presne vlastne ted zkoumas, v jake situaci by se to pouzivalo a jake vyhody by to melo oproti soucasnemu stavu?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: To neni otazka filozofie, spis vysledek pozorovani. Kdyz udelas neco podle intuice a pak to zacnes vic zkoumat, zjistis ze jsou lepsi pristupy.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH:
    _BENNY: tomu říkám tedy základ civilizace... odmítat intuici za každou cenu... :-)

    já naopak pokládám za rozumné intuici kultivovat - tím, že se k ní chovám mile a pozorně a občas jí přikrmuji vhodnými metaforami.
    REDGUY
    REDGUY --- ---
    XCHAOS: Tvuj problem. Co se mozna vratit zpatky k tematu? Nejaka sance ze nam vysvetlis jak konkretne predparsovane sql zamicha kartama? (tedy, krome toho ze to bude v "podvratnem free software" 8)) )
    XCHAOS
    XCHAOS --- ---
    ISTEVE: tak pochopitelně, že parsování je míň než zanedbatelný... to už jsme si tady vyjasnili. spíš mě zajímala prekompilace v kombinaci s nějakým direct memory access api - tedy, že by se data neproháněla přes socket. ale to je celkem fuk.

    nemusíme se bavit jen o příkladu s joinem přes pět tabulek, myslím. přípomínka s tím, jak velkou roli hraje cacheování, je samozřejmě taky dobrá.... vlastně moje omezené programátorské zkušenosti vedou k tomu, že cacheovat se vyplatí vždy téměř všechno (kromě věcí, o kterých programátor předem ví, že jsou z principu necacheovatelné, což by ale právě u budoucích vývojářů-optimalizátorů mohla být jejich hlavní role... být schopni toto rozhodovat...)
    XCHAOS
    XCHAOS --- ---
    REDGUY: v tom případě ale nechápu, proč používáš druhou osobu místo třetí ("pokud někdo čeká...."). takový styl vedení debaty zdá se mi býti manipulativní.
    REDGUY
    REDGUY --- ---
    XCHAOS: _já_ že čekám, že databáze něco vymyslíš za mě Napsal jsem, cituji, "Pokud cekas", nikoliv "Cekas". Nauc se cist 8))
    XCHAOS
    XCHAOS --- ---
    REDGUY: _já_ že čekám, že databáze něco vymyslíš za mě? co je tohle zase za slaměnný fígl? (strawman fallacy)
    ALMAD
    ALMAD --- ---
    TENCOKACISTROMY: Samozrejme, ale o to tu preci jde, ne? Zajistilo to zrychleni pro jeden konkretni xchaosuv priklad.

    Nesnaz se tu prosim v tomto klubu zobecnovat. To neprojde ,)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: Ze napises nekam "=" ve smyslu prirazeni, jeste neznamena ze to je imperativni jazyk.
    Nicmene ano, napriklad u procedur se projevuje imperativ-like cast jazyka.

    Zrovna MySQL neni technologie, kterou bych znal nejak podrobne. Nicmene jsi si jistej, ze "ENGINE = MEMORY" zmeni algoritmicky pristup u dotazu? Nezrychlil jsis to treba tim, ze jsi eliminoval IO operace na disk?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    _BENNY: Proto ma kazdy spravny muz nosit nuz, aby se mu ubranil!
    _BENNY
    _BENNY --- ---
    rekl bych ze je to tady uz asi 4 roky porad o tomtez - intuitivni reseni zpravidla nebyva to nejlepsi, i kdyz cloveka napadne samo ;)
    ISTEVE
    ISTEVE --- ---
    (Teda, doted jsem si myslel ze jsi ukladani session dat uvadel jako priklad tvyho michani kartama... ale kdyz ctu REDGUY, tak premejslim jestli nejde o nejakou novou unrelated prevratnou ideu ;) )
    REDGUY
    REDGUY --- ---
    XCHAOS: ale já jsem třeba imperativně řekl MySQL ǎt na tabulku použije ENGINE = MEMORY - no tak v prvni rade, MySQL je dost sracka. Za druhe, i u skutecnych databazi je nejake to ladeni potreba, i kdyz obvykle ne v tak brutalni podobe. Pokud cekas ze databaze _vsechno_ vymysli za tebe, jsi dost mimo. No a za treti, dost mozna je to prave ten priklad, ze pouzivas MySQL na neco, na co neni urcena a pak se nediv, ze to musis extra stelovat aby to jakz takz fungovalo. Cili tvoje l33t skillz s ENGINE=MEMORY zas tak nic nedokazujou.
    ISTEVE
    ISTEVE --- ---
    XCHAOS: To je picovina temer ze vsech perspektiv ze kterejch na to dokazu nahlizet, tak si to trochu projdem.

    Zakladni premisa toho co popisujes teda je, ze mas nejakej session key (v cookie/querystring/whatever), a chces vytahnout data co k tomu mas.

    Mas data krasne rozstrukturovany do tabulek, panu Coddovi by plesalo telo.srdce_id nadsenim. Delas join na (budme konzervativni) peti tabulkach. V ten moment je parsovani SQL min nez jen zanedbatelny, ponevadz:
    a) I kdyz mas index nad spravnejma klicema, stale je nutny udelat nekolik pruchodu stromem.
    b) V zavislosti na fyzicky reprezentaci muzes nebo nemusis delat dodatecny I/O na disk (nektery RDBMS vsechno nebo cast dat budou drzet primo v danym strome)
    c) Je nutny tohle udelat pro vsechny relevantni tabulky.
    d) Pokud nemas tohle vsechno v cache, tak te jen I/O zpusobeny cache miss stoji (v zavislosti na rozsahu cache miss) tolik co naparsovat tri tuny SQL (osobne bych hadal, ze parsery v sqlite/mysql/postgres by za tu dobu stihly naparsovat radove megabyty az desitky MB prumerne vzrostlejch SQL dotazu).


    ...samozrejme, pak je tu alternativa ze jsi prasopes a mas tam jen session id a serializovany data, ale pak jsi naprostej idiot ze to vubec do RDBMS cpes. :)

    REDGUY
    REDGUY --- ---
    XCHAOS: Nerozumim. Na co presne reagujes? A co tim chces rict?
    XCHAOS
    XCHAOS --- ---
    REDGUY: jde o to, že většinou ti webová aplikace neběží jen v jedné kopii... takže třeba jen jaký datový model zvolíš pro session data může být zásadní (když chceš ošetřovat třeba tisíce uživatelů přihlášených současně)
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: dobře... ale já jsem třeba imperativně řekl MySQL ǎt na tabulku použije ENGINE = MEMORY ... a tím jsem výkon výrazně zvýšil. takže tvrdíš, že mám používat jen takovou SQL databázi,která si engine zvolí sama? a jak bude vědět, že zrovna u téhle tabulky mi nevadí ztráta dat při restarty SQL serveru, a u jiných jo?

    trochu imperativního přístupu k programování zkrátka neuškodí u jakéhokoliv paradigmatu
    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))
    Kliknutím sem můžete změnit nastavení reklam