分库分表需要考虑的问题
怎么保证主键唯一?
进行查询的时候怎么知道要查哪张表呢
插入数据的时候怎么知道要插入哪一张表呢
-
数据如果来自多张相同的表,该怎么分页呢
- 查出数据后需要在内存分页
-
垂直分库分成了几个数据库,代码上怎么配置数据库信息才能做到A业务去A库,B业务去B库
- 配置好逻辑表,在sql中指定对逻辑表即可
-
事务一致性问题
- 从代码层面解决
-
可以在同个服务器不同库搭建主从复制吗
- 一台服务器上需要启动多个服务,不同端口
能否在读写分离的基础上,创建多个主库呢
如果有多张表需要每个表都要配置吗
分库分表操作
-
垂直(在设计表结构的时候要就考虑)
分表:把字段很多的表拆分成两个表,一个表放常用字段,另一个表放不常用的,减少对不常用表的数据的操作
分库:根据业务来划分多个数据库,比如用户业务放在用户数据库,订单业务放在订单数据库
-
水平(在优化SQL,代码后数据量仍在大量增长时考虑)
分表:在同一数据库中,把一张表的数据分成多张表来存储
分库:把一张表的数据分开放在多个数据库里
遇到的问题
- 数据库主键ID的字段要设计为bigint长度大于18位,因为雪花算法自动生成的ID是十八位数字