gpt4 book ai didi

node.js - ArangoDB 事务不会因错误而回滚

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:23 25 4
gpt4 key购买 nike

更新:找到解决方案。 ARANGODB 集群不支持事务。仅支持单个实例。

我正在尝试使用 arangoJS 库的交易功能。我将介绍的函数只是一个虚拟函数,它插入两条记录,然后尝试获取不存在的文档。获取不存在的文档会产生错误,并且事务必须回滚。事实上,在尝试获取不存在的文档后会生成错误。但是,数据库不会回滚,两个插入的文档仍保留在数据库中。有谁知道怎么解决吗?

"updateCustomer" : function (options, cb) {
const action = String(function (params) {
// This code will be executed inside ArangoDB!
const db = require('@arangodb').db;
const aql = require('@arangodb').aql;
const customer = db._collection('customer');
try{
//insert two documents
db._query(aql`INSERT ${params.user} INTO ${customer} Return NEW`);
db._query(aql`INSERT ${params.customer} INTO ${customer} Return NEW`);
//Get a document that doesn't exist
customer.document('does-not-exist');
}catch(e){
throw new Error("Everything is bad");
}
});
let opts = {
collections : {
read : ["customer"],
write : ["customer"]
},
action : action,
params : {user: options, customer: options},
lockTimeout : 5
};
Arango.transaction(opts,(err, result) => {
console.log("err: " + err);
console.log("result: " + JSON.stringify(result));
return cb(err, result);
});
}

"transaction" : function (options, cb) {
utils.dbConnect().transaction(options.collections, options.action, options.params, options.lockTimeout, cb);
}

更新:我在单个实例 ArangoDB 上尝试了此事务,并且它有效。但是,它不适用于集群。 ArangoDB集群不支持事务吗?

最佳答案

单个文档操作在 arangodb 集群中是原子的。目前还没有多文档。我们目前正在研究用于多文档操作的 ACID。

关于node.js - ArangoDB 事务不会因错误而回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com