《PG大会_吕海波.pdf》由会员分享,可在线阅读,更多相关《PG大会_吕海波.pdf(37页珍藏版)》请在三个皮匠报告上搜索。
1、PostgreSQL中文社区第13届PostgreSQL中国技术大会聚焦云端创新汇聚智慧共享吕海波 (公众号:IT知识刺客)分布式词话PostgreSQL中文社区轰轰烈烈的去IOE掘起的新势力03廉颇老矣,尚能饭否04妥协的分库分表0102PostgreSQL中文社区目录contents01妥协的分库分表PostgreSQL中文社区PostgreSQL中文社区01 妥协的分库分表User DBCaty DBSlcdb DBMOBILOG DBCTLGU DBPostgreSQL中文社区01 妥协的分库分表继续依赖高端硬件另寻它路分布式PostgreSQL中文社区01 妥协的分库分表 分散数据的
2、方式 HASH RANG 路由库PostgreSQL中文社区01 妥协的分库分表User_idUser_namBalance1甲100002乙10000100丙100001000丁假设表被拆分为64份,分别分布到64个库中。User_id121001000最简单的HASH方法就是,以user_id 除以 64 的余数为HASH值,决定某个用户的数据保存到几号库中。PostgreSQL中文社区01 妥协的分库分表User_id165129193User_id2661301941号库2号库以user_id 除以 64 的余数为HASH值,决定某个用户的数据保存到几号库中。User_id641281
3、9225664号库USER_ID除以64余1USER_ID除以64余2USER_ID除以64余0PostgreSQL中文社区01 妥协的分库分表User_id165129193User_id2661301941号库2号库User_id6412819225664号库USER_ID除以64余1USER_ID除以64余2USER_ID除以64余0SELECT username,balance FROM prod_tab WHERE user_id=130;130 mod 64=2130PostgreSQL中文社区01 妥协的分库分表应用层数据层应用连接中间层。在应用眼中,它认为中间层就是数据库。它不
4、知道数据库被拆分成多个。中间层根据ID列,将应用传递过来的SQL发送到对应数据库。PostgreSQL中文社区01 妥协的分库分表应用层数据层调用中间层提供的接口函数,连接数据库;SELECT name,balance FROM prod_tab WHERE user_id=130;根据user_id=130判断出用户要查询的数据在2号数据库中;连接2号数据库;SELECT name,balance FROM prod_tab WHERE user_id=130;2号数据库开始执行查询PostgreSQL中文社区01 妥协的分库分表应用层数据层连接数据库;开始事务;Update prod_ta
5、b set bala=bala-100 where user_id=A;Update prod_tab set bala=bala+100 where user_id=B;结束事务 Commit;连接1号数据库;开始事务;Update prod_tab set bala=bala-100 where user_id=A;结束事务 Commit;连接4号数据库;开始事务;Update prod_tab set bala=bala+100 where user_id=B;结束事务 Commit;修改B的余额修改A的余额两个数据库分别开始自己的事务PostgreSQL中文社区01 妥协的分库分表应用
6、层数据层连接数据库;开始事务;Update prod_tab set bala=bala-100 where user_id=A;Update prod_tab set bala=bala+100 where user_id=B;结束事务 Commit;连接1号数据库;开始事务;Update prod_tab set bala=bala-100 where user_id=A;结束事务 Commit;连接4号数据库;开始事务;Update prod_tab set bala=bala+100 where user_id=B;结束事务 Commit;修改B的余额修改A的余额两个数据库分别开始自己