Vlákno názorů k článku Nový pohľad na tradičný relačný model od djicha - Určitě je to zajímavý projekt, jen mě napadá...

  • Článek je starý, nové názory již nelze přidávat.
  • 9. 6. 2011 6:43

    djicha

    Určitě je to zajímavý projekt, jen mě napadá k čemu je to dobré? SQL je základ bez kterého se prostě žádný vývojář patrně neobejde. Na trhu je velké množství řešení, které pokryjí valnou většinu potřeb a chybí li něco, tak se téměř vždy bez toho dá obejít.

    Opravdu by mě zajímalo, co tak kritického umí Bandicoot bez čehož by se v PL/SQL, nebo PL/pgSQL nedalo existovat.

    Určitě se těším na pokračování, kde se nad dozvím, jaké je řešení v uživatelském konkurenčím prostředí, kdy je nutné řešit například explicitní zamykání záznamů, nebo dlouhotrvající transakce (uživatelé produktů na kterých pracuji mají rozdělanou operaci v jedné transakci i třeba 14 dní).
    Další je věc která by mě zajímala je, jaké jsou možnosti migrace a hlavně časové nároky.

    Zde se píše http://bandilab.org/specification.html#transactions
    že není nutno psát roollback, ani commit, ale co když chci prostě jen testovat výsledky opravných skriptů apod. a nechci změnu dat natvrdo ukládat?

    Stálo by za to uvést výsledky zátěžových testů, nebo kde je Bandicoot použitý v nějakém produkčním prostředí.

  • 9. 6. 2011 7:50

    bez přezdívky

    Tranzakcie sú spravované automaticky. Pokiaľ chcete zmeniť časť dát, potom čakať nejakú dobu a neskôr sa rozhodnúť či túto zmeniť potvrdiť alebo zrušiť, tak nevidím dôvod prečo s tou zmenou nepočkať a vykonať ju až v momente ked viem, že ju chcem vykonať?

    Systém uzamyká celé premenné, a pokiaľ sa chcete rozhodovať na úrovni záznamov, tak jedine pomocou "optimistic locking". Ak chcete mať funkciu, ktorá len testuje výsledky ale nič neukladá tak jednoducho nazapíšete nič do globálnej premennej, ale o tom už viac v druhej časti :)

    O transakciách aj o základných výkonových testoch sa môžete dočítať na stránke http://bandilab.org/blog.html

  • 9. 6. 2011 8:58

    MD (neregistrovaný)

    Autocommit/rollback - Dusan se zajimal o to, ze by chtel spustit testovaci scripty, ktere zmeni data, zkontrolovat jestli se to povedlo a pak provest rollback, protoze ty zmeny ve skutecnosti nechce, byly jen testovaci. Jde to?

  • 9. 6. 2011 9:51

    bez přezdívky

    aah, jasné, najlepšie to asi vysvetlím na príklade.

    Povedzme, že chceme aplikovať 50% zľavu u všetkých predajcov a ak nejaká výsledná cena je menej ako hodnota 10.0 tak to považujeme za chybu. V takomto prípade môžeme napísať overovaciu funckiu, ktorá vráti všetkých predajcov, kde sa operácia "nepodarila":

    fn TestZlavy(): Predajca
    {
    return predajcovia extend(novaCena = cena * 0.5) select(novaCena < 10.0);
    }

    Výsledok samozrejme nemusí byť celá množina, môže byť napríklad len počet záznamov.

  • 9. 6. 2011 11:09

    Pavel Prokop (neregistrovaný)

    No a tento test chceme vložit na konec funkce (pokud jsem pochopil správně, že transakce - posloupnost datových úprav - je definovatelná pouze jako samostatná funkce), která aplikovala slevu. V případě, že se operace u některých prodejců "nepodařila", chceme všechny proběhlé datové úpravy v rámci funkce (= transakce) jako celek zrušit (ROLLBACK). V žádném případě nechceme částečně správná data uložit do databáze (COMMIT). Jde to?

  • 9. 6. 2011 11:42

    bez přezdívky

    posledná verzia (v3), nepodporuje bohužiaľ constraints. Tie sú na pláne v najbližších verziách (v závislosti od priorít čo ľudia chcú nášho voľného času).

    Je však možné to obísť nasledujúcou funkciou:

    fn Zlava(): Predajca
    {
    # vsetci predajcovia po zlave
    zlava := predajcovia extend(novaCena = cena * 0.5, stav = 1)
    project(meno, titul, novaCena, stav)
    rename(cena = novaCena);

    # mnozina chybnych zaznamov
    chybne := zlava select(cena < 10.0);

    # premenna ok je prazdna ak existuje aspon jeden chybny zaznam
    ok := zlava * (zlava project(meno, stav) - chybne project(stav));

    # novy obsah predajcov je bud povodny obsah predajcov alebo premenna zlava
    predajcovia = predajcovia - zlava project(titul) +
    zlava project(meno, titul, cena);

    return chybne;
    }

    ak by boli constrainty implementovane tak v podstate by sa funkcia zmenila na jedno priradenie, ktore by skontrolovalo contraint. Ale to je blizka buducnost :)