著录项信息
专利名称 | 一种海量数据存储方法 |
申请号 | CN201210204123.8 | 申请日期 | 2012-06-20 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-10-17 | 公开/公告号 | CN102737127A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 厦门聚海源物联网络技术有限公司 | 申请人地址 | 福建省厦门市思明南路422号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 厦门大学 | 当前权利人 | 厦门大学 |
发明人 | 林凡 |
代理机构 | 泉州市诚得知识产权代理事务所(普通合伙) | 代理人 | 方惠春 |
摘要
本发明涉及计算机数据存储技术领域。本发明一种海量数据存储方法,其包括以下步骤:步骤1:得到目前活动的内存数据库服务器列表;步骤2:把需要待存储的数据整理为数据库可以存储的格式,并将其映射到环形的Hash空间上,其中上述数据同时包含数据来源的主机IP地址以及目标内存数据库服务器的IP地址;步骤3:把内存数据库服务器的IP地址映射到环形的Hash空间上;步骤4:建立两个数据库与数据库的散列位置建立映射数组,也即一台数据库服务器的各虚拟服务器散列位置存储数组,得到数据、虚拟数据库与实际数据库的映射关系,并对待存储的逐条数据进行存储。本发明应用于海量数据的即时存储。
1.一种海量数据存储方法,其特征在于:包括以下步骤:
步骤1:得到目前活动的内存数据库服务器列表;
步骤2:把待存储的数据整理为Key-Value的Hash字符串值索引格式,存储于关系数据库和Hash数据表中,并将该Hash字符串值索引格式映射到环形的Hash空间上;所述待存储的数据包含数据来源的数据采集主机IP地址以及目标内存数据库服务器的IP地址;
步骤3:把内存数据库服务器的IP地址映射到环形的Hash空间上;
步骤4:建立内存数据库服务器上的内存数据库与Hash键值的对应映射数组PositionToDB,以及内存数据库服务器的各虚拟服务器的虚拟数据库的散列位置存储数组DBtoPosition,从而得到数据与虚拟数据库的映射关系,以及虚拟数据库与实际数据库的映射关系,并进行数据存储,具体存储过程包括:
步骤41:当某条数据要存储到内存数据库的时候,首先对该数据的关键字进行Hash,得到Key;
步骤42:根据步骤41得到的Key,搜索内存数据库与Hash键值的对应映射数组PositionToDB的索引值,当搜索到某个索引值≥该Key时,则停止搜索,并存储该索引值;
否则把该数组中的第一个索引值当作所要查找的索引值;
步骤43:根据步骤42找到的索引值,依据数据与实际数据库的映射关系,以及虚拟数据库与实际数据库的映射关系,得到内存数据库服务器的IP地址,并把该条数据发送给该内存数据库服务器上的内存数据库,对应的内存数据库接收并存储;
步骤44:返回继续执行步骤41-步骤43,直到所有数据存储完毕;
步骤5:数据备份,其具体过程包括:为保证数据存取的实时性,数据备份采用异步方式,数据采集主机在发送数据的时候,如果预设的备份数量超过预设值,则从环形的Hash空间中查找后继的内存数据库,也即从内存数据库与Hash键值的对应映射数组PositionToDB中查找后继的内存数据库,同时要确保查找到的内存数据库与先前备份的内存数据库实际属于不同的内存数据库,以保证备份被保存在不同的内存数据库服务器上,内存数据库服务器在收到数据后,首先存储数据,然后再按照数据采集主机提供的后继的内存数据库所在的内存数据库服务器的IP地址,直接将该数据复制到该内存数据库里。
2.根据权利要求1所述的一种海量数据存储方法,其特征在于:对于步骤5的数据备份,对备份数据的存取采用NWR规则,具体是:做N个备份;写入至少W份才认为备份成功;
读备份数据的时候,至少读取R个备份才认为读到的数据是一致的;其中W+R>N。
3 根据权利要求1所述的一种海量数据存储方法,其特征在于:所述步骤1得到目前活动的内存数据库服务器列表具体包括:
步骤11:在数据采集主机上建立活动的内存数据库服务器的IP地址表,并运行“心跳检测”程序,该“心跳检测”程序是指数据采集主机定期向各内存数据库服务器发送心跳检测信号;各内存数据库服务器运行“心跳响应”程序,该“心跳响应”程序是指各内存数据库服务器对数据采集主机发送的心跳检测信号向数据采集主机发送响应信号;
步骤12:数据采集主机判断各内存数据库服务器对心跳检测信号进行响应的时间,如果一内存数据库服务器没有在规定时间响应,则认为该内存数据库服务器已下线,则从IP地址表中删除该内存数据库服务器;数据采集主机如果重新收到已下线的内存数据库服务器的响应信号,则向IP地址表中插入该内存数据库服务器的IP地址。
一种海量数据存储方法\n技术领域\n[0001] 本发明涉及计算机数据存储技术领域,具体涉及一种基于分布式哈希表DHT与内存数据库存储相结合的海量数据存储方法。\n背景技术\n[0002] 近年来,“电梯惊魂事件”在各大一线城市频繁上演,北京、深圳、上海、广州等城市电梯死亡、伤人事故报道不断,成为继食品危机之后又一触及百姓神经的重大敏感事件,为了有效防范和坚决遏制电梯事故发生,电梯安全管理平台应运而生。电梯安全管理平台主要实现对电梯运行远程动态检测、故障诊断和记录,可以通过视频实时了解电梯的运行情况,在电梯出现关人、冲顶、沉底等故障时,第一时间获悉并及时采取措施,而且对于电梯的检验、维保等状况,政府部门能够实时掌握,可以及时敦促有关方面落实责任,达到技术监管的目的,同时,通过对电梯运行状况的数据处理,还能掌握不同品牌、不同地点电梯的安全运行与质量状况,起到预警、分析、处理的作用。\n[0003] 在市场和政府政策的推动下,以区、市为单位的大型的电梯安全管理平台的概念的提出,在理论上保障了区、市领导能够在发生事故时第一时间掌握信息、第一时间发出指令、第一时间实施救援、第一时间调查处理。但是在实际研发中,由于区、市为单位的大型的电梯安全管理平台具有海量的数据,每天具有几十万甚至上亿条的数据记录,对现有的数据库的稳定性和扩展性带来极大的挑战。\n[0004] 现有的数据存储策略是将数据保存到硬盘上,再进行读取,一般是处理永久、稳定的数据。例如专利申请号为CN200810216695.1的发明,提供一种海量数据存储方法,采用文件服务器来管理海量文件数据,具体存储的时候,首先读取DICOM图像文件,根据其中特定的数据元素,对所述DICOM图像文件进行存储,包括步骤:A1、建立树结构目录的根目录;\nA2、求取所述DICOM图像文件中的一种唯一性标识的Hash值,建立以所述Hash值命名的第一级子结点目录;A3、以所述DICOM图像文件中的SOP Instance UID命名所述DICOM图像文件,将所述DICOM图像文件存储于第一级子结点目录中。上述数据存储方法虽然在处理海量数据时具有良好的稳定性,但其同样强调维护数据的完整性、一致性,但很难顾及有关数据及其处理的定时限制,不能满足电梯报警在实际应用中的实时性的需要。\n[0005] 再例如,专利申请号为CN201010246288.2的发明,提供了一种支持海量存储的内存数据库方法,使用内存数据库来管理海量数据,并且改进了当物理数据库有大量的数据需加载到内存时,会存在内存不足的情况,具体方案包括:一个内存数据库将用户要访问且不在内存数据库中的记录从一个物理数据库载入,当内存数据库使用内存达到上限时,定时清除内存数据库中使用机率低于设定值的记录。\n[0006] 上述方案在一定程度上解决了数据存储的时限性问题,但是该方案把大量的数据全部加载到内存中,这对服务器的硬件要求非常高,普通企业很难承受。\n发明内容\n[0007] 本发明所要解决的技术问题是提供一种海量数据存储方法,基于分布式哈希表DHT与内存数据库存储相结合的方案,解决以区、市为单位的大型的电梯安全管理平台的海量数据的存储的即时性问题。\n[0008] 为了解决上述技术问题,本发明所采用的思路是,为每台待监控的电梯配备数据采集主机,以区、市为单位的大型的电梯安全管理平台安装于监控中心,该数据采集主机负责将数据传输至监控中心的内存数据库服务器集群。内存数据库服务器集群是由多台内存数据库服务器组成,这多台内存数据库服务器采用无主模式(没有一个集中管理的内存数据库服务器),来实现大规模内存存储。\n[0009] 一种海量数据存储方法,包括以下步骤:\n[0010] 步骤1:得到目前活动的内存数据库服务器列表;其具体包括:\n[0011] 步骤11:在数据采集主机上建立活动的(目前正常工作的)内存数据库服务器的IP地址表,并运行“心跳检测”程序,该“心跳检测”程序是指数据采集主机定期向各内存数据库服务器发送心跳检测信号;各内存数据库服务器运行“心跳响应”程序,该“心跳响应”程序是指各内存数据库服务器对数据采集主机发送的心跳检测信号向数据采集主机发送响应信号;\n[0012] 步骤12:数据采集主机判断各内存数据库服务器对心跳检测信号进行响应的时间,如果一内存数据库服务器没有在规定时间响应,则认为该内存数据库服务器已下线,则从IP地址表中删除该内存数据库服务器;数据采集主机如果重新收到已下线的内存数据库服务器的响应信号,则向IP地址表中插入该内存数据库服务器的IP地址;\n[0013] 通过上述方式,实时更新数据采集主机上的IP地址表,从而得到目前活动的内存数据库服务器列表。\n[0014] 步骤2:把待存储的数据整理为Key-Value的Hash字符串值索引格式,存储于关系数据库和Hash数据表中,并将其映射到环形的Hash空间上;所述待存储的数据包含数据来源的数据采集主机IP地址以及目标内存数据库服务器的IP地址;\n[0015] 步骤3:把内存数据库服务器的IP地址映射到环形的Hash空间上:\n[0016] 步骤4:建立内存数据库服务器上的内存数据库与Hash键值的对应映射数组PositionToDB,也即每台内存数据库服务器对应的各组Hash键值的存储映射关系,以及内存数据库服务器的各虚拟服务器的虚拟数据库的散列位置存储数组DBtoPosition,从而得到数据与虚拟数据库的映射关系,以及虚拟数据库与实际数据库的映射关系,并进行数据存储,具体存储过程包括:\n[0017] 步骤41:当某条数据要存储到内存数据库的时候,首先对该数据的关键字进行Hash,得到Key;\n[0018] 步骤42:根据步骤41得到的Key,搜索内存数据库与Hash键值的对应映射数组PositionToDB(即Hash键值映射到数据库节点的对照表,相当于确定将hash数据存储到哪一个内存数据库服务器节点上)的索引值,当搜索到某个索引值≥该Key时,则停止搜索,并存储该索引值;否则把该数组中的第一个索引值当作所要查找的索引值;\n[0019] 步骤43:根据步骤42找到的索引值,依据数据与实际数据库的映射关系,以及虚拟数据库与实际数据库的映射关系,得到内存数据库的服务器IP地址,并把该条数据发送给该内存数据库,对应的内存数据库接收并存储。\n[0020] 进一步的,本发明的海量数据存储方法还包括:\n[0021] 步骤5:数据备份,其具体包括:为保证数据存取的实时性,数据备份采用异步方式,数据采集主机在发送数据的时候,如果预设的备份数量超过预设值,则从环形的Hash空间中查找后继的内存数据库,也即从内存数据库与Hash键值的对应映射数组PositionToDB中查找后继的内存数据库,同时要确保查找到的内存数据库与先前备份的内存数据库实际属于不同的内存数据库,以保证备份被保存在不同的内存数据库服务器上,内存数据库服务器在收到数据后,首先存储数据,然后再按照数据采集主机提供的后继的内存数据库所在的内存数据库服务器的IP地址,直接将该数据复制到该内存数据库里。\n[0022] 进一步的,对于上述步骤5的数据备份,其存取策略是:由于数据备份采用异步方式进行,因此,备份数据可能存在不一致的情况,为克服数据不一致的缺陷,对于步骤5的数据备份,对备份数据的存取采用NWR规则,即:做N个备份;写入至少W份才认为备份成功;读备份数据的时候,至少读取R个备份才认为读到的数据是一致的;其中W+R>N。\n[0023] 进一步的,本发明的海量数据存储方法还包括异常情况处理,当数据采集主机判断出现内存数据库服务器宕机情况,进行以下处理:\n[0024] 第一,根据数据采集主机上存储的IP地址表,找到宕机的内存数据库服务器的IP地址,根据该IP地址的Hash值删除数组PositionToDB与DBToPosition中对应的内容,其中,PositionToDB是内存数据库与Hash键值的对应映射数组,DBToPosition是内存数据库服务器的各虚拟服务器散列位置的存储数组;\n[0025] 第二,由于数据备份存储在内存数据库服务器集群的不同的内存数据库服务器上,故根据数据来源的数据采集主机的IP地址与目标内存数据库服务器的IP地址,将缺失的数据从其他正常工作的内存数据库服务器上获取。\n[0026] 当数据采集主机判断有新的内存数据库服务器时,进行以下处理:\n[0027] 第一,将新增的内存数据库服务器映射到环形的Hash空间,根据Hash值往数组PositionToDB与DBToPosition中增加相应的元素,并确保PositionToDB 索引是有序的;\n[0028] 第二,根据数组PositionToDB查找到该数据库后继内存数据库,查找满足“后继内存数据库的移动索引值小于等于新内存数据库Hash值”条件的数据,移动到新的内存数据库上。\n[0029] 本发明采用上述方法,具有以下优点:\n[0030] 1. 本发明基于分布式哈希表DHT与内存数据库存储相结合的方案,应用于以区、市为单位的大型的电梯安全管理平台,解决了其海量数据的存储的即时性问题;\n[0031] 2. 本发明提供的存储方法同时具备数据备份功能,该数据备份采用异步方式进行,不影响数据存储的即时性;且采用NWR规则,防止了备份的数据与原数据可能存在不一致的情况;\n[0032] 3. 本发明还包括异常情况处理,在出现内存数据库服务器宕机的情况下进行自我修复。\n附图说明\n[0033] 图1是本发明的实施例的系统架构示意图;\n[0034] 图2是本发明的实施例的步骤2的示意图;\n[0035] 图3是本发明的实施例的步骤3的示意图;\n[0036] 图4是本发明的实施例的步骤4的示意图。\n具体实施方式\n[0037] 现结合附图和具体实施方式对本发明进一步说明。\n[0038] 现以应用于以区、市为单位的大型的电梯安全管理平台的海量数据存储为例来阐述本发明的具体实施。\n[0039] 如图1所示,首先为每台待监控的电梯配备数据采集主机,以区、市为单位的大型的电梯安全管理平台安装于监控中心,该数据采集主机负责将数据传输至监控中心的内存数据库服务器集群。内存数据库服务器集群是由多台内存数据库服务器组成,这多台内存数据库服务器采用无主模式运行,即没有一个集中管理的内存数据库服务器,各个内存数据库服务器之间是平行的关系,来实现大规模内存存储。\n[0040] 本发明的海量数据存储方法具体存储步骤如下:\n[0041] 步骤1:数据采集主机上安装“心跳检测”程序,并建立活动的(即目前正常工作的)内存数据库服务器的IP地址表;各内存数据库服务器装有“心跳响应”程序,数据采集主机通过“心跳检测”程序定期向各内存数据库服务器发送心跳检测信号,若规定时间内未接收到内存数据库服务器的响应信号,则表示该内存数据库服务器已下线,则从IP地址表中删除该内存数据库服务器;如果数据采集主机重新受到已下线的内存数据库服务器的响应信号,则向IP地址表中插入该内存数据库服务器的IP地址,通过这种方式,可以实时更新数据采集主机上的内存数据库服务器IP地址表,用来确定目前正常工作的内存数据库服务器。上述过程中的“心跳检测”为本领域技术人员所熟知,这里不再赘述。\n[0042] 步骤2:把待存储的数据整理为Key-Value的Hash字符串值索引格式,存储于关系数据库和Hash数据表中,映射到环形的Hash空间上;具体实现方法如下:首先,通过电梯的数据采集主机把采集到的数据整理成数据库可以存储的格式,同时设置字段用来记录数据来源的数据采集主机IP地址以及目标内存数据库服务器的IP地址。如图2所示,假设现在用n位地址空间,则可以把环形Hash空间进行2n 等分,分别编号为0—(2n-1)。把每条数据记录的“来源数据采集主机IP地址+记录主键”当成一个关键字,然后对此关键字进行MD5进行加密,当然也可以采用其他方式加密;然后可以适当的截取若干位(假设这里n=32,则截取前4个字节)作为Hash值Key,最后根据Hash值的大小映射到环形Hash空间上。\n[0043] 步骤3:把内存数据库服务器的IP地址映射到环形的Hash空间上:\n[0044] 根据步骤2中的Hash算法,并对各数据采集主机中的内存数据库服务器IP地址表的IP值进行Hash获得DKey值,然后散列到环形Hash空间上。为了保证数据尽可能均匀地存储至内存数据库服务器,本方案引入虚拟数据库的概念,也即根据内存数据库服务器的存储能力(存储能力越强,虚拟台数越多),把一台内存数据库服务器虚拟成M台,然后分别对各虚拟服务器进行Hash,这里取“IP#1”到“IP#M”为这M台虚拟服务器的Hash关键字与数据库ID,最后散列到环上,假设这里把第一台内存数据库服务器虚拟成两台虚拟服务器,则其示意图如图3所示。\n[0045] 步骤4:建立内存数据库与Hash键值的对应映射数组PositionToDB,以及内存数据库服务器的各虚拟服务器的虚拟数据库的散列位置存储数组DBtoPosition,从而得到数据与虚拟数据库的映射关系,以及虚拟数据库与实际数据库的映射关系,并进行数据存储,其数据存储方案如下:\n[0046] 根据步骤3的原理,将内存数据库服务器的M台虚拟服务器的M个虚拟数据库与该内存数据库服务器的内存数据库的散列位置建立映射数组DBtoPosition,也即一台内存数据库服务器的各虚拟服务器的散列位置存储数组,也可以称为一个内存数据库的各虚拟数据库的散列位置存储数组。虚拟数据库较多的情况下可使用二叉树进行存储。\n[0047] 例如,将内存数据库服务器的IP地址作为实际数据库的标志,则:\n[0048] DBtoPosition[IP][]={{PositionL, … ,PositonM}, … ,{PositionS, … PositonZ}},\n[0049] PositionToDB[Postion]={DB1#1,DB2,DB1#2,… ,DBN};\n[0050] 其中,\n[0051] DBToPosition[DB1_IP]={Hash(DB1_IP#1),Hash(DB1_IP#2)},表示内存数据库DB1被虚拟成两个虚拟数据库以及该虚拟数据库的散列位置;\n[0052] PositionToDB[Hash(DB1_IP#1)]={DB1_IP},表示散列位置Hash(DB1_IP#1)对应虚拟数据库DB1#1(也即虚拟服务器),这里保证该数组的索引值是有序的,默认从小到大排序;\n[0053] 根据以上描述,可以得到数据与实际数据库的映射关系,以及虚拟数据库与实际数据库的映射关系图如图4所示。\n[0054] 具体存储步骤如下:\n[0055] 步骤41:当某条数据要存储到内存数据库的时候,首先根据步骤2的方法对该数据的关键字进行Hash,得到Key;\n[0056] 步骤42:根据步骤41得到的Key,搜索内存数据库与Hash键值的对应映射数组PositionToDB的索引值,当搜索到某个索引值≥该Key时,则停止搜索,并存储该索引值;\n否则把该数组中的第一个索引值当作所要查找的索引值;\n[0057] 步骤43:根据步骤42找到的索引值,依据数据与实际数据库的映射关系,以及虚拟数据库与实际数据库的映射关系,得到内存数据库服务器的IP地址,并把该条数据发送给该内存数据库服务器上的内存数据库,对应的内存数据库接收并存储;\n[0058] 步骤44:返回继续执行步骤41-步骤43,直到所有数据存储完毕\n[0059] 步骤5:数据备份:为为保证数据存取的实时性,本方案中数据备份采用异步方式,数据采集主机在发送数据的时候,如果预设的备份数量超过预设值,则从环形的Hash空间中查找后继的内存数据库,也即从内存数据库与Hash键值的对应映射数组PositionToDB中查找后继的内存数据库,同时要确保查找到的内存数据库与先前备份的内存数据库实际属于不同的内存数据库,以保证备份被保存在不同的内存数据库服务器上,内存数据库服务器在收到数据后,首先存储数据,然后再按照数据采集主机提供的后继的内存数据库所在的内存数据库服务器的IP地址,直接将该数据复制到该内存数据库里。\n[0060] 上述步骤5的备份数据存取策略:由于数据备份采用异步方式进行,因此,备份数据可能存在不一致的情况,为克服数据不一致的缺陷,这里对备份数据的存取采用NWR规则:这里N代表总共需要做N个备份,W代表要写入至少W份才认为备份成功,R表示应用程序需要读备份数据的情况下,至少需要读取R个备份才认为读到的数据是一致的,这些参数都可以通过电梯的数据采集主机进行设置。配置的时候要求W+R > N,这样就保证至少能读取到一个最新的数据版本。\n[0061] 另外,本发明还对异常情况进行处理,例如出现内存数据库服务器出现宕机情况:\n[0062] 第一,根据数据采集主机上存储的IP地址表,找到宕机IP,根据IP的Hash值删除数组PositionToDB与DBToPosition中对应的内容;\n[0063] 第二,由于数据备份存储在不同的内存数据库服务器上,根据数据来源地址与目标数据库地址,缺失的数据可以从别的服务器上获取。\n[0064] 当增加新的内存数据库服务器时:\n[0065] 第一,根据步骤2的方法,把新增内存数据库服务器映射到环形Hash空间,根据Hash值往数组PositionToDB与DBToPosition中增加相应的元素,并确保PositionToDB 索引是有序的;\n[0066] 第二,根据数组PositionToDB查找到该内存数据库的后继内存数据库,找出符合“后继的内存数据库移动索引值小于等于新内存数据库Hash值”条件的数据,移动到新的内存数据库上,比如,根据图3,假设DB2是新插入的数据库,则只要把Hash 值在区间[ KEY1,DKEY2]的数据移动到DB2内存数据库服务器上即可。\n[0067] 尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
法律信息
- 2015-04-08
- 2014-11-12
- 2014-10-22
专利申请权的转移
登记生效日: 2014.09.24
申请人由厦门聚海源物联网络技术有限公司变更为厦门大学
地址由361000 福建省厦门市软件园二期观日路16号邮电纵横大厦5楼变更为361000 福建省厦门市思明南路422号
- 2012-12-12
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210204123.8
申请日: 2012.06.20
- 2012-10-17
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-04-01
|
2008-10-07
| | |
2
| |
2011-12-28
|
2011-09-08
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |