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

mysql分库如何查询,分布式系统中_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 13:54:00       共计:3593 浏览
mysql分库如何查询,分布式系统中?

分布式系统中的“身份证”即分布式Id且唯一。如何生成分布式系统中的唯一Id?考虑这个问题的时候,我觉得可以从“带着问题去找方案”这个思路去聊聊,也就是说我要生成的这个分布式Id需要满足哪些条件呢?

分布式Id生成需要满足的条件全局唯一:这个不用多说了,不然还有什么分布式“身份证”?高可用:不能有单点故障,小心引起雪崩;安全:这个Id不能是连续的,否则让非友好人士发现规则,数据爬去、数据预测都会有一定的安全风险;保证顺序递增:MySQL的Innodb引擎采用B+树算法存储索引数据,为了提高性能,就得要求索引的主键在一定程度上是有序的,这样不管是写入还是查询效率都很好的;分片支持:可以根据分布式Id得到具体的业务shardingId,方便业务查询;不要太长:64位存储最佳?大家觉得还有哪些场景或者条件需要考虑?欢迎评论区留言讨论~那么基于以上需要考虑的条件,我们日常中都有哪些分布式Id生成方案呢?数据库生成

优点:简单粗暴,自增Id顺序递增

缺点:只有主库才能生成,容易造成单点故障;性能不足时候,无法扩展;分库分表会有很多麻烦。

UUID

优点:简单直接,无性能问题,真正的全球唯一

缺点:无规则;UUID是字符串,IO传输数据量大,存储空间大,查询效率低;基于UUID分库分表更难。

redis生成

优点:基于内存操作的reids性能比数据库好;可以基于集群做有序的数字Id生成;利于分库分表;

缺点:需要搭建一套高可用redis集群;需要基于集群编写生成Id的方案;

zookeeper生成和redis类似业务规则生成举例订单号的生成:10_2298765801_1565283246399_781.业务字段用于区分具体的业务,采用2-4位,可以根据不同的系统或者业务自由决定;2.用户Id,最长10位够了吧3.毫秒级时间戳:13位4.随机数:2-4位

个人还是喜欢采用业务规则生成的方案,性能肯定没的说,基于内存计算即可得到,也不存在什么单点故障,哪台机器都可以自己生成,不依赖第三方服务或者应用,也能保证顺序递增。

这样的设计能达到真正的分布式唯一Id吗?能满足上面所说的那些条件吗?大家还有什么好的生成方案?欢迎评论交流,批评指正~

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:mysql 高级查询 二,mysql多表查询的三种方法_数据库 | ·下一条:244pro热敏打印机怎么打印吊牌和条形码_数据库

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

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