mysql主键自增方案哪种好

news/2024/7/3 11:38:14
在只使用单数据库时,使用自增主键ID无疑是最适合的。
但在集群、主从架构上时就会有一些问题,比如:主键的全局唯一

这里介绍一下在集群环境下除了自增ID外的其它创建主键的方案
1、通过应用程序生成一个GUID,然后和数据一起插入切分后的集群。优点是维护简单,实现也容易。缺点是应用的计算成本较大,且GUID的长度比较长,占用数据库存储空间较大,涉及到应用的开发。
说明:主要优势是简单,缺点是浪费存储空间。

2、通过独立的应用程序事先在数据库中生成一系列唯一的 ID,各应用程序通过接口或者自己去读取再和数据一起插入到切分后的集群中。优点是全局唯一主键简单,维护相对容易。缺点是实现复杂,需要应用开发。
说明:ID表要频繁查和频繁更新,插入数据时,影响性能。

3、通过中心数据库服务器利用数据库自身的自增类型(如 MySQL的 auto_increment 字段),或者自增对象(如 Oracle 的 Sequence)等先生成一个唯一 ID 再和数据一起插入切分后的集群。优点是?好像没有特别明显的优点。缺点是实现较为复杂,且整体可用性维系在这个中心数据库服务器上,一旦这里crash 了,所有的集群都无法进行插入操作,涉及到应用开发。
说明:不推荐。

4、通过集群编号加集群内的自增(auto_increment类型)两个字段共同组成唯一主键。优点是实现简单,维护也比较简单,对应用透明。缺点是引用关联操作相对比较复杂,需要两个字段,主键占用空间较大,在使用 InnoDB 的时候这一点的副作用很明显。
说明:虽然是两个字段,但是这方式存储空间最小,仅仅多了一个smallint两个字节。

5、通过设置每个集群中自增 ID 起始点(auto_increment_offset),将各个集群的ID进行绝对的分段来实现全局唯一。当遇到某个集群数据增长过快后,通过命令调整下一个 ID 起始位置跳过可能存在的冲突。优点是实现简单,且比较容易根据 ID 大小直接判断出数据处在哪个集群,对应用透明。缺点是维护相对较复杂,需要高度关注各个集群 ID 增长状况。
说明:段满了,调整太麻烦。

6、通过设置每个集群中自增 ID 起始点(auto_increment_offset)以及 ID 自增步长(auto_increment_increment),让目前每个集群的起始点错开 1,步长选择大于将来基本不可能达到的切分集群数,达到将 ID 相对分段的效果来满足全局唯一的效果。优点是实现简单,后期维护简单,对应用透明。缺点是第一次设置相对较为复杂。
说明:避免重合需要多种方案结合

http://www.niftyadmin.cn/n/3662572.html

相关文章

MySQL系列(一)

一、简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点: MySQL是一种数据库管理系统。 MySQL是一种关联数据库管理系统。 MySQL软件是一种开放源码软件。 MySQL数据库服务器具有快速、可靠和易于使用的特…

logback日志模板与详解

<pattern>的转换符说明&#xff1a; &#xff08;这部分引用自http://aub.iteye.com/blog/1103685&#xff09;转换符 作用 c {length } lo {length } logger {length }输出日志的logger名&#xff0c;可有一个整形参数&#xff0c;功能是缩短logger名&#xff0c;设置为…

php curl 错误 cURL error 60

为什么80%的码农都做不了架构师&#xff1f;>>> cURL error 60 unable to get local issuer certificate 原因 curl 配置中开启了证书校验 解决此报错有2种处理方法 1、curl 关闭证书校验 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 2、php 配置中添加证书…

Python基础之Python语言类型

编程语言主要从以下几个角度进行分类&#xff1a;编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言编译和解释的区别是什么&#xff1f;编译器把源程序的每一条语句都编译成机器语言&#xff0c;并保存成二进制文件&#xff0c;这样运行时计算机可以直接以机器…

跨程序共享数据——Content Provider 之 创建自己的内容提供器 ...

本模块共有四篇文章&#xff0c;参考郭神的《第一行代码》&#xff0c;对Content Provider的学习做一个详细的笔记&#xff0c;大家可以一起交流一下&#xff1a; 跨程序共享数据——Content Provider 之 运行时权限解析以及申请的实现&#xff08;可完美解决java.lang.Securit…

Python常用模块之时间(datetime,time)

首先说一下datetime 时间戳转换为指定格式日期&#xff1a; 用strftime格式化时间的参数 python中时间日期格式化符号&#xff1a; %y 两位数的年份表示&#xff08;00-99&#xff09; %Y 四位数的年份表示&#xff08;000-9999&#xff09; %m 月份&#xff08;01-12&#xff…

有关ultraedit语法高亮的设置

刚安装ultraedit后编写文档可能会遇到语法关键字不高亮的问题&#xff0c;以下为解决方案。 1.找到高级——配置——设置 。 2.在设置中依次找到编辑器显示——语法高亮 。 3.在文档的完整目录名称中填入你ultraedit安装目录下wordfiles文件夹的完整路径 。 &#xff08;此处一…

为应用程序选择合适的流式处理器

\关键要点\\选择一款合适的流式处理器具有一定的挑战性&#xff0c;因为有太多的选择&#xff0c;而最终的选择取决于最终用户的使用场景。\\t流式SQL提供了更快的应用程序开发速度和高度可维护的部署。\\t查询编辑环境对开发人员的工作效率有显著的影响&#xff0c;这需要高级…