Сериализация "уровень изоляции" в MongoDB или проблема потерянного обновления
Я понимаю, что MongoDB-это решение NoSQL, но мне было интересно, есть ли у него какой-то эквивалент уровня изоляции транзакций на уровне сериализации.
Если нет, как бы вы решили проблему потерянного обновления в MongoDB?
Я хочу сохранить историю ревизий некоторых данных в Mongo, и каждая ревизия должна указывать на предыдущую. Как я могу убедиться, что для моих данных существует не более одной последней ревизии, а с другой стороны, никакая ревизия не теряется из-за параллельные обновления?
* * Edit**
ой, RTFM, это действительно возможно:http://www.mongodb.org/display/DOCS/Atomic + операции
Не уверен, что я должен закрыть вопрос, так как знание может иметь отношение к другим людям..
1 ответов
Да, это возможно, пока вы держите историю в одном документе. MongoDB поддерживает атомарные обновления в рамках документа, но не через несколько документов в коллекции.
таким образом, вы можете встроить историю в массив, используя схему примерно так:
{
_id: 12345,
value: "Apple",
history:
[
{ revisionid: 2, value: "Orange" },
{ revisionid: 1, value: "Pear" }
]
}
например, вы можете вставить новый документ:
db.things.insert( { _id: 123, value: "Apple" } )
затем обновите его в одной атомной операции:
db.things.update( { _id: 123 },
{
$set: { value: "Orange" },
$push : { history : { revisionid: 1, value: "Apple" } }
}
)