InfluxDB 是一个用 Rust 编写的开源时间序列数据库,使用 Apache Arrow、Apache Parquet 和 Apache DataFusion 作为基础构建模块。
从Go切换到Rust原因:
- 没有垃圾收集器
- 无畏并发(感谢 Rust 编译器)
- 性能
- 错误处理
- Crates
结果,我们最终决定使用 Apache Arrow DataFusion,这是一个纯 Rust 引擎。在过去的三年里,我们为它做出了巨大的贡献,我们的工程师安德鲁-兰姆(Andrew Lamb)现在是 Arrow PMC,这要归功于他的组织和编程工作。
还有一个问题是我们为什么要重写。我们想满足一些重要的要求:
- 无限基数
- 以列式数据库的性能对时间序列进行分析查询
- 使用对象存储作为历史数据的耐用层(即计算与存储分离)
- 兼容 SQL 和更广泛的生态系统
2020 年初,当我看到这一切时,而且我在前一年左右一直在关注 Rust,我想,如果我们无论如何都要重写大部分数据库,我们不妨使用 2020 年的最佳语言选择,而不是 2013 年(我们创建 InfluxDB 时)的最佳语言选择。
我们还计划尽可能多地使用其他地方的开放源代码来构建数据库。因此,我们最终使用了 Apache Arrow、Apache Parquet、Apache DataFusion 和 FlightSQL。
我知道人们认为我们再次重写数据库是疯了,但事后诸葛亮。如果我当时知道现在所知道的一切,我就会做出不同的选择,但我们在 2013 年启动时也没有同样的工具。我很有信心,我们现在所取得的成绩是一个非常坚实的基础,我们可以在这个基础上继续发展很多年。
只要我还在 Influx 工作,这将是我们需要的最后一次重写。我绝对没有体力再重写一次了;)