如何保证TSDB引擎中的整个表在执行tableInsert时保持排序状态?即使定义了 sortColumns 后,数据也不会按预期排序。之前也遇到过类似的问题。
这是代码:
为了测试
sortColumns = [symbol, time]
的有效性,我将time
作为now() + random seconds
; symbol
是从两个符号中随机选择的。输出结果如下。 symbol
在输出表中已正确排序,但 time
未按预期顺序排序。
这可能是什么原因?是由于 TSDB、
tableInsert
还是 Python API 导致的?
查看文档后,我发现排序只能在级别文件内维护,并且有两个具体问题:
(1) 无法保证关卡文件之间数据的顺序。 (2) 无法保证每个分区内数据的有序性。
有没有办法保证整个表在插入过程中保持排序?
我尝试过
flushTSDBCache()
但没有成功。
由于数据是分区的,因此将根据这些分区来执行查询。如果是 TSDB,每个分区都会按照级别文件的顺序读取,所以整体存储顺序是分区 -> 级别文件顺序 -> 数据原始写入顺序。
查询时,部分数据可能从缓存中取出,部分数据可能从关卡文件中读取,因此无法完全保证内存中的顺序。建议使用
ORDER BY
进行排序。
请注意,每批刷新的数据都是根据
sortColumns
排序的。查询时,只能保证单个Level File内的数据是有序的,无法保证不同Level File之间的顺序。设置排序键的目的是为了去重。如果你想维持一定的关卡顺序,可以尝试通过调用triggerTSDBCompaction
来手动触发关卡文件的合并。