CN103617232B - 一种针对HBase表的分页查询方法 - Google Patents

一种针对HBase表的分页查询方法 Download PDF

Info

Publication number
CN103617232B
CN103617232B CN201310611079.7A CN201310611079A CN103617232B CN 103617232 B CN103617232 B CN 103617232B CN 201310611079 A CN201310611079 A CN 201310611079A CN 103617232 B CN103617232 B CN 103617232B
Authority
CN
China
Prior art keywords
data
row
key
page
concordance list
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
Application number
CN201310611079.7A
Other languages
English (en)
Other versions
CN103617232A (zh
Inventor
唐平
周建军
马盼盼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201310611079.7A priority Critical patent/CN103617232B/zh
Publication of CN103617232A publication Critical patent/CN103617232A/zh
Application granted granted Critical
Publication of CN103617232B publication Critical patent/CN103617232B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种针对Hbase数据库的分页查询方法,包括:1)对Hbase表的每行数据进行顺序编号,从而每行数据具有序号;2)将该行数据的序号与键RowKey对应顺序地存储至一索引表;3)分页查询时,根据所查询的页码和每页的数据行数,确定序号范围;以及4)从所述索引表,根据所述序号范围,获得要查询的键RowKey的集合,根据所述集合中的键RowKey来查询所述Hbase表。本发明实现了HBase表数据的分页查询功能,解决了页面跳转的效率低下的问题。

Description

一种针对HBase表的分页查询方法
技术领域
本发明涉及数据库表领域,更具体地,涉及一种针对HBase表的分页查询方法。
背景技术
Hbase是一个分布式的、面向列的开源数据库,HBase以表的形式存储数据,表有行和列组成,列划分为若干个列族(Column family)。可以将Hbase想象为一个很大的图(Map),里面可以存储数亿条的key value键值对。Hbase表结构如下表所示:
其中列族可以有1到多个,每个列族下可以有1到多个列。
Rowkey是用来检索Hbase的主键。Rowkey可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes)。存储时,数据按照Rowkey的字典序(byte order)排序存储。当前,访问Hbase中的行,只有三种方式:1、通过单个Rowkey访问;2、通过Rowkey的范围;3、全表扫描。
HBase表的特点包括:大,一个表可以有上亿行,上百万列;面向列,面向列(族)的存储和权限控制,列(族)独立检索。
在一些Hbase的应用场景下,需要用到分页查询数据,即将HBase表中的数据取出来,按页显示,并且要实现从某一页到指定页的跳转,以及上下页的翻转。但是当前只能按照key来取value,虽然可以通过key的范围来查询数据,可是在分页查询的时候并不知道有哪些key在数据表中。
因此,当前针对Hbase表的分页查询方法是非常低效的。
发明内容
针对现有技术的问题,本发明提出一种针对HBase表的分页查询方法,所述方法包括:1)对Hbase表的每行数据进行顺序编号,从而每行数据具有序号;2)将该行数据的序号与键RowKey对应顺序地存储至一索引表;3)分页查询时,根据所查询的页码和每页的数据行数,确定序号范围;以及4)从所述索引表,根据所述序号范围,获得要查询的键RowKey的集合,根据所述集合中的键RowKey来查询所述Hbase表。
有利地,在步骤2)中,所述索引表的序号是原子递增的。
有利地,在步骤2)中,在所述索引表中,所述序号为该索引表的键,所述键RowKey为该序号所对应的值。
有利地,所述索引表为Hbase表,所述索引表的第一行记录中的键值为0,该第一行记录的列值为所述索引表的记录条数。
有利地,所述针对Hbase表的分页查询方法,还包括:5)当所述Hbase表中新增一行数据时,所述索引表的第一行记录中的列值原子递增;6)在所述索引表中增加一条新记录,该新记录的键为原子递增后的序号,该新记录的列值为所述数据表中的新增数据的RowKey。
有利地,在步骤3),所述序号范围由起始行startRow和结束行endRow确定,
startRow=(pageIndex-1)*pageSize+1;
endRow=pageIndex*pageSize;
其中,pageIndex为要查询的页码,pageSize为每页的数据行数。
有利地,所述针对Hbase表的分页查询方法,还包括:7)在查询完一页后,根据新页码重新设置pageIndex,从而计算新页码的起始行startRow和结束行endRow,而进行分页查询。本发明实现了HBase表数据的分页查询功能,原HBase中未实现分页查询功能。
本发明解决了页面跳转的效率低下的问题,即从某页跳转到指定页,其效率和从上一页跳转到下一页的效率无差别。
本发明解决了查询hbase表中的数据总条数过慢的效率问题,以及解决了查询总页数的效率问题,从而提高了数据统计的效率。
附图说明
图1为本发明的方法的一个实施例的流程图;
图2为图1所示的方法的示意图;
图3为本发明的方法的又一实施例的示意图;
图4为本发明的方法的效果示意图。
具体实施方式
在一个实施例中,假设当前Hbase数据库中有一张表Data,其数据量为5000万行。表Data的主键为RowKey。
先对表Data的每行数据作索引,即为每行数据顺序编上序号。
然后,将此序号和对应的记录的键(RowKey)存放在一张索引表Index中。所述序号作为索引表Index的键,该键的值为表Data中的该行数据的键RowKey。所述序号为原子递增的。优选地,索引表Index为Hbase表。
如图2所示,左侧为表Data,其中包括8行数据,每行数据具有其Rowkey值及其列值。右侧为本发明创建的表Data的索引表Index。索引表Index也对应具有8条记录。索引表Index的键为原子递增的编号,列值为表Data中的RowKey。
如果现在需要查表Data的第8页的数据,其中设定每页10行数据。那么该第8页对应的序号范围为71-80。根据该序号范围,到索引表Index表中查询编号为71到80的记录,那么就获得了10个键,而这10个键正是表Data中第8页的10行数据的10个RowKey。然后,通过这10个键再到表Data中去查询需要的数据。如此实现了对Hbase表的分页查询。
更一般地,在进行分页查询时,首先计算起始行startRow和结束行endRow。
startRow=(pageIndex-1)*pageSize+1;
endRow=pageIndex*pageSize。
然后,根据startRow和endRow从索引表Index中获得实际的RowKey(即表Data的该页数据的RowKey值)。最后,根据该RowKey值查询表Data,实现对表Data的分页查询。
本发明还可方便地实现多页的查询,也就是页码的跳转。针对的需求是要查询Hbase表的多页。无论这查询的页面是连续的还是不连续的,例如查询第8-10页的数据。或者例如查询第1、4、7页的数据。都可在查询完一页后,重新设置pageIndex而实现页码的跳转,检索出数据。
更进一步,当表Data中***一行数据时,需要在所述索引表中也顺序***一条新的记录,所述新的记录的键值为所述表Data中***的该行数据的RowKey。
优选地,索引表Index中的第一条记录的键为0,列值为该索引表的当前总记录数。这可以在O(1)时间复杂度内查询到一张表有多少行数据量。以及计算出分页时此表中的数据总共有多少页。
如图3所示,在图2所示的表Data中***一行数据时,该数据的RowKey为K9,列值为V9。索引表Index的第一条记录中的列值原子递增,更新为9。对应地,在索引表Index中增加一条新记录,该记录的键为序号原子递增,为9,其列值为该Data表中的新增行数据的RowKey“K9”。
本发明的方法实现了对HBase的分页查询,实现了页面的上下页翻转,以及指定页面的跳转,并且可以轻易的获取得到表中的数据量。其分页查询的效率时间复杂度为O(1),查询表的总数据量的时间复杂度为O(1)。
如果使用原生的HBase的scan方式进行分页查询,当查询第10页的数据时,需要把10页之前的数据也查出来并且丢弃,这个时间复杂度是根据数据量的多少线性递增的。用scan或者HBase的Coprocessor去查询数据表的总数据量也是线性递增的。可见,其效率低下。
对scan方式的一个改进是,scan后记录该页面的起始rowKey和终止rowKey,然后查询下一页的时候将终止rowKey作为下一页起始rowKey去查询页面大小的数据。但是这不能支持指定页面的跳转:即如果想从第1也跳转到第5页,这种方法就不能支持,因为只有第1页的start key和end key,不能确定第5页的start key。
所以用原生的HBase方式去做分页查询和查询数据量和本发明的方法相比,本发明提供的方法更加高效,其比较图如图4所示。可以看出,本发明的耗时随着数据量的增加,耗时基本没有变化。而通过现有技术的scan方式,耗时随着数据量的增加基本上呈线性递增。

Claims (1)

1.一种针对Hbase表的分页查询方法,其特征在于,包括:
1)对Hbase表的每行数据进行顺序编号,从而每行数据具有序号;
2)将每行数据的序号与键RowKey对应顺序地存储至一索引表;
3)分页查询时,根据所查询的页码和每页的数据行数,确定序号范围;以及
4)从所述索引表,根据所述序号范围,获得要查询的键RowKey的集合,根据所述集合中的键RowKey来查询所述Hbase表;
在步骤2)中,在所述索引表中,所述序号为该索引表的键,所述键RowKey为该序号所对应的值,所述键RowKey的类型为字符串类型,所述键RowKey为所述Hbase表的键;
在步骤3),所述序号范围由起始行startRow和结束行endRow确定,
startRow=(pageIndex-1)*pageSize+1;
endRow=pageIndex*pageSize;
其中,pageIndex为要查询的页码,pageSize为每页的数据行数;
所述针对Hbase表的分页查询方法还包括:7)在查询完一页后,根据新页码重新设置pageIndex,从而计算新页码的起始行startRow和结束行endRow,而进行分页查询;
所述索引表的第一行记录中的键值为0,该第一行记录的列值为所述索引表的记录条数;
所述针对Hbase表的分页查询方法还包括:5)当所述Hbase表中新增一行数据时,所述索引表的第一行记录中的列值原子递增;
6)在所述索引表中增加一条新记录,该新记录的键为原子递增后的序号,该新记录的列值为所述Hbase表中的新增数据的键RowKey。
CN201310611079.7A 2013-11-26 2013-11-26 一种针对HBase表的分页查询方法 Active CN103617232B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310611079.7A CN103617232B (zh) 2013-11-26 2013-11-26 一种针对HBase表的分页查询方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310611079.7A CN103617232B (zh) 2013-11-26 2013-11-26 一种针对HBase表的分页查询方法

Publications (2)

Publication Number Publication Date
CN103617232A CN103617232A (zh) 2014-03-05
CN103617232B true CN103617232B (zh) 2018-03-30

Family

ID=50167935

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310611079.7A Active CN103617232B (zh) 2013-11-26 2013-11-26 一种针对HBase表的分页查询方法

Country Status (1)

Country Link
CN (1) CN103617232B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108874897A (zh) * 2018-05-23 2018-11-23 新华三大数据技术有限公司 数据查询方法及装置

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104123340B (zh) * 2014-06-25 2018-04-20 世纪禾光科技发展(北京)有限公司 一种数据库分表分页查询方法及***
CN104092702B (zh) * 2014-07-22 2017-05-31 北京京东尚科信息技术有限公司 一种分布式***的网络安全验证方法和***
CN104361049A (zh) * 2014-10-29 2015-02-18 中国建设银行股份有限公司 一种快速展现数据库数据的方法和***
WO2016074370A1 (zh) * 2014-11-12 2016-05-19 华为技术有限公司 一种KeyValue数据库的数据表的更新方法与表数据更新装置
CN105989076B (zh) * 2015-02-10 2019-05-07 腾讯科技(深圳)有限公司 一种数据统计方法以及装置
CN104850627B (zh) * 2015-05-21 2018-06-15 北京京东尚科信息技术有限公司 进行分页展示的方法及装置
CN106326309B (zh) * 2015-07-03 2020-02-21 阿里巴巴集团控股有限公司 一种数据查询方法和装置
CN106445927A (zh) * 2015-08-04 2017-02-22 北京京东金融科技控股有限公司 数据分页查询方法及装置
CN105045932B (zh) * 2015-09-02 2018-11-13 南京邮电大学 一种基于降序存储的数据分页查询方法
CN106528573B (zh) * 2015-09-14 2019-08-20 北京国双科技有限公司 HBase数据库的数据查询方法和装置
CN105354256A (zh) * 2015-10-22 2016-02-24 浪潮电子信息产业股份有限公司 一种数据分页查询的方法及装置
CN105843956A (zh) * 2016-04-14 2016-08-10 北京搜狐新媒体信息技术有限公司 一种分页查询方法及***
CN106126731B (zh) * 2016-07-01 2020-02-14 百势软件(北京)有限公司 一种获取Elasticsearch分页数据的方法及装置
CN108090086B (zh) * 2016-11-21 2022-02-22 迈普通信技术股份有限公司 分页查询方法及装置
CN108228663A (zh) * 2016-12-21 2018-06-29 杭州海康威视数字技术股份有限公司 一种分页检索方法及装置
CN106874400A (zh) * 2017-01-16 2017-06-20 努比亚技术有限公司 一种数据处理方法及服务器
CN107103032B (zh) * 2017-03-21 2020-02-28 中国科学院计算机网络信息中心 一种分布式环境下避免全局排序的海量数据分页查询方法
CN107463677B (zh) * 2017-08-04 2020-12-11 网易(杭州)网络有限公司 图表绘制方法、***、介质和计算设备
CN108052521B (zh) * 2017-11-01 2022-04-22 平安科技(深圳)有限公司 协调数据显示方法、应用服务器及存储介质
CN107943981A (zh) * 2017-11-30 2018-04-20 努比亚技术有限公司 HBase行分页方法、服务器及计算机可读存储介质
CN109241050B (zh) * 2018-07-10 2021-08-27 创新先进技术有限公司 一种数据查询方法、装置及***、电子设备
CN109460404A (zh) * 2018-09-03 2019-03-12 中新网络信息安全股份有限公司 一种基于redis的高效Hbase分页查询方法
CN110990394B (zh) * 2018-09-28 2023-10-20 杭州海康威视数字技术股份有限公司 分布式面向列数据库表的行数统计方法、装置和存储介质
CN109241447A (zh) * 2018-10-29 2019-01-18 金蝶软件(中国)有限公司 一种查询单据数据的方法、终端以及服务器
CN110955680A (zh) * 2019-10-10 2020-04-03 珠海格力电器股份有限公司 一种基于HBase的数据分页查询方法
CN110825742B (zh) * 2019-10-31 2022-09-06 北京东方通科技股份有限公司 一种数据分页检索的方法、装置、电子设备及存储介质
CN110765158A (zh) * 2019-10-31 2020-02-07 北京明略软件***有限公司 分页查询方法、***和装置
CN111259062B (zh) * 2020-01-15 2023-08-01 山东省电子口岸有限公司 一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101533406A (zh) * 2009-04-10 2009-09-16 北京锐安科技有限公司 一种海量数据查询方法
CN101950297A (zh) * 2010-09-10 2011-01-19 北京大学 一种海量语义数据的存储和查询方法及装置
CN102521405A (zh) * 2011-12-26 2012-06-27 中国科学院计算技术研究所 支持高速加载的海量结构化数据存储、查询方法和***

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101533406A (zh) * 2009-04-10 2009-09-16 北京锐安科技有限公司 一种海量数据查询方法
CN101950297A (zh) * 2010-09-10 2011-01-19 北京大学 一种海量语义数据的存储和查询方法及装置
CN102521405A (zh) * 2011-12-26 2012-06-27 中国科学院计算技术研究所 支持高速加载的海量结构化数据存储、查询方法和***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
海量数据的快速查询算法研究;曾雪;《中国优秀硕士学位论文全文数据库》;20120615(第6期);第4-6页 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108874897A (zh) * 2018-05-23 2018-11-23 新华三大数据技术有限公司 数据查询方法及装置
CN108874897B (zh) * 2018-05-23 2019-09-13 新华三大数据技术有限公司 数据查询方法及装置

Also Published As

Publication number Publication date
CN103617232A (zh) 2014-03-05

Similar Documents

Publication Publication Date Title
CN103617232B (zh) 一种针对HBase表的分页查询方法
CN103366015B (zh) 一种基于Hadoop的OLAP数据存储与查询方法
CN103714145B (zh) 关系型和Key-Value型数据库空间数据索引方法
CN107220285A (zh) 面向海量轨迹点数据的时空索引构建方法
CN106777163A (zh) 基于红黑树的ip地址所属地查询方法及***
CN106599052B (zh) 一种基于Apache Kylin的数据查询***及其方法
CN109471905A (zh) 一种支持时间范围和属性范围复合查询的区块链索引方法
US8583655B2 (en) Using an inverted index to produce an answer to a query
CN103914483B (zh) 文件存储方法、装置及文件读取方法、装置
CN103488727B (zh) 基于周期对数的二维时序数据存储和查询方法
US20160342667A1 (en) Managing database with counting bloom filters
CN106503223A (zh) 一种结合位置和关键词信息的在线房源搜索方法及装置
CN104408128B (zh) 一种基于b+树异步更新索引的读优化方法
CN108171071A (zh) 一种面向云计算的多关键字可排序密文检索方法
CN108009265A (zh) 一种云计算环境下的空间数据索引方法
CN106777387A (zh) 一种基于HBase的物联网大数据存取方法
CN106874501A (zh) 一种SpreadJS表格自动生成并绑定数据库表的方法
CN106503040A (zh) 适用sql查询方法的kv数据库及其创建方法
CN106802787B (zh) 基于GPU排序的MapReduce优化方法
CN102306202A (zh) 一种基于街区距离的高维向量快速检索算法
CN104462080B (zh) 针对检索结果进行分组统计的索引结构创建方法和***
CN106909623B (zh) 一种支持高效海量数据分析和检索的数据装置及数据存储方法
CN106484865A (zh) 一种基于DNA k‑mer index问题四字链表字典树检索算法
CN106777290A (zh) 一种导出数据的方法及装置
CN112527836B (zh) 一种基于t-box平台的大数据查询方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant