专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

查询mysql步长,JAVA互联网架构分库分表分布式下如何实现ID全局唯一性_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 12:38:43       共计:3579 浏览
查询mysql步长,JAVA互联网架构分库分表分布式下如何实现ID全局唯一性?

分库分表:

跨库的问题

分布式事务问题

查询数据结果集合并

全局唯一性ID保证

要求:

1、全局唯一性:不能出现重复的id号(基本的要求)。

2、信息安全:防止恶意用户规矩id的规则来获取数据。混淆效果

3、数据递增:保证我下一个ID一定大于上一个ID。

当前201709122030下一个:201709122031下一个:201709122032

互斥关系:信息安全、数据递增规律

CREATE TABLE `tl_id` (`id` varchar(255) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

业界分案:

UUID:

通用唯一识别码16个字节128位的长数字、

组成部分:当前日期和时间序列+全局的唯一性网卡mac地址

执行任务数:10000------------------------所有线程共耗时:38.305 s并发执行完耗时:449.0 ms单任务平均耗时:3.8305 ms单线程最小耗时:0.0 ms单线程最大耗时:193.0 ms

总结:

优点代码实现简单、不占用宽带、数据迁移不受影响

缺点无序、无法保证趋势递增(要求3)字符存储、传输、查询慢、不可读

Snowflake雪花算法

国外的twitter分布式下iD生成算法

1bit+41bit+10bit+10+bit=62bit

高位随机+毫秒数+机器码(数据中心+机器id)+10的流水号

国内:

保证数据的唯一性就行了IDC机房。

总结:

优点代码实现简单、不占用宽带、数据迁移不受影响、低位趋势递增缺点强以来时钟(多台服务器时间一定要一样)、无序无法保证趋势递增(要求3)

Mysql:

奇数跟我们偶数递增步长2

适合小型互联网公司、比如可以知道我们一定生成的ID数量 五万的订单量

一年1千8百万

Mysql一张表500万

如果公司每天订单量5万的数据 我们用mysql设置步长位100的话可以用27年

只能为100库 公司来到风投了 每天的订单量50万100万的时候

总结:

优点代码实现方便、性能不错、数字排序、可读性很强缺点受限数据库、扩展麻烦、插入数据库才能拿到ID、单点故障的问题

主从同步的时候:电商下单->支付insert master db select数据 因为数据同步延迟导致查不到这个数据。加cache(不是最好的解决方式)数据要求比较严谨的话查master主库。

CREATE TABLE `tl_num` (

`id` bigint(11) NOT NULL AUTO_INCREMENT,

KEY (`id`) USING BTREE

) ENGINE=InnoDB auto_increment=1 DEFAULT CHARSET=utf8;

Redis:

执行任务数:10000------------------------所有线程共耗时:136.587 s并发执行完耗时:1.515 s单任务平均耗时:13.6587 ms单线程最小耗时:1.0 ms单线程最大耗时:254.0 ms

总结:

优点不依赖数据、灵活方便、性能优于数据库的、没有单点故障(高可用)缺点需要占用网络资源、性能要比本地生成慢、需要增加插件

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:查询出mysql,怎么查看mysql数据库的用户名和密码_数据库 | ·下一条:天堂mysql查询,有哪些适合大学生学习的网站推荐_数据库

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有