DolphinDB目前支持OLAP引擎和TSDB引擎,2个引擎引擎均采用数据分区技术,按照给定规则将大规模数据集水平分区,每个分区内的数据采用列式存储。
OLAP 数据表的每个列存储为一个文件,数据以追加的方式存储到相应的列文件中,因此,数据写入的顺序决定了它们的存储顺序。
TSDB 采用经典的 LSMT (Log Structured Merge Tree) 模型,引入了排序列(sortColumns:最后一列为时间列,其他列组合为 sortKey)。 在用户查询某个或少数几个设备(股票)在特定时间段数据的场景下,可以通过将设备(股票)标识、时间等列作为 TSDB 引擎的 sortColumns,以提升查询性能。
OLAP 引擎将每列数据存储为一个列文件,所以读取数据时,需要从磁盘读取该列所在的分区,解压后加载到内存。这种数据读取方式使得 OLAP 引擎在高吞吐量查询情况下拥有较好的性能。 但若需要更新或删除某条数据,OLAP 会将整个分区数据加载到内存中,再对这条数据进行更新或删除,因此性能开销大。
查询数据时,TSDB 引擎会将查询数据分区内 level file 的索引部分加载内存,然后根据索引,定位数据块的位置。因此若查询语句中按 sortKey 顺序指定过滤条件,可以快速定位到数据所在的位置。
因此这种数据读取方式,非常适合单点查询,因为单点查询可以通过索引快速定位到对应的文件,且只需要加载对应数据块到内存,无需加载整个分区,所以查询性能极优。 但注意,数据量过大可能导致 level file 数量较多,此时TSDB 的单点查询效率就会降低。
OLAP 引擎主要应用场景:
需要高吞吐量查询;
需要扫描分析大量数据,全表扫描等场景,如:查询所有股票在某个时间段内的交易量等。
OLAP 引擎不适合以下场景:
需要存储多列,比如列数超过1000个;
查询某个 key (设备或股票)在某个时间点或时间段的数据。
TSDB 引擎相较于 OLAP 引擎无上述限制,尤其适合以下场景:
单点查询,如查询某个或某几个设备(股票)在给定某个时间段内的数据;
需要对数据进行去重存储;
支持存储数组向量(array vector)。
因此,请根据常用查询选择OLAP或TSDB引擎,若选择OLAP引擎,请参考教程:
若选择TSDB引擎,请参考教程:
best_practice_for_factor_calculation.md · dolphindb/Tutorials_CN - Gitee.com