In memory SQL

M.

Re:In memory SQL
« Odpověď #15 kdy: 21. 10. 2016, 11:00:28 »
A co zkusit do Postgresu strčit modul redis_fdw a napojit ho na Redis?
Pak  mám data v Redisu v RAM a přistupuji k tomu přes SQL skrz Postgres.
Ale zda se tím dá dosáhnout požadovaného nevím.
Já to řeším na aplikční úrovni, že co mé se kešuje v Redisu a co má být persitentní, to strká do PgSQL.


Trupik

Re:In memory SQL
« Odpověď #16 kdy: 21. 10. 2016, 11:38:33 »
Nejde mi o řešení nějaké aktulní situace. S posgresem žiju už 10 let a tuním ho, optimalizuju ... Trochu opruz je simulovat v něm materializované view.
Ale žiju v představě (možná mi ji někdo vyvrátíte), že postges používá nějakou komplikovanou strategii pro vlastní cache a co nemá u sebe je v cache souborů v RAM linuxu.
Myslím, že toto zodpovedá realite.
A příjde mi, že pokud by se celé tabulky a indexy načetli do RAM v lineárním adresování, snížila by se režie přístupu k datům v RAM. Nemuselo by se to přepočítávat na bloky atd.
Ono by to bolo lineárne len do prvého UPDATE/INSERT/DELETE. Potom by sa tie dáta museli opäť všetky zoradiť, alebo by sa museli aj tak organizovať do stromových štruktúr, teda indexovať.
Možná by to mohlo umět používat i SIMD nebo podobné moderní instrukce CPU, mohlo by to být lépe optimalizované pro víceprocesorové zpracování a kdoví co dál.
Neviem ako SIMD, ale viacprocesorové spracovanie jednotlivej query (parallel execution) je vo verzii 9.6, ktorá vyšla pred mesiacom.
Prostě by stejný dotaz mohl trvat třeba jen polovinu doby. A zrychlit odezvy má smysl vždy.
Veľké zrýchlenie odozvy sa dá dosiahnuť použitím cache (napríklad memcached). Bohužiaľ to vyžaduje zásahy do aplikácie.
Jde mi o to včas přejít na nové technologie. Ale na to jak dlouho se in-memory databáze používají, jsem nenašel náhradu za postgresql.
To je chvályhodný cieľ, držím palce.

andrej

Re:In memory SQL
« Odpověď #17 kdy: 21. 10. 2016, 12:20:05 »
nema nahodou postgres pri dostatocne velkej pamati v podstate vsetko v RAM?

Kit

Re:In memory SQL
« Odpověď #18 kdy: 21. 10. 2016, 12:39:45 »
nema nahodou postgres pri dostatocne velkej pamati v podstate vsetko v RAM?

V podstatě ano.

Tazatel se však ptá, zda v takovém případě používá i algoritmy, které jsou vhodnější pro RAM než pro disk, tedy binární vyhledávání místo B-stromu. Ovšem rozdíly budou podle mne spíše marginální.

Pokud tedy PostgreSQL v některých případech výkonově nestačí, je nutné se spíš zaměřit na prováděcí plány dotazů, strukturu triggerů a případně i vnořených procedur. Pokud bude pravidelně selektovat agregáty velkých tabulek, tak ani přesunutí do RAM problém nevyřeší.

dewfw

Re:In memory SQL
« Odpověď #19 kdy: 21. 10. 2016, 22:21:37 »
Mozem odporucit mnesia (erlang). Je to by default in memory a vie sa to sem tam odlozit i na disk. Je to high performance, len to nema moc sql pristup. Co sa tyka toho, tak imho ci uz clovek pise sql, alebo pouzije priamo vhodny programovaci jazyk (funkcionalny ;) je jedno. Dokonca to sql je v mnohych pripadoch len "write once, do not read" stav. Pokial clovek nevyuziva CTE, tak normalizovane tabulky nutia casto k sialenym (neprehladnym) selektom.


podhy

Re:In memory SQL
« Odpověď #20 kdy: 22. 10. 2016, 16:37:34 »
MemSQL

čumil

Re:In memory SQL
« Odpověď #21 kdy: 22. 10. 2016, 17:47:07 »
Máte to blbě

správně je to

In memory of SQL

Re:In memory SQL
« Odpověď #22 kdy: 28. 10. 2016, 10:32:49 »
Extrémně rychlá paměťová SQL databáze je monetdb https://www.monetdb.org/Home

Dneska je celá kategorie databází označovaná jako NewSQL - která už pracuje s daty úplně jinak než Postgres - Postgres má data ve formátu, který vyhovuje uložení na disk - nové databáze už si data drží primárně v RAMce a na disk udělají občas backup a na disku si drží transakční log. Když máte štěstí, tak tyto databáze mohou být o řád až dva rychlejší než klasická db (data ale musí být 100% v RAM). Na druhou stranu vzhledem k mládí a k výrazně nižšímu počtu uživatelů musí člověk počítat s větší pravděpodobností výskytu chyb a provozních problémů. Klasické databáze jsou ověřené časem a počtem uživatelů. To u nových db samozřejmě neplatí. Hodně záleží na zátěži, typu a objemu dat - někdy bude benefit větší, někdy menší.

M.

Re:In memory SQL
« Odpověď #23 kdy: 28. 10. 2016, 12:16:58 »
MonetDB ale není klasická in RAM DB, ne (při porovnání s memcached/Redis/...)? Jen s trocou štestí mám data v RAM a jede rychle, ale pořád aktivně jede přes disk.
Když má data v RAM, tak je asi rychlejší jak PotgreSQL s podobně obsazenou a využitou RAM.

Re:In memory SQL
« Odpověď #24 kdy: 28. 10. 2016, 22:40:22 »
MonetDB ale není klasická in RAM DB, ne (při porovnání s memcached/Redis/...)? Jen s trocou štestí mám data v RAM a jede rychle, ale pořád aktivně jede přes disk.
Když má data v RAM, tak je asi rychlejší jak PotgreSQL s podobně obsazenou a využitou RAM.
Memcached/Redis to jsou více/méně sofistikované cache key/value dat - jedná se o jednoduché jednoúčelové databáze. Oprati tomu je Monet obecnější - s velkou většinou funkcí typických pro paměťové databáze - sloupcové uložení dat, efektivní komprimace, optimalizace CPU, diskové operace jsou nahrazeny virtuální pamětí. Paměťové databáze jsou relativní novinkou, těžko se dá označit nějaká technologie jako klasická. V každém případku je MonetDB jednou z nejstarších databází, které rovnou byly navrhovány jako paměťové - cca 20 a více let. O memchaced pravděpodobně nikdo z jejich tvůrců neuvažoval jako o databázi - byl to jednoduchý jednoúčelový nástroj, který umožňoval sdílený přístup do paměti.

ntpt

Re:In memory SQL
« Odpověď #25 kdy: 29. 10. 2016, 19:07:53 »
A co tkahle použít v postgresu TABLESPACES které umožní umístit určité tabulky na jiný disk nebo RAM disk . Podotýkám, že  u jednotlivé tablespace lze nastavit optimalizace jné než v centrálním clusteru

Re:In memory SQL
« Odpověď #26 kdy: 30. 10. 2016, 05:44:17 »
A co tkahle použít v postgresu TABLESPACES které umožní umístit určité tabulky na jiný disk nebo RAM disk . Podotýkám, že  u jednotlivé tablespace lze nastavit optimalizace jné než v centrálním clusteru
Pokud se bavíme o Postgresu, tak to je nesmyl - je úplně jedno jestli jsou data ve file system cachi nebo v Pg cache nebo v ramdisku - pokaždé mají stejný formát.