Společnost OpenAI představila novou řadu svých AI modelů OpenAI o1 navržených tak, aby "strávily více času přemýšlením, než zareagují". Videoukázky na 𝕏 nebo YouTube.
Sailathon 24, tj. hackathon mobilního operačního systému Sailfish OS, proběhne od 27. do 30. září v Praze na Strahově ve školícím centru Silicon Hill.
Bylo vydáno Ubuntu 22.04.5 LTS, tj. páté opravné vydání Ubuntu 22.04 LTS s kódovým názvem Jammy Jellyfish. Stejně tak Kubuntu 22.04.5 LTS, Ubuntu Budgie 22.04.5 LTS, Ubuntu MATE 22.04.5 LTS, Lubuntu 22.04.5 LTS, Ubuntu Kylin 22.04.5 LTS, Ubuntu Studio 22.04.5 LTS a Xubuntu 22.04.5 LTS.
Byla publikována veřejná Výroční zpráva Bezpečnostní informační služby za rok 2023 (pdf).
Byla vydána nová verze 8.7 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled oprav, vylepšení a novinek v oficiálním oznámení.
Společnost Juno Computers prodávající počítače s předinstalovaným Linuxem má nově v nabídce linuxový tablet Juno Tab 3. Na výběr je Mobian Phosh, Ubuntu 24.04 (GNOME) a Kubuntu 24.04 (KDE Plasma). Cena začíná na 699 dolarech.
VirtualBox, tj. multiplatformní virtualizační software, byl vydán v nové verzi 7.1. Přehled novinek v Changelogu. Přináší modernizovaný vzhled a ovládání. Přepínat se lze mezi základním a rozšířeným uživatelským rozhraním. NAT nově podporuje IPv6. Linuxový hostitel a host mohou sdílet schránku na Waylandu.
Organizátoři konference LinuxDays 2024 vydali program a zároveň otevřeli registrace. Akce se uskuteční 12. a 13. října na FIT ČVUT v pražských Dejvicích, kde vás čekají přednášky, workshopy, stánky a spousta chytrých lidí. Vstup na akci je zdarma.
Blíží se vydání FreeCADu 1.0. Vydána byla první RC verze tohoto svobodného multiplatformního parametrického 3D CADu. Přehled novinek i s náhledy v poznámkách k vydání.
Bylo vydáno Eclipse IDE 2024-09 aneb Eclipse 4.33. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
databáze by to měla umět ošéfovat i lépe, ale nevím jak
Transakce, transakční izolace.
BEGIN; SELECT last_update, now() < last_update + timeout FROM sync FOR UPDATE; -- pokud jsou data cerstva, rollback a konec -- sync ... UPDATE sync SET last_update = now(); COMMIT;Zamykani stampu pres FOR UPDATE predpoklada ze synchronizace je relativne rychla a skonci driv nez transakce vyhnije. Dalsi instance aplikace bud zustane viset ma zamku nebo uvidi snapshot pred/po synchronizaci. Zmeny provadeny samotnou aplikaci musi byt samozrejme taky transakcne koser, jinak muzes sahnout na data ktery se ti meni pod rukama.
No tak zrovna SERIALIZABLE tak jak je definovane v SQL standardu umi jen DB2, protoze umi zamykat i neexistujici radky (predicate locking). Ostatni se tomu jen blizi.
napriklad v PGSQL je SERIALIZABLE mimoradne spatne protoze neceka na zamky, ale hned rusi celou transakci kdyz nastane konflikt. Kdyby se pockalo tak by konflikt nemusel nastat.
Nejjednodusi implementace SERIALIZABLE pomoci table wide locku v produkci moc netahne. Prece jen obvykle s db pracuje vice nez jeden uzivatel.
Old scale factor is 10, wanted 5 Truncating TPC-B tables. start load 500000 test rows Thu Dec 02 19:37:04 CET 2010 done loading test data Thu Dec 02 19:38:22 CET 2010 Vacuum prepared data. Benchmarking Postgresql 8.4 411.13 tps, 24668 good, 10945 failed, 90 percentile 0.016 s. tpsB=-1.0Asi 50% transakci zarve, coz nesplnuje tpc-b. Nicmene neni pravda ze se ceka 1 sekundu, protoze tenhle test bezel jen jednu minutu a kdyby se cekalo 1 sekund predtim nez to zarve tak by to nestacilo zdeadlockovat 10k transakci. Ovsem nerikejte mi ze lepsim deadlock algoritmem by neslo snizit pocet transakci co zarvaly. Jinak mne prekvapilo ze chteji u pgsql implementovat predicate locking, to se bude hodit pro oltp.
lock tables t1xx write; aktualizovat; unlock tables; !! <-- DULEZITE !!
Obvykle to v takovém případě sice znamená použití více menších souborů, ale do určitého rozsahu může být taková databáze na FS velmi výhodná.
Do určitého rozsahu. Pak se na to zapomene, ten rozsah je náhle 1000x větší a je problém. Já jsem pro to napsat dobře pro DB (DB ti k tomu poskytuje mnoho prostředků, které jsou ověřené časem a dostatečně výkonné) a nebude s tím problém.
Můžeš dát příklad nějakého „problému“ který nepořeší vyladění nebo změna FS?
Počet záznamů. Pokud se DB schéma dobře navrhne, tak i 1000x zvýšení počtu záznamů nepředstavuje problém (protože B-stromy a operace složitosti log_n(x)). Zkus na FS zvýšit počet souborů z několika set tisíc na několik set milionů a uvidíš co se stane.
Úložný prostor. Velikost záznamu je typicky pár bajtů, což na FS vždy zabere celý blok (typicky 4kB), tedy velmi nehospodárné (režie na diskový prostor jsou stovky procent). Případně (abych se vyhnul hádce ohledně Raisera) lze zapnout tailing a výkon ještě více snížit. DB to ukládá efektivně a ještě to i (za určitých okolností) komprimuje.
S předchozími body souvisí i využití cache a rychlost. Databázi se na jednu stránku vleze velké množství malých záznamů, tedy se po chvilce provozu nejpoužívanější stránky (tj spousta záznamů) nastěhují do RAM (buď cache DB, nebo cache OS) a je to rychlé jak jen to jde. Ještě je zde readahead datových souborů. U souborů na FS ten OS prostě nemůže vědět, jaké další soubory (jednotlivé záznamy) má přednačíst a tedy to bude dost pomalé.
je relační databáze spíš neohrabaná a špatně se škáluje
Já jsem se také pojmu relační záměrně vyhnul. Pro key-value typ dat bych to strčil do Berkeley DB a byl by klid. Pro relační data je samozřejmě vždy lepší použít relační SQL DB. Začátečníkovi bych rozhodně doporučoval se nejdřív naučit relace a normální formy a nějakou opensource SQL DB (PostgreSQL) a až pak případně šaškovat s něčím jiným (až bude vědět proč a na co).
Zkus na FS zvýšit počet souborů z několika set tisíc na několik set milionů a uvidíš co se stane.Takže žádný FS se stromy není? :)
Velikost záznamu je typicky pár bajtůMám trošku jinou představu o významu slovního spojení pár bajtů.
což na FS vždy zabere celý blok (typicky 4kB)Tak to může a nemusí být implementováno.
Já jsem se také pojmu relační záměrně vyhnul.Tady bude asi to hlavní nedorozumění. Nazývat či nenazývat hromadu dat databází jenom na základě způsobu uložení, je podle mě nesmysl. Je mnoho různých implementací formátů databází i způsobů přístupu k nim. Kombinace nějakého dialektu SQL a síťového serveru je jen jednou z mnoha možností, jak může být databáze uložena a zpřístupněna.
Začátečníkovi bych rozhodně doporučoval se nejdřív naučit relace a normální formy a nějakou opensource SQL DB (PostgreSQL)Normální formy jsem se naučil dodatečně :), a musím říct, že aplikace této teorie neměla na návrh mých tabulek žádný vliv. Přesněji řečeno, dokud jsem neznal normální formy, tak jsem se na to díval striktně z pohledu redundance a anomálií (ač jsem zpočátku nevěděl, že se tomu tak říká). Já bych začátečníkovi prvně doporučil, ať se naučí pracovat se soubory... i za cenu, že se zprvu vykašle na škálovatelnost u projektů s max desítkami záznamů. Naopak bych začátečníkovi doporučil se hodně rychle přístup k datům naučit dobře abstrahovat. Přepsat jen backend pro ukládání dat pak není tak pracné. Mezi náma, předpoklady velikosti tabulek se neškálují o několik řádů zase tak často, tak proč nezvolit easy řešení, které na desítky záznamů funguje perfektně. Pravda, sám jsem teprv dodatečně zjistil, že u jednoduchých projektů síťová SQL databáze často zbytečně zdržuje nejen návrh a implementaci, ale dokonce i běh programu.
Mno muj nazor je zhruba takovej ze dokud se dataset vejde na jedno zelezo a vetsinou se cte, staci pridavat otroky az do aleluja.
Já bych tam ale nepřidával otroky pro práci, slave používám jenom na zálohování. Pro práci mám primární server s dostatkem paměti a pokud je to málo, tak pomůže cachování v app. Memcached jsem ještě neprosadil, ale pracuje se na tom (zatím stačí optimalizovaný master, jak píše Pavel).
Master-Master replikace je bezvadna vec ale krehka jako sklo a sposuta veci se musi prepsat.
To jsem u nás odmítl udělat, byl jsem k tomu donucen. Při první příležitosti se to rozpadlo a už je od toho pokoj. Master-Master na MySQL sice jde (bohužel) nastavit, ale použitelný to není.
ale udelat alter se rovna odstaveni aplikace
Ano, alter zamyká tabulku. Možná bys mi na to mohl odpovědět (je to totiž takový kolorit všech podobných diskusí o SQL vs něco jiného), proč se dělá alter nad produkční tabulkou? Trochy mi v hlavě vrtá červíček a křičí: špatný návrh.
Nakonec se to muselo resit na odpojenym slave a prohazovanim masteru za behu, na muj vkus bylo pridani jednoho blbyho sloupecku az moc jako prochazka po rozbitym skle.
No tomu rozumím, ale když je to tak super HA věc, máte tam shardy, replikace apod, tak proč nenachystat nový cluster, nepřipravit pro něj DB (ten alter), nepřeklopit data (to klidně může běžet týden) (dosynchronizovat, tj přepnout web do readonly na hoďku) pak to přepnout na nový cluster? Jo jako tohle mi fakt není jasné, podobné diskuse jsou plné shardů větší než zeměkoule; o SQL; které to údajně neumí; replikací; a pak se přijde na to, že to (alter) je potřeba dělat za provozu a na ostrých datech. Jde vám o ta data vůbec?
Já bych tam ale nepřidával otroky pro práci, slave používám jenom na zálohování.Jasně ale řeč byla kam a jak snadno je škálovat. Když se do toho vejdeš tak to ještě neznamená, že sql databáze unese cokoliv. A buď varován, replikace není dobrej způsob zálohování, může se ti lehce stát že skončís s dvěma perfektními kopiemi perfektně podělaných dat.
Možná bys mi na to mohl odpovědět (je to totiž takový kolorit všech podobných diskusí o SQL vs něco jiného), proč se dělá alter nad produkční tabulkou? Trochy mi v hlavě vrtá červíček a křičí: špatný návrh.Protože když udělám alter nad testovací tabulkou, tak to k ničemu nebude? Protože někdy člověk prostě přijde ke špatně navrženýmu schematu a nadávání ho nevylepší? Protože občas se prostě vyskytne požadavek se kterým se nepočítalo? Kousek od všeho.
…proč nenachystat nový cluster, nepřipravit pro něj DB (ten alter), nepřeklopit data (to klidně může běžet týden) (dosynchronizovat, tj přepnout web do readonly na hoďku) pak to přepnout na nový cluster?…Přesně tak se to nakonec udělalo, zároveň se konečně vyměnil etch za lennyho a všichni byli spokojení. Kdyby nebyla po ruce druhá sada železa, dalo by se to udělat na odpojeným slave kterej se pak povýší na mastera. Neříkám že to nejde udělat, ale že takový řešení je neúměrně složitý a nebezpečný a proto je to pro mě varovný znamení že tady už přestává být relační databáze to nejlepší řešení. Tenhle konkrétní problém se týká MySQL, ale AFAIK je replikace křehká hračka na všech databázích. BTW neřekl jsem že mám největší shard na zeměkouli. Naopak, ve skutečnosti by se celkem v pohodě vešel na jedno železo, ale kdysi dávno někdo s vidinou velkého růstu nasadil shardování. Růst se nekonal, ale zase toho není tak málo aby to stálo za to spojovat. Takže si teď vychutnávám všechny radosti který to přináší aniž by to k něčemu bylo A můžu zodpovědně říct, že je to obezlička, ne řešení. Ano, pokud má někdo hromadu hotových dat v sql, může to být o hodně jednodušší cesta než všechno přepisovat na jinou technologii. Ale pokud člověk _plánuje_ mít víc než jeho sql unese, neměl by ji prostě vůbec použít a od začátku stavět na něčem vhodnějším. Můj soukromej názor - ber nebo sharduj.
Neříkám že to nejde udělat, ale že takový řešení je neúměrně složitý a nebezpečný a proto je to pro mě varovný znamení že tady už přestává být relační databáze to nejlepší řešení.
Složitý a nebezpečný? Máš data na starém funkčním systému, na nový si je naimportuješ, otestuješ a obenchmarkuješ a pak to případně překlopíš trvale. Mě to přijde daleko bezpečnější (v jedné chvíli jsou dvě kopie dat, přičemž se to testuje na neveřejné kopii), než to dělat na živém systému.
Ale pokud člověk _plánuje_ mít víc než jeho sql unese, neměl by ji prostě vůbec použít a od začátku stavět na něčem vhodnějším.
Můžu se zeptat, ať kolem toho nechodíme jako okolo horké kaše, co plánuješ tak gigantického, že to SQL neunese? Jak moc o ta data jde?
V SQL světě, za těch několik desítek let, šlo a jde především o data a jejich ochranu. V NoSQL mi přijde, že jde o rychlost za každou cenu (i za cenu ztráty integrity dat). Na jedný konferenci o MongoDB jsem se ptal, jestli to umí alespoň transakce. Bylo mi řečeno, že web transakce nepotřebuje. A opravdu. Youtube, twitter, facebook a podobné "výstavní skříně" noSQL řešení by ode mě v oblasti ochrany a synchronizace dat dostaly čistou 5. Pokud jde o nějaký fotoblog (vysvětlovali proč se pár set milionů obrázků nevejde na filesystém) a je jedno, že se sem tam nějaká data ztratí, tak si s tím dělejte co chcete. Já si to dovolit nemohu a nechci.
Složitý a nebezpečný? Máš data na starém funkčním systému, na nový si je naimportuješ, otestuješ a obenchmarkuješ a pak to případně překlopíš trvale. Mě to přijde daleko bezpečnější (v jedné chvíli jsou dvě kopie dat, přičemž se to testuje na neveřejné kopii), než to dělat na živém systému.Ano, v ramci idiosinkrazii relacni databaze je to nejlepsi zpusob. Proto (prekvapko) jsme to tak delali
Můžu se zeptat, ať kolem toho nechodíme jako okolo horké kaše, co plánuješ tak gigantického, že to SQL neunese? Jak moc o ta data jde?Ja neplanuju nic. Jen se snazim na praktickem prikladu vyvratit mytus ze relacni databaze jsou alfa a omega a jdou skalovat do nekonecna.
…a je jedno, že se sem tam nějaká data ztratí…Odkud beres tuhle pevnou viru ze cokoliv neni v databazi se „ztratí“? Mam tady kolem terrabajty dukazu ze to neni pravda Koneckoncu databaze je taky objekt ve filesystemu, takze jestli veris na ztraceni souboru tak ulozenim do databaze jenom zvysujes riziko ze prijdes o vsechno.
idiosinkrazii
Tak tohle jsem si už musel najít ve slovníku
Ja neplanuju nic. Jen se snazim na praktickem prikladu vyvratit mytus ze relacni databaze jsou alfa a omega a jdou skalovat do nekonecna.
Jo, takže čistě teoretická diskuse (bez praxe) ...
Odkud beres tuhle pevnou viru ze cokoliv neni v databazi se „ztratí“? Mam tady kolem terrabajty dukazu ze to neni pravda Koneckoncu databaze je taky objekt ve filesystemu, takze jestli veris na ztraceni souboru tak ulozenim do databaze jenom zvysujes riziko ze prijdes o vsechno.
...která už mě přestává bavit. Z FS se může ztratit cokoliv. Pokud sletí FS, tak jsou data v hajzlu v každém případě. O tom tu řeč není. Z praktických zkušeností vím (to není víra), že co v SQL, na to se můžu spolehnout daleko více, než na nějaký bastl systém nad FS. Jak jsem psal, nesychronizované nody (standardní jev) u soc služeb jsou toho jasným důkazem. Můžeme se samozřejmě také bavit o tom, kolik by stál plně synchronní provoz o stejném výkonu a jestli je vůbec potřeba. Ale to je diskuse na zcela jiné téma.
je taky objekt ve filesystemu
To je, souhlasím. Ale z tohoto objektu můžu ve kteroukoliv chvíli (za provozu) vytáhnout dump potvrzených transakcí (mám konzistentní data v určený bod v čase). Říká se tomu záloha. U FS tohle neudělám (asi přes snapshoty), protože FS neposkytuje aplikacím transakční přístup. Dump FS pořízený za provozu aplikací na něm bude vždy do jisté míry nekonzistentní.
Dump FS pořízený za provozu aplikací na něm bude vždy do jisté míry nekonzistentní.Nikdy jsem netvrdil opak. Jen te upozornuju ze kdyz/az narazis na limity skalovatelonosti relacni databaze a zacnes si hrat se shardovanim, distribuovanyma transkakcema a podobnyma volovinama, veci prestanou byt tak jednoduchy jako napsat COMMIT a "nějaký bastl systém" z toho bude tak jako tak. A pro data typu ulozenyho obrazku to ani nemusi dojit tak daleko aby filesystem zacal byt lepsi volba - ulozit novy obrazek atomickou operaci je trivialni uloha a zadny jiny vyhody v tomto pripade u databaze nevidim. Logicky - kdyz mezi hroudou obrazku nejsou zadny vztahy, takze mi relacni databaze nema moc co nabidnout. Kdyz bych chtel drzet nejaky dalsi metadata, tak to samozrejme bude neco jineho, pro jakykoliv rozumny objem bude sql server idealni. (A pro "nerozumne" objemy bych sahnul po nejake NoSQL - pokud je mozne chybejici metadata kdykoliv doplnit z existujiciho souboru, staci tenky wrapper nad cimkoliv co umi atomicke operace. Oni ti silenci z facebooku mozna nejsou uplni silenci, ale proste jen maji data spravnyho typu.)
Jen te upozornuju ze kdyz/az narazis na limity skalovatelonosti relacni databaze a zacnes si hrat se shardovanim, distribuovanyma transkakcema a podobnyma volovinama, veci prestanou byt tak jednoduchy jako napsat COMMIT a "nějaký bastl systém" z toho bude tak jako tak.
Jen by mě opravdu zajímalo, kolik setin procenta je projektů tak velkých. Prostě akademická diskuse, sorry.
Kdyz bych chtel drzet nejaky dalsi metadata
Což je ale typický příklad (a to i třebas pro uživatelské fotky někde na desktopu, také je chce třídit, označovat lidi apod.). Žádná mutlimediální data nežijí jen tak ve vakuu a ke všem je hodně metadat.
Oni ti silenci z facebooku mozna nejsou uplni silenci, ale proste jen maji data spravnyho typu.
Nejsou. To jsou experti, kteří vědí co a jak. Začátečník, amatér, při vší úctě neví co a jak.
Jen by mě opravdu zajímalo, kolik setin procenta je projektů tak velkých. Prostě akademická diskuse, sorry.Coz je jen jinymi slovy to co jsi uz rekl nekolikrat - ze TY to nepotrebujes. To neni argument, jen popis stavu kterej se muze zmenit. A jestli opravdu futrujes vetsi pocet obrazku do blobu v mysql tak to muze nastav driv nez si myslis
Žádná mutlimediální data nežijí jen tak ve vakuu…Jiste, proto jsem to taky uvedl jako priklad kde se relacni databaze hodi. Ale taky existuje spousta dat ktere jsou jen haldy bitu. A filesystem je v praci s haldami bitu (prekvapive) efektivni, zatimco databaze jen pridava rezii
Zatím je web bohužel plný jen hype kolem NoSQL a lidí, kteří neumí ani pořádně napsat select -- a to ani v té jejich vysněné nosql variantě.Tak to je velmi výstižné. Občas dělám v MySQL a nesnažím se příliš normalizovat, aby ty dotazy nebyly moc složité. Vyzkoušel jsem SQLite i NoSQL databáze Redis, Tokyo Cabinet, MongoDB, CouchDB,... abych nakonec zjistil, že pro primitivní aplikace mi bohatě stačí filesystém a sada unixových filtrů. Pro složitější aplikaci si vyberu to, co bude nejlépe vyhovovat datovému modelu. Jiný případ: Co byste třeba vybrali, pokud by databáze měla cca 5000 řádek a 150 polí (řídkých), když si ministerstvo zítra může vymyslet další položku pro evidování (týká se 3 záznamů z oněch 5000) a k tomu číselník? To jen taková poznámka k pochybnosti o potřebě ALTER u dobře navržené databáze.
Co byste třeba vybrali, pokud by databáze měla cca 5000 řádek a 150 polí (řídkých) ... ministerstvo zítra může vymyslet další položku
Excel
On to bohužel až takový vtip není. Každý den bych mohl napsat další slovník nových vulgarismů jen na základě komunikace s jistým úřadem státní správy (a co je ještě horší, má v názvu slovo vzdělávání). A to jim nedělám DB, ale jen certifikáty. Jiné úřady se nejsou schopni shodnout na datech (natož pak na jejich typu, nedejbože významu), přidávají a odebírají atributy podle aktuální nálady personálu apod. Vím o čem mluvíš . Na druhou stranu je zase co dělat a oni na rozdíl od jiných platí.
Co byste třeba vybrali, pokud by databáze měla cca 5000 řádek a 150 polí (řídkých) ... ministerstvo zítra může vymyslet další položkuExcel
On to bohužel až takový vtip není.
Opět trefa do černého. Dalo by se také říct, že Excel je asi nejpoužívanější NoSQL databáze. Zejména na ministerstvech.
Použití Excelu by zas taková výhra nebyla, protože data jsou agregována ze 44 zdrojů, které si do těch dat nesmí vzájemně vidět a přitom je nutné respektovat historii. V případě Excelu téměř neproveditelné.
Pak se někdo diví, proč místo po SQL šilhám po NoSQL řešení, které je pro řídké tabulky jak dělané. Chybí sloupec? Dodělám ho do aplikace, však ta databáze si s tím nějak poradí.
Já jsem zase ještě neviděl FS, který by byl výkonnější než DB.Viděl jsem tady dohady kolem půl miliardy řádek. Asi je vám jasné, že na FS bych se to napasovat nesnažil a rovnou sáhl po vhodné databázi. Zajímalo mne řešení pro desítky až tisíce záznamů. Když se budu pokoušet cachovat RSS 20 webů, tak udělám 20 souborů ve FS, které budu aktualizovat třeba i s pomocí tempu při vytváření a následným přejmenováním (kvůli atomicitě operace). Snaha o nacpání všech 20 záznamů do jednoho souboru může být za určitých okolností vhodná, za jiných nevhodná (random access). Když už to budu chtít do jednoho souboru, tak asi do databáze. Udělal jsem si primitivní benchmark: 300k souborů v jednom adresáři na ext3 vytvořených rychlostí 3000 souborů/s. Na podobné úlohy do 1000 záznamů (resp. souborů) to vidím úplně v pohodě, zejména u FS založených na B-tree. FS bych přirovnal k jednoduché bezschémové databázi key->value. Na jednoduché úlohy se to určitě použít dá. Možná i s lepším výsledkem, než s DB. Díky všem za názory. Řešení nevidím jako jednoznačná, vždy bude záležet na množství a struktuře vstupních i výstupních dat a dalších požadavcích na zpracování.
300k souborů v jednom adresáři na ext3 vytvořených rychlostí 3000 souborů/s.No a to je celá diskuze o použitím filesystému v kostce - nakonec se vždycky ukáže že skalní fandové databází srovnávají svoje vyladěný konfigurace s defaultním nastavením nejblbějšího možnýho filesystému. Když mi kolegové v práci vysvětlovali proč se pár set milionů obrázků nevejde na filesystém, vypadlo z nich že ani neví co je
tune2fs
, natož aby se obtěžovali zkusit blbýho reisera
Vím, že přecházím z extrému do extrému, ale chci prijít na podstatu současného stavu. FS používáme z historických důvodů, databáze také. Přitom se v obou případech jedná o databáze s různými nároky na ACID. Proč se používají FS, když ACID nevyhovují a ani nejsou výkonnější? Proč je nezahodíme a nenahradíme všechny FS databází?
Jsou to dva různé způsoby ukládání dat. Oba (FS a DB) poskytují zcela jiné služby a mají jiné použití, výhody a nevýhody.
FS poskytuje blok dat (adresovaný od 0 do filesize, přístup blokově a nebo streamem) a nezajímají ho ta data samotná (nerozumí obsahu souboru a ani se o to nesnaží). Je to nejrychlejší možný způsob (tedy kromě RAW přístupu k disku, který se také používá na ukládání dat, klidně svá data můžeš ukládat jako jednotlivé sektory disku a fakticky si tak vytvořit vlastní FS, jde to) přístupu k datům. Proč se používá je jednoduché. Pokud má program data v nějaké struktuře v bloku paměti, tak jednoduše ten blok vysype do souboru. Staré 8bit, DOSové hry takto měli řešení ukládání herních pozic a některé programy to tak používají dodnes. Na velká sekvenční data (multimediální soubory například) je to ideální způsob uložení (i když by video šlo logicky rozdělit na jednotlivé framy a ty uložit pod nějakým pořadovým číslem do DB, tak toto by nepřineslo vůbec žádné výhody; najít ve velkém souboru konkrétní frame se umí i jinak a efektivněji).
FS také řeší rychlost přístupu k datům (velkých objemů) snižováním fragmentace a také snižováním seeků (pohyb hlaviček) u rotujících disků (u SSD toto odpadne, tam se budou řešit jiné problémy).
Toto byly výhody FS. Nevýhodou je adresace záznamu (souboru) pouze pomocí primárního klíče (plná cesta), malý počet souborů a neefektivní ukládání malých souborů (vždy jeden blok). Což ale všechno plyne z toho, co má FS být. FS prostě poskytuje blok dat adresovaný jedním primárním klíčem (jménem souboru) a offsetem (pozicí v souboru). Nic víc (pokud vynecháme metadata, ale o tom tu řeč není).
FS nemá nic jako transakce. Má jisté atomické operace (například přejmenování), pomocí kterých jde něčeho jako transakčního chování dosáhnout. Maildir například má adresář cur (new) a tmp. Soubor emailu si připravuje v tmp a až je celý hotový, tak jej atomicky přesune (přejmenuje) do adresáře cur (nový tedy do new). To už je takové drbání se levou nohou za pravým uchem. Šlo by to zobecnit samozřejmě i pro více záznamů (souborů) tak, že se vytvoří adresář někde bokem a pak se tento adresář přesune do "ostré" stromové struktury. Nevím, jestli tuhle šílenost někdo používá.
Další nevýhoda FS je drahá operace sync, kterou se mnozí programátoři snažili různě obcházet (jednoznačně jejich chyba a neznalost, šlo to udělat jinak) až se z toho nakonec stal patch do ext4 (který jinak ztrácel data při pádu stroje), který má za úkol se pro některé aplikace chovat stejně jako ext3 (default commit po 5s). DB ti to commitne bezpečně na disk bez většího výkonového dopadu na další operace.
Opačným extrémem je relační SQL DB. Jako mezi tím jsou ještě keyvalue (velmi vhodné pro jistá data), readonly archivy (takto některé programy obcházejí přílišný počet souborů, mají zip archiv a v tom adresářový strom s mnoha soubory, je to rychlé, protože readahead OS postupně načte tento zip celý do RAM a navíc se nemusí seekovat po jednotlivých souborech na FS, je to jen v jednom) a další způsoby ukládání dat, které lze zvolit pro řešení problému, není nutné a ani vhodné se při výběru přepínat jen mezi FS a SQL.
Relační DB potřebuje rozumět ukládaným datům (je velmi důležité správně zvolit datový typ a neodpustím si poznámku: fakt mi vstávají vlasy hrůzou, když někde vidí IPv4 uloženou jako VARCHAR (15), tedy 15B+značka velikosti na místo 32b INTu, 4B), umí záznam velice rychle adresovat i pomocí dalších klíčů (z klíčů vytvořených na základě obsahu dat, to FS vůbec neumí), umí efektivně (z hlediska rychlosti i z hlediska efektivity uložení) pracovat s velkým množstvím záznamů, umí transakční zpracování přes širokou řadu úkonů a s různými počty záznamů apod.
Databáze řeší konkurenční přístup (DB od svého vzniku musí řešit přístup a operace stovek klientů nad jedněmi daty, to se na FS většinou řeší pomocí zámků nebo pomocí šíleností jako jsou ta přejmenování z dočasného adresáře), práva (ale to i ten FS), garantované sekvence napříč klienty.
a ani nejsou výkonnější
To chce trochu upřesnit. FS je rozhodně rychlejší pro (střední a velká) sekvenční data. 1GB soubor se přečte rychlostí HW (disku, případně RAM), s tím bude mít DB (která to bude mít interně v 2kB blocích) trošku problém (ale zvládne to). Ale o tom se tu až tak moc nebavíme. FS není vůbec výkonnější při nevhodném použití jako DB (a to ani jako primitivní keyvalue). Například vyhledat všechny záznamy, ve kterých jsou data "Nick: Kit" DB zvládne levou zadní (pokud někdo nezprasil schéma), pro FS to bude znamenat progrepovat všechny soubory (čímž se zahodí původní stránky v IO cache (naplní se novými daty) a pak se další souboru budou muset číst opět z disku). Vůbec ta cache je hlavní devízou DB systémů.
Vždy záleží na konkrétním použití a konkrétním typu dat. Já nejsem přítelem různých adresářových stromů s tisíci soubory (jako je například i ten maildir), na toto FS ani není určený. A pokud se někdo chce vyhnout tomuto stromu a řešit si to sám v nějakých vlastních datových souborech, mno, to už je lepší využít 30let zkušeností špičkových světových programátorů a fakt to vrznout do DB.
Výběr vhodné technologie je těžká věc. Já jsem se (a klidně to přiznám) možná dostal do stavu, kdy mám v ruce kladivo (DB) a všude kolem vidím hřebíky. Na druhou stranu mi DB poskytuje výhody, které FS nikdy nenabídne, a vývoj (i FS, či spíše nástaveb) směřuje spíše k té DB. Souboru už máš dneska otagované (ten jeden přimární klíč už fakt pro uživatelskou práci nestačí), indexované podle obsahu (což je přesně to, co dělá každá pořádná DB) pro vyhledávání, různé media-library ti nabízí mnoho pohledů na jedna data apod.
FS poskytuje blok dat (adresovaný od 0 do filesize, přístup blokově a nebo streamem) a nezajímají ho ta data samotná (nerozumí obsahu souboru a ani se o to nesnaží). Je to nejrychlejší možný způsob,
Pokud má program data v nějaké struktuře v bloku paměti, tak jednoduše ten blok vysype do souboru. Staré 8bit, DOSové hry takto měli řešení ukládání herních pozic a některé programy to tak používají dodnes. Na velká sekvenční data (multimediální soubory například) je to ideální způsob uložení (i když by video šlo logicky rozdělit na jednotlivé framy a ty uložit pod nějakým pořadovým číslem do DB, tak toto by nepřineslo vůbec žádné výhody; najít ve velkém souboru konkrétní frame se umí i jinak a efektivněji).
FS také řeší rychlost přístupu k datům (velkých objemů) snižováním fragmentace a také snižováním seeků (pohyb hlaviček) u rotujících disků.
FS je rozhodně rychlejší pro (střední a velká) sekvenční data. 1GB soubor se přečte rychlostí HW (disku, případně RAM), s tím bude mít DB (která to bude mít interně v 2kB blocích) trošku problém (ale zvládne to). Ale o tom se tu až tak moc nebavíme. FS není vůbec výkonnější při nevhodném použití jako DB (a to ani jako primitivní keyvalue).
Připadá mi to jako hodně málo argumentů ve prospěch FS.
Když vezmu téměř libovolný větší soubor, tak vevnitř najdu databázi. Buď přímo jako databázový soubor, anebo serializovanou. Když nad serializovanou databází typu video chci provést střih, musím ji deserializovat, provést sloučení a výstup zase serializovat do nového souboru. Pokud do původního (přepisem - bez tempu), tak v určitém okamžiku mohu o data přijít. V případě databáze by se změnilo pár indexů k framům, vytvořily by se nové framy v místě nelineárního střihu a bylo by hotovo. Vše by se dalo udělat transakčně.
V praxi by se každý vkládaný soubor musel deserializovat, při jeho analýze by se zároveň udělala jeho případná indexace. Při exportu obráceně.
Výsledkem by mohl být systém, který by jako celek možná nebyl tak výkonný, ale při interaktivní činnosti by měl kratší odezvy. Také by mu stačilo méně RAM, protože by tam byla pouze data, která aktuálně potřebujeme.
Tuším, že v některých embedded systémech jsou podobné principy použity. Tedy jediná databáze, ve které jsou uloženy všechny informace v potřebné struktuře a tím je setřen rozdíl mezi FS a databází.
Když nad serializovanou databází typu video chci provést střih, musím ji deserializovat, provést sloučení a výstup zase serializovat do nového souboru.Dejme tomu, že i to video se dá tak v širším smyslu brát. Ale typicky se databáze vždy říkalo různým seznamům datových položek, přičemž video je spíš příklad streamu, datového proudu. Důkaz hledej v použití (stejného) videoformátu na nonstop streaming, který už se ani vzdáleně databázi nepodobá.
Pokud do původního (přepisem - bez tempu), tak v určitém okamžiku mohu o data přijít.Tady jste ale právě narazil na vlastnost, kde se databáze i soubor shodují (z důvodu toho, že databáze je uložena v souboru (případně oddílu, ale to je stejné). Když přepíšete záznam v databázi (kusu souboru) in-place, bez dočasného úložiště (tempu), můžete o data přijít. Takže tady máte ve srovnání chybku.
Tedy jediná databáze, ve které jsou uloženy všechny informace v potřebné struktuře a tím je setřen rozdíl mezi FS a databází.Vzhledem k tomu, že se na FS dá nahlížet jako na databázi souborů a adresářů, a databáze se ukládá na FS v podobě souboru nebo na oddíl v podobě nějakého formátu, tak ve výsledu musí být úložné možnosti FS a DB nutně ekvivalentní.
Dejme tomu, že i to video se dá tak v širším smyslu brát. Ale typicky se databáze vždy říkalo různým seznamům datových položek, přičemž video je spíš příklad streamu, datového proudu.
Důkaz hledej v použití (stejného) videoformátu na nonstop streaming, který už se ani vzdáleně databázi nepodobá.
Stream má také nějakou strukturu, kterou je nutné při čtení parsovat. Databáze by tuto potřebu (z pohledu aplikace) odstranila.
Pokud do původního (přepisem - bez tempu), tak v určitém okamžiku mohu o data přijít.Tady jste ale právě narazil na vlastnost, kde se databáze i soubor shodují (z důvodu toho, že databáze je uložena v souboru (případně oddílu, ale to je stejné).
Když přepíšete záznam v databázi (kusu souboru) in-place, bez dočasného úložiště (tempu), můžete o data přijít. Takže tady máte ve srovnání chybku.
Nesouhlasím. Většina databází má tuto vlastnost ošetřenu transakcí. Z pohledu aplikace je uložena buď stará, anebo nová hodnota.
Vzhledem k tomu, že se na FS dá nahlížet jako na databázi souborů a adresářů, a databáze se ukládá na FS v podobě souboru nebo na oddíl v podobě nějakého formátu, tak ve výsledu musí být úložné možnosti FS a DB nutně ekvivalentní.
A tady je ta má úvaha, zda má smysl vyvíjet nejrůznější datové kontejnery nebo by bylo lepší data ukládat rovnou jako relativně malé bloky dat (nody) do databáze a s těmi průběžně pracovat. Databáze by poskytla prostor i pro jejich strukturu.
Stream má také nějakou strukturu, kterou je nutné při čtení parsovat. Databáze by tuto potřebu (z pohledu aplikace) odstranila.Databázová knihovna by jistě neposkytla lepší rozhraní než knihovna pro daný formát.
Nesouhlasím.To jistě můžeš, jen jestli bude tvůj nesouhlas dávat vůbec nějaký smysl.
Většina databází má tuto vlastnost ošetřenu transakcí.Tak na to zkusíme důkaz sporem :). Shrneme si vaše tvrzení: a) "Nesouhlasím"... interpretuju tak, že podle vás nelze ve filesystému použít transakce. b) "Většina databází má tuto vlastnost ošetřenu transakcí."... omezíme se tedy na ty, které to umí. A přidám jeden známý fakt: c) Velká část těchto transakčních databází je implementována pomocí souborů ve filesystému. Spor je doufám zřejmý.
A tady je ta má úvaha, zda má smysl vyvíjet nejrůznější datové kontejnery nebo by bylo lepší data ukládat rovnou jako relativně malé bloky dat (nody) do databáze a s těmi průběžně pracovat. Databáze by poskytla prostor i pro jejich strukturu.Tedy celá otázka se od DB versus FS přesouvá k otázce granularity a datového formátu. Podle toho má pak smysl vybírat způsob uložení, ale šířeji než jen otázkou typu "FS nebo DB", která nedává bez bližší specifikace valný smysl.
Spor je doufám zřejmý.Když aplikaci killnu mezi fopen se zkrácením souboru a printf, soubor bude prázdný nebo neúplný. Když ji odstřelím v průběhu databázového dotazu, transakce se provede nebo ne, ale data budou konzistentní.
Když aplikaci killnu mezi fopen se zkrácením souboru a printf, soubor bude prázdný nebo neúplný. Když ji odstřelím v průběhu databázového dotazu, transakce se provede nebo ne, ale data budou konzistentní.Ani jednu z těchto vět ti nevyvracím, když porovnáš špatnou aplikaci (nebo špatný filesystém, to už je jedno) s dobrou databází, tak tvůj závěr nedává tak úplně smysl.
A tady je ta má úvaha, zda má smysl vyvíjet nejrůznější datové kontejnery nebo by bylo lepší data ukládat rovnou jako relativně malé bloky dat (nody) do databáze a s těmi průběžně pracovat. Databáze by poskytla prostor i pro jejich strukturu.
Toto mi už zase přijde jako extrém. Ta data mají nějaké využití a pro to využití je v drtivé většině případů čistě sekvenční přístup. A případné operace se také dějí s celými sekvencemi dat a nikoliv jen s několika (náhodnými) jednotlivými framy.
A je potřeba co nejvyšší sekvenční rychlost a v tom DB zrovna nevyniká. Takže takový databázový stroj by byl sice (uznávám) velmi univerzální, ale také velmi drahý (aby dosáhl stejného výkonu jako sekvenční soubor).
Spis je to otazka proc firmy prakticky neprodavaji support PGSQL, zatimco MySQL prodava kde kdo a navic je na to vice toolu. A kdyz neni support tak si to moc zakazniku nenasadi.
Interni nebo externi replikace, to je v zasade jedno. Technicky vzato DB2 ma 2 druhy externi replikace (MQ, ASN) a 1 interni (HADR). Problem je spis v nizke kvalite replikaci pro PGSQL, jsou to nedodelky. Co ja se se slony1 a skype replikaci natrapil. To slony1 je neuveritelne citlive na timing pri admin prikazech a kdyz se rozbije tak ze musi opravovat aktualizaci systemovych tablic neni mozne ho uz jakymkoliv prikazem dat doporadku snad s vyjimkou force uninstall
Ja navrhoval slony teamu aby se obslehla ASN replikace z DB2, ktera je velmi jednoduse navrzena (slovy 12 systemovych tablic) ve srovnani se slony1 a umi async multimaster a ostatni dulezite featury jako napriklad si vybrat pomoci WHERE ktere radky vlastne chci replikovat, transformovat replikovana data, replikovat views, replikovat LOB, jedna tabulka se muze replikovat vicekrat, neni potreba vytvaret rucne cilove tabulky, neni potreba obousmerne spojeni u serveru proste klasika navazovani spojeni cil -> zdroj. Ovsem priorita vyvoje slony1 neni udelat funkcni reseni ale zjevne vyblbnout se pri kodovani, takze prece nebudeme kopirovat deset let funkcni design, nakodime si slony 2.0 s minimalnim redesignem enginu, mozna to vyjde tentokrat, ze? Budto jsou to nekompetentni vyvojari kteri nedokazi poznat ze vysledek prace za moc nestoji nebo jim ego nedovoli obslehnout fungujici system. Smutny fakt je ze slony1 je stale nejlepsi replikace, ta z pg 9 je dost nestabilni, to snad netestoval nikdo.
MySQL pochopilo potreby LAMP uzivatelu, dalo jim to co potrebovali a proto se tak rozsirilo i pres svoji nekvalitu. Je to sice nekvalitni databaze, ale uspesne resi jejich problemy (napr. query cache je velmi dobra pro LAMP) a proto ji pouzivaji. Dostanou od ni to co ocekavaji.
PostgreSQL proste nedokaze vyresit problemy podnikovych uzivatelu a ani LAMP uzivatelu a proto se rozsiril do techto oblasti minimalne. Pravda pokusy tu byly - Great Bridge, Sunem podporovany Pgsql. Dnes tu mame EDB, ta ale tezi predevsim z Oracle kompatibility. Ty jejich add-on pro pgsql za ty penize co za ne chteji nestoji.PGSQL team proste nechape pozadavky podnikovych uzivatelu. Vzhledem k tomu ze se jedna o OSS projekt tak oni je ani chapat nemusi protoze nejsou zavisli na financovani od nich. Dokud se nestane komercnim subjektem jako bylo mysql tak na pozadavky zakazniku bude vzdy kaslat.
Tiskni Sdílej: