在我寻求解决 1000 多个客户端的过程中,每个客户端都有单独的 ArangoDB,在某个东西正在运行时记录单独的信息……我们需要将这些信息聚合回单个主节点服务器中的集合,以便可以对其进行查询和报告。看看 ArangoDB 中 JavaScript 和操作的强大功能……这是否可能且足够快以将数据“复制”回主节点。
1) 每个客户端都记录本地运行数据
2) 一个 Action 触发器被执行(让我们先看看神圣的废话场景,没有批量上传或任何东西)......对于每次插入,获取本地插入的数据并向主节点发出准确的请求以插入公共(public)集合(文档存储在每个客户端上的数据具有唯一标识它的属性等)。
3) 这将有效地“复制”/聚合每个客户端的唯一数据到单个主节点集合。
想法?
谢谢,
肯
最佳答案
对此的初步想法:
您可以将插入/更新/删除操作包装到您自己的 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 仍然可以工作,但不会触发自定义操作。
有趣的问题是,您是否可以接受“发送到另一台服务器调用”时的线程阻塞,以及如果将数据发送到另一台服务器由于某种原因失败,您会怎么做。
关于arangodb - 使用 ArangoDB 时的复制架构帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22999090/