对于方案一,可以试试用upsert插入更新
小白请问一下各位大神!!有没有一个性能比较好的财务数据分区方案:
情况
例如:目前我将米筐作为数据源,将从米筐获取的财务报表数据存到本地进行某些财务因子的计算,三张财报分开存进一个库。
因为财务字段可能有变化,以窄表的形式来储存。
转成窄表后,字段有这么几个:id(股票代码)、quarter(季度)、info_date(数据发布日期)、fields(财务字段名)、value(值),
id + quarter + info_date + fields 是每行数据的唯一指定。
每个季度的数据量不一致,q2、q4的数据比较多。转成窄表后,三张报表的行数平均在 50 万以上,大小平均都有 50m 左右。
使用场景
主要使用场景是按照某种方式计算财务因子,查询的时候一般根据的是 quarter(季度)+ info_date(数据发布日期),然后每天从数据源获取更新。
问题
查询和更新之间有取舍,有没有一种比较好的分区方案能够比较这种(或者优先查询,更新可以稍微牺牲)。
您好,方案二查询性能下降的问题可以通过设置 sortKeyMappingFunction 解决。
当使用 TSDB 引擎对 sortColumn 设置多列时,除最后一列外的其余列称为 sort key,未优化的 sortColumn 设置会导致 sort key 过多,引发压缩比降低、查询性能不佳等负面效果。例如 sortColumn 为 id, quarter, info_date, fields 时,sort key 数量为 id * quarter * info_date 这三列字段的可枚举值,可能会导致单一最小分区内的索引过多,我们的建议值是少于 1000 。
因此,通过设置 sortKeyMappingFunction 来减少 sort key 数量,从而解决这个问题,希望能对您的问题有帮助。
newPt = db.createPartitionedTable(<other params>, sortKeyMappingFunction=[hashBucket{,5}])