MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Комитиране и постоянство на диска в NoSQL (MongoDB)

Чудя се откъде идва това меме. Първо, нищо наистина гарантира, че всичко се записва на действителния HDD поради всички кеширащи слоеве и дори традиционните RDBMS не се опитват да пишат във файлове през цялото време, в противен случай те не биха били толкова бързи, но подробностите варират значително (вижте за пример адаптивно промиване в InnoDB ).

Трябва да се занимавате само с първия слой, който по същество е въпросът, когато базата данни се опитва да запише на диск. Сега има първия кеширащ слой:Вместо да записват в действителните таблици/колекции, много DB (включително MongoDB) използват журналиране:Пишат във файл само за добавяне, който редовно ще се обединява обратно в действителните файлове с данни. Ако нещо се случи и е в дневника, вие сте добре.

Сега въпросът е дали искате да пишете в дневника и как да го направите. В MongoDB можете да контролирате това с помощта на загриженост за писане , т.е. можете да накарате кода на вашето приложение да изчака, докато MongoDB напише в дневника за конкретен запис (или за всички записи). В MongoDB изчакването на ангажимента на дневника отнема най-много 10 ms с конфигурация по подразбиране, ако дневникът и файловете с данни са на различни блокови устройства, 33 ms, ако са на едно и също блоково устройство. journalCommitInternval може също да бъде модифициран, ако е необходимо.

Събрах някои подробности за журналирането на MongoDB в друг отговор .

Като странична бележка, издръжливостта всъщност няма много общо с транзакциите. Транзакциите осигуряват изолация и последователност, напр. можете да промените няколко неща наведнъж и читателите гарантирано ще получат или новото, или старото, но не и някакво междинно състояние. С други думи, безопасна за транзакции база данни може да бъде база данни в паметта, която изобщо не записва на диска.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Възможно ли е да се създаде нова база данни в MongoDB с Mongoose?

  2. Как да премахнете остарелите полета в Mongo?

  3. Извличане на d3.js масив от url

  4. Как да получите масив от json обекти, а не mongoose документи

  5. Как да валидирате в Mongoose масив и същевременно неговите елементи