1-拆分实施策略和示例演示-DB分库分表 (拆分法是什么)

教程大全 2025-07-20 11:31:45 浏览

***部分:实施策略

图1.数据库分库分表(sharding)实施策略图解

1.准备阶段

对数据库进行分库分表(Sharding化)前,需要开发人员充分了解系统业务逻辑和数据库schema.一个好的建议是绘制一张数据库ER图或领域模型图,以这类图为基础划分shard,直观易行,可以确保开发人员始终保持清醒思路。对于是选择数据库ER图还是领域模型图要根据项目自身情况进行选择。如果项目使用数据驱动的开发方式,团队以数据库ER图作为业务交流的基础,则自然会选择数据库ER图,如果项目使用的是领域驱动的开发方式,并通过OR-Mapping构建了一个良好的领域模型,那么领域模型图无疑是***的选择。就我个人来说,更加倾向使用领域模型图,因为进行切分时更多的是以业务为依据进行分析判断,领域模型无疑更加清晰和直观。

2.分析阶段

1).垂直切分

垂直切分的依据原则是:将业务紧密,表间关联密切的表划分在一起,例如同一模块的表。结合已经准备好的数据库ER图或领域模型图,仿照活动图中的泳道概念,一个泳道代表一个shard,把所有表格划分到不同的泳道中。下面的分析示例会展示这种做法。当然,你也可以在打印出的ER图或模型图上直接用铅笔圈,一切取决于你自己的喜好。

2). 水平切分

垂直切分后,需要对shard内表格的数据量和增速进一步分析,以确定是否需要进行水平切分。

2.1若划分到一起的表格数据增长缓慢,在产品上线后可遇见的足够长的时期内均可以由单一数据库承载,则不需要进行水平切分,所有表格驻留同一shard,所有表间关联关系会得到***限度的保留,同时保证了书写SQL的自由度,不易受join、group by、Order by等子句限制。

2.2 若划分到一起的表格数据量巨大,增速迅猛,需要进一步进行水平分割。进一步的水平分割就这样进行:

2.2.1.结合业务逻辑和表间关系,将当前shard划分成多个更小的shard,通常情况下,这些更小的shard每一个都只包含一个主表(将以该表ID进行散列的表)和多个与其关联或间接关联的次表。这种一个shard一张主表多张次表的状况是水平切分的必然结果。这样切分下来,shard数量就会迅速增多。如果每一个shard代表一个独立的数据库,那么管理和维护数据库将会非常麻烦,而且这些小shard往往只有两三张表,为此而建立一个新库,利用率并不高,因此,在水平切分完成后可再进行一次“反向的Merge”,即:将业务上相近,并且具有相近数据增长速率(主表数据量在同一数量级上)的两个或多个shard放到同一个数据库上,在逻辑上它们依然是独立的shard,有各自的主表,并依据各自主表的ID进行散列,不同的只是它们的散列取模(即节点数量)必需是一致的。这样,每个数据库结点上的表格数量就相对平均了。

2.2.2. 所有表格均划分到合适的shard之后,所有跨越shard的表间关联都必须打断,在书写sql时,跨shard的join、group by、order by都将被禁止,需要在应用程序层面协调解决这些问题。

特别想提一点:经水平切分后,shard的粒度往往要比只做垂直切割的粒度要小,原单一垂直shard会被细分为一到多个以一个主表为中心关联或间接关联多个次表的shard,此时的shard粒度与领域驱动设计中的“聚合”概念不谋而合,甚至可以说是完全一致,每个shard的主表正是一个聚合中的聚合根!

3.实施阶段

如果项目在开发伊始就决定进行分库分表,则严格按照分析设计方案推进即可。如果是在中期架构演进中实施,除搭建实现sharding逻辑的基础设施外(关于该话题会在下篇文章中进行阐述),还需要对原有SQL逐一过滤分析,修改那些因为sharding而受到影响的sql.

第二部分:示例演示

本文选择一个人尽皆知的应用:jpetstore来演示如何进行分库分表(sharding)在分析阶段的工作。由于一些个人原因,演示使用的jpetstore来自原ibatis官方的一个Demo版本,SVN地址为:。关于jpetstore的业务逻辑这里不再介绍,这是一个非常简单的电商系统原型,其领域模型如下图:

图2. jpetstore领域模型

由于系统较简单,我们很容易从模型上看出,其主要由三个模块组成:用户,产品和订单。那么垂直切分的方案也就出来了。接下来看水平切分,如果我们从一个实际的宠物店出发考虑,可能出现数据激增的单表应该是Account和Order,因此这两张表需要进行水平切分。对于Product模块来说,如果是一个实际的系统,Product和Item的数量都不会很大,因此只做垂直切分就足够了,也就是(Product,Category,Item,Iventory,Supplier)五张表在一个数据库结点上(没有水平切分,不会存在两个以上的数据库结点)。但是作为一个演示,我们假设产品模块也有大量的数据需要我们做水平切分,那么分析来看,这个模块要拆分出两个shard:一个是(Product(主),Category),另一个是(Item(主),Iventory,Supplier),同时,我们认为:这两个shard在数据增速上应该是相近的,且在业务上也很紧密,那么我们可以把这两个shard放在同一个数据库节点上,Item和Product数据在散列时取一样的模。根据前文介绍的图纸绘制方法,我们得到下面这张sharding示意图:

图3. jpetstore sharding示意图

对于这张图再说明几点:

1.使用泳道表示物理shard(一个数据库结点)

拆分法是什么

2.若垂直切分出的shard进行了进一步的水平切分,但公用一个物理shard的话,则用虚线框住,表示其在逻辑上是一个独立的shard。

3.深色实体表示主表

4.X表示需要打断的表间关联


对方电脑没有设登陆密码为什么还是不能远程登陆

远程登录别人电脑,需要对方设置远程控制和远程桌面项目。 不是单纯的对方同意或不设置密码就能登录的。 杀毒软件和防火墙还有电脑的安全策略设置,都得设置好才行。

fastCAM公司是哪个国家的啊?网上查不出来啊?

FastCAM软件公司始创于1976年,有近30年的软件开发历史,拥有切板、切管、切型钢,以及新近开发的产品零件库、套料数据库和钢材数据库管理软件。FastCAM软件公司总部设在美国工业重镇芝加哥、软件研发中心设在澳大利亚花园城市墨尔本

手机工作时候,何时发射功率最大,有多大?

先看开环功率控制:它是假定前向路径损耗与反向路径损耗是相似的链路为前提的。 将发射功率与接收功率的总和设置为一个常数,通常为-73dB。 [移动台根据在整个1.2288MHz频段接收到的总信号能量(就是在导频、寻呼、同步和业务信道的功率,其中含有从服务基站来的信号与相同频率相邻基站的信号总和来)来调整它的发射功率]例如:如果移动台接收到的信号功率为-85dBm,这时它的发射功率应当为:-73-(-85)=12dBm闭环功率控制:基站监视从每个移动台接收的功率并命令移动台以固定的步长1dB(0.5 dB、0.25dB)增加或降低功率(不能保持不变)。 这个过程每1.25ms一次(每秒钟重复800次)从以上资料不难看出,cDMA2000 1x不断精确控制手机的发射功率,以达到在能够保证接收质量的情况下的最小功率,下面详细介绍 cdma2000 1x为实现这个目的所作的有关功率方面的测试规定。 1、Open Loop Output这部分主要以基站发出大信号、中信号、小信号三种状况下,来检测手机是否能正确估算出开环输出功率,以及开环输出功率范围。 2、Time Response of Open Loop这部分主要保证,手机在不断运动,或者其他原因,导致接受到基站的信号持续变化时,手机是否能根据这种变化能快速、持续调整开环输出功率。 3、Closed Loop Power Range对于闭环功率控制,基站命令手机进行输出功率调整以优化功率输出。 基于收到的电平,基站命令手机增加和降低输出功率,每1.25 ms变化1 dB(800次/秒)。 测试闭环功率性能的标准方法包括验证整个功率范围及手机闭环功率控制范围的线性。 CDMA手机必须演示±24dB的闭环功率控制范围以及定义的改变功率的速度,以确定手机是否能跟上基站的命令。 4、Maximum Output Power和Minimum Output Power根据以上的介绍,其实基站对手机发射的绝对功率并不是很重视,它仅仅是要求手机能根据自己发出的功率上升指令或功率下降指令自动调整输出功率即可,且最好手机能发出无限大或无限小的功率来,但这个要求对手机制造商来说,实在是苛刻,且会无限制的提高手机制造成本,因此折中的方案是将手机按发射功率分类,不同类的手机最大功率必须达到各自要求,也就是至少要大于标准规定的最大功率的下限,小于标准规定的最大功率的上限,使其在小区远端或无线阴影中也能较好通讯。 同时要求手机必须能够输出小于最小功率的功率值来,也就是在无线环境比较好,且手机与基站很近时,手机能把自己的输出功率降得很低,以确保对其它手机的最小干扰和对电池的最小消耗。 5、Standby Powercdma2000 1x规定手机待机功率要小于-61 dBm,这既保证了对外干扰很小,又保证了在待机时间对电池的小消耗,延长了手机的待机时间。 五、wcdma手机发射功率GSM和wcdma虽然同为欧洲标准,但wcdma毕竟是码分多址的,它采纳,也必须采纳cdma中很多稳定成熟的技术和方案,至少在对手记发射功率控制这块,wcdma和cdma2000 1x就非常类似,只是wcdma对手机功率控制要求更精准、更严格。 笔者认为这里的原因是wcdma毕竟是码分多址的技术,它需要采用功率控制技术,来平衡用户功率,以保证系统每个用户的通信质量和系统的最大容量。 虽然GSM和wcdma同为欧洲标准,而且GSM是第二代标准,wcdma是第三代标准,GSM尽管也采用了功率控制技术,但区别还是巨大的:(1) GSM功率控制速率要慢得多,对功率控制升多少、降多少要求并不是很精准,也不是很严格;(2) GSM对功率控制依赖程度要低,而CDMA没有了功率控制将几乎无法工作。 事实上在W—CDMA中,上行链路采用开环功控和闭环功控两种方式。 当上行链路没有建立时,开环功控用来调节物理随机接入信道的发射功率。 链路建立之后,使用闭环功控。 闭环功控包括内环功控和外环功控。 外环功控以误码率或者误帧率作为控制目标,内环功控以信干比作为控制目标。 下行链路只有闭环功控。 1、Open Loop Power这部分主要以基站发出大信号、中信号、小信号三种状况下,来检测手机是否能正确估算出开环输出功率,以及开环输出功率范围。 具体计算公式为:PRACH Preamble Initial Power = (P-CPICH DL TX Power) - (CPICH_RSCP)+ (UL Interference) + (Constant value)2、Inner Loop Power wcdma关于手机在内环功控方面作了较好的功率控制位的形式和算法的规定,手机在内环功控下,必须能发出–50dBm到+24 dBm范围内的信号,而且还要求手机能够很好相应基站所发出的功率控制位,当基站发出升(或降)1dB命令时,手机必须升(或降)1dB+/-0.5dB,当基站发出升(或降)10dB命令时,手机必须升(或降)10dB+/-2dB。 同时wcdma还规定了A,B,C,D,E,F,G,H 8段区域,来测试手机。 将这部分与cdma2000 1x 的闭环功率控制相比,可以看出虽然异曲同工,但wcdma的规定更严谨,更细致。 3、Maximum Output Power和Minimum Output Powerwcdma与cdma2000 1x在这方面非常类似,故不再赘述。 通过以上的介绍,不难看出WCDMA与IS-95、CDMA 2000 1x没有本质不同,撇开IPR问题,所有的不同点无非是怎样才能更好发挥CDMA的优势、提高系统的性能如系统容量、通信质量和网络覆盖等。 六、结束语前面所述仅是把各个标准里对手机发射功率的有关规定拿出来罗列和对比,挂一漏万。 但管中窥豹,足见技术的发展和通信协议的进步。 PHS和GSM同为时分多址系统,协议就手机输出功率方面的规定具有可比性,它们与cdma2000 1x、wcdma这些码分多址系统,在手机输出功率方面不具有可比性。 码分多址近似的可以认为是在实时的(1.25ms一次),精确的(以0.25 dB)控制手机发射功率,而手机也要实时的、精确的相应控制(具体测试方法见上文),以保证系统的需要。 由于多址方式的不同,这就决定了GSM没有必要搞码分多址哪种实时的、精确的、很复杂的功率控制(以节省制造、测试成本),当然也不能像PHS那样,不控制手机输出功率,即便是在微蜂窝内。 在上文中,也是简单介绍了码分多址技术对手机发射功率的控制,事实上码分多址技术对基站和手机的发射功率的规定远不止这些,如接入试探功率、发射开/关控制,呼吸技术等等。 现实的情况是,如果没有功率控制等无线资源管理技术的支持,码分多址的性能比时分多址更差。 而这些笔者在本文都将其省略了,并不是说这些不重要,而是笔者认为这些与本文着眼点不太一致。 总之,手机发射功率实在是个重要的指标,也是一柄锋利的双刃剑,一方面人们希望它足够大,以克服无线电波传播路径的损耗、发射、折射的损耗,克服其他无线电波的干扰,另一方面又希望它足够小,尽可能小的干扰别人,这点在码分多址系统中尤显突出。 解决的办法就是要根据需要控制手机发射功率,在保证所有人的正常通信的情况下,尽可能的把所有手机的发射功率都降下来。 当然,这些无疑会加大协议的复杂性,提高手机的制造成本,但这可以保证更多的人同时拥有更多的带宽,这是符合人们一直在追求的提高无线资源利用率这一目标的,毕竟频率资源是不可再生的资源,而手机的制造成本会通过手机的批量生产,最终会降下来。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐