CN112783925B - 分页检索方法和装置 - Google Patents

分页检索方法和装置 Download PDF

Info

Publication number
CN112783925B
CN112783925B CN201911095623.0A CN201911095623A CN112783925B CN 112783925 B CN112783925 B CN 112783925B CN 201911095623 A CN201911095623 A CN 201911095623A CN 112783925 B CN112783925 B CN 112783925B
Authority
CN
China
Prior art keywords
paging
data
data object
page
bounded queue
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
CN201911095623.0A
Other languages
English (en)
Other versions
CN112783925A (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 Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun 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 Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201911095623.0A priority Critical patent/CN112783925B/zh
Publication of CN112783925A publication Critical patent/CN112783925A/zh
Application granted granted Critical
Publication of CN112783925B publication Critical patent/CN112783925B/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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种分页检索方法和装置,涉及计算机技术领域。其中,该方法包括:响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成。通过以上步骤,能够提高分页检索的效率,满足实际业务场景的分页检索需求。

Description

分页检索方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种分页检索方法和装置。
背景技术
现有的分布式检索引擎大多支持分页检索功能。例如,在ElasticSearch这一分布式检索引擎中,可通过From~Size方式实现分页检索功能。在针对海量数据进行分页检索时,From~Size方式的查询效率非常低。另外,在ElasticSearch这一分布式检索引擎中,还可通过游标快照检索方式(即SearchScroll方法)实现分页检索功能。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:现有分布式检索引擎所提供的分页检索功能往往不能满足实际业务场景的需求。在具体实现分页检索功能时,往往需要在获取数据后进行频繁的数据计算,且数据获取与数据计算耦合在一起,这大大影响了分页检索功能的执行效率。例如,虽然SearchScroll方法很高效,但是在需要进行频繁数据计算的场景(比如深度分页场景、需要数据融合的场景)中,数据获取与数据计算耦合在一起会造成阻塞线程,进而导致分页检索功能效率低下。
发明内容
有鉴于此,本发明提供一种分页检索方法和装置,能够提高分页检索的效率,满足实际业务场景的分页检索需求。
为实现上述目的,根据本发明的一个方面,提供了一种分页检索方法。
本发明的分页检索方法包括:响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成。
可选地,所述基于第一线程池执行数据获取任务的步骤包括:通过调用分布式检索引擎提供的游标快照检索方式获取持久化数据对象;所述将获取到的数据对象异步写入有界队列的步骤包括:将获取到的持久化数据对象异步转换成业务数据对象,然后将所述业务数据对象写入有界队列,并记录所述业务数据对象在有界队列中的编号。
可选地,所述基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务的步骤包括:从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同;在判断结果为是的情况下,将所述数据对象添加至分页数据集中;然后,从所述有界队列中取出下一个数据对象进行处理,直至所述分页数据集中的数据对象个数等于页面上每页需要展示的记录数。
可选地,所述方法还包括:在执行所述从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同的步骤之前,对所述有界队列中的数据对象进行融合处理。
为实现上述目的,根据本发明的另一方面,提供了一种分页检索装置。
本发明的分页检索装置包括:数据获取模块,用于响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;分页处理模块,用于基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成。
可选地,所述数据获取模块基于第一线程池执行数据获取任务包括:所述数据获取模块通过调用分布式检索引擎提供的游标快照检索方式获取持久化数据对象;所述数据获取模块将获取到的数据对象异步写入有界队列包括:所述数据获取模块将获取到的持久化数据对象异步转换成业务数据对象,然后将所述业务数据对象写入有界队列,并记录所述业务数据对象在有界队列中的编号。
可选地,所述分页处理模块基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务包括:所述分页处理模块从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同;在判断结果为是的情况下,所述分页处理模块将所述数据对象添加至分页数据集中;然后,所述分页处理模块从所述有界队列中取出下一个数据对象进行处理,直至所述分页数据集中的数据对象个数等于页面上每页需要展示的记录数。
可选地,所述分页处理模块,还用于在执行所述从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同的步骤之前,对所述有界队列中的数据对象进行融合处理。
为实现上述目的,根据本发明的再一个方面,提供了一种电子设备。
本发明的电子设备,包括:一个或多个处理器;以及,存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明的分页检索方法。
为实现上述目的,根据本发明的又一个方面,提供了一种计算机可读介质。
本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明的分页检索方法。
上述发明中的一个实施例具有如下优点或有益效果:通过响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户这些步骤,能够实现获取数据部分和分页处理部分的分离、解耦,有效缓解线程阻塞问题,提高分页检索的效率,满足实际业务场景的分页检索需求。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明第一实施例的分页检索方法的主要流程示意图;
图2是根据本发明第二实施例的获取数据部分的详细流程示意图;
图3是根据本发明第二实施例的分页处理部分的详细流程示意图;
图4是根据本发明第三实施例的分页处理部分的详细流程示意图;
图5是根据本发明第三实施例的对数据进行融合处理的示意图;
图6是根据本发明第四实施例的分页检索装置的主要模块示意图;
图7是本发明实施例可以应用于其中的示例性系统架构图;
图8是适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要指出的是,在不冲突的情况下,本发明中的实施例以及实施例中的特征可以相互组合。
在详细介绍本发明的实施例之前,首先对本发明实施例涉及的部分技术术语进行说明。
异步:用户的请求不需要立刻得到响应结果。
线程池:一种采用池化资源的方式管理线程,类似于生产者和消费者模式。生产者是线程的使用者,消费者就是线程池本身。
有界队列:一种队列集合,队列数量有界限制,如果队列超出限制,则会有一些处理策略:如舍弃、抛出异常等。
Doucument:可以被ElasticSearch检索的最小数据单元,可称为文档,每一个文档都有对应的唯一标识,并支持JSON格式的序列化。
索引:索引是文档的容器,是一类文档的集合。
分片:用于解决数据的水平扩展问题,通过分片可以将数据分布到集群内的所有节点之上。
LinkedBlockingQueue:线程安全的有界队列,以链表算法方式实现。
CurrentHashMap:JDK提供的支持KV方式的Hash算法存储方式,支持高并发。
图1是根据本发明第一实施例的分页检索方法的主要流程示意图。如图1所示,本发明实施例分页检索方法包括:
步骤S101、响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列。
具体实施时,用户可通过网页请求(WebRequest)方式向服务端发出分页数据检索请求。其中,所述分页数据检索请求可包括如下参数:查询条件字段(或者称为“检索字段”)、分页每页包含的记录数(比如,每页10条记录))、分页页码(比如第10页)。
具体实施时,可基于Java JDK(Java平台标准版开发工具包)提供的CompletionService(一种线程池)循环执行数据获取任务。在通过数据获取任务得到数据对象后,异步地将数据对象存入有界队列(比如LinkedBlockQueue)中。进而,使得“从数据库中检索数据的操作”与“将数据对象存入有界队列的操作”能够同时进行,提高了数据获取的效率。
步骤S102、基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户。
具体实施时,当有界队列(比如LinkedBlockQueue)不为空时,第二线程池的线程被唤醒,进而开始消费有界队列中的数据对象,具体为针对所述有界队列中的数据对象的分页处理任务;当有界队列为空时,第二线程池的线程进入阻塞等待状态。
在该步骤中,所述针对所述有界队列中的数据对象的分页处理任务主要包括:对有界队列中的数据对象进行筛选、并基于筛选出来的数据对象组装分页数据集。其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成。例如,假设用户的分页数据检索请求中指定的分页页码为第10页、分页每页包含的记录数为10条,则将位于第10页的10个数据对象组装成分页数据集。
在本发明实施例中,通过基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,并将最终处理得到的分页数据集返回至所述用户这些步骤,能够实现获取数据部分和分页处理部分的分离、解耦,有效缓解线程阻塞问题,提高分页检索的效率,满足实际业务场景的分页检索需求。
图2是根据本发明第二实施例的获取数据部分的详细流程示意图。图2是对步骤S101的一种可选实施方式的详细说明。如图2所示,本发明实施例的获取数据部分具体包括:
步骤S201、循环调用分布式检索引擎提供的游标快照检索方式获取持久化数据对象。
示例性地,所述分布式检索引擎为ElasticSearch。在需要查询的业务场景中,在ElasticSearch中可以使用Index_Query(索引条件检索)检索出所需要的结果。而用户在进行检索时,往往有分页检索的需求。目前,ElasticSearch主要提供了From~Size方式和SearchScroll方式来实现分页检索功能。
在该示例中,基于第一线程池执行数据获取任务可具体包括:循环调用ElasticSearch提供的游标快照检索方式(SearchScroll方式)获取持久化数据对象。在每次基于SearchScroll方式进行检索时,会返回一个ScrollId(游标)的值,下次基于SearchScroll方式进行检索时可将ScrollId值进行回传,这样可以从指定的游标开始分段检索数据,使得响应变得高效。
其中,所述持久化数据对象可理解成数据库中存储的数据对象。例如,在ElasticSearch中,所述持久化数据对象可以是document(文档)。
步骤S202、将获取到的持久化数据对象异步转换成业务数据对象,然后将所述业务数据对象写入有界队列,并记录所述业务数据对象在有界队列中的编号。
其中,业务数据对象可理解为业务系统进行页面展示所需的数据对象。
具体实施时,考虑到业务系统进行页面展示所需的业务数据对象与数据库中的持久化数据对象可能不一致,因此需要预先定义两者的对应关系。例如,将业务数据对象中的属性字段promotion.venderid与持久化数据对象的属性字段ES.venderid对应起来。在该步骤中,可根据上述对应关系,将持久化数据对象转换成业务数据对象,然后将转换后的业务数据对象写入(或者说“保存至”)有界队列中,并记录业务数据对象在有界队列中的编号)。例如,对于第一个进入有界队列的业务数据对象,可将其编号设为1;对于第二个进入有界队列的业务数据对象,可将其编号设为2。
在本发明实施例中,通过采用高效、快速的游标快照检索方式获取数据,并采用异步处理方式将获取“从数据库中检索数据的操作”与“将数据对象存入有界队列的操作”进行解耦,使得两步操作能够同时进行,大大提高了分页检索的效率。
图3是根据本发明第二实施例的分页处理部分的详细流程示意图。图3是对步骤S102的一种可选实施方式的详细说明。如图3所示,本发明实施例的分页处理部分具体包括:
步骤S301、从有界队列中取出一个数据对象。
其中,所述有界队列中的数据对象可具体为通过图2所示流程转换得到的业务数据对象。具体实施时,当有界队列(比如LinkedBlockQueue)不为空时,第二线程池的线程被唤醒,进而开始消费有界队列中的数据对象;当有界队列为空时,第二线程池的线程进入阻塞等待状态。
步骤S302、根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同。
该步骤的一个可选实施方式为:对取出的数据对象在有界队列中的编号(ID)与页面上每页需要展示的记录数(PageSize)进行如下运算:pageN=[ID/PageSize]+1;其中,[ID/PageSize]表示对ID/PageSize进行取整运算;判断运算得到的pageN(即该数据对象所在的分页页码)与分页数据检索请求中的分页页码(或者说“用户请求的分页页码”)是否相同。
例如,取出的数据对象的ID为95,页面上每页需要展示的记录数为10,则可计算出该数据对象所在的分页页码为10,若分页数据检索请求中的分页页码为12,则可知该数据对象所在的分页页码与所述分页数据检索请求中的分页页码不同。
在步骤S302的判断结果为是的情况下,执行步骤S303;在步骤S302的判断结果为否的情况下,再次执行步骤S301,即从有界队列中取出下一个数据对象。
步骤S303、将所述数据对象添加至分页数据集中。
在该步骤中,可将通过步骤S302确定的位于用户请求的分页上的数据对象组装至集合中。
步骤S304、判断分页数据集是否组装完成。
在该步骤中,可将分页数据集中的数据对象个数与分页数据检索请求中的分页每页记录数进行比较。若两者一致,则认为分页数据集组装完成;否则,认为分页数据集未组装完成。
在步骤S304的判断结果为是的情况下,执行步骤S305;在步骤S304的判断结果为否的情况下,再次执行步骤S301,即从有界队列中取出下一个数据对象。
步骤S305、将最终处理得到的分页数据集返回至所述用户。
在本发明实施例中,通过第二线程池执行上述流程实现了针对所述有界队列中的数据对象的高效、快速地分页处理任务。通过在分页检索中采用第一线程池执行数据获取任务,以及通过将获取的数据存入有界队列,并通过第二线程池针对所述有界队列中的数据对象进行消费,实现了获取数据和分页计算逻辑的分离、解耦,缓解了线程阻塞问题,提高了分页检索的效率。
图4是根据本发明第三实施例的分页处理部分的详细流程示意图。图4是对步骤S102的另一种可选实施方式的详细说明。如图4所示,本发明实施例的分页处理部分具体包括:
步骤S401、对有界队列A中的数据对象进行融合处理,并将融合处理后的数据对象写入有界队列B。
其中,有界队列A具体为用于存储转换得到的业务数据对象的有界队列。具体实施时,当有界队列A(比如LinkedBlockQueue)不为空时,第二线程池的线程被唤醒,进而开始消费有界队列中的数据对象,即开始执行图4所示流程;当有界队列为空时,第二线程池的线程进入阻塞等待状态。
考虑到用户需要的一条记录分布在ElasticSearch的多个分片和多个Document(文档)中的情况,需要对获取的数据对象进行融合处理。具体实施时,可预先设置需要融合的数据对象的标识字段,比如,将标识字段为venderId的数据对象设置为需要融合的数据对象。在该步骤中,可对标识字段为venderId的数据对象进行融合。比如,可基于ElasticSearch提供的聚合方法(Count方法)对标识字段为venderId的数据对象进行融合。
进一步,在进行融合数据时,可使用并发高效的CurrentHashMap数据结构存储融合后的数据对象。在本发明实施例中,CurrentHashMap可具体定义为:CurrentHashMap<KeyA,Map<KeyB,Object>>。其中,KeyA是需要融合的数据对象的标识字段(比如venderId),KeyB是数据对象中的属性字段,Object为数据对象中的属性字段的取值。在融合完成后,可对CurrentHashMap进行反序列化操作,然后将反序列化操作得到的数据对象放入有界队列B中。
步骤S402、从有界队列B中取出一个数据对象。
其中,所述有界队列B中的数据对象具体为融合后的数据对象。
步骤S403、根据取出的数据对象在有界队列B中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同。
该步骤的一个可选实施方式为:对取出的数据对象在有界队列B中的编号(ID)与页面上每页需要展示的记录数(PageSize)进行如下运算:pageN=[ID/PageSize]+1;其中,[ID/PageSize]表示对ID/PageSize进行取整运算;判断运算得到的pageN(即该数据对象所在的分页页码)与分页数据检索请求中的分页页码(或者说“用户请求的分页页码”)是否相同。
例如,取出的数据对象的ID为95,页面上每页需要展示的记录数为10,则可计算出该数据对象所在的分页页码为10,若分页数据检索请求中的分页页码为12,则可知该数据对象所在的分页页码与所述分页数据检索请求中的分页页码不同。
在步骤S403的判断结果为是的情况下,执行步骤S404;在步骤S403的判断结果为否的情况下,再次执行步骤S402,即从有界队列B中取出下一个数据对象。
步骤S404、将所述数据对象添加至分页数据集中。
步骤S405、判断分页数据集是否组装完成。
在该步骤中,可将分页数据集中的数据对象个数与分页数据检索请求中的分页每页记录数进行比较。若两者一致,则认为分页数据集组装完成;否则,认为分页数据集未组装完成。
在步骤S405的判断结果为是的情况下,执行步骤S406;在步骤S405的判断结果为否的情况下,再次执行步骤S402,即从有界队列中取出下一个数据对象。
步骤S406、将最终处理得到的分页数据集返回至所述用户。
在本发明实施例中,通过在基于第一线程池获取到数据后,通过第二线程池对获取的数据进行融合处理,能够满足在分页检索中需要进行数据融合的业务场景需求;另外,通过在分页检索中采用第一线程池执行数据获取任务,以及通过将获取的数据存入有界队列,并通过第二线程池针对所述有界队列中的数据对象进行消费,实现了获取数据和分页计算逻辑的分离、解耦,缓解了线程阻塞问题,提高了实际业务场景中分页检索的效率。
图5是根据本发明第三实施例的对数据进行融合处理的示意图。图5是针对ElasticSearch中的数据对象(或者称为ElasticSearch中的一条记录)进行数据融合的示意图。如图5所示,预先设置的需要融合的数据对象的标识字段为venderID,则针对标识字段为venderID的数据对象DOC_1、DOC_2、DOC_3、……、DOC_N进行融合。
例如,假设某类视频分析记录的标识字段venderId=A,其在ElasticSearch中存在以下记录:Doc_1(venderId=A,上衣颜色=A1)、Doc_2(venderId=A,上衣规格=B1)、Doc_3(venderId=A,裤子颜色=C1)、Doc_4(venderId=A,裤子规格=D1),则将Doc_1、Doc_2、Doc_3、Doc_4融合成一条记录,融合后的记录为:venderId=A,上衣颜色=A1,上衣规格=B1,裤子颜色=C1,裤子规格=D1。
图6是根据本发明第四实施例的分页检索装置的主要模块示意图。如图6所示,本发明实施例的分页检索装置600包括:数据获取模块601、分页处理模块602。
数据获取模块601,用于响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列。
具体实施时,用户可通过网页请求(WebRequest)方式向服务端发出分页数据检索请求。其中,所述分页数据检索请求可包括如下参数:查询条件字段(或者称为“检索字段”)、分页每页包含的记录数(比如,每页10条记录))、分页页码(比如第10页)。
在数据获取模块601通过执行数据获取任务得到数据对象后,异步地将数据对象存入有界队列(比如LinkedBlockQueue)中。进而,使得“从数据库中检索数据的操作”与“将数据对象存入有界队列的操作”能够同时进行,提高了数据获取的效率。
在一个可选实施方式中,数据获取模块601基于第一线程池执行数据获取任务包括:数据获取模块601通过调用分布式检索引擎提供的游标快照检索方式获取持久化数据对象。其中,所述持久化数据对象可理解成数据库中存储的数据对象。例如,在ElasticSearch中,所述持久化数据对象可以是document(文档)。
进一步,在该可选实施方式中,数据获取模块601将获取到的数据对象异步写入有界队列包括:数据获取模块601将获取到的持久化数据对象异步转换成业务数据对象,然后将所述业务数据对象写入有界队列,并记录所述业务数据对象在有界队列中的编号。其中,业务数据对象可理解为业务系统进行页面展示所需的数据对象。
具体实施时,考虑到业务系统进行页面展示所需的业务数据对象与数据库中的持久化数据对象可能不一致,因此需要预先定义两者的对应关系。例如,将业务数据对象中的属性字段promotion.venderid与持久化数据对象的属性字段ES.venderid对应起来。在该步骤中,可根据上述对应关系,将持久化数据对象转换成业务数据对象,然后将转换后的业务数据对象写入(或者说“保存至”)有界队列中,并记录业务数据对象在有界队列中的编号)。例如,对于第一个进入有界队列的业务数据对象,可将其编号设为1;对于第二个进入有界队列的业务数据对象,可将其编号设为2。
分页处理模块602,用于基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,并将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成。
具体实施时,当有界队列(比如LinkedBlockQueue)不为空时,第二线程池的线程被唤醒,进而开始消费有界队列中的数据对象,具体为针对所述有界队列中的数据对象的分页处理任务;当有界队列为空时,第二线程池的线程进入阻塞等待状态。
在一个可选实施方式中,分页处理模块602基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,并将最终处理得到的分页数据集返回至所述用户包括:分页处理模块602从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同;在判断结果为是的情况下,分页处理模块602将所述数据对象添加至分页数据集中;然后,分页处理模块602从所述有界队列中取出下一个数据对象进行处理,直至所述分页数据集中的数据对象个数等于页面上每页需要展示的记录数。
进一步,分页处理模块602,还可用于在执行所述从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同的步骤之前,对所述有界队列中的数据对象进行融合处理。
具体实施时,可预先设置需要融合的数据对象的标识字段,比如,将标识字段为venderId的数据对象设置为需要融合的数据对象。在该步骤中,可对标识字段为venderId的数据对象进行融合。比如,可基于ElasticSearch提供的聚合方法(Count方法)对标识字段为venderId的数据对象进行融合。
进一步,在进行融合数据时,可使用并发高效的CurrentHashMap数据结构存储融合后的数据对象。在本发明实施例中,CurrentHashMap可具体定义为:CurrentHashMap<KeyA,Map<KeyB,Object>>。其中,KeyA是需要融合的数据对象的标识字段(比如venderId),KeyB是数据对象中的属性字段,Object为数据对象中的属性字段的取值。在融合完成后,可对CurrentHashMap进行反序列化操作,然后将反序列化操作得到的数据对象放入有界队列中。
在本发明实施例中,通过数据获取模块基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;通过分页处理模块基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,并将最终处理得到的分页数据集返回至所述用户这些步骤,能够实现获取数据部分和分页处理部分的分离、解耦,有效缓解线程阻塞问题,提高分页检索的效率,满足实际业务场景的分页检索需求。
图7示出了可以应用本发明实施例的分页检索方法或分页检索装置的示例性系统架构700。
如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703所浏览的业务系统提供支持的后台管理服务器。后台管理服务器可以对接收到的分页检索请求等数据进行分析等处理,并将处理结果(例如分页数据集)反馈给终端设备。
需要说明的是,本发明实施例所提供的分页检索方法一般由服务器705执行,相应地,分页检索装置一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图8,其示出了适于用来实现本发明实施例的电子设备的计算机系统800的结构示意图。图8示出的计算机系统仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括数据获取模块、分页处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据获取模块还可以被描述为“执行数据获取任务的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行以下流程:响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,并将获取到的数据对象异步写入有界队列;基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,并将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种分页检索方法,其特征在于,所述方法包括:
响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,将获取到的数据对象异步写入有界队列,并记录所述数据对象在有界队列中的编号;所述分页数据检索请求包括:分页每页包含的记录数和分页页码;
基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成;具体包括:从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号以及页面上每页需要展示的记录数进行取整运算结果,得到该数据对象所在的分页页码;判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同;在判断结果为是的情况下,将所述数据对象添加至分页数据集中。
2.根据权利要求1所述的方法,其特征在于,所述基于第一线程池执行数据获取任务的步骤包括:通过调用分布式检索引擎提供的游标快照检索方式获取持久化数据对象;
所述将获取到的数据对象异步写入有界队列的步骤包括:将获取到的持久化数据对象异步转换成业务数据对象,然后将所述业务数据对象写入有界队列,并记录所述业务数据对象在有界队列中的编号。
3.根据权利要求1所述的方法,其特征在于,所述基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务的步骤还包括:
在判断该数据对象所在的分页页码与所述分页数据检索请求中的分页页码相同的情况之后,从所述有界队列中取出下一个数据对象进行处理,直至所述分页数据集中的数据对象个数等于页面上每页需要展示的记录数。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在执行所述从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同的步骤之前,对所述有界队列中的数据对象进行融合处理。
5.一种分页检索装置,其特征在于,所述装置包括:
数据获取模块,用于响应于用户的分页数据检索请求,基于第一线程池执行数据获取任务,将获取到的数据对象异步写入有界队列;并记录所述数据对象在有界队列中的编号;所述分页数据检索请求包括:分页每页包含的记录数和分页页码;
分页处理模块,用于基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务,将最终处理得到的分页数据集返回至所述用户;其中,所述分页数据集由所述分页数据检索请求指定的分页上的所有数据对象组成;具体用于从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号以及页面上每页需要展示的记录数进行取整运算结果,得到该数据对象所在的分页页码;判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同;在判断结果为是的情况下,将所述数据对象添加至分页数据集中。
6.根据权利要求5所述的装置,其特征在于,所述数据获取模块基于第一线程池执行数据获取任务包括:所述数据获取模块通过调用分布式检索引擎提供的游标快照检索方式获取持久化数据对象;
所述数据获取模块将获取到的数据对象异步写入有界队列包括:所述数据获取模块将获取到的持久化数据对象异步转换成业务数据对象,然后将所述业务数据对象写入有界队列,并记录所述业务数据对象在有界队列中的编号。
7.根据权利要求5所述的装置,其特征在于,所述分页处理模块基于第二线程池执行针对所述有界队列中的数据对象的分页处理任务包括:
在判断该数据对象所在的分页页码与所述分页数据检索请求中的分页页码相同之后,所述分页处理模块从所述有界队列中取出下一个数据对象进行处理,直至所述分页数据集中的数据对象个数等于页面上每页需要展示的记录数。
8.根据权利要求7所述的装置,其特征在于,所述分页处理模块,还用于在执行所述从所述有界队列中取出一个数据对象,根据取出的数据对象在有界队列中的编号、以及页面上每页需要展示的记录数,判断该数据对象所在的分页页码是否与所述分页数据检索请求中的分页页码相同的步骤之前,对所述有界队列中的数据对象进行融合处理。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至4中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1至4中任一所述的方法。
CN201911095623.0A 2019-11-11 2019-11-11 分页检索方法和装置 Active CN112783925B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911095623.0A CN112783925B (zh) 2019-11-11 2019-11-11 分页检索方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911095623.0A CN112783925B (zh) 2019-11-11 2019-11-11 分页检索方法和装置

Publications (2)

Publication Number Publication Date
CN112783925A CN112783925A (zh) 2021-05-11
CN112783925B true CN112783925B (zh) 2024-03-01

Family

ID=75749062

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911095623.0A Active CN112783925B (zh) 2019-11-11 2019-11-11 分页检索方法和装置

Country Status (1)

Country Link
CN (1) CN112783925B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073661A (zh) * 2016-11-18 2018-05-25 北京京东尚科信息技术有限公司 数据检索方法及装置、报表生成系统及方法
CN108228663A (zh) * 2016-12-21 2018-06-29 杭州海康威视数字技术股份有限公司 一种分页检索方法及装置
CN110008262A (zh) * 2019-02-02 2019-07-12 阿里巴巴集团控股有限公司 一种数据导出方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11138365B2 (en) * 2018-02-02 2021-10-05 International Business Machines Corporation Pagination of data filtered after retrieval thereof from a data source

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073661A (zh) * 2016-11-18 2018-05-25 北京京东尚科信息技术有限公司 数据检索方法及装置、报表生成系统及方法
CN108228663A (zh) * 2016-12-21 2018-06-29 杭州海康威视数字技术股份有限公司 一种分页检索方法及装置
CN110008262A (zh) * 2019-02-02 2019-07-12 阿里巴巴集团控股有限公司 一种数据导出方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
数字图书馆集成检索系统中分页策略研究;李亚子;蒋君;李书宁;;现代图书情报技术(第11期);第23-27页 *

Also Published As

Publication number Publication date
CN112783925A (zh) 2021-05-11

Similar Documents

Publication Publication Date Title
US20220156335A1 (en) Streaming data processing
US11921672B2 (en) Query execution at a remote heterogeneous data store of a data fabric service
US11580107B2 (en) Bucket data distribution for exporting data to worker nodes
US20230144450A1 (en) Multi-partitioning data for combination operations
US11281706B2 (en) Multi-layer partition allocation for query execution
US11232100B2 (en) Resource allocation for multiple datasets
CN109189835B (zh) 实时生成数据宽表的方法和装置
US20180089259A1 (en) External dataset capability compensation
US20180089269A1 (en) Query processing using query-resource usage and node utilization data
US20180089306A1 (en) Query acceleration data store
US20180089262A1 (en) Dynamic resource allocation for common storage query
CN109614402B (zh) 多维数据查询方法和装置
CN112307037A (zh) 一种数据同步方法和装置
CN109992719B (zh) 用于确定推送优先级信息的方法和装置
CN112783887A (zh) 一种基于数据仓库的数据处理方法及装置
CN110781159A (zh) Ceph目录文件信息读取方法、装置、服务器及存储介质
CN111753019A (zh) 一种应用于数据仓库的数据分区方法和装置
CN112860412B (zh) 业务数据处理方法、装置、电子设备及存储介质
CN112783925B (zh) 分页检索方法和装置
CN113051244B (zh) 数据访问方法和装置、数据获取方法和装置
CN110879818B (zh) 一种获取数据的方法、装置、介质和电子设备
JP6859407B2 (ja) データ処理用の方法及び装置
CN112699116A (zh) 一种数据处理方法和系统
CN112784195A (zh) 一种页面数据发布方法和系统
CN111651475B (zh) 信息生成方法、装置、电子设备和计算机可读介质

Legal Events

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