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

天津建设招标网站首页化妆品网站建设描述

天津建设招标网站首页,化妆品网站建设描述,wordpress文章的表是什么,广州网站优化推广公司在单库单表时#xff0c;业务 ID 可以依赖数据库的自增主键实现#xff0c;现在我们把存储拆分到了多处#xff0c;如果还是用数据库的自增主键#xff0c;就会出现主键重复的情况。 所以我们不得不面对的一个选择#xff0c;就是ID生成器#xff0c;使用一个唯一的字符…在单库单表时业务 ID 可以依赖数据库的自增主键实现现在我们把存储拆分到了多处如果还是用数据库的自增主键就会出现主键重复的情况。 所以我们不得不面对的一个选择就是ID生成器使用一个唯一的字符串来标识一条完整的记录。 这时候不能使用md5或者sha1来对整个记录做摘要因为我们后续还要改动这个记录。也不能使用单机的计数器因为计数器容易重启清零也会存在多台机器上的数值重复这违背了无状态服务的建设目标。 UUID 虽然UUID在大多数语言中都有相关的类库但除非迫不得以我们一般不会使用它。UUID虽然不会重复但它非常的长长的让人望而生畏。 标准的UUID有5个部分组成8-4-4-4-12一共32个十六进制字符。因此一共是128位。当把UUID作为数据库的索引时会因为它没有顺序性造成索引的随机分布和因为数据量巨大造成查询性能降低。 且无序会造成每一次UUID数据的插入都会对主键的b树进行很大的修改 会产生离散 IO从而产生性能瓶颈。 同时UUID也是不可读的如果你把它打印在纸质的订单上并不是一个好的主意。UUID同时还有信息安全的隐患它的数据计算里有MAC地址的参与比较知名的是曾被用于寻找梅丽莎病毒的制作者位置。 MySQL8以后 MySQL 8.0 推出了函数 UUID_TO_BIN它可以把 UUID 字符串 通过参数将时间高位放在最前解决了 UUID 插入时乱序问题去掉了无用的字符串-精简存储空间将字符串其转换为二进制值存储空间最终从之前的 36 个字节缩短为了 16 字节。 同时还提供了 BIN_TO_UUID支持将二进制值反转为 UUID 字符串不用担心 UUID 的性能和存储占用的空间问题相关的插入性能测试结果如下表所示 由于UUID_TO_BIN转换为的结果是16 字节仅比自增 ID 增加 8 个字节最后存储占用的空间也仅比自增大了 3G。 而且由于 UUID 能保证全局唯一因此使用 UUID 的收益远远大于自增ID。在海量并发的互联网业务场景下更推荐 UUID 这样的全局唯一值做主键。 但请牢记分布式数据库架构仅用 UUID 做主键依然是不够的。 数据库自增ID 当数据量庞大时在数据库分库分表后数据库自增id不能满足唯一id来标识数据因为每个表都按自己节奏自增会造成id冲突无法满足需求 改造时间戳 如果你是单机应用那么使用时间戳没什么问题即使不用纳秒使用毫秒也是足够的。但在分布式环境下面时间戳同样不是一个好的选择。 即使你在机器安装了 ntpd 时间同步但由于网络和机器的差异计算机的时钟总是存在差异你的时间戳总会出现重复。为了解决这个问题你需要增加一些其他的标识比如机器的ID或者更多细分的信息减少时间的碰撞。 这种自定义的ID生成器只适合特定的业务做着做着你就会发现它本质上是雪花算法的变种。 全局ID生成器服务 可以设计一个全局 ID 生成器服务每次找服务索要主键这样虽然可以在业务间实现全局唯一但是完全依赖全局 ID 生成服务依赖性大服务一旦宕机会影响所有相关依赖服务。 例如使用Redis的计数器原子性自增好处在于使用内存并发性能好但存在数据丢失自增数据量泄露的问题 雪花算法 Twitter 雪花算法生成后是一个 64bit 的 long 型的数值默认字符串长度是19位它分为4个部分基本保持了自增 包含四个组成部分 不使用1bit最高位是符号位0 表示正1 表示负固定为 0 时间戳41bit毫秒级的时间戳41 位的长度可以使用 69 年 标识位5bit 数据中心 ID5bit 工作机器 ID两个标识位组合起来最多可以支持部署 1024 个节点2^10 1024 个节点 如果是分布式应用部署应保证每个工作进程的标识位id是不同的 序列号12bit 递增序列号表示节点毫秒内生成重复通过序列号表示唯一12bit 每毫秒可产生 4096 个 ID 通过序列号 1 毫秒可以产生 4096 个不重复 ID则 1 秒可以生成 4096 * 1000 409w ID 默认的雪花算法是 64 bit具体的长度可以自行配置。如果希望运行更久增加时间戳的位数如果需要支持更多节点部署增加标识位长度如果并发很高增加序列号位数 总结雪花算法并不是一成不变的可以根据系统内具体场景进行定制 SnowFlake 算法的优点 高性能高可用生成时不依赖于数据库完全在内存中生成高吞吐每秒钟能生成数百万的自增 IDID 自增存入数据库中索引效率高 SnowFlake 算法的缺点 依赖与系统时间的一致性如果系统时间被回调或者改变可能会造成 ID 冲突或者重复 适用场景 因为雪花算法有序自增保障了 MySQL 中 B Tree 索引结构插入高性能 所以日常业务使用中雪花算法更多是被应用在数据库的主键 ID 和业务关联主键 存在的问题 机器标识位一致 标识位重复的情况下雪花 ID 也可能会重复比如 服务通过集群的方式部署其中部分机器标识位一致 时钟回拨的问题 为什么会有时钟回拨问题 有人篡改了宿主机的系统时间集群中可能会进行整体的时钟同步从而修改机器的本地时间 时钟回拨对雪花算法的影响 如果篡改了本地时间那就有风险产生重复的ID而且无法满足趋势递增了。 解决思路 方案一想办法探测到时钟回拨然后做出对应的策略方案二探索一种ID生成的方式不完全依靠时间戳来保证雪花算法或者直接使用别的策略替代时间戳 JS的坑 值得注意的是雪花算法在JavaScript中有一个坑。后端在返回ID的时候需要使用String类型代替Long类型否则会产生预想不到的错误。 这是因为。在JavaScript中存在两种数字。Number和BigInt。最常用的就是number。 最大的Number叫做Number.MAX_SAFE_INTEGER它的值为 2^53-1 或者/- 9,007,199,254,740,991 众所周知Java中的Long是64位的。Js中的这个安全Integer完全达不到Java中定义的长度。 这就是万恶的IEEE_754规范它在Long长度大于17位时会出现精度丢失的问题。 常见实现方案 百度uid-generator uid-generator是由百度技术部开发项目地址uid-generator uid-generator是基于Snowflake算法实现的与原始的snowflake算法不同在于uid-generator支持自定义时间戳、工作机器ID和序列号等各部分的位数而且uid-generator中采用用户自定义workId的生成策略。 uid-generator需要与数据库配合使用需要新增一个WORKER_NODE表。 当应用启动时会向数据库表中去插入一条数据插入成功后返回的自增ID就是该机器的workId数据由hostport组成。 美团Leaf github地址Leaf 美团的Leaf也是一个分布式ID生成框架。它非常全面即支持号段模式也支持snowflake模式。 号段模式依赖于数据库但是区别于数据库主键自增的模式。假设100为一个号段100200300每取一次可以获得100个ID性能显著提高。
http://www.hkea.cn/news/14527040/

相关文章:

  • 中小企业建站排名如何在阿里云上做网站
  • 网站开发用到的框架最大的中文搜索引擎
  • 济南腾飞网络网站建设广州致格广告有限公司网站
  • 欧米茄手表价格及图片官方网站网站新闻字体
  • 网站的结构包括哪些内容互联网服务平台怎么注册
  • 设计方案表网站名称一个网站开发
  • 沥林网站建设马甲比较好找人做网页需要多少钱
  • 网站建设的进度计划书pc端网站生成wap版
  • 如何制作网站app网站模板免费下载网站
  • 东莞网站优化关键词费用网站优化是什么意思
  • 长沙优化网站方法上海网站建设公司哪个好
  • 无锡网站制作推广网站建设公司没有业务
  • 犀牛网站建设公司企业创建网站
  • 2个网站做的链接怎么用一个域名福州网站制作官网
  • 个人现在可以做哪些网站深圳建设网站上市
  • 首饰行业网站建设策划东莞家具行业营销型网站建设多少钱
  • 济南制作公司网站网上国网app推广效果
  • 电商网站话费充值怎么做网站册数
  • 做企业网站到哪里找郑州市网站制作公司
  • 怎样把网站做的更好清欢互联网网站建设
  • 网站 多语言跨境电商网站开发公司
  • 大朗做网站在沈阳建站公司模板
  • 17网站一起做网店杭州潍坊做网站
  • 自己做的网站怎么给别人访问谷歌网站的主要内容
  • 网站开发范本wordpress 相关文章
  • 西青房地产网站建设帮别人做网站要投资吗
  • 做导购网站赚钱吗wordpress 数据恢复
  • 上海网站建设培训学校专业制作网站公司哪家好
  • 青色网站欣赏四川省城乡和住房建设厅官方网站
  • 芜湖做网站推广有哪些公司苏州企业网站建设电话