MySQL分库分表之后,id主键如何处理

Mysql分库分表之后,主键如何处理

其实MySQL分库分表之后,id主键如何处理的问题并不复杂,但是又很多的朋友都不太了解分表键不建议用主键,因此呢,今天小编就来为大家分享MySQL分库分表之后,id主键如何处理的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

  1. MySQL分库分表之后,id主键如何处理
  2. mysql小数类型建表怎么用
  3. 分库分表思路与解决方案

MySQL分库分表之后,id主键如何处理

我从分库分表存在的问题和怎么做来回答一下这个问题。。

一,分库分表的ID主键不能依赖于数据库的自增,因为多库中会重复!

通常使用外接的数据组件获取全局唯一的ID:比如加强型UUID(根据Ip,时间戳等得到)和使用Redis(RedisAtomicLong)和zookeeper的API获取,Twitter的雪花算法等等!

二,分库分表之后的连接查询比较困难!

问题没法避免,通常拆分SQL,使用多次查询,用查到的结果再分别查别的结果!

三,分布式事务的数据一致性很难保证!

可以使用TCC编程模型保证两处的事务都能正确提交,但是这种方式对代码的侵入比较重!也可以使用基于消息的数据一致性保证!

四,多数据的排序,分组,统计会比较困难!

1,用多线程,对多个节点分别查询,然后汇总!

2,也可以提前冗余查询表,将所有的经常查询的重点数据提前统一到个库表里!

分库分表涉及到的知识点比较多,建议使用专门的分库分表组件!本人有mycat使用经验,如果您有相关问题,欢迎前来探讨!

mysql小数类型建表怎么用

mysql小数类型建表使用步骤如下:

1.级别:[强制]表达是与否概念的字段,必须使用is_***的方式命名,数据类型是unsignedtinyint(1表示是,0表示否)

说明:任何字段如果为非负数,必须是unsigned.

正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未删除。

2.级别:[强制]表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称要慎重考虑。

说明:mysql在windows下不区分大小写,但在linux下默认是区分大小写。因此,数据库名,表名,字段名,都不允许出现大写字母。

正例:qy_admin,pay_config,leve3_name

反例:qyAdmin,payConfig,leve_3_name

3.级别:[强制]表名不使用复数名词。

说明:mysql中表名应该仅仅表示表里的实体内容,不应该表示实体数据,对应于DO类名也是单数形式,符合表达习惯。

4.级别:[强制]禁用保留字,如desc,range,match,delayed等。参考mysql官方保留字。

5.级别:[强制]主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名。

说明:pk_即为primarykey;uk_即uniquekey;idx_即index的简称。

6.级别:[强制]小数类型为decimal,禁止使用float和double。

说明:mysql的float,double在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储。

7.级别:[强制]如果存储的字符串长度几乎相等,使用char定长字符串类型。

8.级别:[强制]vaarchar是可变长字符吕,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来以应,避免影响其它字段索引效率。

9.级别:[强制]表必备三个字段:id,create_time,updated_time。

说明:id必为主键,类型为unsignedbigint,支持的数字大小为19位。单表时自增,步长为1.create_time,updated_time类型为timestamp主动创建,另一个是表示被动更新。

10.级别:[推荐]表的命名最好是加上"业务名称_表的作用"。

说明:这样能清楚的知道每个表的作用。

正例:user_task,pay_config,force_extra

11.级别:[推荐]库名与应用名称尽量一致。

12.级别:[推荐]如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。

13.级别:[推荐]字段允许适当冗余,以提高查询性能,但必须考虑数据一致,冗余字段应遵循:

1)不是频繁修改的字段。

2)不是varchar超长字段,更不能是text字段。

正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存储类目名称,避免关联查询。

14.级别:[推荐]单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。

说明:mysql如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

15.级别[参考]合适的字符存储长度,不但节约数据库表空间,节约索引存储,更重要的是提升检索速度。。

分库分表思路与解决方案

分库分表是一种常见的数据库架构设计,它可以将一个大的数据库拆分成多个小的数据库,每个小的数据库都有自己的表和数据。这样做的好处是可以提高系统的性能和可扩展性。

分库分表的思路和解决方案有很多种,其中一种是使用中间件来实现。常用的中间件有MyCAT、ShardingSphere等。另外,还有一种基于垂直切分的方案,即按照业务模块将数据分散到不同的数据库中。

好了,文章到这里就结束啦,如果本次分享的MySQL分库分表之后,id主键如何处理和分表键不建议用主键问题对您有所帮助,还望关注下本站哦!

分库分表后 id 主键如何处理

本文内容来自互联网,若需转载请注明:https://bk.66688891.com/12/119457.html