InfluxDB的设计的最佳实践和思考

InfluxDB是一个时间序列数据库。针对时序场景设计数据库,主要是以牺牲功能为代价来提高性能。以下列出了一些权衡过的设计见解。这里的功能指的是更新和删除功能。

1、对于时间序列用例,我们假设如果相同的数据被多次发送,那么认为客户端几次都是同一笔数据。

  • 优势:通过简化的冲突解决增加了写入性能
  • 劣势:不能存储重复数据;可能会在极少数情况下覆盖数据

2、删除是罕见的事情。当它们发生时,肯定是针对大量的旧数据,这些数据对于写入来说是冷数据。

  • 优势:限制删除操作,从而增加查询和写入性能,因为删除会重新整理索引,并操作磁盘中一个未知的位置,可能引起大量磁盘读写。
  • 劣势:删除功能受到很大限制,所以很多业务逻辑,例如注销一个用户,就不适合用时序数据库,用关系型数据库更好。

3、对现有数据的更新是罕见的事件,持续地更新永远不会发生。时间序列数据主要是永远不更新的新数据。因为过去时间的数据已经产生了,不可能会更改。例如一个电机的电流数据产生了,怎么会更改呢?

  • 优势:限制更新操作,从而增加查询和写入性能
  • 劣势:更新功能受到很大限制

4、绝大多数写入都是接近当前时间戳的数据,并且数据是按时间递增的顺序添加。

  • 优势:按时间递增的顺序添加数据明显更高效些
  • 劣势:随机时间或时间不按升序写入点的性能要低得多

5、 规模至关重要。数据库必须能够处理大量的读取和写入。

  • 优势:数据库可以处理大量的读取和写入
  • 劣势:InfluxDB开发团队被迫做出权衡来提高性能

6、能够写入和查询数据比具有强一致性更重要。

  • 优势:多个客户端可以在高负载的情况下完成查询和写入数据库操作
  • 劣势:如果数据库负载较重,查询返回结果可能不包括最近的点

7、许多时间序列都是短暂的。经常是时间序列,只出现了几个小时,然后消失,例如一个新的主机,开机并监控数据被写入一段时间,然后被关闭。

  • 优势:InfluxDB善于管理不连续数据
  • 劣势:无模式设计意味着不支持某些数据库功能,例如没有交叉表连接

8、没有数据点太重要了。

  • 优势:InfluxDB具有非常强大的工具来处理聚合数据和大数据集
  • 劣势:数据点没有传统意义上的ID,它们被时间戳和series区分开来