发明名称 一种数据库快速水平扩展的方法
摘要 本发明公开了一种数据库快速水平扩展的方法,属于数据迁移储存领域。其步骤为:监控系统对现有数据库磁盘存储空间进行监测,当磁盘容量到达设定的存储容量阈值,则触发增加硬件存储的动作,为数据迁移做硬件环境的准备。路由协议根据当前待插入的主键ID与目前数据库实例数N取模,将待插入的行数路由到指定的数据库中,当超过预设的存储数目阈值时触发对数据库进入切分的动作,将指定数据迁移入新的数据库,完成数据库快速水平扩展。本发明可用于磁盘数据库或内存数据库,方法易用简洁,避免传统数据库水平扩展造成的热点分布不均的问题;此外,由于每次切分的数据迁移规模小,提高扩容的速度。综上所述,整体构架满足高可用性、高可靠性、高速、高效等要求。
申请公布号 CN102930062B 申请公布日期 2016.04.13
申请号 CN201210506104.0 申请日期 2012.11.30
申请人 南京富士通南大软件技术有限公司 发明人 王宏亮;邱国金;朱泾文
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 南京知识律师事务所 32207 代理人 蒋海军
主权项 一种数据库快速水平扩展的方法,包括如下步骤:步骤一:部署监控模块,根据监控模块监测的数据,若数据库磁盘存储空间已经达到存储容量阈值,则准备新增数据库存储空间,目的是为水平扩展准备硬件环境;步骤二:水平扩展的路由数据中保存了当前数据库记录总行数,路由协议根据当前待插入的主键ID对目前数据库实例数N取模运算,将待插入的记录行数路由到指定的数据库实例中,数据库实例存储数目阈值为Y条信息,目前数据库实例数N,数据库的水平切分次数n,数据库的切分因子α,N、n、α之间满足N=α<sup>n</sup>,N个数据库实例依次为DB<sub>0</sub>,DB<sub>1</sub>,..DB<sub>i</sub>,…DB<sub>N‑1</sub>,当数据库未进行切分前,所有的插入请求根据路由协议都路由到现存仅有的数据库实例1,而数据库切分后,路由协议中的算法公式如下:<math><![CDATA[<mrow><munderover><mo>&Sigma;</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><msup><mi>a</mi><mi>n</mi></msup><mo>-</mo><mn>1</mn></mrow></munderover><munderover><mo>&Sigma;</mo><mrow><mi>j</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>Y</mi><mo>-</mo><mn>1</mn></mrow></munderover><mrow><mo>(</mo><mfrac><mrow><mn>1</mn><mo>+</mo><mrow><mo>(</mo><mi>Y</mi><mo>*</mo><msup><mi>a</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>+</mo><mn>1</mn><mo>+</mo><mi>j</mi><mo>*</mo><msup><mi>a</mi><mi>n</mi></msup><mo>)</mo></mrow><msup><mi>moda</mi><mi>n</mi></msup></mrow><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></mfrac><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000845288520000011.GIF" wi="979" he="279" /></maths>当数据库内部存储条目到达设定的存储数目阈值后,每个数据库实例占用一个磁盘空间,每次新增数据库实例需要新增加硬盘空间,一旦数据库的主键ID超过Y*α<sup>n</sup>,就会使预先设置的规则引导数据库进入切分状态;在以上步骤二过程中,如果发生数据库插入请求时,插入队列会暂时将数据库插入请求放入队列中,直到数据库切分完成再执行队列中的请求;步骤三:当单个数据库实例中的记录总数达到数据库实例的存储数目阈值Y条时,此时表0、表1和表α‑1的数据均为Y/α条,需对数据库进行扩展,增加数据库实例个数为α,数据库实例0为原数据库实例,新增加的数据库实例为数据库实例1…数据库实例α‑1,将数据库实例0中的表1整体搬迁到数据库实例1中,将数据库实例0中的表α‑1整体搬迁到数据库实例α‑1中,搬迁完成后在数据库实例0中新增表0_1…表0_α‑1,数据库实例1中新增表1_1…表1_α‑1,在数据库实例α‑1中增加表α‑1_1…表α‑1_α‑1,动作完成后数据存储规则需要做变化,对于数据库实例0、数据库实例1和数据库实例α‑1的选择上需要按照主键ID对α取余进行,主键ID对α取余值为0的存储在数据库实例0,主键ID对α取余值为1的数据存储在数据库实例1中,主键ID对α取余值为α‑1的数据存储在数据库实例α‑1中;选择完数据库实例后,表的选择也需要修改,对于主键ID值小于Y的数据表的选择依旧是主键ID值对α取余表名保持不变,对于大于Y的数据则存储在新增的表中,表名的规则是“表名+主键ID对α取余后的余数+‘_实例个数取α的对数’”;继续按照上述规则,当数据库实例0、数据库实例1和数据库实例α‑1的数据存储达到已设定的存储数目阀值Y条时,继续增加数据库实例从步骤一开始进行下一次切分动作。
地址 210012 江苏省南京市雨花区文竹路6号
您可能感兴趣的专利