Vlákno názorů k článku Migrace aplikace z Oracle do PostgreSQL od lobo - clanok je dobry, business logic v databaze je...

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

    singerko (neregistrovaný)

    Tiez si myslim, ze databaza by si mala byt schopna konzistenciu a spravnost udajov udrzat sama... najma pokial sa do nej pristupuje z rozdielnych aplikacii

  • 7. 9. 2017 13:40

    Brainless (neregistrovaný)

    Dost blbe se to skaluje ... proste zabijete CPU/CPUs DB vykonem appl logiky ale co kdyz dojdete do stavu ze to proste uz DB nedava ? Pridavani aplikacnich serveru jde v podstate do "nekonecna".

    Navic kdyz potom narazite na "specialistu" co tu appl. logiku v DB okoreni triggerama ;-) je na pruser zadelano.

  • 7. 9. 2017 14:34

    Pavel Stěhule

    Bottleneck na db jsou SQL příkazy - a těch pustíte stejně, ať používáte jeden aplikáč nebo deset nebo máte logiku v uložených procedurách. Zátěž db serveru je +/- stejná. Pokud máte logiku v uložených procedurách, tak vám odpadne část síťových latencí, ale to gro je stejné.

    Logika v db neznamená, že v db děláte všechno - v db dělám jen manipulaci s daty. O prezentaci, komunikaci se mi stále stará aplikační server.

  • 7. 9. 2017 20:11

    Kolemjdoucí (neregistrovaný)

    Většinou s Vámi souhlasím, ale tohle je naprostá blbost. Chcete mi snad tvrdit že když budu mít v jedné tabulce zadání nějaké výpočetně složité úlohy (řekněme třeba těžení bitcoinů, ať je to dostatečně moderní) a do druhé tabulky budu psát výsledky tak bude zatížení databáze stejné ať už ten výpočet budu provádět přímo v databázi nebo na spoustě aplikačních serverů?

  • 7. 9. 2017 20:41

    Pavel Stěhule

    Viděl jste už někdy, že by se v uložených procedurách těžily bitcoiny? PL/SQL, PL/pgSQL - to jsou jazyky pro lepení SQL - a typicky nejnáročnější výpočetní úloha je počítání ekonomických koeficientů. Bavíme se o databázích, o nějakém účetnictví, evidenci. Nezažil jsem nikdy, že by někdo použil jazyk DBase nebo FoxPra pro nějaké výpočetně náročné úlohy - ray tracing, lámání md5 hesel, atd. Totéž nikdo nebude, se zdravým rozumem, dělat v uložených procedurách. CPU zatížím v momentě, kdy si nechám spočítat skrz SQL agregaci a náhodou mám data v cache v RAM. Jinak většinu času se čeká na IO.

    Co znám, tak výpočetně nejnáročnější operace, které se dělají nad databází a v databázi jsou PostGISové transformace - což je z hlediska PL/SQL naprosto hraniční úloha.

    Pokud se mi v kódu nevyskytují SQL příkazy, nedělám žádné manipulace s daty, tak nepoužívám prostředí uložených procedur.

  • 8. 9. 2017 11:15

    SB (neregistrovaný)

    Není pravdou. Je záhodno navrhnout aplikační server s cacheováním, a tím nemyslím na straně RDB, ale u objektových systémů především z druhé strany ORM, tj. cacheování už seskládaných objektů! Tím nejenže klesne počet čtení a zápisů do RDB, protože je ap. server výhradním uživatelem RDB a objekty klientům poskytuje už hotové, ale také odpadne opakované „sestavování“ „objektů“ v uložených procedurách RDB. Koneckonců proč by se RDB měla snažit simulovat objekty, když to neumí?

  • 6. 9. 2017 13:10

    Boo (neregistrovaný)

    No jasne, neni nad to psat stejnou business logiku 3x v 3 ruznych jazycich ze? Se vzpamatuj, BL v databazi je poklad, jediny zdroj pravdy.

  • 6. 9. 2017 14:08

    lobo (neregistrovaný)

    neni nad to debugovat nejaku komplexnejsiu business logic v PLSQL...zazil som a nikdy viac.
    ku tomu version control, deployment...proste ZLO

  • 6. 9. 2017 15:05

    Karel (neregistrovaný)

    Debuguji PL/SQL poměrně často (nástroj PL/SQL Developer). Co přesně na tom je zlo? Mně ten debugger přijde prakticky stejný jako třebas v C#. Má to step into, step over, breakpointy (včetně podmínek typu zastav se teprve až tenhle breakpoint bude dosažen po sté), zobrazuje hodnoty proměnných, call stack atd. V čem konkrétně ten debugger zaostává za jinými jazyky?

    Version control záleží na editoru. Pokud máte editor provázaný s version control systémem, tak je to stejné jako jakékoliv jiné IDE. Pokud měníte objekty pomocí SQL*Plus nebo jinak napřímo, pak ano, je to špatné.

    Deployment je o tom, jak chcete psát zdrojové kódy. Velké aplikace se běžně píší tak, že všechny .sql soubory prostě v nějakém pořadí spustíte znovu. Prostě místo CREATE TABLE nejprve otestujete, zda už tabulka existuje, a ten CREATE spustíte jen pokud ne. Sloupečky doplňujete tak, že se kouknete do all_tab_columns a podle toho se rozhodnete, zda ten ALTER TABLE je potřeba udělat. Bordel jsem s tím zažil jen ve firmě, která zvlášť držela create scripty a zvlášť upgrade scripty. Tam to byla noční můra v udržování patch version - to aby se něco nezapomnělo sputit, ale zároveň se to nespustilo více než právě jednou. Přitom to není nutné, scripty mohou být snadno znovu spustitelné. A u věcí jako jsou view a package je opakovatelná spustitelnost by default.

  • 8. 9. 2017 11:40

    SB (neregistrovaný)

    Supr, to máte pro Oracle. Jak zvládají debugování další RDB? A jak řeší debugger ORM? Máte totiž tabulky, ale ve skutečnosti potřebujete objekty, lobo se totiž ptal na „business systems“, ne na meteorologickou stanici.

  • 8. 9. 2017 11:57

    Pavel Stěhule

    business systems nemusí znamenat objekty - to je utkvělá myšlenka - s uloženými procedurami se implementují procesy - píši systém, který podporuje procesy, které zákazník potřebuje. Objekty řeším maximálně na úrovni UI. Klíčová slova jsou "data" a "procesy".

    Debuggry už jsou k dispozici pro všechny databáze, které umí uložené procedury. Samozřejmě asi vazba ORM/databáze bude asi vždy skřípat.

    Netvrdím, že to ORM není v určité oblasti standardem - to je asi to nejsmutnější - že v podstatě jeden z nejhorších nápadů v historii IT se takhle prosadil.

  • 11. 9. 2017 12:06

    SB (neregistrovaný)

    Pane Stěhule, melete to samé pořád dokola! Obchodní (business) systémy pracují s entitami, které mají z povahy věci vlastní vnitřní seznamy a vzájemně jsou uspořádány do grafu. Dokumentová DB zvládá ty seznamy, grafová či objektová oboje. RDB ani jednu z těchto dvou vlastností neumí!!! Takže to musíte v oné RDB nějak nasimulovat, a to rozkladem do tabulek a poté jejich opětovným spojováním. Jestli tvrdíte, že v uložených procedurách se obejdete bez ORM, tak se mýlíte, protože právě to dohledávání jednotlivých částí obchodních entit v tabulkách je právě ono ORM, i když v takové primitivní podobě.
    Takže shrnuto: Obchodní systémy jsou grafové, k čemuž opravdu nemusíte užít objekty, ale je to velice výhodné. Naopak jejich uložení do RDB je snad nejhorším možným způsobem uložení a zpracování (myslete si o tom, co chcete). Samotné uložené procedury pak znamenají se svým procedurálním členěním, omezenými datovými strukturami a nízkou abstrakcí uvíznutí v informačním středověku.
    Mimoto zaměňujete příčinu a následek - ORM není jedním z nejhorších nápadů v dějinách IT, to je jen řešení původního průseru, a to použití RDB na grafové systémy.

  • 11. 9. 2017 14:55

    Pavel Stěhule

    Postgres, a dneska skoro všechny moderní RDB mohou fungovat jako dokumentové databáze.
    Nevím, kde jste přišel na to, že všechno musí být v grafech - každá struktura má svoje výhody a nevýhody - grafové databáze velice dobře dokáží zachytit vztahy, ale umožňují vyhledávat cesty - ale velice špatně se na nich počítá účetnictví - a pokud se nevejdete do paměti, tak je to zoufale pomalé.

    Zase na RDB se účetní úlohy počítají skvěle - ale na grafy to fakt není. Nicméně, že by grafy byly nutnou podmínkou v bussiness, toho jsem si opravdu nevšiml - historicky to byly první databáze - posléze se výrazněji prosadily relační databáze - primárně kvůli lepšímu poměru cena/výkon.

    Opravdu záleží, co děláte a co považujete za Bussiness systém. Relační databáze se neprosadily jen kvůli marketingové síle IBM (té možná navzdory). Je to datový model, který přináší určité zjednodušení, na druhou stranu typické socioekonomické úlohy zvládá velmi dobře.

    Informačním středověkem jste mě pobavil :) - podívejte se na historie databází - a čím se začalo.

  • 12. 9. 2017 11:59

    SB (neregistrovaný)

    O použití Postgressu jako dokumentové DB tu nikde řeč nebyla. A máte na mysli předstírání organizace dat do dokumentů, nebo uložení jako dokumenty?
    Nemluvil jsem o uložení v grafech, ale o tom, že obchodní systémy JSOU grafy!
    Rel. model nepřináší žádné zjednodušení, je to jiná organizace dat! A na to zvládání úloh mám mnoha lety podložený vlastní názor.
    Ufff... Nejde o to, čím se začínalo, ale co je teď!

    Asi to tu nemusíme protřepávat, zjevně si nerozumíme, vy se budete věnovat svým RDB, já zase něčemu jinému. Svoje názory jsme řekli.

  • 11. 9. 2017 19:56

    ded.kenedy (neregistrovaný)

    Takže to musíte v oné RDB nějak nasimulovat

    To je nepochopeni RDB. Rozklad do tabulek a jejich skladani nic nesimuluje. To je jen jiny zpusob reprezentace informaci (dat).

    Jestli tvrdíte, že v uložených procedurách se obejdete bez ORM, tak se mýlíte, protože právě to dohledávání jednotlivých částí obchodních entit v tabulkách je právě ono ORM, i když v takové primitivní podobě.

    Neni. ORM (Object-Relational Mapping) je jen zpusob, jak namapovat objekty na relacni data a opacne. Coz je opravdu jeden z nejhorsich napadu. Hlavni problem je v tom, ze v objektovem sveta je objekt (entita) dan svou identitou, mistem prirazenym v pameti. V RDB svete je objekt (entita) dan svymi vlastnostmi (prinejmensim hodnotami prim. klice). Toto na sebe naroubovat a nezblbnout, chce dost prace.

    Pri pouzite ORM typicky vznikaji dva problemy. Nepochopeni objektoveho programovani nebo nepochopeni relacnich db. A pak z toho vznika prasepes s hromadou problemu.

    Obchodní systémy jsou grafové

    Nikoliv nezbytne. Zalezi jenom na tom, jak se na ta data chcete divat. Jestli jako na nejake objekty, ktere jsou spolu provazany (to chces ty), ci na hromadu informaci, ktere se daji ruzne transformovat pomoci par jednoduchych operaci. (to chce p. Stehule)

  • 8. 9. 2017 18:39

    Karel (neregistrovaný)

    On ale zmínil právě PLSQL. To je programovací jazyk implementovaný v Oracle.
    A také psal o "business logic", což je procesní model. S objekty to nemá nic společného. To jsou takové ty diagramy "přijde požadavek na vložení objednávky, ověřím, že zákazník existuje, ověřím, že zákazník nemá credit hold. Pokud má credit hold, tak ověřím, zda požadavek má nastavený příznak ignorování credit holdu..." To snad dnes do objektů necpe nikdo? V čem by tam komu objekty pomohly?

    Pokud použijete ORM, tak necpěte žádnou logiku do databáze. Prostě si při startu aplikačního serveru stáhněte všechna data a udělejte si z nich vlastní model v paměti. ORM vrstva pak bude sloužit jen k tomu, že změny zapíšete do databáze tak, aby si je aplikační server mohl znovu stáhnout po restartu. Pokud nemáte dost paměti, tak si můžete ORM vrstvu upravit tak, aby tahala data jen k těm objektům co právě potřebuje. Plus nějaký garbage collector co je zase uvolní až nebudou potřeba.

    Kombinovat ORM a PLSQL je prostě kravina. Pokud to děláte, tak se střílíte sami do nohy. Pak se nedivte, že to kulhá.

  • 6. 9. 2017 14:15

    Mrkvička (neregistrovaný)

    Otázkou je, zda má smysl nechat přistupovat přímo k DB tři různé jazyky (predikuji, že kvůli třem různým aplikacím) a neudělat raději v tom případě API, které tu logiku interpretuje :-)

    Ano, pokud DB je zároveň API díky svými RULES a má zároveň v sobě nástroje version control a deploy. Jinak je IMHO menší zlo vést BL ve třech jazycích.

  • 6. 9. 2017 17:41

    dannak (neregistrovaný)

    A neni precijen jednodussi a vyhodnejsi vystavit ven nejake API a idealne aplikacni vyvojare do DB vubec nepoustet ? Vetsinou to totiz nekonci nicim dobrym; IFy a LOOPy kam se clovek podiva, indexy pomalu nad kazdym sloupcem, zadnej partitioning, takze pak v DB kvetou tabulky s 1G radkama a "zvetsime pocet threadu, to musi bejt rychlejsi".

    Za me naopak aplikacniky do DB nepustet a jen jim date k dispozici API/sluzby, nacez
    1) si muzete doladit fyzicky model jak potrebujete, resp. jak je to optimalni z pohledu dane DB
    2) kdyz to situace vyzaduje, upravit/ladit SQL aniz by se muselo testovat X aplikaci
    3) pokud to jde, muzete aplikaci udelat asynchronni - z aplikace rvat pozadavky do fronty a tu pak zpracovavat davkove
    4) oblibeny "univerzalni dotaz" (neni zrejme, co bude na vstupu a tedy podle ceho se bude filtrovat, takove to "column = :x or :x is null") nahradit treba nejakou inteligentni procedurou, ktera posklada dotaz podle potreby atp.

  • 6. 9. 2017 17:58

    Pavel Stěhule

    Proč, když to databáze umějí a správně napsaná aplikace nad SP bude vždy rychlejší - a (můj osobní názor) čitelnější - SP vás donutí do dekompozice - databázové věci řeším na databázi, prezentační, komunikační v aplikaci. Navíc SP vám umožní zabezpečení, které v aplikaci nikdy nemůžete dosáhnout.
    K dispozici jsou debuggery, profilery, verzování, deployment - není rozdíl od jakéhokoliv programování. U Oracle PL/SQL se používá jeden z nejlepších a velice dobře navržených programovacích jazyků - je to založené na ADĚ - i když to Oracle trochu zkryplil.
    Problém jsou programátoři - s Javou většinou začínali junioři - lidi s čistou hlavou. SP historicky psali vývojáři odrostlí na Cobolu, DBase, FoxPro - a nikdo jim dostatečně důrazně nevysvětlil, jak se má psát - prasí se i v Javě a to většina programátorů dneska nemá návyky z Basicu nebo C. Metodologie vývoje v SP jsou k dispozici od konce devadesátých let - ale v korporátech kvalita kódu je to poslední, co se řeší - přebírá se jakýkoliv kód, který nepadá - a pak většina programátorů nemá motivaci, znalosti, čas, zkušenosti psát čistě.
    V týmu co jsem, chlapi přecházeli z PCFandu na Oracle - bez jakýho-koliv proškolení a to musí být vidět. Tak je to skoro všude, kde jsem byl, kde jsem se bavil s programátory.

  • 6. 9. 2017 18:43

    qwertz (neregistrovaný)

    Klasický problém rozhodování mezi variabilitou řešení a nějakým výkonovým bonusem, o kterém se dlouze můžeme bavit, jestli stojí za to. Jak to funguje v praxi?
    Třeba takový SAP zákazníkům oznámil, že od verze S/4 prostě budou mít natvrdo HANA a kdo dosud spokojeně provozoval třeba Oracle, může si jít trhnout nohou. Jakmile těch databází máte víc, začne mít význam otázka, zda je vůbec chytré mít pro každou aplikaci databázi od jiného dodavatele, protože ten bordel je pak radost spravovat.

    Takže když nemáte business logic v databázi, můžete se jednou prostě rozhodnout, že místo v Oracle budete provozovat MS SQL nebo třeba ten Postgress, klient v ideálním případě jen změní ODBC driver a jede se dál. Divil byste se kolik drahých a profesionálních řešení takto funguje, protože zákazník si chce databázi volit sám.

  • 6. 9. 2017 18:55

    Pavel Stěhule

    Je hromada aplikací u kterých je to jedno - ale u databázově, datově náročných aplikací to nemůže fungovat - každá databáze má trochu jiné charakteristiky, co se týče chování při UPDATE, DELETE, SELECTech, mají jinou implementaci zámků -- určitě jsou aplikace, které mohou běžet jak na Oracle, tak na MySQL - ale pak, proč bych si instaloval Oracle? Ty jednoduché dotazy, které vygeneruje ORM budou stejně dobře běžet na Oracle, tak na MySQL. A InnoDB engine při jednoduchých operacích bez problémů může zastoupit Oracle. Spolehlivost dostupnost je stejná. ORM dokáže skrýt rozdíly v syntaxi, ale logika zůstává stejná.
    Určitě nepochybuji, že takových řešení je hodně - a cena nesouvisí s kvalitou. Nicméně pak máte aplikace, které počítají mzdy pro pár desítek tisíc lidí několik hodin a po celou tu dobu intenzivně vytěžují hw. Přičemž po optimalizaci by běžely několik málo minut - někde to nemá smysl řešit - někde můžete mít problémy s efektivitou práce se systémem - odpovídající železo může být extrémně drahé atd.

  • 6. 9. 2017 19:14

    qwertz (neregistrovaný)

    Tak si tu otázku otočte. kolik takových brutálně výpočteních aplikací je? Naprosté minimum. Většina databází jen zapisuje transakce a odpovídá na různě komplikované SELECTy. Rozdílu ve výkonu si nikdo nevšimne. Zato nutnosti koupit licenci na ORACLE, když má firma volné licence k MSSQL, to už za povšimnustí stojí. Stejně jako povinnost najednou provozovat jinou databázi než zbytek firmy. V mém předchozím zaměstnání jsme měli desítky aplikací, hromadu Oracle databází, lidi co tu tento typ DB dobře znají, a všechno provozováno na clusteru s RedHatem. No a když pak najednou nějaký inteligent vyrobil nebo nakoupil nějaký super SW, který měl logiku zadrátovanou v MSSQL a nešel na ničem jiném provozovat (ono stačí když má aplikace driver jen pro jednu DB), najednou jsme museli řešit, kdo to bude supportovat, kde se to bude provozovat (na RedHat/Oracle Dlusetru asi těžko), k tomu nějaké to školení (protože to bylo první MSSQL ve firmě) a takhle bychom mohli pokračovat. Situace totálně k hovnu. Proto business logic do DB, není li to nezbytně nutné, fakt ne.

    BTW neumím posoudit zda má MySQL stejné možnosti pro mission critical naazení jako ORACLE, nicméně o tom fakt pochybuji.

  • 6. 9. 2017 19:31

    Pavel Stěhule

    Mission critical je buzword - pokud se jedná o opravdu kritické aplikace, tak tam asi nemá co dělat klasická relační db - a zbytek - dostupnost db je dneska +/- stejná - většinu výpadků způsobí síť, lidská chyba nebo problémy v aplikačním sw. Včera jsem se bavil s lidmi z jedné opravdu velké fabriky - a za problémy mohl nový planner v Oracle 12.

    Jsou aplikace, kde procky nemají velký význam. Jsou organizace, prostředí, mix použitých licencí, kde mohou způsobit problémy - zrovna tak jsou oraganizace, které mají logiku v DB a jsou spokojení.

  • 6. 9. 2017 20:22

    qwertz (neregistrovaný)

    Mission critical je cokoli, kde hodinový výpadek způsobí "velké ztráty". Skutečně nechápu, proč by u systému, kde výpadek 1hod je zcela nepřijatelný a maintenance se plánuje jednou ročně na svátky, neměla být relační databáze. V drtivé většině těchto případů je totiž použita právě relační databáze.

  • 6. 9. 2017 20:34

    Pavel Stěhule

    Pak nasazení PostgreSQL nebo MySQL je stejně dobré jako Oracle - znám zákazníky, kde by jejich výpadek způsobil "velké ztráty" - samozřejmě, že Oracle je v této oblasti víc zaháčkovaný - v korporátním byznysu je od osmdesátých let - MySQL od konce devadesátých a Postgres po roce 2005 - zejména pak po roce 2010, v reakci na krizi a úspory v IT, kdy Pg začaly více používat korporace. V Japonsku, a např. i ve fabrikách, které zde vlastní japonské korporace se Pg relativně dlouho používá pro řízení linek, řízení provozu. Skype jede nad PostgreSQL. Facebook, Google nad MySQL.

  • 6. 9. 2017 21:34

    qwertz (neregistrovaný)

    Toto nijak nerozporuji. Hlavní rozdíl mezi Oracle vs. MySQL + Postgres bude celý ten cirkus okolo placeného supportu, certifikací, garancí apod., které ovšem tvoří důležitou součást rozhodování v korporátech. Sehnat někoho, kdo vám smluvně něco garantuje bude asi výrazně snazší s Oraclem.

    To že velké Internetové firmy používají OSS databáze svědčí o tom, že to jsou možná lepší řešení než proprietární Oracle. Když na to máte prostředky a lidi, můžete si to tunit dle libosti, a nejste závislý na tom co vám chlapci z Oraclu milostivě sdělí a dovolí. Ta firma má horší pověst než Microsoft :-D

  • 7. 9. 2017 7:14

    . . (neregistrovaný)

    názory hezké, poté příjde požadavek na auditing, goverance, nějaké to ISO a jiné korporátní úžasnosti a vaše MySQL,Postgres s REST API či mnoha napojenými aplikace neuspěje.

    Postrgres pořád trpí v HA, integrace s LDAP není bezproblémová, dělat snapshoty není ono, tady třeba Oracle, Teradata, db2 (či jak to pojmenovali letos) vítězí a není to srovnatelné s open source.

    Tím nebojuji za druhou stranu, mám tyhle open source databáze rád, nepotřebuji certifikace, velké manuály a vše si nastuduji ze zdrojových kódů, problémy se dají řešit přímo s vývojáři a ne indickou podporou. Jen někdy objektivní rozhodování právě odůvodněně končí u těhle velkých a drahých zmetků.

    Důvod proč internetové firmy používají OSS je nepřítomnost státní regulace, GDPR ukáže jak si na tom OSS stojí. U těch opravdu velkých společností došlo k vytvoření vlastních technologií, které už nejsou otevřené a drží si je pod pokličkou, do komunity uvolňují jen drobky, mluvím o Googlu, Facebooku a dalších.

  • 7. 9. 2017 8:52

    Pavel Stěhule

    Pokud legislativa vyžaduje Oracle, tak s tím asi nikdo nic nenadělá - taky hromada interních předpisů v korporátním prostředí jsou psaný pro Oracle. Na druhou stranu některé certifikace prorazilo EDB a ještě Sun. Data v pg je možné zašifrovat, existuje extenze pg_audit, kterou lze použít, pokud je to vyžadováno. HA lze realizovat několika možnými technikami - na Slovenské poště jsem viděl řešení na bázi NetApp - obdobu Oracle. Globální eshopy, které běží nad Postgresem, běžně dávají k dispozici svoje HA řešení (zelando/patroni).

    Co myslíte pod pojmem snapshot?

  • 7. 9. 2017 9:27

    martinus (neregistrovaný)

    Osobne nemam vylozene spatne zkusenosti s oracle supportem, nehlede na to, ze ho zas tak casto nepotrebuju. Vse je o lidech. Pokud ma firma Oracle DB (z jakehokoli duvodu), tak k nemu musi mit i opravdu zkuseneho DBA, ktery dokaze nejen rozsirovat datafile. To stejne plati i o oracle pl/sql vyvojarich. Ono kdyby si kazdy precetl developers guide, tak tam se docte hodne uzitecnych informaci co a jak a kde pouzit, aby ta aplikace slapala dobre. Za me je Oracle naprosto vynikajici databaze, ktera nabizi neskutecne mnoho moznosti co se administrace i vyvoje tyce. (samozrejme ze administruji prevazne Oracle, takze proto ta chvala ;-)

  • 7. 9. 2017 11:12

    Karel (neregistrovaný)

    Ne, tyhle velké firmy nepoužívají Oracle zejména kvůli ceně licencí. Pokud jste velká fabrika, tak si na ten Oracle za milion dolarů vyděláte. Pokud jste Facebook, tak už je pro vás výhodnější si najmout armádu lidí, než platit Oracle za licence stovky milionů dolarů.

    Zkrátka proti sobě bojují dvě křivky: mzdové náklady na vlastní lidi a fakt, že Oracle má licence za procesor. Od jistého počtu procesorů se vám tudíž vyplatí mít vlastní lidi, co budou udržovat něco levnějšího. Do jistého počtu je naopak levnější držet si jediného pičičmundu DBA a zaplatit si jednou za šest let licenci Oracle.

  • 7. 9. 2017 11:53

    martinus (neregistrovaný)

    Obecne by se s tim nazorem dalo i souhlasit. Jsme se tedy trosku v diskuzi odchylili od tematu clanku, ale ja mam pocit, jako by hodne lidi v DB videlo pouze ty ulozene tabulky a nic vic. Oracle je drahy, ale taky za tu cenu nabizi opravdu hodne a je jen na firme, aby dokazala vsechny feature vyuzit, coz se (podle me) v 95% nedeje, ale to neni problem Oracle. Uz jenom to, ze kazda feature ma tisicistrankovou doc o necem svedci a to si dovolim tvrdit, ze Oracle ma zdaleka, zdaleka nejlepsi dokumentaci (pisu o DB dokumentaci).

  • 7. 9. 2017 14:25

    SB (neregistrovaný)

    Jestli má vlastnost tisícistránkový popis, tak je to především důkazem, že soudruzi z Oracle to trochu překombinovali (připomínám KISS).

  • 7. 9. 2017 14:37

    martinus (neregistrovaný)

    Bylo to mysleno tak, ze je veliky rozdil v dokumentacich pro dany produkt. Co jsem se studoval dokumentaci k mssql,db2, mysql, tak vsude se tak nejak skace od niceho k nicemu. V oracle dokumentaci je vse krasne a jednoduse popsano a vysvetleno, ma to hlavu a patu a snadno se v tom orientuje.

  • 7. 9. 2017 12:05

    Ivan (neregistrovaný)

    Jeste je tu jeden faktor. Oracle je totalne zabugovane databaze. Opravdu jsou v stovky chyb ktere nikdo neresi. Pokud ale postupujete podle booku (guidelines) tak na tyto chyby prakticky nikdy nenarazite. A na kazdy problem, ma Oracle reseni. Chete HA, mate sadu reseni na HA. Chcete replikaci, sifrovani, messaging, ... na vsechno existuje guideline, technologie, priklady. Jakmile ale zkusite neco "originalniho", tak tezce pohorite.

    Postgre, na to jde uplne obracene: "Mas roota? Tak si pomuz sam".

    Samozrejme se ten prvni pristup vyce vyhovuje velkym korporacim, ktere mohou ze dne na den prenest podporu nekam do Asie, a porad maji jistotu ze je v nejhorsim pripade z problemu dostane Oracle support. Zatimco druhy pristup vyhovuje start-upum jako je Google anebo Facebook, ktere jsou zvykle spolehat na vlastni zamestnance.

  • 7. 9. 2017 13:32

    SB (neregistrovaný)

    Tohle jsem zažil v jedné známé, čistě české, větší firmě (a nepochybuju o tom, že to tam tak chodí doteď): Systém se nasazoval u zákazníků, přičemž každý měl jiný typ databáze - všechny draze licencované, všechny stály za hovno (2 z nich tu už padly). Takže o databázi bylo rozhodnuto zákazníkem, systém tedy musel umět pracovat se všemi. Vzhledem k tomu, že aplikační logika byla z velké části nadrátovaná do DB, všechno se dělalo 3krát, protože, jak víme, databáze nejsou kompatibilní nejen v PL/SQL, ale často ani jen v SQL. Každá z nich se ladila jinak (a to těžce). Umrdalo se na tom UKRUTNÉHO času, a když říkám UKRUTNÉHO, tak tím myslím UKRUTNÉHO. Triviální operace řešitelné ve vyšším jazyku se složitě patlaly v procedurální DB. V podstatě se většinu času jen řešilo, jak co v PL/SQL spočítat a jak to potom opravit, když to bylo blbě. O vyjadřovacích schopnostech PL/SQL se tu předpokládám nemusím rozšiřovat. Vzhledem k tomu, že systém byl podstatou objektový, je jasné, jak „jednoduché“ bylo dělat změny v objektech rozstrkaných do tabulí. Nějakou konzistenci dat při čtení objektů z více tabulek více připojenými klienty tu ani nezmiňuju. Do toho každý klient přistupoval do DB extra a řešil si konzistenci (tím nemyslím pár posraných cizích klíčů) sám.
    Správným řešením je nechat DB jako ukládadlo, nad to aplikační server, který si jako jediný a sám pořeší persistenci (třeba nad několika databázemi i různých typů, či službami (HTTP), prostě zdroji, nak kterými řeší konzistenci), a přes API aplikačního serveru nechat komunikovat dohodnutým protokolem klientské aplikace (v jakékoliv technologii; u objektových systémů pochopitelně objektově). TEPRVE AŽ při potřebě optimalizace vyhledávacích či výpočetních operací jich pár zadrátovat do DB. Drtivá většina operací typu „otevři formulář s fakturou“ nebo „překontroluj fakturu“ žádnou optimalizaci nepotřebuje, naopak řešit takovouto vysokoúrovňovou úlohu v DB je PEKLO!!!
    Když slyším, jak se někdo snaží 300 000 řádků sraček překydat do jiného chlívku, je mi na blití. Ale kdo chce kam, pomozme mu tam.

  • 7. 9. 2017 14:37

    Pavel Stěhule

    PL/SQL je ADA - a ADA je velice kvalitní jazyk - tam asi problém není - jedině v programátorech.

    Myslím si, že největší problém je, že se programátoři snaží v relačních db programovat objektově - to nejde (jsou to dva rozdílné světy) - a pak jsou z toho zbytečně frustrovaní - a pokus o objektové programování v prostředí, které není z principu objektové, nemůže nikdy dopadnout dobře.

  • 7. 9. 2017 23:52

    nick1 (neregistrovaný)

    "systém byl podstatou objektový" ... no jo, a co jineho jste pak cekal od relacni databaze? od kdy je PL/SQL objektovy jazyk, potazmo SQL? zamyslel jste se nad tim vubec?

  • 8. 9. 2017 10:50

    SB (neregistrovaný)

    Pane nick1, my se nyní nebavíme o skutečnosti, že objektový systém v relační DB je složitý, nyní řešíme, kde má ležet aplikační logika, zda v DB, nebo vyšší vrstvě (bez ohledu na typ DB). To, že v dané firmě o jiných typech DB nemají ponětí a že je práce s RDB do aplikací tak zadrátovaná, že je stejně nenahraditelná, je věcí jinou. Mimoto připomínám, že RDB pro objektové systémy je dodnes považována za standard(!!!), ale já nejsem člověkem, kterému byste to měl vysvětlovat!

  • 7. 9. 2017 10:47

    dannak (neregistrovaný)

    Myslim, ze tady doslo k nedorozumeni, ja jsem prave myslel nejake napr. PLSQL API :) Tzn. co jen jde a dava to smysl, zpracovavat primo v DB a nahoru do aplikacni vrstvy vracet idealne jen vysledky a pokud to jen jde, neumoznovat primy pristup k tabulkam a pohledum.
    Samzorejme situaci, kdy zeshora budou volat v cyklu sluzbu misto jeji davkove verzy, tohle nevyresi, to je zas problem na jine urovni. Ale nekde zacit je potreba :)
    A jeste jeden muj postreh, nemuzu se obranit pocitu, ze spousta vyvojaru zcela nepochopila (a tedy nedocenila) rozdil/vyhodu RDBMS a tak je pouzivaji spis jako KV-store.

  • 7. 9. 2017 12:54

    strepty (neregistrovaný)

    dannak "spousta vyvojaru zcela nepochopila (a tedy nedocenila) rozdil/vyhodu RDBMS a tak je pouzivaji spis jako KV-store"
    Mne bolo Nemcami vysvetlene ze pouzivaju tabulky bez vezieb preto ze ked bolo treba nieco v poprepajanej databaze zmenit tvrdo narazili tak napisali pravidlo ziadne vezby BODKA. Vezby su presunute do logiky programu. No co s nimi :-)

  • 7. 9. 2017 14:33

    dannak (neregistrovaný)

    ...a pak se do tech dat sahne jinym kanalem a je po pravidlech/con­straintech :/ jedna apka neco zapise a druha na tom pak vesele zhavaruje :)

  • 8. 9. 2017 12:14

    SB (neregistrovaný)

    V okamžiku, kdy konzistenci řešíte mimo DB, tak je snad pochopitelné, že do té DB nebudete jebat kdekým ze všech stran, ale jen přes vrstvu, která to řeší.

  • 8. 9. 2017 12:10

    SB (neregistrovaný)

    „Samzorejme situaci, kdy zeshora budou volat v cyklu sluzbu misto jeji davkove verzy, tohle nevyresi“
    Nikde není napsáno, že nemůžete mít vedle operace pro jednotku i dávkovou operaci.

  • 8. 9. 2017 11:59

    SB (neregistrovaný)

    „když to databáze umějí“ - Bavíme se tu o obchodních systémech, což jsou snad všechny objektové, ne relační.
    „správně napsaná aplikace nad SP bude vždy rychlejší“ - To nemusí být ale vůbec pravdou.
    „a (můj osobní názor) čitelnější“ - To už vůbec ne.
    „SP vás donutí do dekompozice“ - To jako do procedur? S možností vzájemné komunikace přes primitivní hodnoty, nebo až tabulky? Chcete tím stavět dekompozici do objektů na stejnou úroveň abstrakce?
    „Navíc SP vám umožní zabezpečení, které v aplikaci nikdy nemůžete dosáhnout.“ - :O To je jaké zabezpečení???
    „U Oracle PL/SQL se používá jeden z nejlepších a velice dobře navržených programovacích jazyků - je to založené na ADĚ“ - Dosahuje to alespoň abstrakce Javy? A které další RDB to ještě mají?

  • 8. 9. 2017 12:57

    Pavel Stěhule

    To je ta Vaše fixace na OOP (ta z Vás úplně tryská :)) - viz wiki ADA language. Úroveň abstrakce se musí držet rozumně - když píšete docházkový systém a použijete jej jako účetnictví, tak to nedopadá dobře. Postgres PL/pgSQL vychází z PL/SQL Oracle - DB2, a MySQL používají PSM - což je ansi SQL standard (funkčně podobné PL/SQL). Nejslabší je T-SQL u MS.

    Žádný z těchto jazyků není objektový! Což je logické - relační db nejsou objektové db.

    Co se týče zabezpečení - s uloženými procedurami mohu mít kontrolovaný přístup k citlivým údajům, nemusím se bát, že mi někdo obejde aplikaci, atd. Mohu omezit negativní impakt v případě kompromitování aplikačního účtu.

  • 8. 9. 2017 14:26

    . . (neregistrovaný)

    "SB" je webový vývojář, používá ORM a nemá moc přehled z jiného světa. Tím ho nekritizuji, jen by bylo vhodné to zmínit, pokud se pletu, rád mě opraví.

    Veškerý tyhle objektové a ORM srandy končí třeba v momentě, kdy potřebuji obyčejný data masking, nechat to na doménové vrstvě není dobrý nápad a nepatří tam, řada úniků to jen dokazuje.

    Představa, že v aplikaci modeluji byznys procesy mě skoro děsí, stejně tak, když potřebuji řádně rozložit náročné výpočty napříč clusterem, opět se to na aplikační úrovni moc řešit nedá. K tomu jsou určené procedury.

    V řadě případů to je ale kanón na vrabce a nehodí se k nasazení, jinde to je skoro nutnost a potřebuji tyhle enterprise warehousy. Článek příjemně popisuje jeden proces změny, vynikající, to ale neznamená, že správná volba je jen jedna databáze/techno­logie, naopak její správný výběr je důležitý, ne každá se na vše hodí.

  • 11. 9. 2017 12:25

    SB (neregistrovaný)

    Tak tomu říkejte grafový systém, jak činím v nových příspěvcích, abych vás neiritoval. U (jednoduché) docházky se to snese, ale co u složitých systémů? Jak se u nich má graf k uložení do RDB? Jak se změní odpovědi na moje otázky?

    To je možné, důsledkem ovšem je, že tím slučujete persistentní a aplikační vrstvu, takže, jak už se tu probíralo, umísťujete aplikační logiku do DB, místo abyste to (včetně bezpečnosti) nechal řešit ap. server.

  • 8. 9. 2017 11:22

    SB (neregistrovaný)

    Proč 3x??? Stačí jednou v aplikačním serveru, se kterým komunikují klienty. Řešení, kdy každý klient extra buší do DB, je proti tomu příliš závislé (DB, a to ještě konkrétní typ) a nepřizpůsobitelné (např. bez možnosti více zdrojů s distribuovanými transakcemi, ...).