Какие гарантии заказа операции существуют без долговечности (монго)? - PullRequest
2 голосов
/ 07 ноября 2011

Предположим, у вас есть база данных ACID. Без явной гарантии заказа операций вы все равно можете сделать вывод о заказе в результате долговечности.

, например

  1. Я вставляю x в базу данных и оператор возвращает
  2. Теперь я вставляю y
  3. из-за гарантии долговечности, я знаю, x был сделан долговечным до y.

Таким образом, в случае аварии у меня либо:

  1. ни один из x или y в базе данных
  2. только x
  3. и x и y.

Теперь предположим, что база данных с гарантией долговечности. например MongoDB без safemode или getlasterror.

Какая у меня гарантия того, что первая операция станет долговечной, а вторая - прочной?
Пожалуйста, укажите мне часть документации, которая требует этого, или соответствующий тест.
В случае сбоя моя база данных может содержать y, но не x?

EDIT:
Кажется, по умолчанию (только?) Механизм хранения - это механизм отображения файлов в памяти. Если журналирование не включено (теперь включено по умолчанию), похоже, что сбой сервера может привести к непоследовательному и непоправимому состоянию. Я думаю, ответ лежит в журнале.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Чтобы ответить на мой вопрос:

Есть гарантия с ведением журнала. В частности, журналы write-ahead redo logs.

При включенном ведении журнала файлы журнала будут создаваться в журнале / подкаталог под выбранным вами путем базы данных. Эти файлы для записи повторить логи. Кроме того, последний файл порядкового номера, journal / lsn, будет быть создан. Чистое отключение удаляет все файлы в журнале / .

Источник: http://www.mongodb.org/display/DOCS/Journaling#Journaling-JournalFiles

Нет гарантии (я могу найти или понять) без ведения журнала. MongoDB использует отображенные в память файлы в качестве основного механизма хранения. Запись в память не сразу отражается в файловой системе. В случае сбоя ОС (например) файлы могут находиться в несогласованном и неисправимом состоянии.

1 голос
/ 08 ноября 2011

В зависимости от вашего варианта использования, вы можете использовать Capped Collections Mongo , которые поддерживают порядок вставки объектов в коллекции. С некоторыми ограничениями, однако, проверьте документы.

Вы также можете получить больше информации от Сортировка и естественный порядок :

Для стандартных таблиц естественный порядок не особенно полезен, потому что, хотя порядок часто близок к порядку вставки, не гарантируется, что он будет . Однако для ограниченных коллекций естественный порядок гарантированно будет порядком вставки.

...