e-works数字化企业网  »  文章频道  »  基础信息化  »  大数据

分布式数据库的存储设计改进

2017/10/10    来源:网络大数据    作者:佚名      
关键字:分布式数据库  存储  
对比下分布式数据库,如果把记录对应的节点信息发送给 Master,那就不可想象了。所以在分布式数据库中 hdfs 的存储策略不可取。

    数据动态重新分布
 
    首先介绍一个概念移动逻辑数据块,或者叫数据窗口 (move logic data chunk), 移动数据时,一个节点内可以移动到另外一个节点内的连续实际数据记录数。需要根据老的分布规则和新的分布规则的确定,通常是针对范围的均衡策略或者包含范围的组合均衡策略,窗口的大小要小于等于移动的数据所处的那个范围的大小,如范围的均衡策略例子中,0 号节点中 0<=value<2500w ,那么数据窗口可以选择 1 到 2500w 中 2500w 的因子,如 1000,100w 等,太小导致窗口数太多,太大导致窗口数小,并发数提高不了。进一步说,窗口的大小是老的分布规则和新的分布规则中数据所处的那个范围的大小的公约数,实际中两者是倍数的关系,取小的即可,如果小的数也比较大,如 500w,还可以取这个数的足够小的某个约数,如 1w。
 
    场景
 
    下面从以下几个场景说明数据动态重新分布:
 
    插入数据的时候,本来这条记录需要插入节点 A,发现节点 A 的负载高,不允许插入,这时调整规则,将节点 A 中的这条记录所处范围的一部分或者整体移动到 B 节点;
 
    加入新节点的时候,需要将原来某几个节点 (如 A1 到 A4) 上某些范围的一部分或者整体移动到新节点上;删除节点的时候, 需要将删除的节点 (如 A3 到 A4) 上范围整体移动到其他不删除的节点上;
 
    发现数据不均衡,人工手动触发数据重新分布,这种场景和加入和删除节点,本质上没有区别,就是在已有的节点中移动数据,而不涉及新加的或者要删除的节点。
 
    业务影响分析
 
    数据的移动,特别是大量数据的移动,势必对业务的操作带来影响,如果控制不好的话,可能是灾难;问题列举如下:
 
    场景 1 下,插入的数据是先插入老节点再移动还是先移动再插入新节点,先插入情况下可能偶尔数据库本身负载高到不能插入,先移动情况下,可能导致插入延迟又比较大,导致用户响应比较慢;
 
    场景 1,2,3 下,移动数据窗口的时候,业务上可能对这个窗口进行数据操作,插入,更新,删除都有可能,时间上可能业务先操作和锁定记录,然后移动,也有可能先移动,移动过程中,操作了已经移动的数据或者操作和锁定还没有移动的记录;
 
    如何处理数据重新分布
 
    设计好的系统,可能不太需要数据的移动,但是从一般的角度考虑,它是一个比较频繁的操作,而且涉及跨节点的插入数据,删除数据,修改规则元数据,这三者需要在一个事务中完成,所以需要使用分布式事务。为了保证移动数据的时候业务的正常运行,我们需要做如下的设计:
 
    场景 1 的先插入还是先移动的问题,可以动态调整,在插入很少的记录的时候,先插入,再移动,如果运行中先插入失败,则退化为先移动在插入;在插入大量的数据的时候,先移动,再插入;这种场景应该不多见,很多情况可以直接插入,移动去让后台线程来完成。
 
    场景 1,2,3 下业务操作了需要移动的数据的问题,调整移动的窗口大小,使得一个窗口的处理时间控制在可以接受的时间以内,一个窗口的内的数据一次锁定,例如时间设置为 1s,窗口大小选择 2k,使用 select for update 来锁定,最后直接删除这些记录,最后更新规则元数据。对于窗口比较大的情况,可以数据操作可以将大窗口调整为小窗口,每个小窗口使用以上的处理方式,同时业务的操作使用类似触发器的检查机制来同步更新到新节点上,具体的说:
 
    对于已经移动的小窗口内的插入或者覆盖 (replace) 操作,插入或者覆盖 (replace) 到新节点
 
    对于已经移动的小窗口内的删除操作,在新节点删除对应记录
 
    对于已经移动的小窗口内的更新操作,在新节点更新对应记录
 
    以上所讨论的数据重新分布主要是确定好前后的规则,后面的工作就是根据前后的规则去迁移数据和修改元数据
 
    使用范围的数据动态重新分布
 
    如老的均衡策略从 0 到一亿,以用户 id 作为均衡字段; 分布如下:
 
  Hadoop 中的 hdfs 和分布式数据库的对比
 
    场景 1:4 个节点存储或者性能都达到了阈值,需要扩容,计划每个节点拆分成两个相等的部分,那么新的分布结果如下:
 
  Hadoop 中的 hdfs 和分布式数据库的对比
 
    场景2:3 号节点由于性能不足,添加一个 4 号节点, 3 号节点的数据拆到 3 号和 4 号中,同时扩大用户范围到 4 亿,使用性能比较高的 5,6,7 号节点,每个节点存储一个亿,那么新的分布结果如下:
 
  Hadoop 中的 hdfs 和分布式数据库的对比
 
    使用先使用范围,再使用取余的数据动态重新分布
 
    举例说明,以上的先使用范围,再使用取余作为老的分布,如下:
 
  Hadoop 中的 hdfs 和分布式数据库的对比
 
    场景 1:现在需要按照 20000 一个范围,那么就是每 8w 条记录平均分布在 4 个节点中,新的分布结果如下:
 
  Hadoop 中的 hdfs 和分布式数据库的对比
 
    小结
 
    数据的均衡策略或者分布规则是一把双刃剑,Hdfs 的数据是随机的,节点上报的形式,所以能够动态调整,无需数据重新分布,缺点是启动需要扫描,导致启动慢;分布式数据库的均衡策略是有规则的,规则通常存在在元数据中,Master 启动时加载元数据就可以,元数据通常很小,所以启动很快;但是规则的动态调整比较麻烦, 数据的重新分布也是必须的工作;基本的规则比较简单,但调整动态调整量比较大,耗时长;组合的规则稍微复杂,但调整的数据量会缩小,耗时短。
 
责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐