CN104809170B - 一种云环境下面向树型数据的存储方法 - Google Patents
一种云环境下面向树型数据的存储方法 Download PDFInfo
- Publication number
- CN104809170B CN104809170B CN201510164510.7A CN201510164510A CN104809170B CN 104809170 B CN104809170 B CN 104809170B CN 201510164510 A CN201510164510 A CN 201510164510A CN 104809170 B CN104809170 B CN 104809170B
- Authority
- CN
- China
- Prior art keywords
- node
- father
- information
- redirects
- redirected
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种云环境下面向树型数据的存储方法。该方法基于传统邻接表表示法存储树型数据,底层采用分布式列式数据库HBase,适用于云环境下大规模树型数据的高效存储。在时间上,该方法具有高效的数据管理性能,可以实现高效快速的数据查询、删除、更新等操作;在空间上,该方法比传统的邻接表表示法增加了少量的空间开销,但是随着树型数据的增加,增加的冗余信息空间开销会逐渐减少。
Description
技术领域
本发明涉及一种树型数据存储方法及其实现方法,属于云环境下大数据存储领域。
背景技术
近年来,伴随着互联网和移动互联网的高速发展,数据源快速增长,数据量也呈爆发式增长。据中国互联网络信息中心统计分析,截止2013年12月,中国网民规模达6.32亿,手机网民规模达5.27亿。互联网快速扩展到了生活中的各个方面,移动互联网、社交网络、电子商务等。随着互联网的发展,Google、阿里巴巴、腾讯等互联网公司每天都会产生大量的数据,使数据规模迅速达到PB级别,如何有效地对海量数据进行存储和管理成为了一个新的研究热点。
在当今互联网迅速发展的情况下,数据的存储和管理变得十分重要。网络中有很多数据是树型结构的,比如异构融合网络中的设备拓扑结构一般为树型结构,可以利用树型数据的特点对异构融合网络中的设备数据进行很好的分级别存储;又如互联网中很多网站推出云存储,用户通过浏览器或客户端访问存储在云端的数据,从而实现数据文件在多平台和多终端间共享,而文件存储结构为树型结构;再如社交网络中每个用户都有通讯录,当用户量非常大的时候,所有的通讯录数据信息将会非常大,并且每时每刻都有很多人在更新自己的通讯录,这些需求给通讯录的存储提出了很高的要求,而通讯录本身也是树型结构的。
树是一种非常重要的非线性数据结构,是由根结点和若干棵子树构成的。在树型数据中,根结点有且只有一个,除了根结点,每个结点都有一个前驱结点,每个结点都可以有一个或多个后继结点。正因为树的这种特点,树型数据可以很好的表示层次关系。树型数据的应用在社会生活中广泛存在,例如区域划分、部门组织架构、数据分类等信息都可以用树来表示。
在邻接表表示法中,数据结点中包含多个指针域,分别指向其子树的根,另外可以增加一个域存储父结点信息。一般有两种结构,一种是结点同构,即结点的子结点个数相同;一种是结点异构,即结点的子结点个数不相同。这种存储方法,可以很简单的找到结点的父结点,并且可以很简单的找到一个结点的所有子结点,缺点是存储空间有冗余。
发明内容
技术问题:本发明方法利用HBase分布式列式数据库,在传统邻接表表示法的基础上通过增加少量的冗余信息实现了海量树型数据的高效存储和管理。在时间上,该方法具有高效的数据管理性能,可以实现高效快速的数据查询、删除、更新等操作;在空间上,该方法比传统的邻接表表示法增加了少量的空间开销,但是随着树型数据的增加,增加的冗余信息空间开销会逐渐减少。
技术方案:本发明的云环境下面向树型数据存储的管理操作:
1、数据增加操作:
Step 1:初始化数据结点;如果,插入的结点在HBase表中已存在则跳转Step13,否则跳转Step 2;
Step 2:如果father是“0”,跳转Step 4,否则跳转Step 3;
Step 3:如果father信息对应的父结点在表中不存在的话,则跳转Step 13,否则跳转Step 4;
Step 4:向HBase数据表中插入结点信息,如果成功则跳转Step 5,否则跳转Step4;
Step 5:如果father是“0”,则跳转Step 12,否则跳转Step 6;
Step 6:查询父结点信息,信息存储在数据结构实例(fatherTreeInfoDto)中,如果父结点的TreeNum为0,则跳转Step 7,否则跳转Step 10;
Step 7:如果fatherTreeInfoDto.father为0,则跳转Step 8,否则跳转Step 9;
Step 8:设置父结点的fatherTreeInfoDto,treeNum为1,subTreeString为插入结点的rowkey,preFatherNum为“1”,preFatherString为“0”,跳转Step 11;
Step 9:查询祖父结点的信息存储在数据结构实例(grandFatherTreeInfoDto)中,设置父结点的fatherTreeInfoDto,treeNum为1,subTreeString为插入结点的rowkey,preFatherNum为grandFatherTreeInfoDto.preFatherNum+1,preFatherStrin为grandFatherTreeInfoDto.preFatherString+“_”+fatherTreeInfoDto.father,跳转Step11;
Step 10:设置父结点的fatherTreeInfoDto中,treeNum为treeNum+1,subTreeString为subTreeString+“_”+rowkey,跳转Step 11;
Step 11:更新父结点信息,更新成功跳转Step 12,否则跳转Step 11;
Step 12:插入结点成功;
Step 13:插入结点失败,打印信息。
2、数据删除操作:
Step 1:输入所要删除的结点rowkey;
Step 2:如果删除结点存在,则跳转Step 3,否则跳转Step 10;
Step 3:构造一个队列,把所要删除的结点放入队列中,并查询获得删除结点的father信息;
Step 4:如果队列不为空,则跳转Step 5,否则跳转Step 7;
Step 5:从队列头获得一个元素,并在队列中删除此元素,查询这个元素的所有子结点,如果有则存入队列;
Step 6:删除获取的元素所对应的结点数据信息,跳转Step 4;
Step 7:如果删除结点的father为“0”,则跳转Step 9,否则跳转Step 8;
Step 8:更新父结点的subTreeNum信息和subTreeString信息;
Step 9:删除结点成功;
Step 10:删除结点失败,打印错误信息。
3、数据查询操作
本方法吸取了父亲表示法和邻接表表示法的优点,可以很便捷的提供树型数据常用的信息,而无需递归查找,节约了时间。数据存储结构支持的快速查询信息如下:
(1)给定一个结点,可以查询该结点的直连子结点;
(2)给定一个结点,可以查询该结点的父亲结点信息;
(3)给定一个结点,可以查询该结点的所有子结点,包括直连和不直连;
(4)给定一个结点,可以查询到该结点的族谱信息;
(5)给定两个结点,可以查询这两个结点有无从属关系(即一个结点是否可以向上溯源找到另一个结点)。
有益效果:
本发明底层存储采用分布式数据库HBase,基于传统的邻接表表示法存储树型数据,通过增加少于5%的冗余信息实现云环境下海量树型数据的高效存储管理。
附图说明
图1是本发明的树型数据存储结构。
图2是本发明的行数据结构。
图3是本发明的数据增加算法流程图。
图4是本发明的数据删除算法流程图。
具体实施方式
下面结合图1与具体实施方式对本发明作进一步详细描述。
考虑到HBase系统稀疏性和传统邻接表表示法的特点,本发明提出:在传统邻接表表示法的基础上将子树合并成一个字符串(subTree字段)进行存储,同时增加父结点字段(father字段)、族谱长度字段(preFatherNum字段)和族谱字段(preFather字段)。
设计思想:subTree字段的设计可以使结点信息的存储更加直观且更方便程序实现。father字段的设计可以使结点直接获得父结点信息,方便直接查找父结点信息的应用。preFatherNum字段的设计是为了对族谱字段的进行简单校验。preFather字段的设计可以通过一次查询而获得结点的族谱信息,避免了递归查询的低效性。考虑到实际运用中,树型数据会大量存在叶子结点,且叶子结点数量远远大于非叶子结点数量,因此本方法在叶子结点中不存储preFatherNum和preFather信息。当需要查询叶子结点的族谱信息时,通过查询叶子结点父结点的族谱信息即可获得叶子结点的族谱信息。
以图1所示的树型数据为例,本发明设计的树型数据在HBase中的存储结构如表1所示。
表1 存储结构
在存储算法中,插入数据以行为单位,数据结构图2所示。存储算法输入数据的关键信息仅需结点的rowkey和father信息。执行存储算法之前需要对结点数据结构进行初始化操作:
(1)rowkey设置为结点rowkey;
(2)father设置为结点父结点rowkey;
(3)treeNum设置为0;
(4)subTree设置为空list;
(5)subTreeString设置为空字符串;
(6)preFatherNum设置为0;
(7)preFather设置为空list;
(8)preFatherString设置为空字符串;
(9)value设置为结点描述信息。
本发明的数据增加算法的流程图如图3所示,其具体步骤如下:
Step 1:初始化数据结点;如果,插入的结点在HBase表中已存在则跳转Step13,否则跳转Step 2;
Step 2:如果father是“0”,跳转Step 4,否则跳转Step 3;
Step 3:如果father信息对应的父结点在表中不存在的话,则跳转Step 13,否则跳转Step 4;
Step 4:向HBase数据表中插入结点信息,如果成功则跳转Step 5,否则跳转Step4;
Step 5:如果father是“0”,则跳转Step 12,否则跳转Step 6;
Step 6:查询父结点信息,信息存储在数据结构实例(fatherTreeInfoDto)中,如果父结点的TreeNum为0,则跳转Step 7,否则跳转Step 10;
Step 7:如果fatherTreeInfoDto.father为0,则跳转Step 8,否则跳转Step 9;
Step 8:设置父结点的fatherTreeInfoDto,treeNum为1,subTreeString为插入结点的rowkey,preFatherNum为“1”,preFatherString为“0”,跳转Step 11;
Step 9:查询祖父结点的信息存储在数据结构实例(grandFatherTreeInfoDto)中,设置父结点的fatherTreeInfoDto,treeNum为1,subTreeString为插入结点的rowkey,preFatherNum为grandFatherTreeInfoDto.preFatherNum+1,preFatherStrin为grandFatherTreeInfoDto.preFatherString+“_”+fatherTreeInfoDto.father,跳转Step11;
Step 10:设置父结点的fatherTreeInfoDto中,treeNum为treeNum+1,subTreeString为subTreeString+“_”+rowkey,跳转Step 11;
Step 11:更新父结点信息,更新成功跳转Step 12,否则跳转Step 11;
Step 12:插入结点成功;
Step 13:插入结点失败,打印信息。
本发明的数据删除算法流程图如图4所示,其具体步骤如下:
Step 1:输入所要删除的结点rowkey;
Step 2:如果删除结点存在,则跳转Step 3,否则跳转Step 10;
Step 3:构造一个队列,把所要删除的结点放入队列中,并查询获得删除结点的father信息;
Step 4:如果队列不为空,则跳转Step 5,否则跳转Step 7;
Step 5:从队列头获得一个元素,并在队列中删除此元素,查询这个元素的所有子结点,如果有则存入队列;
Step 6:删除获取的元素所对应的结点数据信息,跳转Step 4;
Step 7:如果删除结点的father为“0”,则跳转Step 9,否则跳转Step 8;
Step 8:更新父结点的subTreeNum信息和subTreeString信息;
Step 9:删除结点成功;
Step 10:删除结点失败,打印错误信息。
4、查询操作
本发明的数据快速查询信息如下:
(1)给定一个结点,可以查询该结点的直连子结点;
(2)给定一个结点,可以查询该结点的父亲结点信息;
(3)给定一个结点,可以查询该结点的所有子结点,包括直连和不直连;
(4)给定一个结点,可以查询到该结点的族谱信息;
(5)给定两个结点,可以查询这两个结点有无从属关系(即一个结点是否可以向上溯源找到另一个结点)。
Claims (1)
1.一种云环境下面向树型数据的存储方法,其特征在于,有如下步骤:
1.树型数据增加操作:
Step 1:初始化数据结点;如果,插入的结点在HBase表中已存在则跳转Step 13,否则跳转Step 2;
Step 2:如果father是“0”,跳转Step 4,否则跳转Step 3;
Step 3:如果father信息对应的父结点在表中不存在的话,则跳转Step 13,否则跳转Step 4;
Step 4:向HBase数据表中插入结点信息,如果成功则跳转Step 5,否则跳转Step 4;
Step 5:如果father是“0”,则跳转Step 12,否则跳转Step 6;
Step 6:查询父结点信息,信息存储在数据结构实例fatherTreeInfoDto中,如果父结点的TreeNum为0,则跳转Step 7,否则跳转Step 10;
Step 7:如果fatherTreeInfoDto.father为0,则跳转Step 8,否则跳转Step 9;
Step 8:设置父结点的fatherTreeInfoDto.treeNum为1,subTreeString为插入结点的rowkey,preFatherNum为“1”,preFatherString为“0”,跳转Step 11;
Step 9:查询祖父结点的信息存储在数据结构实例grandFatherTreeInfoDto中,设置父结点的fatherTreeInfoDto,treeNum为1,subTreeString为插入结点的rowkey,preFatherNum为grandFatherTreeInfoDto.preFatherNum+1,preFatherStrin为grandFatherTreeInfoDto.preFatherString+“_”+fatherTreeInfoDto.father,跳转Step11;
Step 10:设置父结点的fatherTreeInfoDto中,treeNum为treeNum+1,subTreeString为subTreeString+“_”+rowkey,跳转Step 11;
Step 11:更新父结点信息,更新成功跳转Step 12,否则跳转Step 11;
Step 12:插入结点成功;
Step 13:插入结点失败,打印信息;
2.树型数据删除操作:
Step 1:输入所要删除的结点rowkey;
Step 2:如果删除结点存在,则跳转Step 3,否则跳转Step 10;
Step 3:构造一个队列,把所要删除的结点放入队列中,并查询获得删除结点的father信息;
Step 4:如果队列不为空,则跳转Step 5,否则跳转Step 7;
Step 5:从队列头获得一个元素,并在队列中删除此元素,查询这个元素的所有子结点,如果有则存入队列;
Step 6:删除获取的元素所对应的结点数据信息,跳转Step 4;
Step 7:如果删除结点的father为“0”,则跳转Step 9,否则跳转Step 8;
Step 8:更新父结点的subTreeNum信息和subTreeString信息;
Step 9:删除结点成功;
Step 10:删除结点失败,打印错误信息;
3、数据查询操作
(1)给定一个结点,可以查询该结点的直连子结点;
(2)给定一个结点,可以查询该结点的父亲结点信息;
(3)给定一个结点,可以查询该结点的所有子结点,包括直连和不直连;
(4)给定一个结点,可以查询到该结点的族谱信息;
(5)给定两个结点,可以查询这两个结点有无从属关系即一个结点是否可以向上溯源找到另一个结点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510164510.7A CN104809170B (zh) | 2015-04-08 | 2015-04-08 | 一种云环境下面向树型数据的存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510164510.7A CN104809170B (zh) | 2015-04-08 | 2015-04-08 | 一种云环境下面向树型数据的存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104809170A CN104809170A (zh) | 2015-07-29 |
CN104809170B true CN104809170B (zh) | 2018-06-01 |
Family
ID=53693992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510164510.7A Active CN104809170B (zh) | 2015-04-08 | 2015-04-08 | 一种云环境下面向树型数据的存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104809170B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107133247A (zh) * | 2016-02-29 | 2017-09-05 | 阿里巴巴集团控股有限公司 | 一种信息查询方法及装置 |
CN107231394B (zh) * | 2016-03-25 | 2020-08-11 | 阿里巴巴集团控股有限公司 | 一种数据源地址分发树的构造方法和用于复制数据的方法 |
CN106446086A (zh) * | 2016-09-09 | 2017-02-22 | 中国南方电网有限责任公司电网技术研究中心 | 用于云计算环境的树结构操作方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345508A (zh) * | 2013-07-04 | 2013-10-09 | 北京大学 | 一种适用于社会网络图的数据存储方法及系统 |
CN103390038A (zh) * | 2013-07-16 | 2013-11-13 | 西安交通大学 | 一种基于HBase的构建和检索增量索引的方法 |
CN104216962A (zh) * | 2014-08-22 | 2014-12-17 | 南京邮电大学 | 一种基于HBase的海量网管数据索引设计方法 |
CN104268709A (zh) * | 2014-10-10 | 2015-01-07 | 浪潮集团有限公司 | 一种采用分布式lsm树的rfid系统设计方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7505960B2 (en) * | 2005-11-15 | 2009-03-17 | Microsoft Corporation | Scalable retrieval of data entries using an array index or a secondary key |
-
2015
- 2015-04-08 CN CN201510164510.7A patent/CN104809170B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345508A (zh) * | 2013-07-04 | 2013-10-09 | 北京大学 | 一种适用于社会网络图的数据存储方法及系统 |
CN103390038A (zh) * | 2013-07-16 | 2013-11-13 | 西安交通大学 | 一种基于HBase的构建和检索增量索引的方法 |
CN104216962A (zh) * | 2014-08-22 | 2014-12-17 | 南京邮电大学 | 一种基于HBase的海量网管数据索引设计方法 |
CN104268709A (zh) * | 2014-10-10 | 2015-01-07 | 浪潮集团有限公司 | 一种采用分布式lsm树的rfid系统设计方法 |
Non-Patent Citations (2)
Title |
---|
Heterogeneous network data acquisition and storage solution in cloud environment;Chunshao Ren;《Proceedings of the 2014 5th International Conference of Environmental Science and Information Application Technology》;20141108;213-217 * |
一种基于HBase的高效空间关键字查询策略;张榆 等;《小型微型计算机系统》;20121015;第33卷(第10期);2142-2146 * |
Also Published As
Publication number | Publication date |
---|---|
CN104809170A (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104281701B (zh) | 分布式多尺度空间数据查询方法及系统 | |
CN105138592A (zh) | 一种基于分布式架构的日志数据存储和检索方法 | |
CN105808696B (zh) | 一种基于全局和局部特征的跨在线社交网络用户匹配方法 | |
CN104239511B (zh) | 一种面向MongoDB的用户空间文件系统实现方法 | |
US20180089243A1 (en) | Bloom filter index for device discovery | |
US8015195B2 (en) | Modifying entry names in directory server | |
CN106407303A (zh) | 数据存储、查询方法及装置 | |
TWI652586B (zh) | 基於社交網路的群組查找方法和裝置 | |
CN104809170B (zh) | 一种云环境下面向树型数据的存储方法 | |
CN101222391B (zh) | 一种在服务器/客户端结构中构造拓扑树的方法 | |
KR101790766B1 (ko) | 데이터의 검색 방법, 장치 및 단말기 | |
CN108197313B (zh) | 通过16位Trie树实现空间优化的词典索引方法 | |
JP2023524475A (ja) | ファイル・システム・ディレクトリ・ツリーまたはオブジェクト格納バケットに基づくカスタム・メタデータ・タグ継承 | |
US8438166B1 (en) | Pre-computed search results | |
CN110413711A (zh) | 一种差异数据获取方法及其存储介质 | |
CN108984626B (zh) | 一种数据处理方法、装置及服务器 | |
CN104765868A (zh) | 一种用于数据查询的页面显示方法 | |
CN106131115A (zh) | 基于云端通讯录的通讯录数据自动发布和更新系统 | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
CN105357105B (zh) | 一种提升会话速度的装置和方法 | |
CN103064872B (zh) | 使用数据结构处理搜索查询 | |
CN106547843B (zh) | 多级分类查询方法和装置 | |
US20140067840A1 (en) | System and method for retrieving information | |
CN107169128A (zh) | 一种给通用数据模型绑定地理位置信息的方法 | |
JP5068350B2 (ja) | データ処理装置、方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |