【问题标题】:Arangodb document arrays vs key/value collectionArangodb 文档数组与键/值集合
【发布时间】:2019-01-08 01:15:11
【问题描述】:

除了文档大小之外,文档中可以包含多少个数组值是否有限制? Arangodb 可以从 2.8 版本开始对数组进行索引,因此这不是采用键/值集合格式的理由。

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

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

数组成员的大小是否有限制?出于性能原因,将其分解为键/值 {group: group1, member: 1} 集合是否更好?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

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

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

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

    尽管如此,您可能仍希望确保对象/数组不会变得过大,否则性能和内存使用可能会下降。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 2021-08-02
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多