Сериализация "уровень изоляции" в 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" } }
    }
)