当前位置: 首页 > 网络应用技术

您要使用自我信息ID吗?

时间:2023-03-08 21:53:35 网络应用技术

  除了谈论技术解决方案的特定业务需求和场景外,它还与在纸上交谈。技术或解决方案没有绝对的质量,好坏。它们在相对含义上都有区别。否则,这些技术或方案如何产生?还必须生成它来解决某种类型场景的问题。当时,当时的“高级”技术。

  当系统是新的时,估计的业务量和数据量并不大。级别,业务变得越来越好,数据量变得越来越大。发现单个库和一个表无法满足需求。数据库的开发方向可能是这样的:

  一开始,很少有业务将作为数据库表设计。尽管这将减少随后的矿井,但一些公司开始当时。

  如果这是一个Kuota,目前,我们必须看到更多数据,因为单个表中有更多数据。根据业务削减。

  如果单个表的数据量太大,目前,将表数据与水平分配,即,该表的数据根据某些规则将表格分为多个表,甚至在多个库上都将表格分为多个表。分区表的顺序应为垂直,然后水平。因为垂直点更简单,更符合我们处理现实世界问题的方式。

  因此,您开始将表分开:也就是说,大仪表数据通过某些路由算法均匀地均匀地分布到n个小表中。

  表有几种类型的表格,并且适用不同的方案。

  这里的哈希是我们需要分开表的字段的较大尺度分布,因此数据的分布尽可能统一,不会尽可能多地重复。不重复此步骤,您也可以省略此步骤。您可以直接获得mod的子集。

  当然,表只是第一步,除非从头开始制作表,否则必须进行数据迁移。

  目前,市场上有相对较多的子标签,可以用来解决上述问题。柯巴尔(Cobar),柯巴尔(Cobar

  此处未讨论子女表的细节和坑,也不是本文的重点。

  我们返回表的记录徽标,我们对此徽标有两个主要需求:

  因此,使用以下方法:

  1使用数据库增加自动启动以产生全球增加的唯一增加。没有问题,如果您使用mySQL,这也是正式推荐的。优点并不是说劣势:不利:

  2改进方法:如果我们采用库和表的设计,我们可以在每个写作库中设置不同auto_increments的初始值,以及相同的增长步骤。确保每个数据库生成的ID都不同。缺点是ID产生的“绝对增加”丢失了。数据库的压力仍然很大。每次生成ID时,都必须访问数据库。这次,我们可以使用单个点批处理ID来生成服务,生成一个ID的服务,然后首先在batches中生成多个ID.in。,需要应用程序访问ID才能生成ID,并且ID生成服务无需每次访问数据库。这要好得多,但是问题是服务是单点。

  3 UUID保证同一空气中的所有机器都是唯一的。它可以在本地生成并且具有良好的可扩展性,基本上可以认为没有上限。趋势的增加和较长的UUID通常由字符串表示。建立索引查询效率作为主要键(B+树以保持平衡,它将导致B+树节点页面分割和分裂问题)Essence

  4 Twitter的雪花是一个非常好的ID生成解决方案。实施也非常简单。8byte是一个长的8英寸等于64位。核心代码是41 -bit+10 -bit Machine ID+毫秒的Chapeer。您还可以调整机器以调整机器。您还可以调整机器以调整机器。钻头的数量和毫秒数。绘制雪花的想法,结合每个公司的业务逻辑和并发,您可以实现自己的分布式ID加生成algorithm。

  缺点是“没有全局时钟”,每个服务器的ID绝对增加,但是从全球视角的角度来看,生成的ID只是趋势的增加(某些服务器是早期的,某些服务器是较晚的)meituan叶是meituan群的叶子是meituan群的叶子,是meituan群的叶子是meituan群的叶子,是meituan群的叶子,是meituan群的叶子。雪花。

  5甚至可以使用Redis的增量原子操作来增加,但安全性不足。

  6如果大胆地调整数据库,请勿使用MySQL,请使用TIDB,并使用TIDB自动扩展,并且业务不关心库表。TIDB是通过在线交易处理/在线处理/在线分析和在线交易开发的开源融合数据库产品Pingcap开发的处理(HTAP)目前广泛用于金融服务,互联网,制造业和其他行业。TIDB当前使用批处理方法,因此,如果同时将数据插入多个TIDB上,则分配的自我信息ID将是不连续的。当多个线程与不同的TIDB -Server -Server插入数据平行时,则增加ID后可能插入的数据很小。加法,TIDB允许Auto_increment指定整数类型字段,一张表仅允许一个FIELd是自动increment。但是,尽管存在问题,但有解决方案。有兴趣的合作伙伴可以找到相关信息。