InfluxDB 在时序工作负载中比 MongoDB 快 5 倍

导航到

本文于 2022 年 11 月 17 日更新,包含 InfluxDB v1.8.10 和 MongoDB v5.0.6 的最新基准测试结果。为了提供最新的发现,本文定期更新最新的基准数据。

InfluxData 过去几个月经常收到开发者和架构师等人的常见问题,“InfluxDB 与 MongoDB 在时序工作负载中如何比较?”这个问题可能由几个原因引起。首先,如果他们正在进行一个全新的项目,正在进行评估几个解决方案的尽职调查,这有助于创建他们的比较网格。其次,他们可能已经在现有应用程序中使用 MongoDB 进行数据摄取,但现在他们想看看他们如何可以将指标收集集成到他们的系统中,并相信可能有一个比 MongoDB 更好的解决方案来完成这项任务。

在过去几周中,我们着手比较 InfluxDB 和 MongoDB 在常见时序工作负载中的性能和功能,特别关注数据摄取速率、磁盘数据压缩和查询性能。InfluxDB 在所有三个测试中都优于 MongoDB,具有 1.9 倍更大的写入吞吐量,同时使用 7.3 倍更少的磁盘空间,并且在查询速度方面提供了 5 倍更高的性能

要阅读基准测试和方法的完整细节,请下载“基准测试 InfluxDB 与 MongoDB 的时序数据与指标管理”技术论文或观看录制的网络研讨会

我们的主要目标是创建一个一致、最新的比较,反映 InfluxDB 和 MongoDB 的最新发展,并涵盖其他数据库和时序解决方案。我们将定期重新运行这些基准测试,并使用我们的发现更新详细的技术论文。所有这些基准测试的代码都可在 Github 上找到请随意在该存储库中提出问题或发送拉取请求,或者如果您有任何问题、评论或建议。

现在,让我们来看看结果…

测试版本

InfluxDB v1.8.10

InfluxDB 是一个用 Go 编写的开源时序数据库。其核心是一个定制的存储引擎,称为时间结构合并(TSM)树,该树针对时序数据进行了优化。由一个名为InfluxQL的定制的类似 SQL 查询语言控制,InfluxDB 提供了开箱即用的跨时间范围数学和统计函数支持,非常适合自定义监控和指标收集、实时分析和物联网及传感器数据工作负载。

MongoDB v5.0.6

MongoDB 是一个用 C 和 C++ 编写的开源、文档型数据库,通常被称为 NoSQL 数据库。尽管它通常不被视为真正的时序数据库 本身,但它的创建者经常推广它用于 时序工作负载。它提供了时间戳和分桶等建模原语,使用户能够存储和查询时序数据。

关于基准测试

在构建代表性的基准测试套件时,我们确定了用于处理时序数据最常见的评估特性。我们查看了三个维度的性能

  • 数据摄入性能 - 以每秒的值来衡量
  • 磁盘存储需求 - 以字节来衡量
  • 平均查询响应时间 - 以毫秒来衡量

关于数据集

对于这个基准测试,我们关注了一个模拟常见的DevOps监控和指标用例的数据集,其中一组服务器定期以固定的时间间隔报告系统和应用程序指标。我们每10秒从9个子系统(CPU、内存、磁盘、磁盘I/O、内核、网络、Redis、PostgreSQL和Nginx)中采样100个值。对于关键比较,我们查看代表100台服务器在6小时内的数据集,这代表了一个相对适度的部署。

  • 服务器数量:100
  • 每台服务器测量的值:100
  • 测量间隔:10s
  • 数据集持续时间(s):24h
  • 数据集中总值:每天86M

这仅是整个基准套件的一个子集,但是一个代表性的例子。如果您对更多细节感兴趣,您可以在GitHub上了解更多关于测试方法的信息。

写入性能

InfluxDB在数据摄入方面比MongoDB快1.9倍。

InfluxDB-MongoDB-Write-Throughput

磁盘压缩

InfluxDB通过提供7.3倍更好的压缩率优于MongoDB。

InfluxDB-MongoDB-OnDisk-Storage

查询性能

InfluxDB在查询速度方面比MongoDB快5倍。

InfluxDB-MongoDB-Query-Throughput

总结

基准测试和产生的数据表明,InfluxDB在数据摄入和磁盘存储方面明显优于MongoDB。具体来说

  • InfluxDB在数据摄入方面比MongoDB快1.9倍
  • InfluxDB通过提供7.3倍更好的压缩率优于MongoDB
  • InfluxDB通过提供5倍更好的查询性能优于MongoDB

还要注意的是,将MongoDB配置为与时间序列数据一起使用并不简单。它需要提前决定如何结构您的集合和数据类型,这可能非常耗时,并将长期影响您如何与数据交互以及可以运行的查询类型。另一方面,InfluxDB无需额外配置即可直接用于时间序列工作负载。

总之,我们强烈建议开发人员和架构师自行运行这些基准测试,以独立验证其硬件和数据集上的结果。然而,对于那些寻找一个有效起点,希望了解哪种技术将提供更好的时间序列数据摄入、压缩和查询性能“开箱即用”的人,InfluxDB在多个维度上都是明显的赢家,尤其是在数据集变得更大且系统运行时间更长的情况下。

接下来是什么?