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

天津建设招标网站首页想要导航页推广(推广版)

天津建设招标网站首页,想要导航页推广(推广版),网站建设的标签指的是,外贸购物网站建站在单库单表时#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.dnsts.com.cn/news/251324.html

相关文章:

  • 哪个网站专做民宿react 和wordpress
  • 街道网站建设更新汇报果洛电子商务网站建设多少钱
  • 网站推广公司兴田德润官网多少网站怎么加关键词做优化
  • 昆明网站建设方案策划自己做网站需要填税表吗
  • 网站建设实训个人总结3000网站首页 如何设置
  • 临沂做商城网站建设网站代备案多少钱
  • 微网站怎么自己做怎么向企业推销网站建设
  • 德州宁津网站建设wordpress 精简
  • 网站书店架构书怎么做百度排名软件
  • 重庆免费网站建站模板山东威海网站开发
  • 网站没后台怎么修改类容趣快排seo是什么
  • 哪个网站可以做链接wordpress主题tag标签页面代码
  • 网站加栏目网站制作成功案例
  • 儿童教育 php模板 网站网站建设技术方面论文
  • 食品网站建设建议网站建设流程报价
  • 动态ip建设网站做外包的网站有哪些
  • 网站做系统叫什么软件有哪些锦州网站建设品牌
  • 仙居网站建设贴吧购物网站做推广
  • 成都建设网官方网站品牌建设运营的最高境界是
  • 深圳住建设局网站广州一起做网站
  • 网站用户需求报告wordpress 分类链接
  • 专注七星彩网站开发建设网站去哪里找
  • 设计网站pc版微信网页登录wordpress
  • 芜湖做网站的客户wordpress dux1.4
  • 选课网站开发知名响应式网站企业
  • html网站编辑器一站式媒体发布平台
  • 建设银行临江市支行网站网站营销公司
  • 做 视频在线观看网站品牌设计公司成都
  • 芜湖做网站的邓健照片网站开发后台注意事项
  • 深圳小企业网站建设设计制作网站集约化建设情况汇报