【 TiDB 使用环境】生产环境 /测试/ Poc
现在有个需求,在同一个库中,需要把schema A中的表B 实时同步到schema C中的表D,B和D的表结构一样。有什么最简单的办法实现?
用一份数据不行吗,干嘛要再复制一份
作为开发,一般采取以上方案
1、程序里在写入A的时候,同步写入C
2、通过etl工具进行准实时同步
其实最简单的就是1
让schema C对应的账号有schema A中B表的权限,是不是就可以不用存两份了
开发的需求,我是没有理解,说了半天没说通
1这个表数据来源有点分散不大好同步写入
我是想cdc同步到kafka,然后java消费写入表d,有点绕麻烦
开发就想存两份,后续可能D表的结构都不一样
你说的方案可以啊,
cdc → kafka → java → N tables
或者 CDC → kafka → Flink → N tables
结构不一样,也没问题的,只要数据能填充
cdc能否创建任务配置–sink-uri=“mysql://root:xxxx@0.0.0.0:4000/schema C”
这样同步数据回到同一个数据库集群指定不同的schema
用Kettle或者replace into
脚本来同步很方便,但是如果源表是频繁变更状态,对比和同步历史变更的成本会比较高,实时性要求越高时越占资源越多。
CDC相对实时性好一些,但是有点重。
最轻的方式是建视图,资源占用最少,做好权限隔离就好。
能保证写入的时候就同步两份数据的话最好,不行的话就通过数据同步工具实现呗
要实时同步吗?
这不是应用层几行代码就解决了的么?
我们一般会开发一个这个表的公共写入方法,所有写入都需调用这个方法,然后在这个公共方法里做同步写入。
如果像你说的,是有多个来源,且来源不可控的话,应用层是不大好解决,尤其涉及第三方写入的时候。
开发转DBA就是有优势啊
记得以前搞过一个oracle->ogg->kafka->es的项目,有校验和重传机制,实现的比较复杂。
后来换了个新开发领导,改成了同时写oracle和es。
异步同步数据吧,开消要小一点
同时写双库涉及到分布式事务,一个成功一个失败很麻烦的
要是有sqlserver那种镜像表功能就好了
修改所有涉及到的代码是个很麻烦的事情,特别是有一定历史的项目。
我们都是柔性事务,会出现一个成功一个失败,但是有机制保证最终一致。
要是有sqlserver,还用用什么镜像,直接触发器搞定啊。