分布式ID的生成方法

news2025/1/20 12:07:45

问题的提出

如今随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB.对数据的各种操作也是愈
加的困难,如何解决这个问题呢?此时就需要做数据库集群,为了提高查询性能将一一个数据库的数据分散
到不同的数据库中存储,这就是我们通常所说的数据库分片。
如何实现数据库分片?我们通常会使用myca数据库中间件来解决。
MyCat是一一个开源的分布式数据库系统, 是一个实现了MySQL协议的服务器,前端用户可以把它看
作是一一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个
MySQL服务器通信。也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将
-个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
MyCat发展到目前的版本,已经不是一一个单纯的MySQL代理了,它的后端可以支持MySQL. SQL
Server. Oracle. DB2. PostgreSQL等主流数据库, 也支持MongoDB这种新型NoSQL方式的存储,未来
还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里, 都是一个传统的数据
库表,支持标准的SQL语句进行数据的操作,这样-来,对前端业务系统来说,可以大幅降低开发难度。
提升开发速度。

方法一

UUID
常见的方式。可以利用数据库也可以利用程序生成,-般来说全球唯一.
优点:
1)简单,代码方便。
2)生成ID性能非常好,基本不会有性能问题。
3)全球唯一,在遇见数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应对。
缺点:
1)没有排序,无法保证趋势递增。
2) UUID往往是使用字符串存储,查询的效率比较低。
3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。

第二种方法

Redis生成ID
当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID.这主要依赖于Redis是单
线程的,所以也可以用生成全局唯- -的ID。 可以用Redis的原子操作INCR和INCRBY来实现。
优点:
1)不依赖于数据库,灵活方便,且性能优于数据库。
2)数字ID天然排序,对分页或者需要排序的结果很有帮助。
缺点:
1)如果系统中没有Redls,还需要引入新的组件,增加系统复杂度。
2)需要编码和配置的工作量比较大。
3)网络传输造成性能下降。

第三种方法

开源算法snowflake
snowflake是Twitter开源的分布式ID生成算法,结果是一-long型的ID。其核心思想是。使用41bit作为
毫秒数,10bit作为机器的ID (5个bit是数据中心,5个bi的机器ID)12bit作为毫秒内的流水号(意味
着每个节点在每毫秒可以产生4096个ID),最后还有一一个符号位,永远是0

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM垃圾回收与调优

文章目录 1、如何判断对象可以回收1.1、 引用计数法1.2、可达性分析法1.3、五种引用类型1.3.1 、强引用1.3.2 、软、弱引用1.3.3 、虚引用、终结器引用1.3.4、 终结器引用1.3.5 、总结 2. 垃圾清除算法2.1、标记清除2.2 、标记整理2.3、 复制 3. 分代垃圾回收3.1 、新生代、老年…

Excel技能之时间,士别三日让boss刮目相看

爱因斯坦说:“复利是世界第八大奇迹。”复利离不开时间,你也离不开时间。时间是如此重要,对每个人都是公平的。 曾经的你,看日历,数手指才能算清楚日期,不懂时间函数,太烦躁了。以下用真实的使…

哪种无线耳机音质最好?盘点2023四款好音质蓝牙耳机

随着蓝牙技术的发展,近几年人们对于蓝牙耳机的需求也在不断增加。但,蓝牙耳机自始至终都是用来听的,所以音质对于一款蓝牙耳机来说还是很重要的。下面,我来给大家推荐四款好音质蓝牙耳机,可以当个参考。 一、南卡小音舱…

沉岛思想(BFS)-朋友圈思想(并查集)

本篇博客旨在记录自已笔记,同时希望可给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉 💪。 沉岛思想: 题目: 给定一…

Sharding-JDBC之水平分库水平分表

目录 一、简介二、maven依赖三、数据库3.1、创建数据库3.2、创建表 四、配置(二选一)4.1、properties配置4.2、yml配置 五、实现5.1、实体5.2、持久层5.3、服务层5.4、测试类5.4.1、保存数据5.4.2、查询数据 一、简介 这里的水平分库分表是指 水平分库 …

台湾精锐APEX行星减速机直齿轮和斜齿轮有什么区别?如何选择?

台湾精锐APEX行星减速机是带太阳齿轮/行星齿轮/齿圈的机械装置。行星减速机是由太阳齿轮,行星齿轮的齿轮架和齿圈组成的机械装置。太阳齿轮位于中心,将扭矩传递到围绕太阳齿轮旋转的行星齿轮。行星齿轮和太阳齿轮位于齿圈内。 APEX减速机分为直齿轮和斜…

7.2 参数区间的估计

学习目标: 要学习参数的区间估计,我会采取以下步骤: 学习理论知识:首先,我会学习与参数的区间估计相关的理论知识,包括置信区间、抽样分布、中心极限定理、样本容量对置信区间的影响等。 掌握计算方法&am…

【小程序】小程序组件-2

目录 一. 滚轮选框 二. 音频组件 一. 滚轮选框 说真的,感谢微信开发者工具,让我这种笨比能够轻松学会这种看起来相当复杂的组件 picker组件的mode有几种模式,region啦,date啦,time啦,可以自行尝试 针对…

牛客社区项目

创建项目 认识Spring Spring Ioc Inversion 偶发Control 控制反转,是一种面向对象的设计思想。Dependecy Injection 依赖注入,是Ioc思想的实现方式。Ioc Container Ioc容器,是实现依赖注入的关键,本质上是一个工厂。 下面通过…

解决若依验证码异常:Error: image == null

前言 前两天在改项目突然发现若依的框架可以正常启动但是验证码加载不出来了,一直弹窗提示异常信息,下边是关于问题的描述和解决方案,没有耐心看过程的建议直接滑到最底下看解决方式 问题原因 登录页面一直提示 image null 如图 1 所示&…

最新研究!充分发挥混合量子经典算法新潜力

日本理化学研究所RIKEN的研究人员开发了一种量子计算算法,可高效准确地计算复杂材料中的原子级相互作用。物理学家理查德费曼于1981年首次提出量子计算机的应用,而该算法有可能为凝聚态物理学和量子化学带来前所未有的新局面。 量子计算机有望增强数字处…

数据格式转换(labelme、labelimg、yolo格式相互转换)

👨‍💻个人简介: 深度学习图像领域工作者 🎉总结链接: 链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括: &am…

【鸿蒙应用ArkTS开发系列】- 常量类定义和使用

本篇为入门基础知识介绍,作为代码学习记录使用,请选择性阅读。 一、常量类定义 在ArkTS中,定一个常量很简单,具体如下: export const TAB_HOME_INDEX : number 1;export const TAB_HOME_NAME : string "首…

MobileNetV2详细原理(含torch源码)

目录 MobilneNetV2原理 MobileNetV2的创新点: MobileNetV2对比MobileNetV1 MobilneNetV2源码(torch版) 训练10个epoch的效果 MobilneNetV2原理 MobileNetV2是由谷歌开发的一种用于移动设备的轻量级卷积神经网络。与传统卷积神经网络相比…

RapidOCR调优尝试教程

目录 引言常见错例种类个别字丢失调优篇个别字识别错误调优篇情况一:轻量中英文模型识别对个别汉字识别错误情况二:轻量中英文模型对个别英文或数字识别错误 相关链接 引言 由于小伙伴们使用OCR的场景多种多样,单一的参数配置往往不能满足要…

qt6.2.4下载在线安装

前言 qt官网声明5.15版本以后不提供安装包安装,均需在线安装:Due to The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15。此文主要记录在线安装方法及遇到问题解决方式。 一. 在线安装执行文…

mingw32-make -j$(nproc) 命令含义

系列文章目录 文章目录 系列文章目录前言一、具体操作二、使用步骤 前言 在使用krita源码编译时遇到报错: 这段代码是 Krita 源码中的一个 CMakeLists.txt 文件片段,用于配置 Krita 项目的构建系统。以下是对这段代码的解释: find_package(…

如何写科技论文?(以IEEE会议论文为例)

0. 写在前面 常言道,科技论文犹如“八股文”,有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理,并不是为了提高或者润色一篇论文的表达。基本上所有的论文,都需要先构思好一些点子,有…

一文带你快速了解业务流程分析和流程建模

🔥业务流程分析与建模 01业务流程分析要了解的问题 有哪些业务流程?业务流程如何完成?业务流程有谁参与?流程中有哪些控制流(如判断、 同步分支和会合)?多个不同流程建的关系?完成…

JUC线程池之线程池架构

JUC线程池之线程池架构 在多线程编程中,任务都是一些抽象且离散的工作单元,而线程 是使任务异步执行的基本机制。随着应用的扩张,线程和任务管理也 变得非常复杂。为了简化这些复杂的线程管理模式,我们需要一个 “管理者”来统一…