对分库分表的一些疑惑

[复制链接]
查看11 | 回复1 | 2011-2-18 11:43:34 | 显示全部楼层 |阅读模式
对分库分表的具体细节以及由此带来的事务和跨节点join有一系列疑问,现在总结一下,希望各位puber帮忙解惑,多谢!
1 垂直分库
事务完整性
一条sql引用的两个表被分到不同的库,如果需要改写sql,如果保证其事务完整性?
个人:2pc/3pc虽然能严格保证事务一致性,但是代价太高;可以采用消息队列,第一个数据库实例执行的结果放入队列并传给第二个实例,此方案比较灵活但是实例间执行会有延迟且消息队列可能会丢失;
问:有没有其他解决方案,比如从java代码层面实现,可以说一下具体细节?
跨节点Join
个人:如果是字典表则分发到每一个节点,每次更新同步到每个节点;采用消息队列,机制同上;
问:除此之外还有没有其他方案?
2 水平分库
扩容拆分
对一个大表进行mod(2)拆分
个人:新建两个子表,insert直接路由到子表,同时采用insert...select批量同步数据,在此期间的select/update/delete都需要分别查询原表和新的子表,原表为空时则切换代理层路由,删除原表;
问:拆分过程中,如何保证业务停机时间降到最低?原表和新子表之间的同步如何尽快完成?
缩容
4个分库每个库一个子表,现在需要缩容到两个库,即将两个子表合并成一个;
个人:同上,关键点是如何让子表合并时间降到最低,以及合并期间发生的DML如何 处理?

回复

使用道具 举报

千问 | 2011-2-18 11:43:34 | 显示全部楼层


垂直分库的基本原则是业务级别的,良好的垂直分库基本是不会出现跨库的操作,如果一定有,请使用分布式事务...2pc/3pc没懂什么意思
水平分库的扩容和缩容,没看懂,在此期间的select/update/delete都需要分别查询原表和新的子表,直接在生产环境在线弄?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行