Vlákno názorů k článku PostgreSQL 18: třicet let otevřeného vývoje databáze od Heron - Díky moc za krásné shrnutí, stejně jako každý...

  • Článek je starý, nové názory již nelze přidávat.
  • 18. 4. 2025 20:18

    Heron

    Já už PostgreSQL pomalu opouštím. Používali jsme jej ve firmě od roku 2008 až do mého odchodu v roce 2019. Naprosto skvělá databáze. Potom jsem přešel do jiné firmy, programuji v Golangu, pokud možno vše ve standardní knihovně. Aktuální horkou novinkou v Go 1.24 je SHA-3 a ten balíček, krom základních kryptografických funkcí SHA-3 128b, 256, a 512b umí také algoritmus SHAKE, kterým je možné generovat menší výstupu, třeba jen 64b. A také je v Golangu open source MIN.io. Napsal jsem o tom dva články: SHA-3 a MIN.io (tento je inspirovaný článkem z roku 2019 od Pavla Tišnovského). Takže pro programátory v Golangu je standardní knihovna použitelná už na vše (v mém případě konverze obrázků do velmi optimalizovaného PNG), komprese dat (LZW), ukládání dat (GOP).

    Pomalu mi přestává stačit datový typ BYTEA v PostgreSQL, takže teď už mám nasazené MIN.io na soubory o libovolné velikosti.

    Takže vše nejlepší PostgreSQL ke třicetinám, já od něj po 17 letech odcházím. Ale vy ostatní nemusíte, je to skvělá databáze, nikdy jsme nepřišli o žádná data. Jen už skutečně není vhodný pro ukládání 40GB souborů (BYTEA má limit 1GB).

    Pro data o velikostech do 1GB ale stále používejte PostgreSQL, máte garantováno, že po úspěšném commitu jsou ta data velmi bezpečně uložena. A k tomu skvělé SQL.

  • 19. 4. 2025 1:26

    Franta Kučera

    Chtít ukládat gigabajtové soubory do DB, to je pro mne úplně z jiného světa. Neříkám, že to nejde (ostatně FS je svým způsobem taky databáze), ale databáze, zejména ty relační, mají svůj přínos jinde – hodně záznamů / řádků, sloupečků + vyhledávání v nich a další operace nad těmi atributy. Pokud je cílem ukládat velké soubory, tak je to opravdu úkol spíš pro FS nebo něco síťového s API podobným souborovému systému. Jestli ti to dlouhé roky fungovalo, tak je to důkaz toho, jak je PostgreSQL dobrá a pružná databáze.

    P.S. Vím, že jsme se o tom kdysi bavili na Ábíčku, i když tehdy snad nešlo o tak velké soubory. Moje hlavní výhrady byly v tom, že je potřeba ten obsah souborů protlačit přes API/protokol té DB a přes aplikační vrstvu; ne až tak v tom, že by DB ta data nedokázala uložit. Oproti tomu když je ten velký soubor na FS, tak se dají dělat různé optimalizace a přes aplikaci to vůbec nemusí jít – ta dává jen instrukce k tomu, co se má udělat – a reálně to udělá třeba Apache nebo jiný program a Jádro (viz funkce sendfile() a zero-copy přenos bez nutnosti přepínání mezi Jádrem a uživatelským prostorem). Argumentem pro uložení všeho v DB je transakčnost a konzistence – ale to platí do doby, dokud to ta DB a aplikace v pohodě zvládají – pak už je podle mého lepší obětovat část konzistence (ve smyslu, že mi na FS můžou zůstat viset soubory, na které už v DB neukazuje žádný záznam).

  • 19. 4. 2025 7:38

    Heron

    Chtít ukládat gigabajtové soubory do DB, to je pro mne úplně z jiného světa.

    Naprosto chápu tvé argumenty, jen jim dodám své. PostgreSQL poskytuje perfektní ACID, a pokud potřebuji ke svých binárním datům také nějaká metadata, tak uložit vše do jedné DB jedním commitem (potvrzenou transakcí) je velká výhoda. Data a metada se uloží jedním příkazem.

    Stejně tak na data a metadata stačí jeden protokol. Pokud mám všechny appky napsané tak, že používají jeden síťový protokol (PostgreSQL protocol verze 2), tak mám vyřešené vše.

  • 19. 4. 2025 7:44

    Heron

    sendfile() a zero-copy

    Tohle je implementační detail a pochybuji o tom, že to v praxi, tedy přenos dat po síti LAN nebo dokonce přes internet, kde jsou latence USA - Česko klidně 100ms, tak řešit několik volání jádra je v tomto případě zcela irelevantní. Zatímco volání jádra má latence 1us, tak následný přenos dat přes Internet je 100 000x pomalejší.

    sendfile a zero-copy optimalizace jsou skvělé pro lokální programy, kde data neopustí PC do sítě. Šetří to paměť, počet callbacků do kernelu apod. Tedy všude tam kde jde o každých 100ns. To ano.

  • 23. 4. 2025 13:08

    bez prezdivky ...

    U ukladani do souboru muzes narazit na opravneni. Dalsi aspekty jsou treba pripadna migrace na jiny system. Z pohledu aplikace je to dalsi rozhrani ktery musis nejak obsluhovat.

    Takze z mnoha duvodu v mnoha pripadech je ukladani souboru do databaze vlastne ta lepsi cesta.

    Jasne, je to ponekud drahe, ale ...

  • 20. 4. 2025 21:26

    Marek

    Tak zrovna SHA-3 a SHAKE si můžeš implementovat sám. Je to triviální, na 200-300 řádků v C se spoustou prázdných řádků. V Go to může být ještě mnohem méně.