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

互联网- 2023-08-20 21:34:24

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

大家好,感谢邀请,今天来为大家分享一下MySQL分库分表之后,id主键如何处理的问题,以及和mysql不建议uuid做主键的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

本文目录

  1. oracle除了自增,还有什么方式当主键的
  2. MySQL分库分表之后,id主键如何处理
  3. sql主键冲突什么意思
  4. uuid和自增id优缺点

oracle除了自增,还有什么方式当主键的

oracle主键自增主要有有两种方式,一是通过序列加上触发器,一种是序列加显示的调用。除了自增我们还可以用oracle的内置函数sys_guid()。sys_guid是产生并返回唯一的标识符,由16个字节组成。

序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不适合将它用作并行或者远程环境里的主关键字,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。

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

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

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

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

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

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

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

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

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

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

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

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

sql主键冲突什么意思

sql主键冲突的场景通常发生在数据库表里主键已存在某值,比如主键1001,在后续插入时数据时,数据主键1001再次出现,插入时就会出现主键冲突。解决方法:

方法一、使用表主键自增,不再人工插入。

方法二、主键使用32位随机uuid,理论上可避免主键冲突的发生。

uuid和自增id优缺点

自增id

优点

数字类型,占用空间小,写入速度相对快数据库自动增量排序,对检索有利,读速度快系统编码过程中,可以不指定id,数据库自增。

缺点

因自动增长,当手动插入的时候会出现麻烦,主键冲突的情况会有发生分表之后控制不好会出现主键重复现象新老数据合并,要是新数据主键也是数字类型,想新老数据区分会出现一些冲突。

uuid

优点

全局唯一性,不用担心重复的现象,对数据的拆分、合并比较友好。

缺点

字符串类型,占用空间比较大,读写速度慢,而且索引会随着数据量的增加越来越难用。

好了,文章到此结束,希望可以帮助到大家。

分库分表后 id 主键如何处理
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.66688897.com/12/108030.html
上一篇:MySQL中text类型的长度有没有限制
下一篇:lol端游新手射手英雄选择(lol适合新手的射手有哪些)
相关文章
返回顶部小火箭