ArangoDB 对大量更新数组/嵌入式文档的适用性
Suitability of ArangoDB for heavily updated arrays / embedded documents
我正在调查 ArangoDB 对特定用例的适用性:
- 我的根文档数量比较多。
- 每个文档代表层次结构的顶部。
- 层次结构以图表形式遍历。
- 层次结构中每个级别之间的 link 是通过嵌入式文档数组和指向文档的数组中的 ID 的组合建立的。
- 我需要能够将 ID 推送到数组和从数组中删除。
- 我需要能够添加/删除嵌入式文档。
我的问题:
- ArangoDB 是否可以在不更新整个容器文档的情况下更新嵌入文档?
- 它是否有一种机制来处理数组中的单个项目,以便以有效的方式将项目推到末尾/删除项目(即不降低速度在类似 O(n).
我查看了文档并在网上搜索,但找不到这些问题的明确答案。
回答您的问题:
1) 没有 ArangoDB 中的文档就地更新。更新文档时,ArangoDB 会存储原始文档的新的、更新的。新版本是自包含的,这意味着它包含(更新的)整个容器。该文档的旧版本仍然保留,因为其他当前 运行 操作可能会引用它。过时版本的文档最终将被删除。
2) 从答案 1 中可以看出,将值压入数组或从数组中删除值将构建整个文档的新自包含版本。这意味着 pushing/deleting 一个数组值将花费整个文档的构建时间,因为这与文档的大小成正比(即数组值越多,花费的时间越长)。
我正在调查 ArangoDB 对特定用例的适用性:
- 我的根文档数量比较多。
- 每个文档代表层次结构的顶部。
- 层次结构以图表形式遍历。
- 层次结构中每个级别之间的 link 是通过嵌入式文档数组和指向文档的数组中的 ID 的组合建立的。
- 我需要能够将 ID 推送到数组和从数组中删除。
- 我需要能够添加/删除嵌入式文档。
我的问题:
- ArangoDB 是否可以在不更新整个容器文档的情况下更新嵌入文档?
- 它是否有一种机制来处理数组中的单个项目,以便以有效的方式将项目推到末尾/删除项目(即不降低速度在类似 O(n).
我查看了文档并在网上搜索,但找不到这些问题的明确答案。
回答您的问题:
1) 没有 ArangoDB 中的文档就地更新。更新文档时,ArangoDB 会存储原始文档的新的、更新的。新版本是自包含的,这意味着它包含(更新的)整个容器。该文档的旧版本仍然保留,因为其他当前 运行 操作可能会引用它。过时版本的文档最终将被删除。
2) 从答案 1 中可以看出,将值压入数组或从数组中删除值将构建整个文档的新自包含版本。这意味着 pushing/deleting 一个数组值将花费整个文档的构建时间,因为这与文档的大小成正比(即数组值越多,花费的时间越长)。