TSDB建表的时候sortKeyMappingFunction不太理解

查看手册里面:

https://dolphindb.cn/cn/help/200/FunctionsandCommands/FunctionReferences/c/createPartitionedTable.html?highlight=sortkeymapping

提到,sortkeymappingfunction是对sortkey进行降维的,但是不太理解什么情况下需要降维,为什么需要降维

请先 登录 后评论

1 个回答

Feng Gao

举个极端的例子,假设一个表按天分区,数据的频率是,每个设备一天产生1条数据,但是有1000万个设备

这个时候如果用tsdb建库建表,sortColumns设置为设备Id,那么一天的sortKey就有1000万个,每个sortKey对应的数据只有1条。

如果从事务型数据库的思维来看,一个索引对应1条数据是没什么问题的。

但是DolphinDB是时序数据库,虽然在TSDB引擎实现了类似索引的功能,但是sortKey是与数据存储有很深的联系。

可以这么理解,DolphinDB在存储时,按照sortKey对存储文件进行了划分,那么1000万个就代表,一个分区的存储文件中划分了1000万个存储小块,每个小块都有固定的开销,这增加了存储的开销,而且读取整个分区数据的时候,可以简单理解为读取1000万个小文件,非常的低效。

于是就有了,sortKeyMappingFunction,将多个sortKey进行分组,减少sortKey的数量,增加每个sortKey对应的数据量。比如下面的这个例子:

login(`admin,`123456)
n=10000000
id = "d" + string(1..10000000)
TradeDate = take(2022.01.01,n)
val = rand(1000..3000, n)

schemaTable = table(id, TradeDate, val)

dbPath = "dfs://TSDB_DEMO"
if(existsDatabase(dbPath)){dropDatabase(dbPath)}
db_demo = database(dbPath, VALUE, 2022.01.01..2022.01.05, engine='TSDB')
demo = createPartitionedTable(dbHandle=db_demo, table=schemaTable, tableName="demo", partitionColumns=`TradeDate, sortColumns=`id`TradeDate, keepDuplicates=ALL, sortKeyMappingFunction=[hashBucket{,1000}]).append!(schemaTable)

就是将,id降频,从1000万降频到1000个,每个sortKey就会有1万条数据

请先 登录 后评论
  • 1 关注
  • 0 收藏,940 浏览
  • dongmange 提出于 2022-08-19 16:06

相似问题