一种实时数据的分布存储和分页查询方法

文档序号:6489990阅读:353来源:国知局
一种实时数据的分布存储和分页查询方法
【专利摘要】本发明涉及一种实时数据的分布存储和分页查询方法,采用至少一个以上数据节点对数据进行存储;查询方法步骤如下:1)客户端提交查询请求至业务节点;2)业务节点接收查询请求,判断查询请求中包含的请求显示的信息条数、页码;业务节点以当前查询页面的首个数据的对象id,结合当前查询页面显示的信息条数进行运算,得出所请求的数据的起始数据的对象id,并结合请求显示的信息条数,运算得出查询结果,并从数据节点输出符合显示的信息条数、页码的查询结果。在分页查询中,不仅可以保证快速有效查询到结果,而且还能避免在访问“下一页”时出现数据重复的现象,这大大的改善了用户的体验。
【专利说明】一种实时数据的分布存储和分页查询方法
【技术领域】
[0001]本发明涉及一种数据存储与查询方法,更具体地说,涉及一种实时数据的分布存储和分页查询方法。
【背景技术】
[0002]在当今的社交网络中,用户会产生大量的实时数据,而往往这些实时数据需要进行分布式存储,此时能够快速分页查询这些实时数据就显得尤为重要。
[0003]目前,实现快速查询分布式数据的方法,大多以数据偏移量和获取个数进行分页查询,这种技术存在一点不足:在查看当前页数据时,如果数据库增加了新的实时数据,当你点击获取下一页数据时,就会发现前一页的数据会重复出现在下一页上,这样就会给用户造成了不好的体验。如图1所示,时间轴由上到下分别表示访问第一页、访问第二页的数据分布曲线,及其对比。

【发明内容】

[0004]本发明的目的在于克服现有技术的不足,提供一种解决在访问下一页数据时出现数据重复现象的问题的实时数据的分布存储和分页查询方法。
[0005]本发明的技术方案如下:
[0006]一种实时数据的分布存储和分页查询方法,采用至少一个以上数据节点对数据进行存储;查询方法步骤如下:
[0007]I)客户端提交查询请求至业务节点;
[0008]2)业务节点接收查询请求,判断查询请求中包含的请求显示的信息条数、页码;业务节点以当前查询页面的首个数据的对象id,结合当前查询页面显示的信息条数进行运算,得出所请求的数据的起始数据的对象id,并结合请求显示的信息条数,运算得出查询结果,并从数据节点输出符合显示的信息条数、页码的查询结果。
[0009]作为优选,所述的对象id按所属数据生成时间的先后呈递增序列。
[0010]作为优选,步骤I)具体为:
[0011]1.1)在客户端中设置记录标签参数,该标签的起始值为空,之后的值由业务节点重新计算再传回给客户端;
[0012]1.2)客户端在每次请求实时数据时,将页码标签、每页显示信息数标签、记录标签发送至业务节点;
[0013]步骤2)具体为:
[0014]2.1)业务节点接收客户端发过来的参数,判断请求数据的起始值是否为O或记录标签是否为空,如果满足其中任一项,直接按请求数据的起始值、每页显示信息数标签参数访问数据节点,进行分页查询;
[0015]2.2)从数据节点得到查询结果之后,业务节点开始计算记录标签的值,并和查询结果一起返回给客户端;[0016]2.3)如果步骤2.1)的请求数据的起始值和记录标签均不为空,业务节点判断查询请求的页码与当前页码的大小关系;
[0017]2.4)计算请求的页码与当前页码差乘以每页显示信息条数得到下一页偏移值,如果查询请求的页码大于当前页码,则查询的首个数据的对象id为当前页首个数据的对象id减去下一页偏移值;如果查询请求的页码小于当前页码,则查询的首个数据的对象id为当前页首个数据的对象id加上下一页偏移值;
[0018]2.5)业务节点重新计算记录标签的值,与数据节点查询结果一起返回给客户端。
[0019]作为优选,步骤2.5)所述的计算记录标签的值,方法如下:
[0020]a、记录下查询结果最后一条记录的对象id ;
[0021]b、将请求数据的起始值与查询结果个数进行相加得到下一页偏移值;
[0022]C、再将步骤a中的最后一条记录的对象id与步骤b中的偏移值拼接为记录标签的值。
[0023]作为优选,步骤2.4)具体为:
[0024]业务节点从记录标签中获取下一页偏移值和查询结果最后一条记录的对象id,如果请求数据的起始值大于等于下一页偏移值,则只在数据节点中查询对象id小于查询结果最后一条记录的对象id ;
[0025]如果请求数据的起始值小于下一页偏移值,则只在数据节点中查询对象id大于查询结果最后一条记录的对象id。
[0026]作为优选,所述的对象id为全局唯一,对象id的生成规则为:时间戳+业务节点内流水号+业务节点编号。
[0027]作为优选,数据的存储规则为:对象id与数据节点个数取模,得到的结果为该数据对应存储的数据节点编号。
[0028]作为优选,所述的数据节点为在至少一个物理数据节点上创建的不少物理数据节点的虚拟数据节点。
[0029]作为优选,从数据节点获取数据的步骤如下:
[0030]1.获取所请求数据的对象id:当标志位id为空时,表示请求的是第一页的数据,则从各个数据节点中,按请求的数据的对象id的倒序取出请求的数据总量的对象id,然后将各个数据节点取出的所有对象id再倒序重新排列,再从前面取出请求的数据总量的对象id,该数量的对象id就是业务节点所请求数据的对象id ;当标志位id不为空时,根据运算得出所请求的数据的起始数据的对象id,从各个数据节点中,按请求的数据的对象id顺序取出请求的数据总量的对象id,然后将各个数据节点取出的所有对象id再顺序重新排列,再从前面取出请求的数据总量的对象id,该数量的对象id就是业务节点所请求数据的对象id ;
[0031]再根据获取的对象id在数据节点中查询数据,然后将结果集返回给业务节点。
[0032]本发明的有益效果如下:
[0033]本发明在“实时数据的分布存储和分页查询方法”技术方案中,实时数据的分布存储可以保证实时数据的快速有效存储,因对象id生成的算法与时间有关,所以不必对每个数据节点都进行遍历搜索,大大提高访问效率,这为数据查询做了很好的铺垫;在分页查询中,不仅可以保证快速有效查询到结果,而且还能避免在访问“下一页”时出现数据重复的现象,这大大的改善了用户的体验。
【专利附图】

【附图说明】
[0034]图1是现有技术中客户端在两次访问时有可能产生的数据结构图;
[0035]图2是系统的逻辑结构示意图;
[0036]图3是数据分布存储方法步骤(3)的示意图;
[0037]图4是将数据映射到N个物理数据节点的M个虚拟数据节点的示意图;
[0038]图5是增加数据节点后数据的映射示意图;
[0039]图6是主从数据节点间进行数据备份和分散读取的示意图;
[0040]图7是查询数据步骤一、步骤二的示意图;
[0041]图8是查询数据步骤三、步骤四的示意图;
[0042]图9是查询数据步骤五的示意图;
[0043]图10是查询数据步骤七的示意图,图中,时间轴由上到下分别表示访问第二页、访问第三页的数据分布曲线,及其对比;
[0044]图11是查询数据步骤九的示意图,图中,时间轴由上到下分别表示访问第三页、访问第二页的数据分布曲线,及其对比;
[0045]图12是请求第一页的数据的获取示意图;
[0046]图13是请求非第一页的数据的获取示意图;
[0047]图14是获取用户请求数据的步骤B的示意图。
【具体实施方式】
[0048]以下结合附图及实施例对本发明进行进一步的详细说明。
[0049]本发明所述的方法涉及到的系统包括下述节点:数据节点、业务节点、接入节点以及客户端,系统的逻辑结构如图2所示。
[0050]各节点的功能和作用如下:
[0051]数据节点:具备数据存储功能,负责存储实时数据;
[0052]业务节点:与数据节点和接入节点相交互,负责业务逻辑的处理;
[0053]接入节点:负责协调负载均衡;
[0054]客户端:用户请求和展示数据。
[0055]查询方法步骤如下:
[0056]I)客户端提交查询请求至业务节点;
[0057]2)业务节点接收查询请求,判断查询请求中包含的请求显示的信息条数、页码;业务节点以当前查询页面的首个数据的对象id,结合当前查询页面显示的信息条数进行运算,得出所请求的数据的起始数据的对象id,并结合请求显示的信息条数,运算得出查询结果,并从数据节点输出符合显示的信息条数、页码的查询结果。
[0058]本发明所阐述的方法包括:
[0059]1、数据分布存储方法:
[0060](I)采用多个数据节点进行存储。
[0061]因实时数据的数据量比较大,如果只用一个数据节点进行数据存储,则该数据节点的负载压力会非常的大,为了负载均衡目的,由N个(N>=1)数据节点来存储数据。
[0062](2)对象id自定义生成,全局唯一,而且id大小体现时间先后。
[0063]对象id (64bit)的生成规则:时间戳(42bit) +业务节点内流水号(16bit) +业务节点编号(5bit)”,其中:时间戳表示当前毫秒数,所以对象id大小表示对象生成时间的近远;业务节点内的流水号在各业务节点内独立顺序生成,用于解决同一时间(毫秒)内产生多个对象时能够区分;业务节点编号防止不同业务节点内生成的id重复,而且能够区分对象来自哪个业务节点。
[0064](3)通过对象id与数据节点个数η取模,来决定对象存储在哪个数据节点。
[0065]例如,对象id 为 2798784880146645024,有 5 个数据节点,2798784880146645024%5得到4,则将此对象存储在余为4的数据节点中;如下图3所示。
[0066]数据节点在实际实现中通常指的是数据库表。不同的数据库表可以存储在同一个物理节点中,也可以存储在不同的物理节点中。
[0067]为了便于通过增加数据节点来实现系统扩展,通常创建M (M>=N)个虚拟的数据节点,将id与M取模后的数据映射到N个实际的数据节点中,如图4所示。
[0068]在增加K个数据节点时,需将之前N个节点中的对象id重新与M取模后,再将数据映射到N+K个实际的数据节点中,如图5所示。
[0069]当数据节点的负载压力比较大时,可以通过主从复制的方式来实现数据备份和分散读取的目的,如图6所示。
[0070]2、业务节点分页查询方法:
[0071](I)表I是在分页查询过程中涉及到的一些参数以及参数的类型和描述:
[0072]表1:查询请求涉及的参数及描述
[0073]
【权利要求】
1.一种实时数据的分布存储和分页查询方法,其特征在于,采用至少一个以上数据节点对数据进行存储;查询方法步骤如下: .1)客户端提交查询请求至业务节点; .2)业务节点接收查询请求,判断查询请求中包含的请求显示的信息条数、页码;业务节点以当前查询页面的首个数据的对象ID,结合当前查询页面显示的信息条数进行运算,得出所请求的数据的起始数据的对象ID,并结合请求显示的信息条数,运算得出查询结果,并从数据节点输出符合显示的信息条数、页码的查询结果。
2.根据权利要求1所述的实时数据的分布存储和分页查询方法,其特征在于,所述的对象ID按所属数据生成时间的先后呈递增序列。
3.根据权利要求2所述的实时数据的分布存储和分页查询方法,其特征在于,步骤I)具体为: .1.1)在客户端中设置记录标签参数,该标签的起始值为空,之后的值由业务节点重新计算再传回给客户端; .1.2)客户端在每次请求实时数据时,将页码标签、每页显示信息数标签、记录标签发送至业务节点; 步骤2)具体为: .2.1)业务节点接收客户端发过来的参数,判断请求数据的起始值是否为O或记录标签是否为空,如果满足其 中任一项,直接按请求数据的起始值、每页显示信息数标签参数访问数据节点,进行分页查询; .2.2)从数据节点得到查询结果之后,业务节点开始计算记录标签的值,并和查询结果一起返回给客户端; .2.3)如果步骤2.1)的请求数据的起始值和记录标签均不为空,业务节点判断查询请求的页码与当前页码的大小关系; .2.4)计算请求的页码与当前页码差乘以每页显示信息条数得到下一页偏移值,如果查询请求的页码大于当前页码,则查询的首个数据的对象ID为当前页首个数据的对象ID减去下一页偏移值;如果查询请求的页码小于当前页码,则查询的首个数据的对象ID为当前页首个数据的对象ID加上下一页偏移值; .2.5)业务节点重新计算记录标签的值,与数据节点查询结果一起返回给客户端。
4.根据权利要求3所述的实时数据的分布存储和分页查询方法,其特征在于,步骤.2.5)所述的计算记录标签的值,方法如下: a、记录下查询结果最后一条记录的对象ID; b、将请求数据的起始值与查询结果个数进行相加得到下一页偏移值; C、再将步骤a中的最后一条记录的对象ID与步骤b中的偏移值拼接为记录标签的值。
5.根据权利要求3所述的实时数据的分布存储和分页查询方法,其特征在于,步骤.2.4)具体为: 业务节点从记录标签中获取下一页偏移值和查询结果最后一条记录的对象ID,如果请求数据的起始值大于等于下一页偏移值,则只在数据节点中查询对象ID小于查询结果最后一条记录的对象ID ; 如果请求数据的起始值小于下一页偏移值,则只在数据节点中查询对象ID大于查询结果最后一条记录的对象ID。
6.根据权利要求1所述的实时数据的分布存储和分页查询方法,其特征在于,所述的对象ID为全局唯一,对象ID的生成规则为:时间戳+业务节点内流水号+业务节点编号。
7.根据权利要求6所述的实时数据的分布存储和分页查询方法,其特征在于,数据的存储规则为:对象ID与数据节点个数取模,得到的结果为该数据对应存储的数据节点编号。
8.根据权利要求7所述的实时数据的分布存储和分页查询方法,其特征在于,所述的数据节点为在至少一个物理数据节点上创建的不少物理数据节点的虚拟数据节点。
9.根据权利要求1所述的实时数据的分布存储和分页查询方法,其特征在于,从数据节点获取数据的步骤如下: i.获取所请求数据的对象ID:当标志位ID为空时,表示请求的是第一页的数据,则从各个数据节点中,按请求的数据的对象ID的倒序取出请求的数据总量的对象ID,然后将各个数据节点取出的所有对象ID再倒序重新排列,再从前面取出请求的数据总量的对象ID,该数量的对象ID就是业务节点所请求数据的对象ID ;当标志位ID不为空时,根据运算得出所请求的数据的起始数据的对象ID,从各个数据节点中,按请求的数据的对象ID顺序取出请求的数据总量的对象ID,然后将各个数据节点取出的所有对象ID再顺序重新排列,再从前面取出请求的数据总量的对象ID,该数量的对象ID就是业务节点所请求数据的对象ID ; ii.再根据获取的对象ID在数据节点中查询数据,然后将结果集返回给业务节点。
【文档编号】G06F17/30GK103778135SQ201210400710
【公开日】2014年5月7日 申请日期:2012年10月18日 优先权日:2012年10月18日
【发明者】李志枥, 程行荣, 张文章, 余小峰 申请人:厦门雅迅网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1