主键模型消耗内存太大

flickcdc实时同步oracle的两张表,1个表300万数据,一个表800万数据,使用routine load同步到starrocks。在starrocks里建表,主键都是一个字段,主键带字母所以必须是string,1副本,3个be,每个be用了超过800兆内存,因为保险业务,update非常频繁,期望的实时报表需要同步一两百张oracle表到下游数据库,2张表就用了超过800兆内存,上百张使用的内存更为巨大。听说kudu+impala也很耗资源而且时效性不高,实时报表不如用以前的方案直接连oracle查,我们目前采用一个汇总oralce数据库,汇总各个业务系统的表到一个库,报表连接oracle进行查询,减少了flinkcdc同步的资源和主键模型的内存资源。

请问StarRocks是哪个版本?

是1.19.3版本

目前primary表对内存需求确实很大, 需要事先规划一下, 对于不符合目前合适的场景的特别大的表(按天分区,老分区不再修改), 不建议使用primary表.
合适的场景参考文档:

在2.0版本包含了优化string类型主键的内存占用, 对于短字符串(<30) 内存使用会减少大概50%吧

800万条数据,min(data)是2006年,到现在15年,按天分区的话分区数太多了,每个tablet太小,而且保单状态不少是几年前的保单现在会有状态修改。这个表目前确实不适合做成primary表。能不能实现和OGG一样消耗的资源很小呢,我看测试环境的oracle汇总库,同步这些表,消耗的资源很小

这个场景确实按天不太合适, 可以考虑按年或者按月
你们对同步的延迟或者频率有要求么, 是否需要事实增量同步? 如果只有800w, 延迟要求又不高的话, 每天全量同步也是个方案

需要增量同步,实时性要求很高,目前离线部分用的hadoop+sparksql那一套,实时报表查询依赖于查询oracle,我们希望能用自己的大数据组件来进行实时报表开发,不依赖于DBA

要不试一下unique模型表, 虽然查询性能会差一点不支持delete, 但是你们的单表数据量不大, 影响应该不大

为啥starrocks的unique模型不支持delete,我记得doris的unique模型支持delete

SR和Doris的delete只支持通过sql语句做 delete from xx where 这种形式, 这种形式只适合偶尔使用, 不适合作为频繁同步delete操作使用

1赞

Doris的routine load支持delete吧

你们有试过阿里云的hologres么 :joy:?主键更新性能很好啊

是的, 确实是支持的

SR是基于2020年初的版本fork的, routineload增加delete支持是2020下半年加入的

primary key的表按年分区的话,比如今天数据有更新,是把今年的key都放在主键里吗,如果能做到只把今天的key放在内存里,可大幅减少内存消耗,但是我们又不能按天分区,因为min(date)是2006年,按天分区tablet太多。

没试过哎,我们更倾向于私有化部署

oracle 50几万数据的表,使用primary key 模型,flinkcdc,kafka,routine loda同步,2副本,3个字段是主键,两个string,1个bigint。3be,增量同步阶段其中1个be用了将近4个G的内存,数据是202112之前是一个分区,202112是一个分区,每个分区分桶数是1,更新主要是当天数据会更新,也就是当月数据的主键会放到内存里,但是一个节点用了4个G的内存,太大了呢,就算减少了一半也很庞大

) ENGINE=OLAP
PRIMARY KEY(GETNOTICENO,CURRENCY,MONTH1)
PARTITION BY RANGE(MONTH1)(
PARTITION p202111 VALUES LESS THAN (“20211201”),
PARTITION p202112 VALUES LESS THAN (“20220101”)
)
DISTRIBUTED BY HASH(GETNOTICENO,CURRENCY) BUCKETS 1
PROPERTIES (
“dynamic_partition.enable” = “true”,
“dynamic_partition.time_unit” = “MONTH”,
“dynamic_partition.end” = “3”,
“dynamic_partition.prefix” = “p”,
“dynamic_partition.buckets” = “1”,
“replication_num” = “2”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”
);

[gelcmw@D2-DAP-CDH-DATA1-POC127 ~]$ free -h
total used free shared buff/cache available
Mem: 23G 7.0G 11G 863M 5.1G 15G
Swap: 8.0G 827M 7.2G

[gelcmw@D2-DAP-CDH-DATA1-POC127 ~]$ free -h
total used free shared buff/cache available
Mem: 23G 9.1G 7.3G 863M 7.1G 13G
Swap: 8.0G 827M 7.2G

问个问题,如果是基于按月分区的话,如果当前月有更新,是不是内存里面只有该月分区的主键索引?那到了下个月,老月份的主键索引是有什么机制清除了吗(有过期时间?)