使用ArangoDB时,复制架构会有所帮助

时间:2014-04-10 21:10:56

标签: arangodb

在我寻求解决1000个客户端的过程中,每个客户端都有单独的ArangoDB,在运行某些内容时记录个人信息...我们需要将这些信息聚合回单个主节点服务器中的集合,以便可以进行查询和报告在上面。研究ArangoDB中JavaScript和动作的强大功能......这是否可行且足够快,可以将数据“复制”回主节点。

1)每个客户端都记录了本地运行数据

2)执行动作触发器(让我们首先采取神圣的垃圾场景,不进行批量上传或任何事情)...对于每个插入,获取本地插入的数据并向主节点发出确切的请求以插入公共集合(存储在每个客户端上的文档数据具有唯一标识它的属性等)。

3)这将有效地“复制”/聚合每个客户端的唯一数据到单个主节点集合。

思想?

谢谢,

1 个答案:

答案 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当然仍然有效,但不会触发自定义操作。

有趣的问题是,如果您可以接受“发送到另一个服务器调用”的线程阻塞,并且如果由于某种原因将数据发送到另一个服务器,您将采取的措施。