对此的初步想法:
您可以将插入/更新/删除操作包装到您自己的 API 中的特定集合中。您可以在 ArangoDB 中编写自己的路由,而不是使用 ArangoDB 为文档提供的常规 HTTP POST、PUT/PATCH、DELETE 路由。ArangoDB 有一个框架 Foxx 来执行此操作。
例如,您可以创建自己的插入路线。在路由内部,您可以执行任何类型的 JavaScript 代码。例如,这是一个简单的插入包装器,它只是将数据插入到集合 mydata 中:
controller.post('/my-insert', function (req, res) {
var document = req.body();
try {
var result = db.mydata.save(doc);
// TODO: send off data to external server etc.
res.json(result); // send back result to original client
}
catch (err) {
// TODO: handle and report error
}
});
在上面的示例中,数据存储在本地集合中,并将响应发送回客户端。但是,您可以在保存操作后执行额外的 JavaScript 代码。因此,您实际上可以从那里将数据发送到另一台服务器。
您可以对更新和删除路由执行相同的操作。此解决方案要求您的所有操作都使用自定义路由,并且您不要使用常规文档 API 修改数据。当然,使用常规 API 仍然可以工作,但不会触发自定义操作。
有趣的问题是您是否可以接受“发送到另一台服务器调用”中的线程阻塞以及如果由于某种原因向另一台服务器发送数据失败时您会做什么。