У меня есть некоторые вопросы после чтения этого сообщения: Perform Two Phase Commits on MongodbMongoDB двухфазной Фиксация И Асинхронный Операция
Questions1: В посте, он определил пример обратно сделки. Мой вопрос - как выглядит код? Это просто объединить все в одну функцию, как это? Если нет, то HWO в вэнь организовать весь код в этой должности
var t = db.transactions.findOne({ state: "initial" })
db.transactions.update(
{ _id: t._id, state: "initial" },
{
$set: { state: "pending" },
$currentDate: { lastModified: true }
}
)
db.accounts.update(
{ _id: t.source, pendingTransactions: { $ne: t._id } },
{ $inc: { balance: -t.value }, $push: { pendingTransactions: t._id } }
)
db.accounts.update(
{ _id: t.destination, pendingTransactions: { $ne: t._id } },
{ $inc: { balance: t.value }, $push: { pendingTransactions: t._id } }
)
db.transactions.update(
{ _id: t._id, state: "pending" },
{
$set: { state: "applied" },
$currentDate: { lastModified: true }
}
)
db.accounts.update(
{ _id: t.source, pendingTransactions: t._id },
{ $pull: { pendingTransactions: t._id } }
)
db.accounts.update(
{ _id: t.destination, pendingTransactions: t._id },
{ $pull: { pendingTransactions: t._id } }
)
db.transactions.update(
{ _id: t._id, state: "applied" },
{
$set: { state: "done" },
$currentDate: { lastModified: true }
}
)
question2: С MongoDB гарантировать его работа атомная при работе с одним документом, то я могу просто обернуть все вышеуказанные блоки в обещания и цепи их вместе, поскольку каждый блок только модифицирует один документ.
Итак, какая часть делает «две фразы фиксации» особенными? –
Я не касался части «двухфазной фиксации», я обновляю свой ответ. – Shanoor