3

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

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

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

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

想法?

谢谢,

4

1 回答 1

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 仍然可以工作,但不会触发自定义操作。

有趣的问题是您是否可以接受“发送到另一台服务器调用”中的线程阻塞以及如果由于某种原因向另一台服务器发送数据失败时您会做什么。

于 2014-04-11T07:51:39.497 回答