加入收藏 | 设为首页 | 会员中心 | 我要投稿 南昌站长网 (https://www.0791zz.cn/)- 终端安全、安全管理、数据治理、图像分析、大数据!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

Kornia开源可微分计算机视觉库

发布时间:2021-02-05 15:13:13 所属栏目:外闻 来源:互联网
导读:由美国宇航局推动开始的电子产品小型化成为整个消费品行业(的趋势)。现在我们把贝多芬的完整作品带在领章上使用耳机听。天体物理学家、科学评论员尼尔-德格拉斯-泰森(Neil deGrasse Tyson)[......]超低功耗嵌入式设备的普及,再加上像TensorFlow Lite for
由美国宇航局推动开始的电子产品小型化成为整个消费品行业(的趋势)。现在我们把贝多芬的完整作品带在领章上使用耳机听。—天体物理学家、科学评论员尼尔-德格拉斯-泰森(Neil deGrasse Tyson)[......]超低功耗嵌入式设备的普及,再加上像TensorFlow Lite for Microcontrollers这样的嵌入式机器学习框架的引入,将使人工智能驱动的物联网设备大规模扩散。— 哈佛大学副教授 Vijay Janapa Reddi

以上图片源自网络,如有侵权联系删除

Snowflake生成的是Long类型的ID,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特。

Snowflake ID组成结构:正数位(占1比特)+ 时间戳(占41比特)+ 机器ID(占5比特)+ 数据中心(占5比特)+ 自增值(占12比特),总共64比特组成的一个Long类型。

  •  第一个bit位(1bit):Java中long的最高位是符号位代表正负,正数是0,负数是1,一般生成ID都为正数,所以默认为0。
  •  时间戳部分(41bit):毫秒级的时间,不建议存当前时间戳,而是用(当前时间戳 - 固定开始时间戳)的差值,可以使产生的ID从更小的值开始;41位的时间戳可以使用69年,(1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69年
  •  工作机器id(10bit):也被叫做workId,这个可以灵活配置,机房或者机器号组合都可以。
  •  序列号部分(12bit),自增值支持同一毫秒内同一个节点可以生成4096个ID

根据这个算法的逻辑,只需要将这个算法用Java语言实现出来,封装为一个工具方法,那么各个业务应用可以直接使用该工具方法来获取分布式ID,只需保证每个业务应用有自己的工作机器id即可,而不需要单独去搭建一个获取分布式ID的应用。

Java版本的Snowflake算法实现:
 

用redis实现需要注意一点,要考虑到redis持久化的问题。redis有两种持久化方式RDB和AOF

  •  RDB会定时打一个快照进行持久化,假如连续自增但redis没及时持久化,而这会Redis挂掉了,重启Redis后会出现ID重复的情况。
  •  AOF会对每条写命令进行持久化,即使Redis挂掉了也不会出现ID重复的情况,但由于incr命令的特殊性,会导致Redis重启恢复的数据时间过长。

6、基于雪花算法(Snowflake)模式

雪花算法(Snowflake)是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器。
 

从上图可以看出,水平扩展的数据库集群,有利于解决数据库单点压力的问题,同时为了ID生成特性,将自增步长按照机器数量来设置。

增加第三台MySQL实例需要人工修改一、二两台MySQL实例的起始值和步长,把第三台机器的ID起始生成位置设定在比现有最大自增ID的位置远一些,但必须在一、二两台MySQL实例ID还没有增长到第三台MySQL实例的起始ID值的时候,否则自增ID就要出现重复了,必要时可能还需要停机修改。

优点:

  •  解决DB单点问题

缺点:

  •  不利于后续扩容,而且实际上单个数据库自身压力还是大,依旧无法满足高并发场景。

4、基于数据库的号段模式

号段模式是当下分布式ID生成器的主流实现方式之一,号段模式可以理解为从数据库批量的获取自增ID,每次从数据库取出一个号段范围,例如 (1,1000] 代表1000个ID,具体的业务服务将本号段,生成1~1000的自增ID并加载到内存。表结构

(编辑:南昌站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读