StarRocks外表的使用方式-同步方向选择

【详述】问题详细描述
【背景】做过哪些操作?
【业务影响】
【StarRocks版本】2.2.5
【集群规模】例如:3fe(1 follower+2observer)+3be
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【联系方式】jimokanghanchao@gmail.com
使用场景:

  1. StarRocks集群CA和CB,想使用外表的方式,让CB完整同步CA的某个表Ta。
  2. 看起来有两种同步路径:
    a. 在CB上,创建ExtTa,ExtTa使用Engine=mysql,指向CA的表Ta。在CB上创建新的Ta,执行insert into Ta select * from ExtTa。
    b. 在CA上,创建ExtTa,ExtTa使用Engine=OLAP,指向CB,在CA上执行insert into ExtTa select * from Ta。
    望解答:
    a的做法,看起来是规避了StarRocks的外表不能读取的限制(故意把引擎声明为mysql),b的做法,和官方的文档一致,是对StarRocks的外表进行写入。这两种方式,是否完全等价呢?

感觉两者差不多吧,这么纠结的客户好像不多。两者是否完全一致不太确定:我知道实现B中每隔一段时间就会和CA进行同步,这个同步开销会比较大。A的话可能是异步地来更新元信息,更新开销会小点。

因为其实是StarRocks集群,所以使用A方式声明engine=mysql, 可能会存在某些实现上的差异:可能SR不支持某些MySQL的功能。不过如果是select * 的话就还好。

一般大家都是使用B,因为毕竟engine=OLAP就是为了同步两个StarRocks集群设计的。https://docs.starrocks.io/zh-cn/latest/data_source/External_table#starrocks-外部表

如果只是为了select * 的话,可能两者差距不大,也不是做复杂查询。

1赞

感谢专家回复,看起来B就是更推荐的做法。

如果同步的数据量较大,建议使用B,两者写入的性能差异很大。