沧州市建设服务中心网站,网站建设不开单,超低价的郑州网站建设,深圳品牌公寓排名常见的几种ID生成方式对比: 种类 全局唯一 高性能 高可用 趋势递增 中心服务 缺点 UUID 是 高(本地生成,(无网络开销) 低(无序,不适用) 否 否 无序、字符串 数据库自增 单表唯一 中 中(宕机就会使业务服务中断) 是 否 安全性差,能猜出来规律 对于分库分表场景无法唯一 数据库自…常见的几种ID生成方式对比: 种类 全局唯一 高性能 高可用 趋势递增 中心服务 缺点 UUID 是 高(本地生成,(无网络开销) 低(无序,不适用) 否 否 无序、字符串 数据库自增 单表唯一 中 中(宕机就会使业务服务中断) 是 否 安全性差,能猜出来规律 对于分库分表场景无法唯一 数据库自增-集群 是 中 中(宕机就会使业务服务中断) 是 否 通过设置初始值及步长进行自增 不好扩展,增加节点可能导致不唯一 数据库号段模式 是 低(需要频繁更新表maxId) 中(宕机就会使业务服务中断) 是 否 依赖数据库,需要频繁更新数据库maxId 乐观锁方式保证高可用 数据库号段模式+缓存 是 中 中 是 否 在号段模式基础上增加缓存buffer 缓存数据同步到数据库需要保证强一致性,增加了复杂度 redis的incr 单模块唯一 多模块不适用 中 中(宕机就会使业务服务中断) 是 否 多服务情况下单台redis无法满足 多redis集群时,主master宕机,会在较短时间内存在ID重复 雪花算法 高(不考虑回拨情况下) 高(本地生成,(无网络开销) 中(趋势递增) 是 否 存在时钟回拨问题 多节点时可能需要自定义datacenterId和machineId的生成(IP) 百度uid generator 高 高(本地生成,(无网络开销) 高(趋势递增) 是 否 在雪花算法基础上增加启动服务时获取workId(或初始化workId) 项目启动时间会被拉长,依赖数据库 美团Leaf 高 高(本地生成,(无网络开销,需要自己实现) 中(中心服务) 高(自定义方式较复杂) 是 是 百度uid模式下衍生而来 可以实现自己的ID生成中心,即leaf-server,由该项目提供获取ID的方法供调用,但该方式比较耗IO,性能会有所下降 依赖数据库或zookeper 为了提升性能,需要自己在项目里面自定义实现Leaf server 滴滴TynyId 高 高(本地生成,(无网络开销,需要自己实现) 中(中心服务) 高(自定义方式较复杂) 是 是 美团Leaf模式下衍生而来 可以实现自己的ID生成中心,即TynyId-server,由该项目提供获取ID的方法供调用,但该方式比较耗IO,性能会有所下降 依赖数据库或zookeper 为了提升性能,需要自己在项目里面自定义实现TynyId server ----------------------------------------------------------------------------------------------
数据库自增
一, 引入依赖:
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.19/version
/dependency
dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.2.2/version
/dependency
二, 新建表
CREATE TABLE `auto_generate` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;三, resources目录下编写自动生成代码配置文件: generatorConfig.xml
?xml version="1.0" encoding="UTF-8"?
!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"generatorConfiguration!--mysql 连接数据库jar 这里选择自己本地位置;如果不知道maven本地仓库地址,可以使用EveryThing工具全局搜索mysql-connector-java,找到jar包位置;也可以手动下载一个jar放在指定位置,进行引用。--classPathEntry location="/Users/lizhihao/.m2/repository/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar"/context id="testTables" targetRuntime="MyBatis3"commentGenerator!-- 是否去除自动生成的注释,true:是,false:否 --property name="suppressAllComments" value="true"//commentGenerator!--数据库连接的信息:驱动类、连接地址、用户名、密码 --jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/generate_id" userId="root"password="root"/jdbcConnection!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal --javaTypeResolverproperty name="forceBigDecimals" value="false"//javaTypeResolver!-- 指定javaBean生成的位置targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录--javaModelGenerator targetPackage="org.com.spi.model" targetProject="src/main/java"!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,