ArangoDB 对大量更新数组/嵌入式文档的适用性

Suitability of ArangoDB for heavily updated arrays / embedded documents

我正在调查 ArangoDB 对特定用例的适用性:

  1. 我的根文档数量比较多。
  2. 每个文档代表层次结构的顶部。
  3. 层次结构以图表形式遍历。
  4. 层次结构中每个级别之间的 link 是通过嵌入式文档数组和指向文档的数组中的 ID 的组合建立的。
  5. 我需要能够将 ID 推送到数组和从数组中删除。
  6. 我需要能够添加/删除嵌入式文档。

我的问题:

  1. ArangoDB 是否可以在不更新整个容器文档的情况下更新嵌入文档?
  2. 它是否有一种机制来处理数组中的单个项目,以便以有效的方式将项目推到末尾/删除项目(即不降低速度在类似 O(n).

我查看了文档并在网上搜索,但找不到这些问题的明确答案。

回答您的问题:

1) 没有 ArangoDB 中的文档就地更新。更新文档时,ArangoDB 会存储原始文档的新的、更新的。新版本是自包含的,这意味着它包含(更新的)整个容器。该文档的旧版本仍然保留,因为其他当前 运行 操作可能会引用它。过时版本的文档最终将被删除。

2) 从答案 1 中可以看出,将值压入数组或从数组中删除值将构建整个文档的新自包含版本。这意味着 pushing/deleting 一个数组值将花费整个文档的构建时间,因为这与文档的大小成正比(即数组值越多,花费的时间越长)。