TSDB or OLAP?

本页介绍存储引擎的重要性与时序数据背景,并引出 DolphinDB 2.0 的 TSDB 存储引擎及其应用动机。

Source: https://dolphindb.cn/news/detail/147

What this page covers

技能认证特训营第二期报名提示

页面顶部包含培训营活动提示,并提供限时报名链接。

新闻栏目与文章标题/日期

页面标识为新闻内容,并给出文章标题与发布日期。

引言:存储引擎与时序数据背景

介绍存储引擎的重要性、时序数据分析价值以及海量时间序列数据增长背景,并引出 DolphinDB 2.0 的 TSDB 引擎。

TSDB 还是 OLAP?(对比与取舍)

对比 DolphinDB OLAP 引擎的局限、TSDB 的改进点以及 TSDB 相对 OLAP 的不足。

查询场景示例(建表脚本与查询示例)

通过股票分区表例子展示 OLAP 与 TSDB 的建库建表差异、典型查询适用场景与性能特征。

TSDB 原理简介(redo log / cache engine / sort columns / level file)

解释 TSDB 写入与恢复流程、内存 cache engine 结构、sort columns/sort key 以及 level file 分层与合并压缩机制。

TSDB 使用技巧(去重、sort key、缓存与块大小、手动合并)

给出 TSDB 的参数与最佳实践建议,包括重复数据处理、sort key 数量建议、cache engine 容量、块大小与手动 compaction。

Facts Index

Entity Attribute Value Confidence
TSDB or OLAP?(新闻文章)发布日期2022.10.27high
数据库性能决定因素性能与存储引擎关系数据库的性能往往很大程度上由存储引擎决定medium
DolphinDB 2.0推出的新存储引擎新推出存储引擎 TSDBhigh
时序数据分析作用/价值可帮助决策者了解生产和业务细微变化,并优化资源整合、跟踪、预测、商业智能等medium
时间序列数据规模增长趋势随着互联网和通信技术发展,网络中时间序列数据量爆炸式增长;面对万亿级海量数据需求趋向精细复杂计算分析low
存储引擎地位/重要性强大的存储引擎是一切查询、计算、分析、生产活动基础与起点,是高性能处理大规模数据保障,也是数据库核心复杂组件之一medium
DolphinDB TSDB 存储引擎底层结构/来源基于 LSM 树自研high
DolphinDB TSDB 存储引擎效果/能力实现更高效的查询、排序和去重,扩展数据存储功能,在部分场景下极大提升数据库性能low
DolphinDB 2.0 之前的存储引擎引擎种类只有唯一的 OLAP 存储引擎high
DolphinDB OLAP 存储引擎列存文件组织数据表中每个分区的每一列存为一个文件high
DolphinDB OLAP 存储引擎数据存储顺序存储顺序与写入顺序一致high
DolphinDB OLAP 存储引擎写入效率数据写入有非常高的效率low
DolphinDB OLAP 存储引擎分区内索引支持分区内不支持索引;检索几行数据也必须加载整个分区(相关列)high
DolphinDB OLAP 存储引擎去重支持写入过程设计简单,不支持去重high
DolphinDB OLAP 存储引擎宽表适配不适合几百几千列的宽表存储high
DolphinDB OLAP 存储引擎更新代价即使修改一条记录,也必须重写整个分区high
DolphinDB TSDB 存储引擎发布时间/版本在 2.0 版本中正式发布high
DolphinDB TSDB 存储引擎分区文件组织每一个分区的数据写在一个或多个 level file 中high
DolphinDB TSDB 存储引擎level file 内部组织level file 内数据按指定列排序且创建块索引high
DolphinDB TSDB 存储引擎点查询效率过滤条件使用分区列以及分区内排序字段的点查询非常高效medium
DolphinDB TSDB 存储引擎写入时处理可以在写入时对数据进行排序和去重high
DolphinDB TSDB 存储引擎数据类型/宽表适配适合存储几百几千列宽表,也适合存储 array vector 和 BLOB 类型的数据high
DolphinDB TSDB 存储引擎更新代价(keepDuplicates=LAST)若保留最后一条重复记录(keepDuplicates=LAST),修改数据时仅需重写数据所在 level file,无需重写整个分区high
DolphinDB TSDB 存储引擎写入吞吐量写入吞吐量低;数据需在 cache engine 中排序;level file 会合并与压缩medium
DolphinDB TSDB 存储引擎整分区读取效率读取整个分区数据或整个分区某几列时效率低于 OLAPhigh
示例数据表 t分区方式按照股票代码与交易日进行组合分区high
示例图片说明(AI 说明)表结构与示例内容示例表 t 包含 StockID、Timestamp、Bid 三列,并列出 AAPL、MSFT、GOOG 等股票在 2021-08-05 特定时间的报价记录,用于说明 OLAP 与 TSDB 的查询性能与存储优势medium
DolphinDB OLAP 建库脚本engine 参数engine="OLAP"high
DolphinDB TSDB 建库脚本engine 参数engine="TSDB"high
DolphinDB TSDB 建表支持 sortColumnscreatePartitionedTable 可指定 sortColumns=`StockID`Timestamphigh
DolphinDB OLAP 引擎sortColumns 特性OLAP 引擎不具备 sortColumns 特性(对比 TSDB)high
DolphinDB OLAP 引擎适合的查询示例select avg(Bid) from t where date=2021.08.05 group by StockIDhigh
DolphinDB TSDB 引擎适合的查询示例select * from table where StockID='AAPL', Timestamp > 2021.08.05T09:30:00, Timestamp < 2021.08.05T09:35:00high
DolphinDB OLAP 引擎(分区内)索引与最小读取单位每个分区内部无索引;读取最小单位是一个分区的一列high
DolphinDB OLAP 引擎查找一行数据耗时一般在 100 毫秒以上(即使只查找一行也需读取所在分区所有行)medium
DolphinDB TSDB 引擎(分区内)索引能力在每个分区内部设置了索引;查找少量数据无需读取分区内所有行high
DolphinDB TSDB 引擎查找少量数据耗时耗时可以低至几毫秒medium
DolphinDB TSDB 引擎海量数据查询与分析性能对比在海量数据查询与分析方面的性能仅略慢于 OLAP 引擎low
DolphinDB TSDB 引擎推荐场景若对查询少量数据有极致性能要求,推荐使用 TSDB 引擎medium
TSDB redo log作用/类比redo log 类似 Write-Ahead Log;数据加载到内存后先持久化到 redo log;宕机重启可从 redo log 恢复数据high
TSDB Cache Engine写入前置条件确认数据写入 WAL 之后,数据写入内存中的 cache enginehigh
TSDB Cache Engine写入缓冲特性新写入数据为追加(append)且未排序(unsorted write buffer)high
TSDB Cache Engine两阶段排序缓冲达到阈值后按 StockID 排序形成 sorted write buffer;sorted write buffer 只读且可在内存中开启压缩以降低查询时延high
TSDBCacheEngineSize触发写盘阈值含义当多个 sorted write buffer 总数据量达到阈值(由 TSDBCacheEngineSize 设定)后,将数据按 Timestamp 排序写入磁盘 level filehigh
TSDB cache engine 设计与常见 LSMT 系统差异unsorted write buffer 到 sorted write buffer 的两阶段设计与多数 LSMT 系统不同,目的是平衡读性能与写性能medium
TSDB cache engine 内存占用极端情况上限在写盘过程中若又有新数据写入,cache engine 会分配新空间;极端情况下最多占用 2 倍 TSDBCacheEngineSize 空间high
TSDB sort columns定义用于将数据排序的列称为 sort columnshigh
TSDB sort columns最后一列类型要求sort columns 的最后一列必须为时间类型high
TSDB sort key定义sortColumns 除最后一列外的其他列通常为点查过滤列;其唯一值组合称为 sort keyhigh
TSDB 查询点查机制性能原因查询可利用 sort key 直接定位过滤条件指定的数据块并仅读取这些数据块,点查性能可大幅提升medium
TSDB level file排序方式每个 level file 中的数据均按 StockID 与 Timestamp 排序high
TSDB level file 数据块数据块大小每个 StockID 的记录存储为多个 16KB 数据块,并记录每个数据块在文件中的起始位置high
TSDB level file 层级数量最大 level 数level file 最多可有 4 个 levelhigh
TSDB Level 0 文件来源生成方式Level 0 文件由 cache engine 写入磁盘产生;更高 level 由更低 level 合并生成high
TSDB Level 0 文件单文件最大大小每个 level 0 文件最大为 32MBhigh
TSDB Level 0 文件生成条件大于 32MB 时行为每次从 cache engine 写入同一分区数据量若大于 32MB,则产生多个 level 0 文件high
TSDB compaction(Level 0 → Level 1)触发条件当分区内 level 0 文件数量超过 10 个或 level 0 总数据量大于 256MB 时,所有 level 0 文件合并压缩为一个 level 1 文件(以此类推)high
TSDB 文件合并排序行为合并文件时会将数据按 StockID 与 Timestamp 排序high
TSDB 文件合并压缩目的/效果通过不断合并压缩控制 level file 数量,避免数量过多导致性能降低medium
createPartitionedTable keepDuplicates用途用于指定一个分区内 sortColumns 重复数据如何处理high
keepDuplicates默认值默认值为 ALL(保留所有数据)high
keepDuplicates可选值含义FIRST:仅保留重复数据第一条;LAST:仅保留重复数据最新一条high
TSDB sort key 数量建议推荐上限建议每个分区内 sort key 最好不超过 1000 个high
sort key 过多的影响性能影响sort key 过多会导致每个 sort key 数据量少、数据块不足 TSDBMaxBlockSize、数据块数量多,查询读取大量数据块增加读文件耗时medium
sortKeyMappingFunction用途可通过建表函数指定 sortKeyMappingFunction 对 sort key 降维high
sortKeyMappingFunction 降维代价/建议降维一定程度影响写入性能;建议优先合理规划 sortColumnsmedium
TSDBCacheEngineSize 配置参数单位以 GB 为单位设定 cache engine 容量high
TSDBCacheEngineSize 配置参数默认值默认值为 1GBhigh
TSDBCacheEngineSize 配置参数建议值建议设置 1GB 或以上high
TSDBMaxBlockSize 配置参数用途与单位设置存储拆分的数据块在压缩前大小(bytes)high
TSDBMaxBlockSize 配置参数默认值默认值为 16,384high
TSDBMaxBlockSize 参数影响权衡参数越大压缩率越高,但点查性能会有所下降medium
triggerTSDBCompaction 命令用途可手动触发 level 0 file 合并(用于不再写入数据的分区)high
triggerTSDBCompaction 效果收益可提升查询性能并提升压缩率medium
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high