sql >> Databáze >  >> NoSQL >> MongoDB

Závazek a perzistence disku v NoSQL (MongoDB)

Zajímalo by mě, odkud tento meme pochází. Za prvé, nic skutečně zaručuje, že se na skutečný HDD zapíše cokoliv díky všem vrstvám mezipaměti, a dokonce i tradiční RDBMS se nepokouší neustále zapisovat do souborů, jinak by nebyly tak rychlé, ale podrobnosti se velmi liší (viz např. příklad adaptivní proplachování v InnoDB ).

Měli byste se zabývat pouze první vrstvou, což je v podstatě otázka, když se databáze pokouší zapisovat na disk. Nyní je zde první vrstva mezipaměti:Místo zápisu do skutečných tabulek/kolekcí mnoho DB (včetně MongoDB) používá žurnálování:Zapisujte do souboru pouze pro připojení, který bude pravidelně slučován zpět do skutečných datových souborů. V čemkoli jde dolů a je to v deníku, jste v pořádku.

Nyní je otázkou, zda chcete psát do deníku a jak to udělat. V MongoDB to můžete ovládat pomocí zájem o zápis , tj. můžete nechat svůj aplikační kód čekat, dokud MongoDB nezapíše do deníku pro konkrétní zápis (nebo pro všechny zápisy). V MongoDB trvá čekání na potvrzení žurnálu při výchozí konfiguraci maximálně 10 ms, pokud jsou žurnál a datové soubory na různých blokových zařízeních, 33 ms, pokud jsou na stejném blokovém zařízení. journalCommitInternval lze také v případě potřeby upravit.

Shromáždil jsem nějaké podrobnosti o žurnálování MongoDB v jiné odpovědi .

Jako vedlejší poznámka, trvanlivost ve skutečnosti nemá mnoho společného s transakcemi. Transakce poskytují izolaci a konzistenci, např. můžete změnit několik věcí najednou a čtenáři mají zaručeno, že dostanou buď nový, nebo starý, ale ne nějaký stav mezi tím. Jinými slovy, databáze bezpečná pro transakce může být databáze v paměti, která vůbec nezapisuje na disk.




  1. Nastavte klíč/hodnotu redis pomocí camel-redis

  2. Jak vložíte soubor obrázku do objektu json?

  3. Streamujte z mongodb kurzoru do expresní odpovědi v node.js

  4. redis paměti a cpu špičky