Vlákno názorů k článku Nový pohľad na tradičný relačný model od vks - mi to pripada ze je to jen jina...

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

    vks

    mi to pripada ze je to jen jina forma zapisu. a nepripada mi to nijak prinosne - jednoduche veci se daji delat jednoduse, slozite jeste sloziteji, proste normalka.

  • 10. 6. 2011 7:12

    bez přezdívky

    Dúfam, že sa mi podarí v druhom dieli článku predstaviť Bandicoot tak, aby bolo tento prínos viditeľný. Ono to totiž celé začína pri forme zápisu, a práve to ako sa to odlišuje od tradičného dotazovacieho jazyka SQL, prináša výhody.

  • 11. 6. 2011 14:37

    Logik

    Ale forma zápisu nemá přeci se zbytkem nic společnýho. Vy zapisujete jako RE, SQL autoři zvolili bohužel jako ukecaný. Ale není problém zapisovat SQL jako RE, na to by stačilo napsat jednoduchej preprocesor.

    To, co Váš systém odlišuje je možnost obecných relačních proměných, za který platíte absencí optimalizátoru. Osobně, co by mi přišlo zajímavý je Váš přístup namontovanej jako extenze do databáze. Např. napsat do postgresql patřičný rozšíření a kompilátor Bandicootu do SQL tak, aby se existující tabulky nechali na SQL optimalizátoru a bandicoot řešil jen "dočasný tabulky".

  • 11. 6. 2011 18:10

    bez přezdívky

    Tato diskusia je dost narocna, pretoze je v clanku popisana len mala cast funkcionality. Vsetky potrebne informacie su ale na stranke projektu, takze mam dve otazky:

    1) Vedeli by ste implementovat optimalizator, s funkciami ake pozname v sucastnych RDBMS, pre jazyk aky pouziva Bandicoot?

    2) Myslite si, ze je principialne mozne prepisat SQL kod do Bandicootu a opacne? Odhliadnuc od toho, ze V Bandicoote este chyba znacne mnozstvo pomocnych funkcii. Nezabudajte aj na to, ze sucastou Bandicootu su aj funkcie, kde je mozne definovat vstupne parametre, ktore su tiez relaciami. Pre jednoduchost sa mozete na ne pozerat ako dalsie operatory algebry definovane pouzivatelom.

  • 13. 6. 2011 15:33

    Logik

    1) Jestli bych já uměl napsat optimalizátor? No za x let možná, to je ta nejsložitější část DB. Ale hlavně, proč psát něco, co už je napsané a vyzkoušené? Hledal bych spíše cesty, jak současné iplementace využít.

    2) IMHO to možné je. Teda do SQL + nějakýho procedurálního jazyka, imperativní jazyk jen tak do deklarativního převést nelze. S relačními proměnými je trochu problém, ale jdou emulovat. Např. se takové proměnné budou ukládat v global temporary table a předávat se bude jen identifikace z té tabulky. Nebo normální tabulky, ale tam bych pak musel implementovat GC. Nebo je vyhodnocovat líně (to ale asi nejde vždy).
    Samozřejmě nejčistší řešení by bylo do některé z opensource databáze tu podporu dopsat.

  • 14. 6. 2011 6:40

    Pavel Stěhule

    Minimálně v T-SQL je implementováno něco, co se relačním proměnným hodně podobá a implementačně by to nemusel být problém ani v PostgreSQL - existuje tam jakýsi typ typlestore - jde jen o interface.

  • 14. 6. 2011 8:38

    bez přezdívky

    1) len ma zaujímalo či si myslíte, že je to možné. Som rád, že sa zhodneme na tom, že je možné pre tento jazyk implementovať optimalizátor. Mne skôr nebola jasná Vaša formulácia, že za premenné platíme absenciou optimalizátora...

    2) ok, v podstate sa zhodneme na tom, že do čistého SQL to prepísať nejde. Na poskytnutie tej istej funkcionality by sme museli implementovať pojem relačného typu a premennej. Prepísať SQL do Bandicootu ale ide. Z toho usudzujem, že Bandicoot je jazyk so silnejšou vyjadrovacou schopnosťou. Alebo sa mýlim?

    Implementácia Bandicoot jazyka v existujúcich RDBMS by bola skvelá vec. Postupne by sa SQL asi prestal používať :)) Neviazal by som to ale na pojem tabuliek. Jedna z výhod Bandicootu je, že môžete používať relačné typy a funkcie bez globálnych premenných. V takom prípade používate Bandicoot ako výpočtový uzol na rôzne minupulácie so štrukturovanými dátami, bez persistencie a stavu. Môžem teda použiť relačný model a algebru len na implementáciu rôznej logiky bez nutnosti hovoriť o databázach. Vy si myslíte, že niečo také nemá zmysel?

  • 14. 6. 2011 8:43

    Pavel (neregistrovaný)

    Ad 2) No, určitě je možné přepsat Bandicoot do Assembleru, Znamená to (podle vaší logiky), že Assembler je jazyk s vyšší vyjadřovací schopností a měl by tedy Bandicoot nahradit?

  • 14. 6. 2011 8:53

    bez přezdívky

    Nie. Assembler nemá tú istú úroveň abstrakcie ako Bandicoot. SQL a Bandicoot sú jazyky z tej istej domény a poskytujú podobnú úroveň abstrakcie (Bandicoot zrejme o čosi väčšiu keďže sa neviaže na fyzické tabuľky).

  • 14. 6. 2011 10:34

    Vít Šesták (v6ak)

    Assembler je trošku extrémní případ. IMHO na základě teorií o Turingově stroji by šlo přepsat i Bandicoot QL do SQL, jen by to bylo poněkud neefektivní a obtížně čitelné.

    Rozhodně neplatí, že čím více toho daný jazyk umí, tím lépe. (Tím nemám namysli až tak teoretické (Turing-complete) hledisko.) Tím nechci říkat, že by Bandicoot byl špatný, jen bych chtěl před takovou argumentací varovat. Kde jsem na tom byl?
    * Někde jsem viděl článek (odkázal na něj Martin Odersky z Twitteru) o netechnických aspektech jazyka. Stručně to bylo o tom, že vlivem rigidnosti Cčka a ohebnosti LISPu teď máme dvě vážně brané implementace (to možná není to pravé slovo) OOP pro C (tj. C++ a Objective C), zatímco máme 'bžiliony' implementací pro LISP. Ve výsledku u C programátor ví, co zvolit (OC u Apple a C++ jinde, není-li nějaký speciální důvod volit jinak) a OC i C++ jsou kvalitně implementovány, zatímco u LISPu je tu nepřeberné množství (různých a často vzájemně nekompatibilních) implementací s různými chybami. Co je ve výsledku prakticky použitelnější? (Trošku jsem to pro lepší přehlednost zjednodušil, OC a C++ jsou, striktně řečeno, prostě jiné jazyky než C.) Jakkoli mám rád svobodu volby apod., je to zajímavý námět k zamyšlení.
    * Jde i o již zmíněné optimalizace. Není otázka, zda jsou optimalizace možné, spíše je otázkou, jak moc jsou náročné a do jaké míry je reálné je implementovat. Assembly languages jsou téměř neoptimalizova­telné, C a C++ jsou na tom lépe a třeba JVM zvládne i takové věci jako eliminace dynamické alokacde a eliminace zamykání, protože někdy zjistí, že to nezmění sémantiku. (Zase za to platíme délkou startu nebo 'zahřátí' a menšími možnostmi ruční optimalizace.) Taky mě napadá procházení paměti v Ruby, které je v MRI snadno implementovatelné, ale poněkud nepřímočaré (a kvůli výkonu vypnutelné) v JRuby. Dále, u čistě funkcionálního jazyka není často problém beze změny sémantiky (není-li u programu účelem se zacyklit) udělat líné vyhodnocování. To u Assembleru nějaký kompilátor asi jen tak neudělá. Ano, je možné si dopomoci nějakým kontraktem. To je ale zase určité omezení programátorů (určitý kompromis). A v praxi u Scaly podobně zapsaný výraz (např. Fibonacciho posloupnost) je někdy vyhodnocován poněkud méně efektivně (asymptoticky!) než v Haskellu. Zase, mám radši Scalu než Haskell, ale ne vždy jsou větší možnosti zadarmo.
    * Určitá jistota - například dynamické jazyky umožňují zajímavé věci. Ale jsou chvíle, kdy mohou programátorovi znepříjemnit život pozdějším objevením chyby nebo tichým mlčením. Díky tomu, že mnohé již lze ve statických jazycích dělat srovnatelně komfortně (obvykle jen něco málo psaní navíc), dám radši přednost statickým.

    Tyto argumenty nesměřují proti Bandicootu samotnému, ale spíše proti myšlence, že expresivnější jazyk musí být prostě lepší. Někdy může být vhodnější, ale někdy taky ne.

  • 14. 6. 2011 12:15

    Pavel Stěhule

    Pokud by se srovnávalo srovantelné - funkce Bandicootu s funkcemi v SQL (ANSI SQL 2003), tak si myslím, že lze Bandicoot přeložit do SQL a dost možná by nebyl komplikovaný překlad v opačném směru. Silnější vyjadřovací schopnost je nesmyslný pojem - buďto je ten či onen jazyk výpočetně úplný nebo není - případně může být ten či onen jazyk přizpůsobený více či méně té či oné doméně.

    To, co popisujete v posledním odstavci je relativně běžné v ETL. K pojmu databáze - například ANSI/SQL takový termín nezná - definuje pouze schémata. Možná by bylo pro Vás zajímavé se seznámit s stream databases. To jsou v jistém ohledu také relační databáze, a také se tam nepracuje s tabulkami.

    Myslím si, že podobných projektů jako Bandicioot je (bylo) více:

    http://www.ils.unc.edu/~dwest/inls258/Non-SQL.html
    http://en.wikipedia.org/wiki/QUEL_query_languages
    http://www.c2.com/cgi/wiki?QueryLanguageComparison

    Jednak někomu SQL skutečně může trhat žíly, jednak někdy jiný zápis může zpřehlednit určité problémy - takže podobný projekt určitý smysl má. Nedovedu si ovšem představit, že by Bandicoot mohl být výkonostně jinde než SQL databáze - vychází ze stejných teoretických modelů a bude narážet na stejné hw limity - což je seq scan a fsync.

    Myslím si, že by neměl být problém postavit Bandicoot třeba jako No SQL Procedural Language pro PostgreSQL. Pak by Bandicoot měl alespoň důvěryhodný db engine.

  • 14. 6. 2011 12:26

    Vít Šesták (v6ak)

    Co se týče úplnosti, je to formálně správně, ale při praktické aplikaci se něco jako 'vyšší expresivita' prostě hodí, jakkoli je to pojem problematicky definovatelný. Ale některé věci prostě nebudou 'přímočaré', takže jejich implementace 'pravděpodobně' bude 'drahá' a 'rozumný' člověk do toho 'spíše' investovat nebude. Uf, to je tu špatně definovatelných pojmů (snažil jsem se je dávat do apostrofů), ale má to velké praktické důsledky.

  • 14. 6. 2011 13:28

    Pavel Stěhule

    Asi vím jak to myslíte. Tady při srovnání Bandicootu a SQL vidím primární rozdíl v složitosti parseru. Zápis dotazu v SQL obsahuje poměrně dost cukru, což komplikuje realizaci parseru. Sémanticky ale nevidím příliš velký rozdíl - koneckonců relační proměnné lze částečně emulovat pomocí CTE.

  • 14. 6. 2011 13:45

    Vít Šesták (v6ak)

    No, možná bude trošku rozdíl mezi úplnou implementací Bandicoot QT překladem do SQL a mezi přibližnou implementací, která by netrvala na 100% kompatibilitě.

    Mimochodem, když už jsme u té jiné syntaxe, nemohu si nevzponemout na http://squeryl.org/ .

  • 14. 6. 2011 13:24

    jkb (neregistrovaný)

    ...bude narážet na stejné hw limity - což je seq scan a fsync. ...

    ano, s tim souhlasim, myslim, ze jste to 100% trefil. To je take ten zasadni problem te myslenky 'relacni', ze totiz uz z principu takove databaze operuji s 10 x vice udaji, nez by byly pro konkretni ulohu potreba. (kdyby se napr. ta sama uloha provadela nad nejakou VSAM databazi).

    Tuto velkou nevyhodu relacnich databazi se vyrobci snazi resit ruznymi optimalizatory, je ovsem mozno pozorovat, ze s rostouci komplexnosti uloh rostou i naklady na 'vyrobu optimalniho' provadeciho planu a tam je hranice tech relacnich systemu.

    Urcite odlehceni ovsem ocekavam od novych harddisk-technologii.

  • 14. 6. 2011 14:11

    Pavel Stěhule

    VSAM databáze také nejsou na všechno. Relační databáze jsou to nejlepší, co tu bylo, pro běžný hw a hromadné zpracování úloh. Nesmíte zapomenout, že seq scan je stále mnohem rychlejší než random IO. Až budou databáze uložené v nějaké variantě persistentní operační paměti, tak je možné, že se vrátíme k síťovému modelu - i když si moc nemyslím - výhodou relačních databází je jejich univerzálnost - tu zatím žádná jiná architektura nepřinesla.