ArangoDB什么时候用RocksDB,什么时候用MMFiles存储引擎?
When to use RocksDB and when to use MMFiles storage engine in ArangoDB?
我们使用 ArangoDB 来存储电信数据。我们应用程序的主要目标是让用户非常快速地构建某种类型的报告。这些报告主要基于我们在遍历不同图时从 ArangoDB 获得的数据。报告的业务逻辑并不简单,这导致具有多个嵌套遍历(子查询)的非常复杂的 AQL 查询。
我们在 ArangoDB 中存储的数据的快速概览:
- 28 个包含文档的集合(最大集合包含 3500K 个文档,平均集合通常有 100K 到 1000K)
- 3 个具有边的集合(335K 边、3500K 边和 15000K 边)
- 3 个图(每个图链接到一个边集合,最大的图有 23 from/to 个集合)
整个数据集在完全加载时需要大约 28 GB 的 RAM(包括索引)。
我们已经使用 MMFiles 将近两年了,对结果非常满意,除了一些问题:
- 我描述的前所未有的内存消耗
- 重启非常慢(数据库再次完全响应需要 1 小时 30 分钟)
- 事实上,我们必须使用具有 64 GB RAM 的非常昂贵的 VM 才能将所有数据放入 RAM
经过一些研究,我们开始研究新的 RocksDB 存储引擎。我已阅读:
- https://www.arangodb.com/why-arangodb/rocksdb-storage-engine/
- https://docs.arangodb.com/3.4/Manual/Architecture/StorageEngines.html
从文档和 我可以看出 RocksDB 应该是我们的一种选择。所有文档都说它是 ArangoDB 的新默认引擎,如果你想存储的数据超过 RAM 的容量,就应该使用它。
我安装了新的 ArangoDB 3.4.1 并将我们的数据库从 MMFiles 转换为 RocksDB(通过 arangodumpa
和 arangorestore
)。然后我 运行 进行了一些性能测试,发现所有遍历都比我们使用 MMFiles 引擎时慢了 2-6 倍。使用 MMFiles 引擎需要 20 秒的一些查询现在使用 RocksDB 需要 40 秒,即使您 运行 多次相同的查询(即数据必须已经兑现)。
2019 年 2 月 15 日更新:
我们 运行 ArangoDB 在 m4.4xlarge 实例上的 docker 容器内 16 vCPU 和 64 GB RAM。我们为 ArangoDB 容器分配了 32 GB 的 RAM 和 6144 CPU 个单元。以下是我们测试的简短摘要(数字显示以 HH:mm:ss 格式执行特定 AQL 遍历查询所花费的时间):
注意,在这个特定的 table 中,我们没有像我在原始问题中提到的那样 10 倍的性能下降。当我们 运行 AQL 在 ArangoDB 重启后(我想这没问题),最大速度慢了 6 倍。但是,大多数查询比 MMFiles 慢 2 倍,即使当您 运行 第二次查询时,所有数据都必须已经缓存在 RAM 中。 Windows 的情况更糟(在那里我的性能下降了 10 次甚至更多)。稍后我会 post 我的 Windows PC 的详细规格和性能测试。
我的问题是: RocksDB 引擎的 AQL 遍历速度慢得多是预期的行为吗?关于何时使用 MMFiles 引擎以及何时使用 RocksDB 引擎以及在哪些情况下 RocksDB 不是一个选项,是否有任何一般性建议?
Arangodb 3.7 不再支持 MMFiles,因此这个问题可以用“使用 rocksdb”来回答。
我们花了一段时间才使 ArangoDB 中基于 rocksdb 的存储引擎变得成熟,但我们现在确信它完全可以处理所有负载。
我们演示了如何使用 parts of the rocksdb storage system and which effects they have in this article。
我们使用 ArangoDB 来存储电信数据。我们应用程序的主要目标是让用户非常快速地构建某种类型的报告。这些报告主要基于我们在遍历不同图时从 ArangoDB 获得的数据。报告的业务逻辑并不简单,这导致具有多个嵌套遍历(子查询)的非常复杂的 AQL 查询。
我们在 ArangoDB 中存储的数据的快速概览:
- 28 个包含文档的集合(最大集合包含 3500K 个文档,平均集合通常有 100K 到 1000K)
- 3 个具有边的集合(335K 边、3500K 边和 15000K 边)
- 3 个图(每个图链接到一个边集合,最大的图有 23 from/to 个集合)
整个数据集在完全加载时需要大约 28 GB 的 RAM(包括索引)。
我们已经使用 MMFiles 将近两年了,对结果非常满意,除了一些问题:
- 我描述的前所未有的内存消耗
- 重启非常慢(数据库再次完全响应需要 1 小时 30 分钟)
- 事实上,我们必须使用具有 64 GB RAM 的非常昂贵的 VM 才能将所有数据放入 RAM
经过一些研究,我们开始研究新的 RocksDB 存储引擎。我已阅读:
- https://www.arangodb.com/why-arangodb/rocksdb-storage-engine/
- https://docs.arangodb.com/3.4/Manual/Architecture/StorageEngines.html
从文档和
我安装了新的 ArangoDB 3.4.1 并将我们的数据库从 MMFiles 转换为 RocksDB(通过 arangodumpa
和 arangorestore
)。然后我 运行 进行了一些性能测试,发现所有遍历都比我们使用 MMFiles 引擎时慢了 2-6 倍。使用 MMFiles 引擎需要 20 秒的一些查询现在使用 RocksDB 需要 40 秒,即使您 运行 多次相同的查询(即数据必须已经兑现)。
2019 年 2 月 15 日更新:
我们 运行 ArangoDB 在 m4.4xlarge 实例上的 docker 容器内 16 vCPU 和 64 GB RAM。我们为 ArangoDB 容器分配了 32 GB 的 RAM 和 6144 CPU 个单元。以下是我们测试的简短摘要(数字显示以 HH:mm:ss 格式执行特定 AQL 遍历查询所花费的时间):
注意,在这个特定的 table 中,我们没有像我在原始问题中提到的那样 10 倍的性能下降。当我们 运行 AQL 在 ArangoDB 重启后(我想这没问题),最大速度慢了 6 倍。但是,大多数查询比 MMFiles 慢 2 倍,即使当您 运行 第二次查询时,所有数据都必须已经缓存在 RAM 中。 Windows 的情况更糟(在那里我的性能下降了 10 次甚至更多)。稍后我会 post 我的 Windows PC 的详细规格和性能测试。
我的问题是: RocksDB 引擎的 AQL 遍历速度慢得多是预期的行为吗?关于何时使用 MMFiles 引擎以及何时使用 RocksDB 引擎以及在哪些情况下 RocksDB 不是一个选项,是否有任何一般性建议?
Arangodb 3.7 不再支持 MMFiles,因此这个问题可以用“使用 rocksdb”来回答。
我们花了一段时间才使 ArangoDB 中基于 rocksdb 的存储引擎变得成熟,但我们现在确信它完全可以处理所有负载。
我们演示了如何使用 parts of the rocksdb storage system and which effects they have in this article。