For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
分库分表是程序员在进行数据库优化的时候会经常用到的一种优化方法,而本文我们就通过案例分析来简单了解一下,分库分表之后需要解决哪些问题。
分库分表之后,原本在一个库中的事务,变成了跨越多个库,如何保证跨库数据的一致性问题,也是一个常见的难题。用户创建订单时,需要在订单库中保存一条订单记录,并且修改库存库中的商品库存,这里就涉及到跨库事务的一致性问题。也就是说我怎么保证当前两个事务操作要么同时成功,要么同时失败。
跨库查询
比如查询在合同信息的时候要关联客户数据,由于是合同数据和客户数据是在不同的数据库,那么我们肯定不能直接使用join的这种方式去做关联查询。
我们有几种主要的解决方案:
字段冗余,比如我们查询合同库的合同表的时候需要关联客户库的客户表,我们可以直接把一些经常关联查询的客户字段放到合同表,通过这种方式避免跨库关联查询的问题。
数据同步:比如商户系统要查询产品系统的产品表,我们干脆在商户系统创建一张产品表,通过ETL或者其他方式定时同步产品数据。
全局表(广播表)比如基础数据被很多业务系统用到,如果我们放在核心系统,每个系统都要去关联查询,这个时候我们可以在所有的数据库都存储相同的基础数据。
ER表(绑定表),我们有些表的数据是存在逻辑的主外键关系的,比如订单表order_info,存的是汇总的商品数,商品金额;订单明细表order_detail,是每个商品的价格,个数等等。或者叫做从属关系,父表和子表的关系。他们之间会经常有关联查询的操作,如果父表的数据和子表的数据分别存储在不同的数据库,跨库关联查询也比较麻烦。
上面的思路都是通过合理的数据分布避免跨库关联查询,实际上在我们的业务中,也是尽量不要用跨库关联查询,如果出现了这种情况,就要分析一下业务或者数据拆分是不是合理。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。