数据模式
InfluxDB 数据元素存储在时间结构合并树 (TSM) 和时间序列索引 (TSI) 文件中,以有效压缩存储的数据。
InfluxDB 还提供了一个表格数据模式,其中包括以下内容:
- Annotation rows
- Header row
- Data rows
- Other columns
- Group keys
表格数据模式用于以下用途:
- 在使用 InfluxDB 探索指标时查看原始数据
- 以带注释的 CSV 语法返回查询结果
Annotation rows
注释行描述列属性,例如:
#group
#datatype
#default
Header row
标题行定义了描述每列数据的列标签,例如:
table
_time
_value
_field
_measurement
- tag key names (without underscore prefix):
tag-1
,tag-2
Data rows
每个数据行包含一个点的标题行中指定的数据。
Other columns
除了每个数据行中的列(在标题行中指定)之外,以下列是可选的:
annotation
result
table
Group keys
通过对指定列中共享公共值的记录进行分组,确定 Flux 中输出表的内容。 了解有关使用 Flux 对数据进行分组的更多信息。
设计原则
InfluxDB 实现了时间序列数据的优化设计原则。 其中一些设计原则可能会在性能方面进行权衡。
- 按时间排序的数据
- 严格的更新和删除权限
- 首先处理读写查询
- 无模式设计
- 单个点上的数据集
- 重复数据
按时间排序的数据
为了提高性能,数据按时间升序写入。
严格的更新和删除权限
为了提高查询和写入性能,InfluxDB 严格限制更新和删除权限。 时间序列数据主要是从未更新的新数据。 删除通常只影响未写入的数据,并且永远不会发生有争议的更新。
首先处理读写查询
InfluxDB 将读取和写入请求置于强一致性之上。 InfluxDB 在执行查询时返回结果。 任何影响查询数据的事务都会随后进行处理,以确保数据最终一致。 因此,如果摄取率较高(每毫秒多次写入),则查询结果可能不包括最近的数据。
无模式设计
InfluxDB 使用无模式设计来更好地管理不连续数据。 时间序列数据通常是短暂的,这意味着数据会出现几个小时然后消失。 例如,一个新主机启动并报告一段时间然后关闭。
单个点上的数据集
因为数据集比单个点更重要,InfluxDB 实现了强大的工具来聚合数据和处理大型数据集。 点是通过时间戳和序列来区分的,所以没有传统意义上的ID。
重复数据
为了简化冲突解决并提高写入性能,InfluxDB 假设多次发送的数据是重复数据。 相同的点不会存储两次。 如果为某个点提交了新的字段值,InfluxDB 会使用最新的字段值更新该点。 在极少数情况下,数据可能会被覆盖。 了解有关重复点的更多信息。