浅谈分库分表

0 概述

本文将为什么要分库分表、怎么分以及分库分表后带来的问题,来谈一谈分库分表的相关知识。

1 为什么要分库分表

为什么要分库分表,正面来回答这个问题,可能不是很好回答,那么我们从反面来看,如果不分库分表将会带来什么问题呢?
1.如果有新的需求,需要变更表的字段,那么就需要提交DDL,执行DDL时候是需要锁表的,如果此时表中数据过大就会导致锁表时间过长。
2.表中数据过大,DML性能下降,如果量比较大,rt会变高
3.单机性能极限,采用一主多从策略,读写分离,写的请求落在主节点上,读的请求落在从库上,但是如果从库过多会导致主从延时比较长,写入的数据不能立刻查到,这个需要看具体业务场景,是否需要强制查询主库。

2 怎么分

首先我们要选择一个分表字段(一般是业务的主键 比如订单Id),然后水平拆分(分表字段取模分表总数),那么怎么选择这个分表字段呢主要需要考以下几点:
1.是否便于查询,比如订单表,我们也可以按照订单Id,也可以按照用户Id来分。但是有时候,我们希望分库分表后能够满足两个Id查询,比如订单Id和userId,希望同一个userId的所有订单都落到同一张表中,这样就可以采用组合方的式生成分表字段订单Id(全局自增主键+userId后四位),这种组合方式生成订单Id做分表字段,即可用满足订单Id查询又可以满足用户Id查询。
2.数据分配是否相对均匀,不会出现数据的倾斜问题,如果选择分表字段不是很合适就会导致一些表的数据比较多,而一些表的数据比较少,应当避免这种现象。

3 带来的问题

1.夸库的事务不可用,原本的一个事务都是在同一库的(事务是基于连接的),分库后原本事务可能需要分到了不同的库,这样夸库的事务就会不可用。
2.非分表字段来查询的需求,这种情况下直接查询的性能非常低,需要扫描全表,这种情况可以通过将数据导入到ElasticSearch(搜索引擎)来解决,通过搜索引擎来满足查询非分表字段,也可以建立一个route表这个表想到于二级索引(路由表主要存储非分表字段到分表字段映射关系)。

ERP项目的数据库设计需要考虑多个因素,包括数据源的获取、数据同步和性能优化等。根据引用内容,可以考虑以下几点: 1. 数据源获取:根据引用\[1\],报表类需求需要获取所有的分店数据,可以使用多线程去切换数据源查询。可以考虑使用drds数据库中间件,但需要注意drds只支持mysql数据库。另外,引用\[2\]中提到了使用shardingjdbc数据库中间件的方案,可以配置所有的数据源,并使用sdid和scity作为数据库路由字段,实现分库分表的需求。 2. 数据同步:引用\[1\]中提到了老数据迁移成功后仍存在数据同步的问题。可以考虑使用消息队列或者sqlserver日志解决毫秒级数据更新的方式,以实现及时同步数据。这样可以确保数据源的整合到阿里云drds中,并方便后期的维护和扩展。 3. 性能优化:引用\[2\]中提到了shardingjdbc对于一些SQL操作的支持有限,特别是分页操作。在设计数据库时,需要考虑到业务需求,并选择合适的持久层框架,如mybatis,以满足业务需求并提高性能。 综上所述,ERP项目的数据库设计可以考虑使用drds数据库中间件或shardingjdbc数据库中间件,结合消息队列或sqlserver日志实现数据同步,以及选择合适的持久层框架进行性能优化。 #### 引用[.reference_title] - *1* *2* *3* [浅谈erp系统数据库设计](https://blog.youkuaiyun.com/AscaryBird/article/details/80719021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值