著录项信息
专利名称 | PaaS系统中hbase数据删除方法及装置 |
申请号 | CN201511029045.2 | 申请日期 | 2015-12-31 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2016-05-25 | 公开/公告号 | CN105608215A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F16/22 | IPC分类号 | G;0;6;F;1;6;/;2;2;;;G;0;6;F;1;6;/;2;1;5查看分类表>
|
申请人 | 新浪网技术(中国)有限公司 | 申请人地址 | 北京市海淀区北四环西路58号理想国际大厦20层
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 新浪网技术(中国)有限公司 | 当前权利人 | 新浪网技术(中国)有限公司 |
发明人 | 王阳 |
代理机构 | 北京卓岚智财知识产权代理事务所(特殊普通合伙) | 代理人 | 任漱晨 |
摘要
本发明实施例提供一种PaaS系统中hbase数据删除方法及装置,该方法包括:接收用户发送的数据删除指令,所述数据删除指令中包括关键字范围;根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域;对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,将关键字匹配的用户数据删除;对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除。能够实现快速、高效的数据删除,数据删除操作的处理速度快,处理时间短。
1.一种PaaS系统中hbase数据删除方法,其特征在于,包括:
接收用户发送的数据删除指令,所述数据删除指令中包括关键字范围;
根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域;
对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,将关键字匹配的用户数据删除;
对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除;
所述根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域,具体包括:
根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字;
依次查询根root表、业务字典meta表,确定所述起始关键字和结束关键字所在的meta表;
根据所述起始关键字和结束关键字,查找确定出的meta表所对应的业务表,确定所述起始关键字和结束关键字所在的业务表。
2.如权利要求1所述的方法,其特征在于,所述关键字范围通过起始关键字和结束关键字表征;或
所述关键字范围通过起始关键字和关键字的数量表征。
3.如权利要求1所述的方法,其特征在于,根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定所述起始关键字和结束关键字所在的业务表。
4.如权利要求1所述的方法,其特征在于,对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,具体包括:
遍历起始关键字和结束关键字所在的存储区域中的用户数据文件;
根据所述用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是所述关键字范围内的关键字,当判断为是时,认为该用户数据为关键字匹配的用户数据。
5.如权利要求4所述的方法,其特征在于,所述将关键字匹配的用户数据删除,具体包括:
对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;
对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。
6.如权利要求1-5任一所述的方法,其特征在于,还包括:
确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离split状态;以及
将关键字匹配的用户数据删除,删除split状态;
其中,处于split状态的存储区域不允许其他用户读写数据。
7.一种PaaS系统中hbase数据删除装置,其特征在于,包括:
接收模块,用于接收用户发送的数据删除指令,所述数据删除指令中包括关键字范围;
确定模块,用于根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域;
删除模块,用于对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,将关键字匹配的用户数据删除;对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除;
所述确定模块,具体用于:
根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字;
依次查询根root表、业务字典meta表,确定所述起始关键字和结束关键字所在的meta表;
根据所述起始关键字和结束关键字,查找确定出的meta表所对应的业务表,确定所述起始关键字和结束关键字所在的业务表。
8.如权利要求7所述的装置,其特征在于,所述接收模块接收到的数据读取指令中包括的关键字范围通过起始关键字和结束关键字表征;或
所述接收模块接收到的数据读取指令中包括的关键字范围通过起始关键字和关键字的数量表征。
9.如权利要求7所述的装置,其特征在于,所述确定模块,具体用于:
根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定所述起始关键字和结束关键字所在的业务表。
10.如权利要求7所述的装置,其特征在于,所述删除模块,具体用于:
遍历起始关键字和结束关键字所在的存储区域中的用户数据文件;
根据所述用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是所述关键字范围内的关键字,当判断为是时,认为该用户数据为关键字匹配的用户数据。
11.如权利要求10所述的装置,其特征在于,所述删除模块,具体用于:
对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;
对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。
12.如权利要求7-11任一所述的装置,其特征在于,所述删除模块,还用于:
确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离split状态;以及将关键字匹配的用户数据删除,删除split状态;
其中,处于split状态的存储区域不允许其他用户读写数据。
PaaS系统中hbase数据删除方法及装置\n技术领域\n[0001] 本发明涉及数据处理技术领域,尤指一种PaaS系统中hba se数据删除方法及装置。\n背景技术\n[0002] 随着网络的不断发展,为用户提供服务的方法已经由软件即服务(Software as a Service,SaaS)的方式转变为平台即服务(Platform as a Service,PaaS)的方式。PaaS系统中可以使用Hadoop数据库(Hadoop Database,HBase)系统,Hbase系统是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价个人计算机服务器(PC Server)上搭建起大规模结构化存储集群。\n[0003] 在hbase系统中如果想删除数据,就只能调用上层的删除函数Java语言程序开发工具包(Java Development Kit,JDK)的应用程序编程接口(Application Programming Interface,API)将数据删除。因为在hbase系统中最终存入的数据都是只读文件。所有的写操作都是先写入到缓冲中当缓冲满了之后就会刷新到磁盘,一般hbase会搭配hadoop,那么就是写入到hadoop中。写入的用户数据文件叫HFile,是hbase自定义格式的二进制文件。\n[0004] 这个HFile(假设叫文件A)一旦创建写入后就不可以更改了。如果想将这个文件A中的某些内容删除,那么需要再写入一个新的HFile文件B,然后插入一些删除(Delete)状态的关键字-值(key-value),标示这些key-value是被删除的。文件B中的标记删除的那些key就是在文件A中的key。之后hbase上层会触发一个文件合并的操作,这个操作可能是手动触发的,也可以是配置文件中指定的时间到了才触发的。当触发这个操作后,就会遍历某几个HFile,比如文件A和文件B,然后将文件A和文件B的内容合并成文件C并保存,在合并的过程中如果发现某些key被标记为删除,则不保存这些key,最后将文件A和文件B删除。经过这些步骤后那些需要删除的key就被真正删除了。\n[0005] 由此可见,现有技术中,在hbase系统中一个删除操作和一个插入/更新操作理论上是一样的,插入/更新也是写一条数据,数据类型是插入/更新,而删除操随着作也是写一条数据,数据类型是删除。当这条删除数据插入后,上层用户再读就读不到了,但是在执行合并前,这些数据实际上都存在磁盘中。\n[0006] 这样通过逐个文件合并的方式实现数据删除时,当需要删除的数据量比较大时,会导致删除操作的时间很长,例如:用户有100G的数据,那么要全部删除就需要执行大量的删除操作,写入一个个标记为删除的操作,并一个个的进行文件合并,随着数据量的增加整个删除操作也就越慢。而且在hbase系统中删除一些数据,由于合并过程会轻微影响线上业务所以一般晚上执行。\n[0007] 可见,现有habse系统中从删除操作开始到最终将数据从磁盘或者hadoop上删除需要经过很长时间,其删除操作处理时间很长,效率很低,不能快速、高效的实现对用户数据的删除操作。\n发明内容\n[0008] 本发明实施例提供一种PaaS系统中hbase数据删除方法及装置,用以解决现有技术中存在用户数据删除时,删除操作处理时间长,速度慢、效率低下的问题,能够实现快速、高效的用户数据删除。\n[0009] 一方面,本发明实施例提供了一种hbase数据删除方法,包括:\n[0010] 接收用户发送的数据删除指令,所述数据删除指令中包括关键字范围;\n[0011] 根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域;\n[0012] 对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,将关键字匹配的用户数据删除;\n[0013] 对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除。\n[0014] 在一些可选的实施例中,所述关键字范围通过起始关键字和结束关键字表征;或[0015] 所述关键字范围通过起始关键字和关键字的数量表征。\n[0016] 在一些可选的实施例中,根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域,具体包括:\n[0017] 根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字;\n[0018] 依次查询根root表、业务字典meta表,确定所述起始关键字和结束关键字所在的meta表;\n[0019] 根据所述起始关键字和结束关键字,查找确定出的meta表所对应的业务表,确定所述起始关键字和结束关键字所在的业务表。\n[0020] 在一些可选的实施例中,根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定所述起始关键字和结束关键字所在的业务表。\n[0021] 在一些可选的实施例中,对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,具体包括:\n[0022] 遍历起始关键字和结束关键字所在的存储区域中的用户数据文件;\n[0023] 根据所述用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是所述关键字范围内的关键字,当判断为是时,认为该用户数据为关键字匹配的用户数据。\n[0024] 在一些可选的实施例中,所述将关键字匹配的用户数据删除,具体包括:\n[0025] 对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;\n[0026] 对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。\n[0027] 在一些可选的实施例中,上述方法还包括:\n[0028] 确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离split状态;以及\n[0029] 将关键字匹配的用户数据删除,删除split状态;\n[0030] 其中,处于split状态的存储区域不允许其他用户读写数据。\n[0031] 另一方面,本发明实施例提供了一种hbase数据删除装置,包括:\n[0032] 接收模块,用于接收用户发送的数据删除指令,所述数据删除指令中包括关键字范围;\n[0033] 确定模块,用于根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域;\n[0034] 删除模块,用于对起始关键字和结束关键字所在的存储区域,根据所述关键字范围对其中存储的用户数据进行关键字匹配判断,将关键字匹配的用户数据删除;对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除。\n[0035] 在一些可选的实施例中,所述接收模块接收到的数据读取指令中包括的关键字范围通过起始关键字和结束关键字表征;或\n[0036] 所述接收模块接收到的数据读取指令中包括的关键字范围通过起始关键字和关键字的数量表征。\n[0037] 在一些可选的实施例中,所述确定模块,具体用于:\n[0038] 根据所述关键字范围,确定待删除的用户数据的起始关键字和结束关键字;\n[0039] 依次查询根root表、业务字典meta表,确定所述起始关键字和结束关键字所在的meta表;\n[0040] 根据所述起始关键字和结束关键字,查找确定出的meta表所对应的业务表,确定所述起始关键字和结束关键字所在的业务表。\n[0041] 在一些可选的实施例中,所述确定模块,具体用于:\n[0042] 根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定所述起始关键字和结束关键字所在的业务表。\n[0043] 在一些可选的实施例中,所述删除模块,具体用于:\n[0044] 遍历起始关键字和结束关键字所在的存储区域中的用户数据文件;\n[0045] 根据所述用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是所述关键字范围内的关键字,当判断为是时,认为该用户数据为关键字匹配的用户数据。\n[0046] 在一些可选的实施例中,所述删除模块,具体用于:\n[0047] 对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;\n[0048] 对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。\n[0049] 在一些可选的实施例中,所述删除模块,还用于:\n[0050] 确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离split状态;以及将关键字匹配的用户数据删除,删除split状态;其中,处于split状态的存储区域不允许其他用户读写数据。\n[0051] 上述技术方案具有如下有益效果:根据接收到的用户发送的数据删除指令中包括的关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域;对起始关键字和结束关键字所在的存储区域,逐一识别出其中待删除的用户数据进行删除;对处于起始关键字和结束关键字所在的存储区域之间的存储区域,则可以直接删除这些存储区域的用户数据,该方式不需要像现有技术中一样逐条进行数据文件的合并以实现删除操作,从而减少了数据删除的处理时间,提高了数据删除操作的处理速度和效率,实现了快速、高效的数据删除,简化了数据删除操作。\n附图说明\n[0052] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0053] 图1是本发明实施例一中PaaS系统中hbase数据删除方法的流程图;\n[0054] 图2是本发明实施例二中PaaS系统中hbase数据删除方法的流程图;\n[0055] 图3是本发明实施例二中hbase系统中存储用户数据的存储表结构示意图;\n[0056] 图4是本发明实施例二中存储区域中的用户数据文件示例图;\n[0057] 图5是本发明实施例中PaaS系统中hbase数据删除装置的结构示意图。\n具体实施方式\n[0058] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0059] 为了解决现有技术中,PaaS系统中hbase数据删除时,处理速度慢,删除数据的操作时间长、效率低的问题,本发明实施例提供一种PaaS系统中hbase数据删除方法,能够实现快速、高效的数据删除。下面通过具体的实施例进行详细说明。\n[0060] 实施例一\n[0061] 本发明实施例一提供的PaaS系统中hbase数据删除方法,其流程如图1所示,包括如下步骤:\n[0062] 步骤S101:接收用户发送的数据删除指令,其中,数据删除指令中包括关键字范围。\n[0063] 用户想要删除用户数据时,发送数据删除指令到数据服务器,请求删除用户数据。\n数据删除指令中包括要删除的用户数据的关键字范围。\n[0064] 可选的,要删除的用户数据的关键字范围通过起始关键字和结束关键字表征,此时可以直接从数据删除指令中解析出起始关键字和结束关键字。\n[0065] 或,可选的,要删除的用户数据的关键字范围通过起始关键字和关键字的数量表征,此时解析出数据删除指令中包括的起始关键字和关键字的数量,并根据起始关键字和关键字的数量,确定出结束关键字。\n[0066] 步骤S102:根据数据删除指令中包括的关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域。\n[0067] 根据数据删除指令中包括的关键字范围,确定待删除的用户数据的起始关键字和结束关键字,查询根(root)表、业务字典(meta)表、业务表,确定起始关键字和结束关键字所在的业务表。确定出起始关键字和结束关键字所在的业务表之后,即可知道待删除的用户数据位于从起始关键字所在的业务表开始,到结束关键字所在的业务表结束的这些业务表中,即用户数据位于起始关键字所在的业务表、结束关键字所在的业务表、以及位于这两个业务表之间的业务表。\n[0068] 具体可以根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定所述起始关键字和结束关键字所在的业务表。\n[0069] 步骤S103:对起始关键字和结束关键字所在的存储区域,根据关键字范围对其中存储的用户数据进行关键字匹配判断。\n[0070] 对起始关键字和结束关键字所在的存储区域,遍历起始关键字和结束关键字所在的存储区域中的用户数据文件;根据用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是关键字范围内的关键字;当判断为是时,认为该用户数据为关键字匹配的用户数据。\n[0071] 例如,上述步骤中确定出对起始关键字和结束关键字所在的业务表之后,由于这两个业务表中包括待删除的用户数据,也可能包括不需要删除的用户数据,因此,可以依次遍历这些业务表中的用户数据文件,找到用户数据文件中包括关键字范围内的关键字的用户数据。\n[0072] 步骤S104:将关键字匹配的用户数据删除。\n[0073] 对用户数据文件中包括的关键字匹配的用户数据进行删除,具体的,对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。\n[0074] 优选的,确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离(split)状态;以及将关键字匹配的用户数据删除,删除split状态;其中,处于split状态的存储区域不允许其他用户读写数据。\n[0075] 步骤S105:对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除。\n[0076] 由于业务表以及业务表中的用户数据都是按照字典顺序存放的,因此,对处于起始关键字和结束关键字所在的业务表之间的业务表,这些业务表中的数据均是待删除的用户数据,则可以将这些存储区域中的用户数据直接删除掉,而不用在一一进行文件合来实现数据删除。\n[0077] 实施例二\n[0078] 本发明实施例二提供的PaaS系统中hbase数据删除方法,其流程如图2所示,包括如下步骤:\n[0079] 步骤S201:用户发送数据删除指令。\n[0080] 在PAAS系统中,用户是共享一个存储服务的,也就是所有用户的数据都存在一个独立的hbase系统中,用户之间的key是通过前缀区分的,这个前缀是系统加上的,之后所有的查询,更新,删除操作都可以带上这个前缀,而返回给用户时会将这个前缀给去掉,所以前缀对于用户来说是不可知的。\n[0081] 如图3所示为hbase系统中存储用户数据的存储表结构示例图,hbase系统中有两个特殊的表,根(root)表和业务字典(meta)表,Root表只有一份,通过root表再定位到meta表,meta表可能有多份,再通过meta表找到最终的业务表以及业务表中需要操作的key。图3中的hello,kvdb,……,等标识不同的meta表,aaa,bbb,ddd,……,等等这些前缀都是key的前缀。如图3中最左侧为root表,中间一列为meta表,右边一列为业务表。\n[0082] 图3中每个方块都表示一个存储区域(region),hbase系统中把若干数据划分成一个region,region的大小是可以配置的,一般是10G左右,当超过了这个大小后,一个region就会被分裂成两个region。\n[0083] 用户需要删除用户数据时,可以通过客户端发送数据删除指令到数据服务器,向数据服务器请求删除用户数据,该数据删除指令中包括关键字范围。\n[0084] 例如:用户数据在mykey_前缀开头的这几个region中,key的范围是mykey_1到mykey_200,则用户要删除这些用户数据时,用户发送的数据删除指令中包括的关键字(key)的范围是mykey_1到mykey_200;其中,起始关键字为mykey_1,结束关键字为mykey_\n200。如果要删除mykey开头的所有数据也可以在数据删除指令中包括mykey_*来表示关键字范围为mykey开头的关键字。\n[0085] 步骤S202:数据服务器接收用户发送的数据删除指令。\n[0086] 数据服务器接收用户发送的数据删除指令,从数据删除指令中解析出其中包括的关键字范围。\n[0087] 沿用上边的例子,从接收到的数据删除指令中解析出key的范围mykey_1到mykey_\n200。\n[0088] 步骤S203:根据数据删除指令中包括的关键字范围,确定待删除的用户数据的起始关键字和结束关键字。\n[0089] 沿用上边的例子,根据key的范围mykey_1到mykey_200,确定出起始关键字为mykey_1,结束关键字为mykey_200。\n[0090] 步骤S204:依次查询root表、meta表,确定待删除的用户数据的起始关键字和结束关键字所在的meta表。\n[0091] 根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定起始关键字和结束关键字所在的业务表。其中用户标识信息即为上述的key的前缀和关键字值为前缀后边的数字。\n[0092] 客户端首先通过配置文件中定义的分布式一致(zookeeper)系统集群地址和端口,找到zookeeper节点下一个指定的节点,比如/hbase/root-regionserver,这个节点就保存了root表在那个具体的物理机器(比如数据服务器)上。之后客户端去连接root表所在的物理机器,这时假设用户需要查询kvdb表,mykey_199这个key。然后就通过root表找到meta表对应的region。Root表中的key一般如下表1所示:\n[0093] 表1\n[0094]\n.META.,, \n.META.,hello-aaa_100 machineA:61230\n.META.,kvdb-bbb_100, machineB:61230\n.META.,kvdb-zzz_900, machineC:61230\n[0095] .META.是meta表的表名,之后是key的字典排序,这个key是这个region中的第一个key。根据需要查询的表为kvdb表,key是key199,在PaaS中用户都是共享一个hbase的,按照不同的随机前缀来区分用户,这些前缀对于用户来说是不可知的。那么按照规则应该去第三个存储区域(.META.,kvdb-bbb_100对应的region)上去找,第三个region对应的物理机器及端口是machineB:61230,所以接下来去机器B上的61230端口上去查找,然后查询的就是meta表了。\n[0096] 沿用上边例子,查询root表、meta表,确定待删除的用户数据的起始关键字为mykey_1,结束关键字为mykey_200所在的meta表分别为kvdb对应的mate表,如表1中的.META.,kvdb-bbb_100,这个meta表。\n[0097] 步骤S205:根据确定出的起始关键字和结束关键字,查找确定出的meta表所对应的业务表,确定起始关键字和结束关键字所在的业务表。\n[0098] 确定起始关键字所在业务表、结束关键字所在的业务表、以及起始关键字所在业务表和结束关键字所在的业务表之间的业务表为待删除的用户数据的存储区域。\n[0099] Meta表中的信息如下表2所示:\n[0100] 表2\n[0101]\n[0102] 假设要查key是mykey_199,根meta表的起始关键字(startkey)和结束关键字(endkey)的范围就找到了kvdb,mykey_100这个meta表中有这个key,这个key就指明了需要查寻的key在哪个机器的哪个region中,这里的value说明了是在机器G上,最后去机器G上的kvdb表就可以查询到这个key了。\n[0103] 从这里可以看到meta表在整个查询中起了很关键的作用,如果某个key没有出现在meta中,比如kvdb,xxx_100这个key在上面的列表中就没有,那么最终客户端就查不到这个key了。\n[0104] 沿用上边的例子,如表2所示,根据起始关键字和删除结束关键字对应的meta表,进一步确定起始关键字和删除结束关键字所在的业务表分别为kvdb,hhh_222和kvdb,mykey_200这两个业务表。\n[0105] 要删除mykey_这个前缀的所有数据,而mykey对应了下面几个region:kvdb,hhh_\n222,kvdb,mykey_20,kvdb,mykey_100,kvdb,mykey_200。\n[0106] 步骤S203-步骤S205实现了根据数据删除指令中包括的关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域。通过root表、meta表、业务表,就可以定位出这个用户的起始key和结束key在哪些region中。这个定位过程是一个常数时间,最多几秒中的时间,这样通过两次定位:一次定位起始key,一次定位结束key,就确定了这个用户的数据范围了。\n[0107] 步骤S206:对起始关键字和结束关键字所在的业务表,遍历起始关键字和结束关键字所在的业务表中的用户数据文件。\n[0108] 图4是存储区域中的用户数据文件示例图,一个region里面包含一个或者多个用户数据文件(HFile),数量的上限是在配置文件中定义的。如图4所示,以region A为例,其中包括HFileA、HFileB、HFileC、HFileD、……、等用户数据文件。通常HFile的数量上限默认是7个(这是一个可配置的值),当超过这个数量后就会触发一次文件合并,会有一个后台线程将这些用户数据文件挨个读出然后合并成一个大的用户数据文件,再将之前的几个小的用户数据文件删除。\n[0109] 每个HFile文件内部的数据都是按照字典排列的,文件和文件之间并没有任何关系。用户在插入或者更新数据时,会先将这些操作写入到缓存中,等缓存满了就会刷新到磁盘上(一般是写入到hadoop中),所以有几次刷新操作就会出现几个HFile。当确定了某个key,比如mykey_199这个key落在某个region中,那么系统就会挨个的去遍历这些HFile直到找到为止,所以region中的HFile越多就会影响性能,因为要多打开和遍历文件。于是就需要合并操作。\n[0110] 如果需要处理的region数量大于等于3个的时候,中间那些region就不需要特殊处理,这是因为所有的region也都是按照字典排序的,因为要获取用户数据的用户的key前缀是bbb_开头的,如果另外一个用户的key前缀是bba_,或者是bbc_那么一定会排在这个用户之前或者之后,不会出现在bbb_100和bbb_200这样的key中间。因此,确定出kvdb,hhh_\n222,kvdb,mykey_20,kvdb,mykey_100,kvdb,mykey_200这些业务表后,只需要对两端的两个业务表单独进行处理,中间的几个业务表中的HFile直接进行删除即可。\n[0111] 对于kvdb,hhh_222和kvdb,mykey_200这两个region单独进行处理,因为这两个region下的HFile包含了其他用户的数据,所以需要过滤一遍。\n[0112] 步骤S207:根据用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是关键字范围内的关键字。\n[0113] 沿用上边的例子,对于kvdb,hhh_222这个region依次遍历其下的所有HFile,然后读出关键字中包括的前缀和关键字值,判断key是否是mykey_开头的,关键字值是否落在关键字范围内。对于kvdb,mykey_200这个region也是如此。\n[0114] 优选的,假设先操作kvdb,hhh_222这个业务表,首先将这个业务表标记为split,这个是hbase自己的一个操作,意思是一个region太大了会分裂成多个,在分裂期间不会接收新来的请求,客户端已有的缓存链接请求也会失效。\n[0115] 步骤S208:当判断为是时,认为该用户数据为关键字匹配的用户数据。\n[0116] 沿用上边的例子,对于关键字在mykey_1至mykey_200范围内的用户数据,认为是关键字匹配的用户数据。\n[0117] 当mykey_199这个region中的所有HFile都遍历完并处理好之后,mykey_199这个region中的mykey_开头的前缀key就处理完了。对于kvdb,mykey_200这个region也是如此。\n当全部处理完后,就处理完了这个用户在这两个region中的所有数据了。\n[0118] 步骤S206-步骤S208实现了对起始关键字和结束关键字所在的存储区域,根据关键字范围对其中存储的用户数据进行关键字匹配判断。\n[0119] 步骤S209:将关键字匹配的用户数据删除。\n[0120] 对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。\n[0121] 优选的,确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离split状态;以及将关键字匹配的用户数据删除,删除split状态。\n[0122] 沿用上边的例子,读取这个region下的所有HFile,一个一个的遍历,也就是图4中的HFileA、HFileB、HFileC、HFileD、……、等用户数据文件。\n[0123] 例如:对于用户数据文件HFileA,当读取这些用户数据文件的时候,如果发现有key的前缀是mykey_则忽略,不是mykey则将数据读取出来,读取完一个HFile之后就保存为一个新文件A’,并删除之前的文件A。在读取的过程中增加一个变量X用来记录当前文件中最大的key。\n[0124] 按照相同的方式处理HFileB、HFileC、HFileD、……等几个用户数据文件,同时若遍历的用户数据文件中的某个key大于X就重新记录这个key。当这些用户数据文件都遍历过并重新删除掉以前的用户数据文件后,mykey_这个key开头的key在这些HFile中就不存在了。最后更新meta表中的kvdb,hhh_222这个key将endkey设置为变量X记录的那个key。然后将split状态删除。在执行这个操作的时候会影响这个region上非mykey开头的用户的读写,不过split状态的时间很短,也就几秒种的时间,而且只影响一个region所以不会有什么问题。\n[0125] 之后以同样的方式处理kvdb,mykey_200这个业务表,也是标记为split状态,然后读取里面的所有HFile,忽略mykey开头的key并重新保存并删除之前的HFile,同时也增加一个X用来保存最小的key。最后执行完成之后更新meta表将这个key中的startkey重新设置为变量X中保存的值。\n[0126] 步骤S210:对处于起始关键字和结束关键字所在的业务表之间的业务表,将其中的用户数据删除。\n[0127] 沿用上边的例子,直接将中间几个业务表kvdb,mykey_20,kvdb,mykey_100这几个region下的HFile直接删除即可。\n[0128] 将这几个业务表表中的key标记为正在删除状态,这样客户端的新请求来查询、或读取数据时,就会忽略这几个key对应的业务表了,之后将这些region下的所有HFile都删除掉。最后删除这几个key对应的业务表中的数据后,如果某些key出现在了root表中还需要更新root表。\n[0129] 一般来说hbase是搭建在hadoop之上的,那么调用hadoop的API删除这几个用户数据文件即可,之后再删除这个region。最后将meta表中的那几个key也删除了,这样mykey_中就瞬间被删除了大部分数据了。\n[0130] 执行完上面的流程步骤之后,整个用户数据删除操作的过程就完成了。上述方法采用了一个更新meta表的方式,可以做到无论数据量多大都能在很短的时间内完成全部删除,从磁盘或者hadoop上真正清空数据。不像现有技术中那样只是先标记删除,而后还需要很长的时间处理才能真正删除。\n[0131] 在删除的过程中,如果客户端保持了对这些物理机器的缓存链接,那么在删除的过程中如果出现查询或者更新操作,就会失败。但是这并没有关系,因为清空的是mykey_一个用户的数据而不是其他人的,所以只影响mykey_所属的用户。而且清空操作都是用户主动发起的,所以不会有影响。\n[0132] 基于同一发明构思,本发明实施例还提供一种PaaS系统中hbase数据删除装置,该装置可以设置在现有的数据服务器中,也可以单独设置。该数据删除装置的结构如图5所示,包括:接收模块101、确定模块102和删除模块103。\n[0133] 接收模块101,用于接收用户发送的数据删除指令,其中,数据删除指令中包括关键字范围。\n[0134] 确定模块102,用于根据数据删除指令中包括的关键字范围,确定待删除的用户数据的起始关键字和结束关键字所在的存储区域。\n[0135] 删除模块103,用于对起始关键字和结束关键字所在的存储区域,根据关键字范围对其中存储的用户数据进行关键字匹配判断,将关键字匹配的用户数据删除;对处于起始关键字和结束关键字所在的存储区域之间的存储区域,将其中的用户数据删除。\n[0136] 优选的,上述接收模块101接收到的数据读取指令中包括的关键字范围通过起始关键字和结束关键字表征;或上述接收模块101接收到的数据读取指令中包括的关键字范围通过起始关键字和关键字的数量表征。\n[0137] 优选的,上述确定模块102,具体用于根据关键字范围,确定待删除的用户数据的起始关键字和结束关键字;依次查询root表、meta表,确定起始关键字和结束关键字所在的meta表;根据所述起始关键字和结束关键字,查找确定出的meta表所对应的业务表,确定所述起始关键字和结束关键字所在的业务表。\n[0138] 优选的,上述确定模块102,具体用于根据起始关键字中包括的用户标识信息和关键字值,以及结束关键字中包括的用户标识信息和关键字值,查询root表、meta表、以及确定出的meta表所对应的业务表,实现确定起始关键字和结束关键字所在的业务表。\n[0139] 优选的,上述删除模块103,具体用于遍历起始关键字和结束关键字所在的存储区域中的用户数据文件;根据用户数据文件中用户数据的关键字中包括的用户标识信息和关键字值,判断用户数据的关键字是否是所述关键字范围内的关键字,当判断为是时,认为该用户数据为关键字匹配的用户数据;\n[0140] 优选的,上述删除模块103,具体用于对起始关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的结束关键字;对结束关键字所在的存储区域,提取关键字不匹配的用户数据,存储为新的用户数据文件,并更新该存储区域的起始关键字。\n[0141] 优选的,上述删除模块103,还用于确定对起始关键字和结束关键字所在的存储区域之后,将起始关键字和结束关键字所在的存储区域标记为分离split状态;以及将关键字匹配的用户数据删除,删除split状态;其中,处于split状态的存储区域不允许其他用户读写数据。\n[0142] 本发明实施例提供的PaaS系统中hbase数据删除方法及装置,基于meta表来实现数据的快速删除,不需要逐条通过文件合并的方式实现删除,能够快速的删除想要删除的用户数据,即使需要删除的数据量增大时,仍然能以非常快的速度真正删除所有数据和文件,并且影响范围极小,大大减少了删除操作时间,提升了删除操作速度和效率。\n[0143] 本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrative logical block),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrative components),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。\n[0144] 本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。\n[0145] 本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。\n[0146] 在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。\n[0147] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2019-03-26
- 2016-06-22
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201511029045.2
申请日: 2015.12.31
- 2016-05-25
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-11-20
|
2013-08-15
| | |
2
| |
2013-11-27
|
2013-07-26
| | |
3
| |
2011-09-21
|
2010-03-01
| | |
4
| |
2014-07-23
|
2014-04-12
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |