po dlouhé době okurkové sezony tu a tam prokládané tragediema typu https://www.root.cz/clanky/analogovy-zaznam-analogoveho-signalu-na-digitalnim-pocitaci/ BOMBA článek - víc k tomu nelze dodat.
Moc pěkný článek. Oracle používáme a zatím si neumím představit, že bychom u hlavního projektu (ISKN) přešli na něco jiného. Využíváme hodně vlastností Oracle jako je Partitioning, Spatial, Virtual Private Database, RAC, XML DB, Advanced Security apod., což se na něco jiného migruje blbě (ale zase to přináší dobré vlastnosti, funkce a zjednodušení). U nás je ještě ten problém, že aplikace jede v Oracle Forms a Reports, což v podstatě jinou DB vylučuje.
Využívali jste nějaké takové speciality? Pokud ano, jak jste to při převodu řešili? Věřím tomu, že pokud se používají jen standardní věci, základní SQL, pohledy, package, tak to určitě rozumně migrovat jde (i když práci to dá).
Je to vždy dilema - když si pořídím produkt, tak ho využít do mrtě, ale za cenu, že se od něj budu hůře odpoutávat? Nebo na něm moc závislý nebýt, ale zase budu muset řešit spoustu věcí, které ten produkt sám umí (a určitě lépe).
ISKN musi bezet na Oracle, protoze penize :-( Ale abych byl uprimny, centralni DB bezet na Oracle muze, ale nechapu, proc lokalni DB pro obnuvu bezely (aktualni stav nevim) naOracle take, to tedy nechapu. A casto diky neschopnosti pridelenych pracovniku byly v takovem strasnem stavu, ze by to zvladlo i kdecos jineho. Ale Oracle neni nejvetsi problem ISKN, tam je treba resit mnoho jinych koncepcnich zalezitosti.
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.
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.
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ů?
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.
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í?
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.
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.
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.
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.
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.
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)
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á.
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.
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.
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.
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.
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.
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.
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í.
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.
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.
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
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.
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?
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 ;-)
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.
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).
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.
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.
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.
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.
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!
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.
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 :-)
„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í?
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.
"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/technologie, naopak její správný výběr je důležitý, ne každá se na vše hodí.
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.
:) - některé zkušenosti/potřeby z tohoto projektu se promítly do nové verze Orafce, kde jsou částečně emulovány i některé systémové pohledy Oracle, což jsem původně nechtěl dělat - nicméně Orafce se opravdu primárně používá při portacích z Oracle a tato funkcionalita částečně pomůže.
Co se týče SQL - tam se moc inspirovat nejde - pro Postgres (nikoliv pro EBD) je cíl ANSI SQL - a tam je hromada možností - temporální tabulky, lepší podpora JSONu, .. Některé užitečné vlastnosti, které má Oracle, a které by se hodily ať už při samotném použití Postgresu nebo při portaci jsou v ToDo (jelikož zatím se musí používat workaroundy). Tady primárně to jsou schéma variables a autonomní transakce - kdyby byly peníze na vývoj a čas, tak bych se do toho pustil - pracnost na schéma variables odhaduji na půl roku relativně intenzivního vývoje - a na to nejsou zdroje.
Interní věci - tam se spíš přebírá z výzkumu - roky se dělá na hw akceleraci, poslední dva roky na integraci JITu. Tam je obecně velmi pomalý postup už při psaní prototypu (i výzkum není nějak daleko) - a výsledky nejsou zas až tak fascinující - pro běžný provoz zrychlení pár desítek procent nežene vývojáře k rychlejší akceptaci - přičemž reálně uživatelé preferují stabilitu a spolehlivost před novými vlastnostmi.
Něco podobného jsem také řešil, ikdyž požadavek byl ještě silnější, a to udělat ze závislé (Informix) SQL aplikace plně platformově nezávislou aplikaci, tak aby mohla být provozována na různých RDBS. Měla podobný rozsah cca 200 tabulek, cca 2000 vložených procedur. Základem bylo vydefinovat povolené (ANSI SQL) struktury a techniky, které víceméně podporují všechny známe RDBS. Ano implicitní datové konverze jsou rozdílné skoro všude, daĺe jou rozdíly i v implicitních funkcích, a třeba v identitách, atd.. Následně se zavedl vlastní SQL meta kód a veškerý zdrojový kód se transformoval do tohoto meta kódu standardně uloženém ve verzovacím systému (GIT) s ostatním kódem. Následné se vytvoříly vlastní zavaděče, které tento meta kód transformovaly podle nasazeného RDBS. Vznikl tež nový validator-checker, který omezil programátory v tom, jaké konstrukce mohou v meta SQL používat, Teda bylo s tím docela dost práce to všechno předělat....přeji hodně štestí ve vašem snažení, budete ho potřebovat....
Dekuji z skvely clanek. Koukal jsem na ten ora2pg a ono to ani neni moc velke. Par tisic radku v Perlu. Dost me prekvapilo kolik prace to dokaze udelat. Cas od casu se me nekdo zepta na podobny problem, a zda se ze vznikaji komercni produkty, ktere resi podobny problem, tyto produkty ale jdou narocnejsi cestou, preparsuji PL/SQL, prevedou ho na AST a pak ze stromu generuji jiny dialekt SQL. A tady si trochu prihreju polivcicku, tohle je IMHO nejlepsi open-source parser PL/SQL jaky je k dispozici https://github.com/ibre5041/plsql-parser, adresar tests navic obsahuje dost hnusne corner-case pripady.
Podle slov autora byl Ora2pg rychlý hack, kdy šlo hlavně o to, jednoduše zmigrovat strukturu tabulek a data z Oracle do Postgresu - a šlo o to to udělat co nejjednodušeji a co nejrychleji. Potom se na to nabalovaly další věci a více-méně pro samotného autora šokující, co všechno se dá udělat sadou regulárů.
Reguláry fungují, ale není to kdoví jak rychlé - 200K řádků se převádí cca 100 minut (pořád je to použitelné). Tipnul bych si, že pokud by se použilo AST, tak by odpovídající migrace trvala 10 minut. Hlavně by asi kód Ora2pg byl výrazně čitelnější. To AST v plánu je - ale zatím autor nenarazil na limity stávajícího řešení, takže chce dokud to jde, pokračovat ve stávajícím kódu - a privátně si buduje testovací bázi, vůči které pak bude psát Ora2pg 2, která už bude na AST. Nevím, jestli to vyjde, ale předběžně se bavím s Gillesem, že by přijel na P2D2 2018 příští rok.
Pro tuhle aplikaci je to jediná šance. Oracle, kdysi poskytoval malým vývojářům velice zajímavé slevy, takže jejich produkty byly i nad Oraclem konkurence schopné. Ochota Oracle tyto slevy poskytovat výrazně klesá a bez nich je ten produkt neprodejný. Stejně tak rostou náklady na licence - produkt je určený pro prostředí, kde nejsou velké marže, dneska už je i docela konkurence a cena hraje primární roli. Takže buďto migrace do Postgresu nebo konec - a autoři mají ještě 15 let do důchodu. Cenovou alternativou by byla migrace do Oracle cloudu, ale to je nestravitelné pro významné uživatele té aplikace.
Migrace by byla výrazně jednodušší, kdyby ta aplikace byla čistě napsaná - pak je to skoro trivka, a dá se provést za několik málo týdnů i v takovém rozsahu. Teď se tam půl roku dělá refaktoring, který se předchozích 15 let nikdy nedělal.
muj prispevek mel byt spis takovym obdivem, ze se nekdo do takovych akci pousti. Jak popisujete v clanku, je v tom spousta zaludnosti a nebezpeci ciha na kazdem kroku. Projektovy manager neceho takovehy bych fakt byt nechtel.
Na druhe strane obdivuji, ze se patrne podarilo firme vysvetlit, ze to bude adekvatni dobu trvat a taky stat. Nemam predstavu co Oracle po tech zakaznikach dneska chce, ale kdyz jdou zakaznici do takovych migraci, tak to musi byt asi sila.
Taky chapu, ze ta migrace je i sance vylepsit firemni procesy a vubec IT inrastrukturu. Presto mam pocit, ze se nejde nejak dal ve vyvoji, jen se vymeni jeden DB.stroj za jiny ale paradigma zustava.Jak i zde v diskuzi zazniva, pocituji zvyseny tlak na moznost, pouzivat aplikaci pod vice databazemi. Jak spravne upozornujete, je to problem a jestlize napasovana aplikace bezela 15 let pod Oracle a ted pobezi 15 let pod Pg tak neni co resit. My mame u nas ve firme situaci , ze standardiziovana aplikace by mela bezet pod 'libovolnou' databazi a my se snazime to resit jako SAP s HANA => investovat do HW :-)
Je to malá firma, která má jediný produkt a nemá moc alternativ - na druhou stranu tam není dosazený management - firmu si řídí vlastníci, kteří jsou docela v obraze, a technicky na tom jsou také dobře - jsou motivováni tu migraci udělat. Ve větších korporacích je to něco úplně jiného - hromada řečí - a viditelný progres je za tři, čtyři roky - není to značka, která je jim známá, a ošahání si nové (pro ně neznámé) databáze trvá - není to problém jenom managementu, ale i adminů, vývojářů. Pokud to není Oracle, tak je to pro ně podezřelé - ale už je tu pár podařených projektů v oblastech, kde by mne před 5 roky nenapadlo, že by se Pg mohl nasadit.
A čo tak popisať ako je riešený COMMIT, rollback to savepoint, autonomna transakcia....
Niekde nejaky kravatak napisal ze je to izy... ved naco je rollback ved exception samo urobi rollback.. Inaksie este asi 100 dalsich zaujimavosti popisanych vlastnosti.. Napr. retazec NULL a "" nie je to iste, ale v oracle je to nulll, to znamená prekopat celu logiku....
ROLLBACKy, SAVEPOINTy jsou v Postgresu implicitní - dané strukturou - většinou stačí přizpůsobit blokovou strukturu kódu a pak v Postgresu je zakomentovat (je to v ToDo Ora2pg). COMMIT je v Postgresu také implicitní - v podstatě je to aplikační záležitost - pokud nedojde k chybě, tak při autocommitu se se commituje automaticky.
Záleží na důvodu proč v kódu používáte COMMIT - ve většině případů jej stačí pro migraci do Postgresu opět zakomentovat (Ora2pg to při migraci může udělat). V aplikaci, kterou jsem migroval se pouze v jediném případě nějak aktivně používal opakovaný COMMIT v procedůře - a bylo to z důvodu pádů příliš velkých transakcí na Oracle - což v Postgresu není problém, takže vnitřní COMMIT v proceduře jsme v Postgresu mohli ignorovat.
Ora2pg umí vyřešit i bezpečné porovnání na prázdný řetězec - nicméně výsledný výraz je výrazně delší, takže je jednoduší opravit kód na Oracle, tak aby se mohl 1:1 použít i na Postgresu - tj na Oracle nepoužívat prázdné řetězce, ale pouze NULL (v IF a pro jiné datové typy než je varchar). Je to asi masivní změna, ale dá se to udělat hromadně - takže i při statisících řádcích je to práce na pár pracovních dnů.
Netvrdím, že migrace aplikace, která často používá silně Oraclovské obraty je na lusknutí prstu - ale je realizovatelná - a kromě toho, že se připraví port do Pg, tak se i hlavně zásadně pročistí kód v PL/SQL.
Pokud by kód v PL/SQL (Oracle) byl napsaný podle moderních best practicies, tak pak migrace je docela jednoduchá. Když se použivají deprecated výrazy, obsolete funkce, tak je to výrazně pracnější - prvně je potřeba modernizovat (vyčistit) kód v PL/SQL a pak poté provést migraci.
V některých případech to může být pro uživatele, vývojáře příliš drahé - pak je alternativou EDB, kde jsou alespoň poloviční a nižší licenční náklady a je tam vrstva, která emuluje Oracle, anebo aplikace musí dožít na Oracle.
"pak je alternativou EDB"
Nevím, jak se situace změnila, ale naše firma si před asi 6 roky myslela to samé, ale EDB byla tak nespolehlivá a plná chyb (a stejne neuměla vse co oracle a přechod byl velmi bolestivý), že ten přechod rovnou na čistý postgres (na který se nakonec stejně přešlo) by bývala byla lepší varianta.
EDB je v jádru Postgres - vrstva kompatibility s Oraclem není příliš tlustá - úplně emulovat Oracle nelze - ale nejčastější balíčky a PL/SQL emulují v zásadě dobře. Určitě je tam nějaký posun. Určitě ne každá aplikace poběží bez úprav na EDB, na druhou stranu těch úprav nemusí být zase až tak hodně.
Obecně platí pravidlo, že by funkce neměly obalovat jednoduché SQL příkazy. Zvlášť, pokud se tyto funkce volají z komplikovanějších SELECTů. Jednak se tím snižuje prostor pro optimalizaci (SQL se uvnitř funkce optimalizuje izolovaně). Hlavně ale dochází ke generování a počítání velkého množství zanořených SQL příkazů, a to má dost velkou režii
Jeste dodam jeden postreh. V SQL se neda dost dobre strukturovane programovat. A kdo chce za kazdou cenu nejak sdilet kod, tak prave vklada SQL do funkci, ktere nasledne vola z jineho SQL. V Postgre s tim az tak velky problem neni, ale v Oracle to rekurzivni SQL pouziva jine SCN a vidi i data, ktere nadrazene SQL jeste videt nemuze (phantom read). Takze nejenze je to pomale, ale navic to neni logicky spravne, a ve vice-uzivatelskem prostredi vam takovy dotaz muze vratit totalni bramboracku.
To je dobrá připomínka - díky za ní.
V SQL prostředí ten nástroj, který bych měl používat proti duplikování kódu nejsou funkce! K tomu slouží pohledy - což hromada programátorů nepochopila -svoje znalosti přenášely do prostředí SP 1:1 z klasického programování - případně z Cobolu, FoxPro, kde pohledy neexistovaly - jde o nesprávné uchopení technologie - navíc v tomto případě s potenciálně fatálními důsledky.
mam desktop aplikaciu ktora bezi na x pocitacoch.
y ludi pozera na rovnake dat.
niekto z nich updatne hodnotu ktora sa ulozi do DB a ostatnym sa behom milisekund (<100ms) updatne vysledok vypoctu ktory je iniciovany zadanou hodnotou a zbehne na backende.
je toto riesitelne cisto pomocou business logic na DB? (vypocet je celkom komplexny a vstupuje do toho viacero dat z DB)
Jde o to, jestli je úloha matematicky komplexní nebo datově komplexní - pokud generuje větší množství dotazů, případně dochází k přesunu většího objemu dat mezi klientem a serverem, pak mají uložené procedury smysl - cílem je minimalizovat komunikaci mezi databází a klientem - a vytvořit sémantické API pro klienta.
Jinak uložené procedury už dnes běžně umí notifikovat klienta - v případě změn dat, aby provedl refresh.
Nemam vylozene zkusenosti ze by nektery ze zakazniku pouzival primo SSD, ale pokud napriklad ulozite redo logy/archived logy na SSD, tak log switch bude znatelne rychlejsi a tudiz se zvedne i celkova vykonost databaze. Pokud se na SSD daji data (tady bych se bal o zivotnost tech SSD), tak je mozne, ze cteni a zapis techto dat bude take zretelne rychlejsi. Oracle u sve Exadaty pouzive neco ve smyslu Smart Flash Cache, ktera vyuziva flash pameti.
použití ssd pomůže k výkonosti zejména u krátkých dotazů a vyšší konkurenci (bráno obecně), ale nespravíš tím špatný návrh databáze nebo neoptimalizované dotazy. Pokud ti to brzí velké množství locků, ssd tomu pomůže jen částečně.
Životnost ssd je dnes snad lepší než u plotnových disků, ale nesmíš kupovat ty věci z alzy, hlavně se chce zaměřit na SLC, ostatní mají životnost mnohem horší. Vykašli se na disky do sas/sata, tam není velký výkonnostní rozdíl, rovnou se zaměř na nvme do pcie 4x či rovnou 8x.
Řada velkých databázích rovnou používá ssd, zmiňovaná exadata, netezza, teradata atd.
V našem ERP to zrychlilo MRP ze čtyř hodin na tři. A report výroby to zrychlilo z jedné minuty na pět sekund. Takže asi jak co, bude záležet na tom, co je vlastně ten bottleneck, zda počet IO nebo seek (je jich moc vs. trvají dlouho), přenosová rychlost atd. Jo a původně tam byl 15K 6G SAS disk. Takže možná jen to SSD nemělo takový náskok.
Nazdar chlapci prisel jsem se na vas podivat, autor mne zklamal misto aby delal karierni postup a vydelaval poradne prachy jak jsem mu pred 5 lety navrhoval, tak pokracuje v aktivitach na kterych se nedaji vydelat penize. Proc cilit na zakazniky kteri neutahnou ani licenci Oracle? Jak pak mohou zaplatit za kvalitne nacenene IT sluzby? Je potreba se v kariere posunout dal a hry o drobne prenechat malym detem. Doufam ze si spolu rozumime v tom ze penize jsou pozitivni vec.
Postgresql je minoritni databaze, neznam zadneho z nasich zakazniku ktery by ji pouzival v produkci. MySQL pouzivaji protoze to podporuje Oracle, ma to kvalitne zmaklou replikaci a clustering, Je to levne (uspori se 90% nakladu oproti Oracle).
Je tu nejaka vetsi a solidni firma co by delala podporu a poskytovala zaruky na PostgreSQL? Je tu EDB ale ti nejsou ochotni verejne sdelit ceny, kazdou delaji individualne a fixaci ceny nabizi jen na 3 roky. Jednat s podobnymi spolecnostmi se mi uz mnohokrat silne nevyplatilo, protoze mi nabidli pokracovani smlouvy za podstatne vyssi (i 10x cenu) kdyz zjistili jaky delame obrat. Prachy jsem jim stejne nikdy nedal a premigroval.
Ze stored procedur jsem byl nadsen v 90 letech, tehdy jsme je delali v embedded SQLC, dneska je pouzivame jen z duvodu vykonu po dukladne performace analyze - je v nich asi 1% logiky. Tohle neplati pro mainframy, tam se v psane v COBOLu pouzivaji vice a i to je jeden z duvodu proc vyvoj na mainframech je zhruba 20x drazsi.
Ty pořádné peníze mi nestojí za to, abych byl, víc než chci, namočený v korporátu. Řeší se tam problémy, jejíž řešení mne nebaví, a na to, aby člověk mohl být kreativní, tak bych musel být asi v Oracle, nebo v MS - jinak se blíž člověk k technologii nedostane. Co jsem slyšel o Oracle, tak tam bych asi určitě dlouho nevydržel. Takže tak.
To, že Vaši zákazníci nepoužívají Postgres, to neznamená, že by byl Postgres minoritní db. Díky BSD licenci se na ní nedají moc vydělat peníze (ohledně licencí a supportu) - takže ve spojitosti s Vašemi názory mne to vůbec nepřekvapuje. Navíc, pokud někdo používá db jen jako storage, tak MySQL může být optimální.
Support Postgresu - RedHat, v ČR Elostech, globálně 2nd quadrant, PostgreSQL Pro. Když máte tolik peněz, tak si zaplaťte dva - tři top vývojáře Postgresu, budete mít špičkovou podporu z první ruky - dělá to tak hromada firem.
Nebrec ze se ti nelibi makat pro korporaci. Zrovna tobe jsem nabizel ze ti pomuzu se zalozenim startupu nabizej jsem ti 30% a 2 mega. V zivote neni mnoho momentu ktere dokazi zmenit tvuj zivot - tohle byl jeden z nich. Bylo to v dobe kdy se IBM snazilo procpat svym zakaznikum PGSQL, udelalo prirucky, skoleni, podporu migraci - no ukazalo se ze to byl fail a jejich zakaznici na to neslysi.
To byl dalsi z dukazu ze se na PGSQL vydelat neda. Na postgresu zdechlo uz neuveritelne mnozstvi i velkych firem. To je jako podnikat na pousti kde se vali kosti. Zdechnula Great Bridge, Sun, IBM. Je videt ze o tento produkt nemaji zakaznici zajem. On to totiz neni produkt protoze nema veci co cini produkt produktem, je to technologie. Technologie se prodavaji licencovanim, coz nejde kdyz je technologie k dispozici bezplatne. Jedina zivotoschopna firma delajici PGSQL je EDB protoze v ni ma IBM zainvestovano 20 mega a postara se aby nepadla.
Podivej se na FreeBSD. Tuhle technologii pouziva rada veci - ibm, juniper, cisco, playstation, nitendo, apple. Je to spatna technologie? Evidentne ne. Da se vydelat na FreeBSD jako na produktu? Ne. Jediny zpusob jak na ni neco vydelat je to vzit a postavit si neco nad tim a to pak prodavat. Technologie je zdarma, usetri se za licencni poplatky.
To co ty nabizis za reseni - zamestnat vyvojare jako support jen dokazuje jak je maly tenhle trh. Tech vyvojaru moc nebude, pro support potrebujes aspon 3. Na kolik firem by se timhle zpusobem dostalo? A kolik vyvojaru je ochotno delat misto programovani 247 support?
Dival jsem se na 2nd quadrant a na PGSQL pro. Taky nemaji verejne ceny, chteji aby zakaznik s nima navazal vztah a pak mu sdelili jejich tajnou cenu. Kdyz nevi za kolik vlastne prodavat, jak jim mam verit ze se v byznisu udrzi. Pocet lidi co by si koupili PGSQL je maly a oni jej jeste snizi tim ze vyzaduji tuhle ceremonii s navazovanim vztahu. Pletou si byznis s manzelstvim, byznis je o cislech. Vsechny 3 firmy maji svuj fork PGSQL ktery se snazi prodat jako svuj hlavni produkt, koupit si fork udelany malou firmou a vyrazit s tim do produkce je jeste vetsi riziko nez vyrazit se stock pgsql - co kdyz firmicka krachne? To budeme prepisovat aplikaci? Proc jit do tohodle rizika kdyz nemusime?
Ted si vem ten tvuj pripad. Mas zakazniky co nechteji platit za Oracle a ani za EDB ktera je levnejsi a migrace by byla mnohem snadnejsi. Evidentne jim nejsou schopni prodat databazi s nenulovou cenou jako soucast reseni. Cil je nejak to doklepat dalsich 15 let. Nikdy nevydelas dostatek penez abys mel na investice do rozvoje protoze tvy zakaznici penize nemaji. Takze pracujes za naklady diky neschopnemu managementu ktery nema koule na to poslat neperspektivni projekt k zemi a jit delat neco pro lidi kteri maji penize na zaplaceni.
Ja proste nevidim zadnou pozitivni vec ktera by mne presvedcila ze mam do PGSQL jit. Napis mne 3 duvody ktere mne podle tebe presvedci ze je to nejlepsi mozna volba. Pro mne je to hobby.
Asi vůbec netušíte, o čem tu píšu a co a proč dělám - opravdu 30% a 2MB není nic, co by mně oslovilo.
Berte to tak, že Postgres je životní styl, jako Linux, nebo BSD .. buďto vám sedne a baví vás v něm psát, používat jej, nebo ne. Je to sw, se kterým můžete věci dělat jednoduše a po svém - a dobře a slušně - protože máte možnost se podívat na to, jak je napsaný, máte možnost se bavit s vývojáři, máte možnost se podílet na vývoji - a to aktivně nebo pasivně. Nemusíte řešit komplikované licence, a nemusíte biflovat checklisty a pohled do zdrojáku, možnost si něco odladit nebo se zeptat autorů je za desítky stránek dokumentace, takže nemusíte ani biflovat mraky dokumentace. Prostě s Pg je život jednoduchý - což je to, co mi vyhovuje. Nemusím se bavit s obchodníkama - bavím se s inženýrama.
Jak IBM, tak další korporace Pg používají - jedním z největších uživatelů je Microsoft nebo Cisco. Pro ně je Pg dostatečně dobrá databáze. Do jisté míry Postgres je alternativa - je to projekt, který nemůže krachnout - je to alternativa ke korporátnímu způsobu uvažování a chování - a buďto jste zaháčkovaný v korporátu a asi těžko budete hledat motivaci pro použití Postgresu, jelikož na licencích fakt nenaděláte těžký prachy nebo hledáte alternativy - takovou alternativou, přičemž ale technicky na úrovni (každý si může zkontrolovat kód), je Postgres (v oblasti SQL relačních DB).
Je to [MySQL] levne (uspori se 90% nakladu oproti Oracle).
To jako vážně nějaký váš zákazník uvažoval o Oracle DB, a pak místo toho pořídil MySQL? To je jak porovnávat formuli jedna s tříkolkou. „Ano, uvažovali jsme pro naší tříletou Matyldu o monopostu F1, ale pak jsme si řekli, že ušetříme, a pořídili jsme jí tříkolku.“
Jo byla to zdravotni pojistovna, asi 35M klientu. Pri jednom z upgradu sw co jsme jim delali se jednalo o koupi noveho HW (ten stary mel 10 let, fungoval spolehlive) a manageri zacali strasne knourat jak nemaji prachy na provoz a ze to chteji co nejlevnejsi a ze jsme podle jejich nazoru drazi. Tak se rozhodli ze misto Oracle chteji MySQL a misto IBM RISC chteji Windows Dell PowerEdge cluster. Ja jim nato ze si musi udelat load testy a smlouvu o podporu HW, OS, Database s garanci. Tvrdili ze to vsechno maji, no tak dobre, tak jsme u nas prehodili ORM na MySQL a zkouseli zda to jde, ono to neslo protoze MySQL melo bugy, ale kdyz jsme upgradovali MySQL na posledni verzi tak unit testy prosly bez problemu. Sice se jim nelibilo ze nebudeme pouzivat tu verzi MySQL co tam nainstaloval admin a na kterou maji podporu, ale kdyz videli ze to opravdu jinak nejde tak na to kyvli.
Vzhledem k tomu ze na teto platforme negarantujeme nic z provozu, jen to ze projdou nase testy, tak jsme s nimi v kontaktu uz nebyli. Prisel jsem na pobocku jako client - system nejel pry uz 2 dny, pak jsem prisel za par mesicu to jim slo, na dalsi navsteve jim to opet nejelo. Tak jsem zmenil pojistovnu. Pak uz od nas nechteli ani SW zdali jsme se jim drazi.
Pred 3 lety jsem se nahodou potkal s klukem ktery vedl tym co tehle pojistovne delal sw servis. Brecel jaci jsou to drzgresle ze si nemuze dovolit koupit ani sw na load testing za 15000 USD protoze z tech penez co plati sotva zaplati lidi kteri makaji vyhradne na open source sw.
Pritom jsem zjistil ze jednak pojistovna pouziva nas SW bez licence, a chlapec ma k dispozici ostra data pacientu. Takze jsem zazaloval oba dva. Chlapec i pojistovna dostali pokutu za nelegalni pouzivani SW a pojistovna i chlapec dostali basu za neopravnenou manipulaci s daty pacientu.
Pojistovna se dostala do problemu a investor tam musel nasypat dalsi prachy, tak si se mnou dal schuzku zda bychom to neudelali jako predtim. Rekl jsem si o 50 Mega USD za 10 let - blackbox reseni vcetne HW, pojistek etc. To se mu zdalo moc a vykopnul mne s nadavkama. Za par dni volal ze by chtel schuzku - ja jsem mu rekl ze na zadnou nejdu, neumi se chovat a ze moji nabidku kterou nechtel jsem stahl. Nechtel moje reseni a tak ho taky nema - v cem je tedy problem. Rikal ze si nechal udelat konkurecni nabidku a tam chteli 12 mega rocne, tak jsem mu to nakonec dal za 10 mega rocne s tim ze v cene budou i prazdniny pro management no a vzal to.