DolphinDB的OLAP引擎,是列式存储。文件组织上,以列为单位,一个分区里的每一列,是一个文件。对于宽表只读取某列做聚合分析时,列式存储的优势能体现出来。但是对于数据的点查,OLAP引擎依旧需要把整列文件读取出来,并在内存里做计算,这个会存在点查性能差的情况。同时,对于数据的写入,假设1个表50列,一次写入涉及10个分区,就是涉及500个列文件的写入。在HDD上,会存在写入慢(寻址时间过长)的情况(当然,实际上有RedoLog和CacheEngine存在,不会那么糟糕)。
历史上,LSMT的存储结构,就是为了适应磁盘硬件特性而开发的一种存储结构。通过新增数据的方式,来提高数据写入和更新的速度。DolphinDB的TSDB引擎就是基于LSMT结构来进行存储的。在文件结构上,采用了PAX的存储格式,内部也加了一些预聚合和索引。大部分查询场景会比OLAP快。
TSDB引擎主要针对以下场景:
千万级设备高频写入
数据去重
少量设备毫秒级点查
大量设备秒级统计分析