目录
3、分库分表的问题
3.1 事务一致性问题
由于分库分表后把数据分布在不同库甚至不同的服务器,数据库原有的单库的数据库事务就会失效,不同的数据库实例完成同一个事物可能会失败从而带来分布式事务问题。
3.2 跨节点关联查询
在垂直分库后比如商品信息和店铺信息不在一个数据库甚至不在一个服务器这时就无法进行联表的查询。可以将原来的关联查询分为两次查询,第一次查询的结果集中找出关联数据id,然后根据id发起第二次请求得到关联数据,最后将获得到的数据进行拼装。
3.3 跨节点分页、排序函数
跨节点多库进行查询时,limit分页、order by排序问题就变得比较的复杂。需要先在不同的分片节点中将数据排序并返回,然后将不同分片返回的结果集数据进行汇总和再次排序。
3.4 主键避重
在分库分表的环境中,由于表中数据同时存在不同数据库中,主键值平时使用的主键自增长将会失去效果,某个数据库生成的ID无法保证全局唯一的主键。因此需要单独的设计全局的主键,以避免跨库主键重复问题。
3.5 公共表问题
公共表就是业务中经常用的一些存储公共属性的表,也就是我们常说的参数表、数据字典表,当我们进行分库分表后根据不同的业务拆分了不同的库表,但是公共属性因为数据量和变化都不是很大所以没必要进行再次的拆分。我们可以每个数据都保存一份这样的公共表的数据,对所有的公共表的更新等操作进行统一的同时的发送到所有的分库分片中进行修改。这样公共的表维护起来都是比较麻烦的。由于分库分表之后,数据被分散在了不同的数据库或者不同的服务器中,因此对数据的操作也无法通过常规的方式来完成,并且他还带来了一系列的问题。为了解决这些问题,所以我们会引入一些市面上常用的中间件来解决这些问题,比如shareing-jdbc。
欢迎关注我的微信公众号,更多内容将在微信公众号中发布: