在我寻求解决1000个客户端的过程中,每个客户端都有单独的ArangoDB,在运行某些内容时记录个人信息...我们需要将这些信息聚合回单个主节点服务器中的集合,以便可以进行查询和报告在上面。研究ArangoDB中JavaScript和动作的强大功能......这是否可行且足够快,可以将数据“复制”回主节点。
1)每个客户端都记录了本地运行数据
2)执行动作触发器(让我们首先采取神圣的垃圾场景,不进行批量上传或任何事情)...对于每个插入,获取本地插入的数据并向主节点发出确切的请求以插入公共集合(存储在每个客户端上的文档数据具有唯一标识它的属性等)。
3)这将有效地“复制”/聚合每个客户端的唯一数据到单个主节点集合。
思想?
谢谢,
肯
答案 0 :(得分:3)
最初想到这个:
您可以将插入/更新/删除操作包装到您自己的API中的特定集合中。而不是使用ArangoDB为文档提供的常规HTTP POST,PUT / PATCH,DELETE路由,您可以在ArangoDB中编写自己的路由。 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当然仍然有效,但不会触发自定义操作。
有趣的问题是,如果您可以接受“发送到另一个服务器调用”的线程阻塞,并且如果由于某种原因将数据发送到另一个服务器,您将采取的措施。