DolphinDB:如何维护TSDB中分布式表的整体有序性?

问题描述 投票:0回答:1

如何保证TSDB引擎中的整个表在执行tableInsert时保持排序状态?即使定义了 sortColumns 后,数据也不会按预期排序。之前也遇到过类似的问题。

这是代码:

在此输入图片描述

为了测试

sortColumns = [symbol, time]
的有效性,我将
time
作为
now() + random seconds
symbol
是从两个符号中随机选择的。输出结果如下。
symbol
在输出表中已正确排序,但
time
未按预期顺序排序。

在此输入图片描述

这可能是什么原因?是由于 TSDB、

tableInsert
还是 Python API 导致的?

查看文档后,我发现排序只能在级别文件内维护,并且有两个具体问题:

(1) 无法保证关卡文件之间数据的顺序。 (2) 无法保证每个分区内数据的有序性。

有没有办法保证整个表在插入过程中保持排序?

我尝试过

flushTSDBCache()
但没有成功。

sql-order-by orders dolphindb
1个回答
0
投票

由于数据是分区的,因此将根据这些分区来执行查询。如果是 TSDB,每个分区都会按照级别文件的顺序读取,所以整体存储顺序是分区 -> 级别文件顺序 -> 数据原始写入顺序。

查询时,部分数据可能从缓存中取出,部分数据可能从关卡文件中读取,因此无法完全保证内存中的顺序。建议使用

ORDER BY
进行排序。

请注意,每批刷新的数据都是根据

sortColumns
排序的。查询时,只能保证单个Level File内的数据是有序的,无法保证不同Level File之间的顺序。设置排序键的目的是为了去重。如果你想维持一定的关卡顺序,可以尝试通过调用
triggerTSDBCompaction
来手动触发关卡文件的合并。

© www.soinside.com 2019 - 2024. All rights reserved.