网上作业网站怎么做的优秀平面设计网站

web/2025/9/28 16:23:06/文章来源:
网上作业网站怎么做的,优秀平面设计网站,个人网站页脚设计,北京网站制作设计公司排名背景在复杂分布式系统中#xff0c;往往需要对大量的数据和消息进行唯一标识。如在支付流水号、订单号等#xff0c;随者业务数据日渐增长#xff0c;对数据分库分表后需要有一个唯一ID来标识一条数据或消息#xff0c;数据库的自增ID显然不能满足需求#xff0c;此时一个…背景在复杂分布式系统中往往需要对大量的数据和消息进行唯一标识。如在支付流水号、订单号等随者业务数据日渐增长对数据分库分表后需要有一个唯一ID来标识一条数据或消息数据库的自增ID显然不能满足需求此时一个能够生成全局唯一ID的系统是非常必要的。生成的唯一id需要具备哪些条件全局唯一性不能出现重复的ID号既然是唯一标识这是最基本的要求。趋势递增在MySQL InnoDB引擎中使用的是聚集索引由于多数RDBMS使用B-tree的数据结构来存储索引数据在主键的选择上面我们应该尽量使用有序的主键保证写入性能。单调递增保证下一个ID一定大于上一个ID例如事务版本号、IM增量消息、排序等特殊需求。信息安全如果ID是连续的恶意用户的扒取工作就非常容易做了直接按照顺序下载指定URL即可如果是订单号就更危险了竞对可以直接知道我们一天的单量。所以在一些应用场景下会需要ID无规则、不规则。UUID关于分布式id,很多人会想到使用UUIDUUID在唯一性上确实可以达到这个目的但它也存在很大的缺陷优点性能非常高本地生成没有网络消耗。缺点不易于存储UUID太长16字节128位通常以36长度的字符串表示很多场景不适用。信息不安全基于MAC地址生成UUID的算法可能会造成MAC地址泄露这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。ID作为主键时在特定的环境会存在一些问题比如做DB主键的场景下UUID就非常不适用。(MySQL官方有明确的建议主键要尽量越短越好36个字符长度的UUID不符合要求。对MySQL索引不利如果作为数据库主键在InnoDB引擎下UUID的无序性可能会引起数据位置频繁变动严重影响性能。)snowflake世界上没有一片雪花是相同的这大概是snowflake名字的由来吧。SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法它可以满足Twitter每秒上万条消息ID分配的请求这些消息ID是唯一的且有大致的递增顺序。snowflake算法的原理SnowFlake算法产生的ID是一个64位的整型结构如下(每一部分用“-”符号分隔)snowflake.png需要注意的是64位是二进制2的64次方 18446744073709551616这就是能表示的id的范围范围可以通过扩展序列号或则工作机器id来增加id的上限。1位标识部分在java中由于long的最高位是符号位正数是0负数是1一般生成的ID为正数所以为041位时间戳部分这个是毫秒级的时间一般实现上不会存储当前的时间戳而是时间戳的差值(当前时间-固定的开始时间)这样可以使产生的ID从更小值开始41位的时间戳可以使用69年(1L 41) / (1000L * 60 * 60 * 24 * 365) 69年10位节点部分Twitter实现中使用前5位作为数据中心标识后5位作为机器标识可以部署1024个节点在Spring Cloud中可以为每一个实例生成唯一的机器识别码这样就能保证每个实例中生成的id都不一样。12位序列号部分支持同一毫秒内同一个节点可以生成4096(2的12次方)个ID这个同样可以扩展但其实每毫秒生成4096个id已经能满足大部分场景了。算法的java代码/*** twitter的snowflake算法 -- java实现** author beyond* date 2016/11/26*/public class SnowFlake {/*** 起始的时间戳(最后的时间 当前时间戳 - 起始的时间戳)*/private final static long START_STMP 1480166465631L;/*** 每一部分占用的位数*/private final static long SEQUENCE_BIT 12; //序列号占用的位数private final static long MACHINE_BIT 5; //机器标识占用的位数private final static long DATACENTER_BIT 5;//数据中心占用的位数/*** 每一部分的最大值*/private final static long MAX_DATACENTER_NUM -1L ^ (-1L DATACENTER_BIT);private final static long MAX_MACHINE_NUM -1L ^ (-1L MACHINE_BIT);private final static long MAX_SEQUENCE -1L ^ (-1L SEQUENCE_BIT);/*** 每一部分向左的位移*/private final static long MACHINE_LEFT SEQUENCE_BIT;private final static long DATACENTER_LEFT SEQUENCE_BIT MACHINE_BIT;private final static long TIMESTMP_LEFT DATACENTER_LEFT DATACENTER_BIT;private long datacenterId; //数据中心private long machineId; //机器标识private long sequence 0L; //序列号private long lastStmp -1L;//上一次时间戳public SnowFlake(long datacenterId, long machineId) {// 校验datacenterId长度超过范围就抛异常if (datacenterId MAX_DATACENTER_NUM || datacenterId 0) {throw new IllegalArgumentException(datacenterId cant be greater than MAX_DATACENTER_NUM or less than 0);}// 校验machineId长度超过范围就抛异常if (machineId MAX_MACHINE_NUM || machineId 0) {throw new IllegalArgumentException(machineId cant be greater than MAX_MACHINE_NUM or less than 0);}this.datacenterId datacenterId;this.machineId machineId;}/*** 产生下一个ID** return*/public synchronized long nextId() {long currStmp getNewstmp();if (currStmp lastStmp) {throw new RuntimeException(Clock moved backwards. Refusing to generate id);}if (currStmp lastStmp) {//相同毫秒内序列号自增sequence (sequence 1) MAX_SEQUENCE;//同一毫秒的序列数已经达到最大if (sequence 0L) {currStmp getNextMill();}} else {//不同毫秒内序列号置为0sequence 0L;}lastStmp currStmp;//使用二进制的|运算符将4部分的值整合成我们需要的idreturn (currStmp - START_STMP) TIMESTMP_LEFT //时间戳部分| datacenterId DATACENTER_LEFT //数据中心部分| machineId MACHINE_LEFT //机器标识部分| sequence; //序列号部分}//如果当前毫秒值下的序列号用完就循环获取下个毫秒值如果没有获取到下个毫秒值就//一直循环下去private long getNextMill() {long mill getNewstmp();while (mill lastStmp) {mill getNewstmp();}return mill;}private long getNewstmp() {return System.currentTimeMillis();}public static void main(String[] args) {SnowFlake snowFlake new SnowFlake(2, 3);for (int i 0; i (1 12); i) {System.out.println(snowFlake.nextId());}}}总结10位节点部分在代码中分成了两个5位节点看具体需求也可以用一个10位节点代替。snowflake更多的是提供一种算法思想具体的id生成逻辑可以在此基础上进一步的优化。

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

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

相关文章

个人网站设计分类个人电脑做服务器映射网站

官方文档 nginx documentation 说明 nginx是我们本次教程使用的http服务器。它能承受很高的并发,并且安装简单,占用内存少。 在服务器篇我们提到了nginx的安装,在发布篇我们简述了该怎么放置我们创建的博客html文档。 在本篇&#xff0c…

网站建设方案计划书人员规划软件商店安装免费下载

0x01 产品简介 红帆iOffice.net从最早满足医院行政办公需求(传统OA),到目前融合了卫生主管部门的管理规范和众多行业特色应用,是目前唯一定位于解决医院综合业务管理的软件,是最符合医院行业特点的医院综合业务管理平…

吴江企业网站制作微商城网站建设策划方案

戳蓝字“CSDN云计算”关注我们哦!随着社会的发展,技术的进步,以前的大型机架构由于高成本、难维护等原因渐渐地变得不再主流,替代它的就是当下最火的分布式架构。要说分布式架构有多重要,可以说如果你不了解“分布式”…

宁国新站seo免费手机网站自助建站

无线路由器的品类在不断增加,人们的生活也逐渐无法离开WIFI,各类无线路由器的设置方法大同小异,为了方便不为人知的小白更方便的设置无线路由器,这里详细介绍一下斐讯(phicomm)无线路由器怎么设置。配置前准备:A、请保…

代做外国空间网站搜索引擎排名优化方案

Axious的请求与响应 1.什么是Axious Axious是一个开源的可以用在浏览器和Node.js的异步通信框架,它的主要作用就是实现AJAX异步通信,其功能特点如下: 从浏览器中创建XMLHttpRequests ~从node.js创建Http请求 支持PromiseAPI 拦截请求和…

wnmp搭建后怎么做网站厦门手机网站建设公司

文章目录 1. 介绍2. 使用2-1. 单击双击和长按2-2. 拖动和滑动2-3. 缩放 3. 注意点 1. 介绍 在 flutter 中,GestureDetector 是手势识别的组件,可以识别点击、双击、长按、拖动、缩放等手势事件,并且可以与子组件进行交互,构造函数…

免费的培训网站建设中国建设网官方网站洞庭湖治理

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于LeetCodeHot100进行的,每个知识点的修正和深入主要参考…

域名暂无法进行网站备案做交易网站什么开发语言

装饰模式使用对象组合的方式动态改变或增加对象行为。 Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式。 使用匿名组合,在装饰器中不必显式定义转调原对象方法。 decorator.go package decoratortype Component interface {Calc() int }type Concre…

一个公司网站备案福田欧辉氢燃料电池客车

前言JSFinder是一款优秀的github开源工具,这款工具功能就是查找隐藏在js文件中的api接口和敏感目录,以及一些子域名。 github链接: Code1https://github.com/Threezh1/JSFinder

电子商务网站建设模板宿迁房产网宿迁市区房屋出售

面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别? TypeScript是一种编程语言,它是JavaScript的超集。它通过添加静态类型、类、接口和模块等功能来扩展JavaScript。 JavaScript是一种广泛应用于Web开发的脚本语言,它的灵活性和…

加拿大网站后缀wordpress从入门

请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景 在如何实现异步发送邮件的时候,遇到过这样一个报错 RuntimeError: Working outside of request context.This typically me…

win7下用iis搭建网站专业网站开发联系方式

外贸行业在Zoho的客户群体中占比较高。因为我们的国际化背景、丰富的产品组合、多语言多币种跨时区、高性价比等特点,成为外贸企业开展业务的选择。在和外贸客户沟通中,发现无论是外贸大拿还是新手小白,大家遇到一个共同的问题——发出去的开…

网站备案 更改ip小程序与手机网站区别

联想ThinkPad笔记本广告向苹果MacBook Air开战 [url]http://www.sina.com.cn[/url] 2008年03月24日 07:21 新浪科技联想ThinkPad X300笔记本广告,暗讽苹果MacBook AirMacbook Air最厚的地方仅有1.94cm,边缘仅0.4cm视频:ThinkPad X300对比Mac…

江西网站搜索引擎优化加速器网页版

气泡堆叠图是堆叠图与气泡图的组合—在堆叠图每根柱子上方添加大小不同的气泡,用于表示另外一个数据变量(如每根柱子各组分的平均值)的大小。 本文利用自己制作的BarBubble工具,进行气泡堆叠图的绘制,先来看一下成品效…

南京建设工程管理局网站公司网站建设模块简介

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部供…

重庆网站建设运营深圳金科威公司官网

介绍 使用sql语句修改字段名。 命令 alter table 表名 change 旧字段名 新字段名 新数据类型;例子 将a表id字段名改为id1 alter table a change id id1 int(12) NOT NULL;

莱芜网站优化排名公司无锡网站建设有限公司

两者的区别需要通过提交表单后才看得出来,主要是在数据发送方式和接收方式上 1.在客户端,Get方式在通过URL提交数据,就是把表单内的元素,转化成url参数提交,比如你有一个页面index.html,这个页面有一个文本…

中国建设银行网站首页签约网站版块策划

变量 $ 定义变量 $link-color: blue;变量名可以与css中的属性名和选择器名称相同 使用变量 a {color: $link_color; }$highlight-border: 1px solid $link_color;中划线和下划线相互兼容,即中划线声明的变量可以使用下划线的方式引用,反之亦然。 $li…

网站换服务器对网站排名有影响吗宁波seo自然优化技术

要在Docker中修改镜像源,你需要编辑或创建Docker的配置文件来指定新的镜像源地址。以下是如何为Docker配置中国镜像源的步骤: 找到或创建Docker的配置文件daemon.json。 在Linux系统中,该文件通常位于/etc/docker/目录下。 编辑daemon.jso…

瀑布流网站如何seo曲阳网站制作公司

命令设计模式(Command Pattern)在Java中的实现细节如下所述,这将是一个详细的教程,涵盖模式的基本概念、组成部分、实现步骤、以及如何在实际开发中应用这一模式。 命令设计模式基础 命令模式是一种行为设计模式,它将请求封装成对象,允许你参数化客户对请求的调用,队列…