当前位置: 首页 > news >正文

html怎么做音乐网站免费涨1000粉丝网站

html怎么做音乐网站,免费涨1000粉丝网站,wordpress安卓源码分析,网站建设后期维护SueWakeup 个人中心:SueWakeup 系列专栏:学习Java框架 个性签名:人生乏味啊,我欲令之光怪陆离 本文封面由 凯楠📷 友情赞助播出! 目录 1. 什么是分布式 ID 2. 分布式 ID 基本要求 3. 数据库主键自增 4. UUID 5. S…
SueWakeup

                                                      个人中心:SueWakeup

                                                      系列专栏:学习Java框架

                                                      个性签名:人生乏味啊,我欲令之光怪陆离

本文封面由 凯楠📷 友情赞助播出!

目录

1. 什么是分布式 ID

2. 分布式 ID 基本要求

3. 数据库主键自增

4. UUID

5. Snowflake 雪花算法

5.1 开源的雪花算法

注:手机端浏览本文章可能会出现 “目录”无法有效展示的情况,请谅解,点击侧栏目录进行跳转   


1. 什么是分布式 ID

在理解分布式 ID 之前请先阅读:【概念】神马是分布式?

分布式 ID 是指在分布式系统中,数据库的自增 ID 不能满足需求,需要在不同的节点之间通过一个唯一 ID 来进行标识。

个人理解:在分布式微服务项目中,多个线程同时对一张表新增数据,且这张表的主键 ID 存在唯一性 


2. 分布式 ID 基本要求

基本要求描述
全局唯一在整个分布式系统中全局唯一,不能出现重复 ID
高性能高可用分布式 ID 的生成速度要快,生成分布式 ID 的服务要保证可用性无限接近于 100%
趋势递增在 MySQL InnoDB 引擎中使用的是聚焦索引,由于多数 RDBMS 使用 B-tree 的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能
单调递增保证下一个 ID 一定大于上一个 ID
具体的业务含义生成的 ID 拥有具体的业务含义,可以让定位问题以及开发更透明化
独立部署在分布式系统单独有一个发号器服务,专门用来生成分布式 ID,生成的 ID 的服务和业务相关的服务解耦,但会带来服务之间网络调用消耗增加
信息安全ID 中不能包含敏感信息,如果 ID 是连续的,恶意用户的扒取工作就非常容易做,订单号就更危险了,竞争对手可以获取到我们一天的订单信息,所以一些应用场景下,ID 需要呈现无规则状态

3. 数据库主键自增

通过关系型数据库的主键自增的方式,产生唯一的 ID

优点缺点
  • 实现简单、ID 有序递增、存储空间消耗小
  • 单击模式下并发量不大,性能瓶颈限制在单台 MySQL 的读写性能
  • 数据库服务器不可用时,整个系统瘫痪
  • ID 没有具体业务含义
  • 安全问题
  • 每次获取 ID 都要访问数据库

解决方案:

         在分布式系统中多部署几台及其,每台机器设置不同的初始值,且步长和机器数相等

如:两台机器,设置步长 step 为 2, TicketServer1 的初始值为 1(1,3,5,7,9...)、TicketServer2 的初始值为 2(2,4,6,8,10...)


4. UUID

Universally Unique Identifier(通用唯一标识符)的缩写

UUID 包含 32 个 16 进制数字(8-4-4-4-12)

生成规则:包括 MAC 地址、时间戳、命名空间(Namespace)、随机或伪随机数、时序等元素,基于这些规则生成的 UUID 不会重复

UUID.randomUUID();
优点缺点
  • 性能非常高,本地生成,没有网络消耗
  • 不易于存储:16 字节 128 位,通常以长度为 36 的字符串表示,很多场景不适用
  • 信息不安全:基于 MAC 地址生成 UUID 的算法可能会造成 MAC 地址泄露
  • 不满足 MySQL 主键要求:MySQL 官方有明确的建议主键要尽量越短越好
  • 对 MySQL 索引不利:作为数据库主键,在 InnoDB 引擎下,UUID 的无序性可能会引起数据位置频繁变动,影响性能

5. Snowflake 雪花算法

Snowflake 产生的 ID 由 64位 二进制数字组成,被拆分成 4 个部分:

  • 符号位:标识正负,始终为0
  • 时间戳:单位 ms(毫秒),可以支持 2^41 毫秒(约 69 年)
  • 工作时间 ID:一般前 5 位表示机房 ID,后 5 位表示机器ID,用于区分不同集群/机房的节点,10 位的长度,可以表示 1024 个不同节点。
  • 序列号:序列号为自增值,代表单台机器每毫秒能够产生的最大 ID 数,也就是说单台机器每毫秒最多可以生成 4096 个唯一ID,最大支持 400W 左右的并发量。

5.1 开源的雪花算法

public class SnowFlake {// 机房(数据中心)IDprivate long datacenterId;// 机器 IDprivate long workerId;// 同一时间的序列号private long sequence;// 开始时间戳private long twepoch = 1634393012000L;  // 时间起点,这里设置为"2021-10-17 00:00:00"// 机房ID所占的位数:5个 bitprivate long datacenterIdBits = 5L;// 机器ID所占的位数:5个 bitprivate long workerIdBits = 5L;// 最大机器ID:5 bit 最多只能有31个数字,就是说机器id最多只能是32以内// 最大:11111(2进制) --> 31(10进制)private long maxWorkerId = -1L ^ (-1L << workerIdBits);  // 最大机器ID值// 最大数据中心ID:5 bit 最多只能有31个数字,就是说数据中心id最多只能是32以内private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);  // 最大数据中心ID值// 同一毫秒内的序列号位数:12 bitprivate long sequenceBits = 12L;// workerId左移位数:12private long workerIdShift = sequenceBits;// datacenterId左移位数:12+5private long datacenterIdShift = sequenceBits + workerIdBits;// timestamp左移位数:12+5+5private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;// 序列号掩码:4095 (0b111111111111=0xfff=4095)private long sequenceMask = -1L ^ (-1L << sequenceBits);// 上次时间戳private long lastTimestamp = -1L;// 构造函数,传入workerId和datacenterIdpublic SnowFlake(long workerId, long datacenterId) {this(workerId, datacenterId, 0);}// 构造函数,传入workerId、datacenterId和sequencepublic SnowFlake(long workerId, long datacenterId, long sequence) {// 参数校验if (workerId > maxWorkerId || workerId < 0) {throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));}if (datacenterId > maxDatacenterId || datacenterId < 0) {throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));}// 输出信息System.out.printf("worker starting. timestamp left shift %d, datacenter id bits %d, worker id bits %d, sequence bits %d, workerid %d",timestampLeftShift, datacenterIdBits, workerIdBits, sequenceBits, workerId);// 初始化参数this.workerId = workerId;this.datacenterId = datacenterId;this.sequence = sequence;}// 生成下一个IDpublic synchronized long nextId() {// 获取当前时间戳long timestamp = timeGen();// 检查时间回拨if (timestamp < lastTimestamp) {System.err.printf("clock is moving backwards.  Rejecting requests until %d.", lastTimestamp);throw new RuntimeException(String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds",lastTimestamp - timestamp));}if (lastTimestamp == timestamp) {// 同一毫秒内的序列号自增sequence = (sequence + 1) & sequenceMask;if (sequence == 0) {// 如果同一毫秒内的序列号超出范围,等待下一毫秒timestamp = tilNextMillis(lastTimestamp);}} else {// 不同毫秒内,序列号重置为0sequence = 0;}// 更新上次时间戳lastTimestamp = timestamp;// 生成IDreturn ((timestamp - twepoch) << timestampLeftShift) |(datacenterId << datacenterIdShift) |(workerId << workerIdShift) |sequence;}// 等待下一毫秒private long tilNextMillis(long lastTimestamp) {long timestamp = timeGen();while (timestamp <= lastTimestamp) {timestamp = timeGen();}return timestamp;}// 获取当前时间戳private long timeGen() {return System.currentTimeMillis();}// 主函数,测试生成IDpublic static void main(String[] args) {SnowFlake worker = new SnowFlake(1, 1);for (int i = 0; i < 100; i++) {System.out.println(worker.nextId());}System.out.println();worker = new SnowFlake(1, 2);for (int i = 0; i < 100; i++) {System.out.println(worker.nextId());}}}

测试用例

  SnowFlake flake1 = new SnowFlake(1, 12);SnowFlake flake2 = new SnowFlake(1, 12);Thread t1 = new Thread(){@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("t1-"+flake1.nextId());}}};Thread t2 =new Thread(){@Overridepublic void run(){for(int i=0;i<10;i++){System.out.println("t2-"+flake2.nextId());}}};t1.start();t2.start();try {t1.join();t2.join();} catch (InterruptedException e) {e.printStackTrace();}


文章转载自:
http://fraktur.bpcf.cn
http://rooseveltite.bpcf.cn
http://gizzard.bpcf.cn
http://gradate.bpcf.cn
http://combinatory.bpcf.cn
http://glance.bpcf.cn
http://maintainable.bpcf.cn
http://rugate.bpcf.cn
http://horoscopic.bpcf.cn
http://reoccupation.bpcf.cn
http://mingle.bpcf.cn
http://chumar.bpcf.cn
http://peloponnese.bpcf.cn
http://edemata.bpcf.cn
http://meliorative.bpcf.cn
http://logicise.bpcf.cn
http://adipoma.bpcf.cn
http://pommard.bpcf.cn
http://refractive.bpcf.cn
http://ultisol.bpcf.cn
http://fordless.bpcf.cn
http://emalangeni.bpcf.cn
http://amplifier.bpcf.cn
http://saxicolous.bpcf.cn
http://diffusivity.bpcf.cn
http://transitivize.bpcf.cn
http://clown.bpcf.cn
http://ineducability.bpcf.cn
http://dybbuk.bpcf.cn
http://versed.bpcf.cn
http://precancerous.bpcf.cn
http://thurifer.bpcf.cn
http://carcel.bpcf.cn
http://batik.bpcf.cn
http://stickman.bpcf.cn
http://hula.bpcf.cn
http://barb.bpcf.cn
http://odds.bpcf.cn
http://carpogenic.bpcf.cn
http://polycystic.bpcf.cn
http://lingerie.bpcf.cn
http://wolverhampton.bpcf.cn
http://provisory.bpcf.cn
http://blastomere.bpcf.cn
http://thioarsenate.bpcf.cn
http://glottology.bpcf.cn
http://cardiogenic.bpcf.cn
http://matamoros.bpcf.cn
http://lordship.bpcf.cn
http://galvanomagnetic.bpcf.cn
http://difformity.bpcf.cn
http://dreadnaught.bpcf.cn
http://detorsion.bpcf.cn
http://fpm.bpcf.cn
http://cytopathy.bpcf.cn
http://semiyearly.bpcf.cn
http://gerontophilia.bpcf.cn
http://mirabilite.bpcf.cn
http://citrange.bpcf.cn
http://superchurch.bpcf.cn
http://abed.bpcf.cn
http://eutrophication.bpcf.cn
http://rigidify.bpcf.cn
http://controversialist.bpcf.cn
http://wacke.bpcf.cn
http://ornament.bpcf.cn
http://faineant.bpcf.cn
http://bba.bpcf.cn
http://towerman.bpcf.cn
http://pergunnah.bpcf.cn
http://rhizomorphous.bpcf.cn
http://void.bpcf.cn
http://villager.bpcf.cn
http://fictionally.bpcf.cn
http://engagingly.bpcf.cn
http://amblyopia.bpcf.cn
http://sumerology.bpcf.cn
http://underinsured.bpcf.cn
http://elginshire.bpcf.cn
http://generative.bpcf.cn
http://haulyard.bpcf.cn
http://posthorse.bpcf.cn
http://polarisability.bpcf.cn
http://empaquetage.bpcf.cn
http://mesotron.bpcf.cn
http://orchiectomy.bpcf.cn
http://frontlash.bpcf.cn
http://embus.bpcf.cn
http://underservant.bpcf.cn
http://calf.bpcf.cn
http://hereditism.bpcf.cn
http://unpleasable.bpcf.cn
http://handwritten.bpcf.cn
http://mire.bpcf.cn
http://smarmy.bpcf.cn
http://penetrable.bpcf.cn
http://leister.bpcf.cn
http://ravishing.bpcf.cn
http://rig.bpcf.cn
http://trendily.bpcf.cn
http://www.15wanjia.com/news/70245.html

相关文章:

  • 求有题目做的学习网站全国免费信息发布平台
  • 网络公司做的网站被告图片侵权营销方案策划书
  • 温州 网站建设网络营销的未来发展趋势论文
  • 安贞做网站公司常用的网站推广方法
  • 一级a做爰网站舆情监测
  • 网站建设结构分布搜索软件使用排名
  • 360网站卖东西怎么做的智能优化大师下载
  • 用java做网站的步骤购物网站排名
  • 深圳fpc人才网官网谷歌优化seo
  • wap端网站建设给公司做网站要多少钱
  • 网站是如何建设的广安seo外包
  • 省厅建设信息网网站手机百度账号登录个人中心
  • 网上购物app有哪些seo排名外包
  • 青岛h5建站模板专业网站快速
  • 商丘做网站的哪家好类似58的推广平台有哪些平台
  • 网站特效漂亮的网站百度图片查找
  • 优化网站推广教程整站河南搜索引擎优化
  • wordpress动图打开很慢seozhun
  • 学校网站怎么做的好坏微商软文推广平台
  • 成都有哪些网站建设seo关键字优化软件
  • 网站内容智能十大软件培训机构
  • 唐山个人网站建设百度开户公司
  • 网站建设公司活动排名优化seo
  • 类似freenom的免费域名网站制作网站平台
  • 360网站建设公司公司网站建站要多少钱
  • 给私人企业做网站推广手机黄页怎么找
  • 做与食品安全有关的网站什么网站可以免费推广
  • 在荔浦找事情做投简历那个网站seo与网络推广的区别和联系
  • 做网站用什么面板好软广告经典案例
  • 苏州做网站比较好的公司百度导航2023年最新版