使用 2.0 Python 客户端从 CSV 将数百万个点写入 InfluxDB
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2019 年 12 月 30 日
导航至
之前我们向您展示了如何使用 Telegraf 将点从 CSV 写入 InfluxDB。今天,我们将学习如何在几秒钟内使用 InfluxDB Python 客户端在您的本地计算机上写入数百万个点到 InfluxDB 2.0。这个博客和这个练习的灵感来自 Mark Litwintschik 的基准测试。在基准测试中,Mark 比较了来自 十亿出租车行程数据集 的数据在不同数据库中的查询时间。InfluxDB 被排除在基准测试之外,但我们认为我们应该尝试一下,并分享我们的结果。
2.0 InfluxDB Python 客户端基准测试
由于 InfluxDB 是一个开源的 TSDB,而 Mark 的基准测试使用的是付费实例,因此我们决定修改基准测试,以突出 OSS 版本的功能。我们希望让您对在家可以执行的数据摄取类型感到兴奋。在我们的基准测试中,一个包含 4.6M 数据点(十亿出租车行程数据集的一部分)的 CSV 文件被写入 InfluxDB。
以下是基准测试的结果
InfluxDB 2.nightly 24.10.2019 | ||
方法 | 数据点 | CPU [秒] |
通过 HTTP POST 的行协议 | 1,193,288 | 412 |
Python(RX) 单线程 | 4,600,000* | 21 |
基准条件:1 分钟测试
- 数据:2,000 线程,自动批处理(如果客户端支持)
- 每个线程在 1 秒间隔内写入 100 个数据点
- 硬件:Linux 5.2.9-1,AMD Ryzen 7 3700X 8 核心处理器,16GB
- ReactiveX 参数:刷新间隔 10ms,批处理大小 200,000
- Telegraf 参数:metric_batch_size,metric_buffer_limit 对结果没有影响
- Python 3.7,单线程批处理大小 50,000,刷新间隔 10,000
新 InfluxDB Python 客户端的进程功能比 HTTP POST 高约 3 个数量级。
<figcaption> 我喜欢 InfluxDB Python 客户端</figcaption>
使用 2.0 Python 客户端从 CSV 到 InfluxDB 的多进程写入要点概述
伴随此基准测试的脚本可以在这里找到。要了解如何使用2.0 InfluxDB Python客户端,请阅读这篇博客或查看客户端仓库。关于脚本需要注意的重要点包括
- 第44行:创建InfluxDBWriter类并包含要从中读取的CSV文件的URL。
- 第46行:将批量大小和刷新间隔分别配置为50,000和10,000,以适应更大的写入批量。
- 第93-100行:在这里指定您的标签、字段和时间戳。
- 第158行:将InfluxDBWriter实例化为一个多进程。
- 第164行:创建进程池以进行并行编码。
- 第179行:在将传入的HTTP流转换为行协议序列后,将数据写入InfluxDB。
要求:请注意,您需要Python 3.7来执行多进程。我建议设置额外的工具,如virtualenv、pyenv或conda-env。
结论
新Python客户端的写入速度相当快。我想不出很多需要将数百万个点写入我的机器的情况,但有时尝试一下也很有趣。我使用此脚本编写了出租车数据集的前100万点。我将数据集的部分保存到本地CSV文件中。我在Python 3.7的Conda环境中运行客户端并将其写入本地的InfluxDB v2.0.0 Alpha实例。观察系统和数据库性能指标对于进行此类基准测试很有用,因为它们可以帮助突出显示性能问题并促进调整。我使用InfluxDB Cloud来监控我的本地InfluxDB实例和系统,以查看我的机器的表现。
我使用预构建的仪表板模板来快速查看系统统计数据和InfluxDB指标。我能在2分32秒内写入100万点,但如您所见,确实存在一些瓶颈。查看InfluxDB监控仪表板,我们可以看到本地对象存储IO峰值和内存使用量。
系统统计仪表板显示我的系统负载和磁盘IO相当高。我还注意到我的CPU使用率和内存使用率是合理的。这表明我可能可以通过利用更多的CPU和内存来增加我的性能,从而更改我的批量大小。
<figcaption> 系统统计仪表板,包括磁盘使用率、CPU使用率、系统负载、内存使用率和磁盘IO。空闲使用率(浅蓝色)</figcaption>
最后,我认为记住这一点很重要,即我在机器上的Alpha上实现了这种性能(在运行其他进程的同时……哎呀)。想象一下Beta——在稳定性与性能优先的情况下——会是什么样子!我希望这个基准测试让你开始思考时间序列的可能性。像往常一样,如果你遇到任何障碍,请在我们社区网站或Slack频道上分享。我们非常愿意听取您的反馈,并帮助您解决遇到的问题。