Portál AbcLinuxu, 10. května 2025 20:46
Dobry den,
rad by som poznal vas nazor na nasledujuci usecase, popripade rady ako dalej.
Mame prisne strukturovane vedecke data. Logicky su rozdelene do tabuliek podla prefixu. Kazda tabulka zodpoveda inemu prefixu. V podstate su to key-value tabulky (80% citanie, 20% zapis) s tym, ze hodnota ma 7 atributov a je rozdelena do stlpcov. Kluc stlpec VARCHAR(38) s unique btree indexom. Ostatne stlpce su VARCHAR(64).
Historicky sme ukladali data do jednej Postgresovej super tabulky.
Potom sme super tabulku rozdelili na particie (podla prefixu)
Zitili sme, ze Postgres ma velky overhead - vyexportovane CSV malo 5GB, tabulka na disku zaberala 7GB.
Ked sa velkost databazy dostala na velkost cca 10TB uz sa s Postgresom nedalo rozumne pracovat.
Importovanie dat z 10GB CSV (prikaz COPY) trval viac ako 24hodin.
Rozhodli sme sa opustit Postgres a tabulky vyexportovat do 3700 SQLITE databaz podla prefixu na 10GBE NFS storage.
3-4 roky to bolo fajn. Data pribudali. Dostali sme sa na hranicu 30TB a kazda SQLITE databaza na priemerne cca 11GB.
SQLITE je super, velmi dobre sa s tym pracuje, majma Python, Pandas. No zaciname pomaly narazat na limity SQLITE aj pri pouzivani tuningu s .PRAGMA parametrami.
Rad by som sa opytal ci by ste mi vedeli odporucit nejaku technologiu na ukladanie tabuliek a import dat v rozumnom case. Hlavnu prioritu ma integrita dat, podpora pythonu. Davame prednost single serveru pred clustrom. Dakujem.
Řešení dotazu:
Ano, samozrejme chapeme vyhody a nevyhody NFS a single user access.
Vyhodou je akasi "kniznica" SQLite databaz, ked administrator ma povolenie prepisovat subory. Ostatni kolegovia len citanie. Dalsiu velku vyhodu, ktoru sme ziskali je portabilita. Staci si nakopirovat databazu/databazy ku sebe na pocitac. Ak chce clovek pracovat nemusi mat pripojenie k serveru.
A nehovorím o NoSQL databázach, len o Berkeley DB. To je súbor na disku, ktorý obsahuje strom s údajmi. Nič viac.Berkeley DB je jedna z NoSQL databází. Ano, vznikla dřív, než se jim tak začalo říkat, to ale na věci nic nemění.
Berkley DB, bol horucim kandidatom ked sme odchadzali od Postgres.
Pamatam si, ze najvacsimi nevyhodami boli: lebo Oracle, lebo licencia, lebo Java, lebo SQLite ma lepsiu podporu v Python.
Takze viac politicke rozhodnutie ako logicke :).
Hlavny problem Postgresu bol v particiach.
Pouzivalili sme particie zalozene na LIST. Nieco ako
CREATE TABLE abcdefgh (id INTEGER, kluc VARCHAR(38), prefix VARCHAR(3), hodnota1 INTEGER, hodnota2 VARCHAR(64) )
PARTITION BY LIST(prefix);
CREATE TABLE abcdefgh_part_prefix PARTITION OF abcdefgh FOR VALUES IN ('prefix1');
Problem bol velky overhead na disku a potom pri importe CSV Postgres musel kazdy jeden riadok urobit:
- match na prefix (prefixov je cca 3700) aby zaznam zaradil do pozadovane particie
- prehladat zlozeny unique index stlpcov kluc+prefix aby sa vyhol duplicitam
Pri importe sme prepli tabulku do unlogged modu. Prinieslo to zrychlenie, avsak nerelevantne.
Toto su pekne otazky na ktore by sme sa mali zamerat. Mate uplnu pravdu uzkym hrdlom je NFS a import data nez NFS. Dakujem za tipy.
Tieto otazky vychadzaju zo standardneho modelu databazovych systemov - Client/Server. Pouzivali sme tuto architekturu pri rieseni s Postgresql. No koli pomalosti sposobenynou velym mnozstvom particii zalozenych na
PARTITION BY LIST(prefix)
a UNIQUE contraint sme presli na SQLite. https://www.abclinuxu.cz/poradna/databaze/show/470578#19
V sucasnoti pouzivame SQLite databazy ako "kniznicu" pristupnu cez NFS s prisne strukturovanymi datami. Kolegovia vedia pracovat s SQLite databazami v read-only cez NFS share alebo si SQLite databazy nakopiruju k sebe na PC. Len administrator ma pravo zapisu/prepisu novych dat - prave koli tomu ze SQLite nie je vhodna na multi access.
Problem nastava, ked administrator dostane balik napr. 50-80GB surovych dat. Jedna sa o velky CSV subor. Musi data roztriedit podla prefixov (3700) a naimportovat data do jednotlivych SQLite databaz (3700).
Toto je asi najvacsi problem. Triedenie a importovanie podla prefixov.
Zatial to vyzera, ze najlepsim riesenim bude SSH pristup na server a import nebude robit cez NFS ale lokalne na servery. No nie som moc spokojny s tymto riesenim.
Zatial to vyzera, ze najlepsim riesenim bude SSH pristup na server a import nebude robit cez NFS ale lokalne na servery. No nie som moc spokojny s tymto riesenim.Já bych zkusil PostgreSQL. Odpadnou vám tím problémy se sdílením dat, protože je budete mít na jednom serveru, ke kterému se může připojit kdokoli.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.