Arangodb文档数组与键/值集合

时间:2019-01-08 01:15:12

标签: arangodb

除了文档大小以外,文档中可以有多少个数组值是否受到限制?从2.8版开始,Arangodb可以索引数组,因此这不是使用键/值收集格式的原因。

例如 用成员数组分组文档:

{'_key': group1, members: [1, 2, 3, ...]} 

数组成员可以有多大?出于性能原因,最好在键/值{group: group1, member: 1}集合中进行细分吗?

1 个答案:

答案 0 :(得分:1)

ArangoDB中的数组值或对象键的数量没有人为限制。

但是,您可能需要考虑一些实际限制:

  • 在文档中使用的数组/对象成员越多,文档将按字节增长。读写单个文档的性能显然取决于文档的大小,因此文档越大,获取速度越慢,并且每个文档在查询过程中将消耗更多的内存。对于RocksDB存储引擎,这尤其会造成伤害,因为由于RocksDB的级别设计,每个文档修订版可能需要通过LSM树的各个级别进行推送,因此需要多次复制/写入。
  • 在文档中搜索指定对象键通常使用二进制搜索,因此其性能随对象键数的增加而对数降低。但是,所有对象键或所有数组值的完全迭代性能将随着成员数量的增加而线性增长。
  • 使用来自ArangoDB JavaScript功能的大型文档时,例如使用ArangoDB的Foxx微服务框架时,需要将文档转换为纯JavaScript对象和数组。 ArangoDB使用的V8 JavaScript实现对于中小型对象/数组应该表现良好,但是存在巨大的价值问题。除此之外,它还可能在内部限制对象键/数组成员的数量。
  • 从AQL查询中窥视数组的中间通常将不使用任何索引。查询任意对象键时也是如此。对于对象键,可以在专用键上创建索引,但是显然需要提前知道键。

总而言之,您可能仍要确保对象/数组不会变得太大,否则会降低性能和内存使用率。