2

我想知道使用 ArangoDB 执行此操作的最佳方法是什么,我开始使用事务,或者使用修订检查更新它的记录,但是对于许多并发更新来说并不是很好。

在新版本 2.1 中,我看到我可以在服务器中注册函数以每隔 X 时间执行一次,因为我将原始数据保存很长时间,我可以使用一个服务器任务异步计算它,但它给出了更多的延迟到柜台。

还有其他方法吗?

谢谢,

迭戈·古莱布

4

1 回答 1

2

目前至少有三种方法可以增加计数器:

  1. 让客户端获取获取计数器值,增加它并将更新的文档发送回服务器。更新时,检查文档的 etag / 修订 ID 是否有并发更新,如果有则重复
  2. 创建执行更新的服务器端事务。一个示例(不使用计数器,但可以在此处找到列表修改:https ://groups.google.com/forum/#!topic/arangodb/2t9RV4eYUi4 )
  3. 分别保存每个计数器修改操作(例如 {"op":"inc","value":1}),并使用服务器端任务定期计算当前计数器。如果需要,该替代方案 3 也可以以增量方式实施。

备选方案 1 将需要至少 2 个 HTTP 调用(获取 + 更新),并且您将需要针对并发更新的情况进行错误处理。所以它不是很有用。

从客户的角度来看,我认为备选方案 2 将是最容易使用的。它允许通过 REST API 公开“增加计数器”操作,并且可以在原子事务中实现获取和更新。

如果您能负担得起稍微过时的计数器,替代方案 3 也将起作用。实施时,它应该以增量方式实施,例如通过保持计数器的总数并在每次更新任务执行时仅添加新值。否则,您的“计数器操作”集合将无限增长,并且更新将变得越来越慢。备选方案#3 还有一个优点是您可以保留最近操作的(小)日志,例如用于审计。

于 2014-05-26T12:05:11.413 回答