一种海量数据的分布式存储系统技术领域
本发明涉及计算机技术领域,尤其涉及了一种海量数据的分布式存储系统。
背景技术
随着IT技术及互联网+的发展,当今很多行业的信息化建设越来越完善,并且逐步
将企业内部的信息对外开放,系统的使用者越来越多,访问频次指数级增长,使用者和系统
交互过程中产生的数据越来越多。产生了海量数据的存储及访问这个复杂而艰巨的问题,
它的主要难点有以下几个方面:
一、数据量过大,系统资源要求高。
如果说有单一表的数据量百万级、千万级甚至过亿,我们仍然可以通过增加数据
库服务器软硬件的方式加以解决。但当数据量到达十亿级、百亿甚至千亿级,传统服务器的
性能已经无法满足处理要求,而专有的大型机等服务器价格非常昂贵,企业基本无法承担。
同时,传统的数据库处理软件也无法负载如此大量的数据,必须通过合理的软件架构改造
进行处理。
二、扩展性不强,存在性能瓶颈。
对海量的数据进行处理,传统的硬件和数据库软件存在性能瓶颈,当到达此瓶颈
之后我们可以通过增加处理节点的方式来提高性能,但传统数据库软件对多节点的支持有
限,节点过多会使节点间通讯量大增,从而导致节点数量只能维持在个位数。
三、性价比不高,运行维护较难。
传统的小型机等服务器由于是专有硬件,采购价格非常高;传统数据库软件授权
和维护价格也非常高,导致系统一开始的建设投入很高。初期投入需要考虑系统3-5年的使
用,硬件和软件的配置较高,但初期根本没有那么多的数据和用户,导致前期硬件和软件性
能基本处于浪费状态。专有的硬件和传统数据库软件的维护技术要求较高,维护成本高。
发明内容
本发明针对现有技术中扩展性不强、性价比不高的缺点,提供了一种海量数据的
分布式存储系统。
为了解决上述技术问题,本发明通过下述技术方案得以解决:
一种海量数据的分布式存储系统,包括:
数据库主键生成器,用于在应用服务器生成数据库主键,数据库主键生成器将一
个长整形long类型的64位数据进行分成系统毫秒数、应用服务器ID和毫秒内序列3个部分;
散列引擎,对数据库主键生成器生成的主键进行散列分布,将主键对应的数据平
衡分布到后端的业务数据库分区表中;
分库分表数据操作引擎,按照业务类型将数据库拆分为多个业务数据库组,每组
业务数据库中包含多个实际数据库实例,保证单库的数据量不超过TB级;同时对某个业务
数据库实例的具体业务表也使用散列引擎进行拆分,保证单表的记录数不超过百万级;
数据平衡器,将已有的历史数据部分迁移到新的业务数据库中。
作为优选,系统毫秒数取UNIXTIME的纪元时间到当前时间所经历的毫秒数-系统
上线的时间。
作为优选,应用服务器ID占用10位,用于标识生成ID的服务器。
作为优选,毫秒内序列占用12位,储存1—4096个数字,当1毫秒内需获取的ID大于
4096个,多出的部分延迟到下一毫秒获取。
一种如上所述的分库分表数据操作引擎的操作方法,如下步骤:
(1)首先按照业务类型将数据库使用散列引擎拆分为多组业务数据库,每组业务
数据库中包含多个实际数据库实例,保证单库的数据量不超过TB级;同时对某个实际数据
库实例的具体业务表也使用散列引擎进行拆分,保证单表的记录数不超过百万级;
(2)应用服务器收到客户端请求,若为新增操作则调用主键生成器;若为修改或查
询操作则直接将业务类型,主键传入散列引擎;
(3)散列引擎根据业务类型确定数据所在的数据库实例ID,根据主键确定数据所
在的表ID,并调用分库分表操作引擎;
(4)分库分表操作引擎根据传入的数据库实例ID和表ID,存入数据或者查询出数
据,原路返回给客户端。
本发明由于采用了以上技术方案,具有显著的技术效果:当业务数据库组不能支
撑目前的使用时,需要向业务数据库组中添加新的业务数据库。由于分布式散列引擎可以
尽量减少数据的迁移,使数据平衡器的工作量大大减轻,减少了对业务系统的影响。当有新
的业务数据库加入到业务数据库组中时,数据平衡器负责将已有的历史数据部分迁移到新
的业务数据库中,以保证数据操作引擎的正确访问和数据的平衡性。
附图说明
图1是本发明一种海量数据的分布式存储系统的结构示意图;
图2是本发明一种海量数据的分布式存储系统中的主键的结构示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步详细描述。
如图1至图2所示,一种海量数据的分布式存储系统,包括:
数据库主键生成器,用于在应用服务器生成数据库主键,数据库主键生成器将一
个长整形long类型的64位数据进行分成系统毫秒数、应用服务器ID和毫秒内序列3个部分;
系统毫秒数取UNIXTIME的纪元时间到当前时间所经历的毫秒数—系统上线的时间;数据平
衡器,将已有的历史数据部分迁移到新的业务数据库中;应用服务器ID占用10位,用于标识
生成ID的服务器;毫秒内序列占用12位,储存1—4096个数字,当1毫秒内需获取的ID大于
4096个,多出的部分延迟到下一毫秒获取;
散列引擎,对数据库主键生成器生成的主键进行散列分布,将主键对应的数据平
衡分布到后端的业务数据库分区表中;
分库分表数据操作引擎,按照业务类型将数据库拆分为多个业务数据库组,每组
业务数据库中包含多个实际数据库实例,保证单库的数据量不超过TB级;同时对某个业务
数据库实例的具体业务表也使用散列引擎进行拆分,保证单表的记录数不超过百万级。
一种如上所述的分库分表数据操作引擎的操作方法,如下步骤:
(1)首先按照业务类型将数据库使用散列引擎拆分为多组业务数据库,每组业务
数据库中包含多个实际数据库实例,保证单库的数据量不超过TB级;同时对某个实际数据
库实例的具体业务表也使用散列引擎进行拆分,保证单表的记录数不超过百万级;
(2)应用服务器收到客户端请求,若为新增操作则调用主键生成器;若为修改或查
询操作则直接将业务类型,主键传入散列引擎;
(3)散列引擎根据业务类型确定数据所在的数据库实例ID,根据主键确定数据所
在的表ID,并调用分库分表操作引擎;
(4)分库分表操作引擎根据传入的数据库实例ID和表ID,存入数据或者查询出数
据,原路返回给客户端。
本发明在一个集群中最大可以有1024台应用服务器,每台应用服务器可以在一个
毫秒内生成4096个ID,并保证其不重复使用139年。
此种主键方法的优点如下:
1、通过该ID可以反向计算出ID的生成时间、生成的应用服务器ID;
2、如同序列一样自增,但不依赖具体数据库;
3、减少数据库交互和热点,因为ID在应用服务器生成,性能很高。
在分布式系统中,对数据库服务器的添加删除,或者机器故障后自动脱离集群这
些操作是分布式数据库管理最基本的功能。
如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有
的数据就无法找到了,这样严重的违反了散列的单调性原则。本发明设计的散列分布引擎,
该引擎使用了一致性算列算法,满足了单调性和负载均衡的特性以及一般散列算法的分散
性。它对主键生成器生成的主键进行散列分布,将主键对应的数据平衡分布到后端的业务
数据库分区表中。
当业务数据库组不能支撑目前的使用时,需要向业务数据库组中添加新的业务数
据库。由于分布式散列引擎可以尽量减少数据的迁移,所以数据平衡器的工作量大大减轻,
减少了对业务系统的影响。当有新的业务数据库加入到业务数据库组中时,数据平衡器负
责将已有的历史数据部分迁移到新的业务数据库中,以保证数据操作引擎的正确访问和数
据的平衡性。
总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等
变化与修饰,皆应属本发明专利的涵盖范围。