构建索引的方法及设备与流程

文档序号:15229808发布日期:2018-08-21 19:15阅读:203来源:国知局

本申请涉及信息技术领域,尤其涉及一种构建索引的方案。



背景技术:

在大数据业务中,我们通过搜索引擎对海量数据进行信息检索,数据能被快速检索的前提是构建有数据的索引。其中,包含海量数据的数据系统即为数据源,其中包含待索引的数据,实际场景中数据源可能是数据库。已索引的数据存储的系统则为数据汇,其中包含已经构建过索引的数据,实际场景中数据汇可以是搜索引擎。

构建索引的过程比较耗时,因为通常情况下,被索引的数据规模非常大,且每隔一定时间会生成一定规模的增量数据。在构建索引的过程中,有可能因为数据错误导致索引出错,例如数据格式错误、数据内容错误、数据重复等问题,均可能导致索引出错。

对于数据错误导致索引出错的情况,常见的解决方案是数据回滚,即一旦索引出错,就回滚本次构建索引操作的全部数据,重新构建索引,由于需要重新处理全部数据,且可能仍然出错,会导致该过程占用大量的计算资源,效率较低。而另一种解决方案是丢弃出错数据并记录出错日志,然后增加后处理,在本次操作的全部数据中查询出错日志所记录的出错数据,然后追加这些出错数据的索引。在此过程中,虽然无需对全部数据进行重新处理,节省了处理错误数据的时间,但是由于需要在全部数据中查询出错数据,没有细粒度处理方式,在海量数据的场景中后处理过程仍然需要人工介入,因此效率不高,且进一步增加了人工维护成本。

申请内容

本申请的一个目的是提供一种构建索引的方法及设备,用以解决现有技术在处理数据错误导致索引出错的情况时效率较低的问题。

为实现上述目的,本申请提供了一种构建索引的方法,所述方法包括:

从数据源中,以分片为单位获取数据;

对所述数据建立索引,并生成所述数据的分片信息,其中,所述分片信息用于标识所述数据在数据源中所在的分片。

本申请的一种实施方式中,所述方法还包括:

在更新索引时,从所述数据源中获取新增数据,其中,所述新增数据为未建立索引的数据;

对所述新增数据建立索引,并生成所述新增数据的分片信息。

本申请的一种实施方式中,所述方法还包括:

生成所述数据的操作标记;

在更新索引时,根据所述分片信息从所述数据源获取出错数据的更新内容,并根据所述更新内容覆盖所述索引中出错数据的当前内容,其中,所述出错数据是操作标记为索引错误的数据。

本申请的一种实施方式中,所述方法还包括:

构建所述数据的主键,其中,所述主键用于在数据源的相应分片中定位所述数据。

本申请的一种实施方式中,在更新索引时,根据所述分片信息从所述数据源获取出错数据的更新内容,包括:

在更新索引时,根据所述分片信息在所述数据源中确定所述出错数据所在的分片;

根据所述数据的主键,在数据源的相应分片中定位所述出错数据;

获取所述出错数据的更新内容。

本申请的一种实施方式中,所述方法还包括:

在对所述数据建立索引时,生成关于所述数据的时间戳,其中,所述时间戳用于确定所述出错数据是否存在更新内容。

本申请的一种实施方式中,根据所述更新内容覆盖所述索引中出错数据的当前内容之后,还包括:

更新所述出错数据的操作标记。

本申请的一种实施方式中,该方法还包括:

当所述出错数据的操作标记的更新次数达到预设值时,停止从所述数据源中获取出错数据的更新内容,并根据所述更新内容覆盖所述索引中出错数据的当前内容。

基于本申请的另一方面,还提供了一种构建索引的设备,所述设备包括:

传输装置,用于从数据源中,以分片为单位获取数据;

处理装置,用于对所述数据建立索引,并生成所述数据的分片信息,其中,所述分片信息用于标识所述数据在数据源中所在的分片。

本申请的一种实施方式中,所述传输装置,还用于在更新索引时,从所述数据源中获取新增数据,其中,所述新增数据为未建立索引的数据;

所述处理装置,还用于对所述新增数据建立索引,并生成所述新增数据的分片信息。

本申请的一种实施方式中,所述传输装置,还用于在更新索引时,根据所述分片信息从所述数据源获取出错数据的更新内容;

所述处理装置,还用于生成所述数据的操作标记,以及根据所述更新内容覆盖所述索引中出错数据的当前内容,其中,所述出错数据是操作标记为索引错误的数据。

本申请的一种实施方式中,所述处理装置,还用于构建所述数据的主键,其中,所述主键用于在数据源的相应分片中定位所述数据。

本申请的一种实施方式中,所述传输装置,用于在更新索引时,根据所述分片信息在所述数据源中确定所述出错数据所在的分片;根据所述数据的主键,在数据源的相应分片中定位所述出错数据;以及获取所述出错数据的更新内容。

本申请的一种实施方式中,所述处理装置,还用于在对所述数据建立索引时,生成关于所述数据的时间戳,其中,所述时间戳用于确定所述出错数据是否存在更新内容。

本申请的一种实施方式中,所述处理装置,还用于在根据所述更新内容覆盖所述索引中出错数据的当前内容之后,更新所述出错数据的操作标记。

本申请的一种实施方式中,所述处理装置,还用于在所述出错数据的操作标记的更新次数达到预设值时,停止从所述数据源中获取出错数据的更新内容,并根据所述更新内容覆盖所述索引中出错数据的当前内容。

此外,一种构建索引的设备,其中,所述设备包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:从数据源中,以分片为单位获取数据;对所述数据建立索引,并生成所述数据的分片信息,其中,所述分片信息用于标识所述数据在数据源中所在的分片。

与现有技术相比,本申请提供的方案从数据源中以分片为单位获取数据;然后对所述数据建立索引,并生成所述数据的分片信息,使得在后续更新索引时可以通过分片信息确定数据在数据源中所在的分片,由此降低建立、更新索引时的处理粒度,即使索引中存在错误,也可以通过分片信息快速查找到出错数据的更新内容,以实现索引更新,从而避免采用回滚或者重建的方式对实现索引的更新,适用于海量数据的场景,使得构建、维护索引的处理过程更加高效。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1为本申请实施例提供的一种构建索引的方法的处理流程图;

图2为采用本申请实施例的方案实现索引构建的原理示意图;

图3为本申请实施例提供的一种构建索引的设备的结构示意图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

本申请实施例提供了一种构建索引的方法,该方法用于将数据源中的数据构建索引,使得完成索引的数据能够写入到数据汇中,提供信息检索服务。该方法的具体处理流程如图1所示,包括如下步骤:

步骤s101,从数据源中,以分片为单位获取数据。为了降低处理粒度,在从数据源获取数据时,会首先将待索引的数据进行划分,使得本次构建索引操作所涉及的全部数据被划分为多个分片,从而以分片为单位获取数据。

对于分片的具体划分规则可以根据实际应用场景来确定,例如每个分片数据量的大小,每个分片所包含的具体数据等。在本申请的一个实施例中可以将数据表中n行的数据确定为一个分片,由此,一张数据表可以被划分为分片1、分片2、……、分片m。

步骤s102,对数据建立索引,并生成数据的分片信息。其中,分片信息用于标识数据在数据源中所在的分片,例如某一数据位于数据表中的第n+7行,由于第1至n行属于分片1,第n+1至2n行属于分片2,则该数据的分片信息能够用来标识该数据在数据源的分片2中。由于对数据构建索引目的在于提高检索到这些数据的速度,但同时索引构建和维护也需要占用存储资源以及计算资源,因此可以根据实际场景的需求来对每个分片中的数据建立索引。

对于索引中的出错数据,采用回滚或者重建的方式进行索引的更新操作是非常粗粒度的解决方案,本申请的方案通过降低处理粒度,对待索引的数据进行分片,来建立索引,并生成关于已建立索引的数据的分片信息,来对其在数据源中的位置进行标记,使得后续进行索引的更新时无需对整个索引的数据进行回滚或者重建,提高了处理效率。

在实际场景中,数据源中的数据可能会随时间推移而写入新增数据,这些新增数据是指当前还未建立索引的数据。对于此类数据,本申请实施例提供的方法还可以在更新索引时,从数据源中获取新增数据,然后对新增数据建立索引,并生成新增数据的分片信息,从而使得构建的索引更加完整。

在建立索引时,数据格式错误、数据内容错误、数据重复等数据错误问题,都会导致索引出错,因此在建立索引时可以生成数据的操作标记,对索引的情况进行标记。例如某一数据的操作标记可以是索引错误或者索引正确。由于已经建立的索引中会存在一些出错数据,这些出错数据即为操作标记为索引错误的数据。

由于分片信息能够标识数据在数据源中所在的分片,因此在更新索引时,可以根据分片信息确定包含这些出错数据所在的分片,若数据源中的相应分片所包含出错数据存在更新内容(即出错数据有更新),则可以从数据源相应的分片中查找到(例如确定数据属于分片2,则可以直接在数据表的第n+1至2n行中进行查找)该数据的更新内容,用来覆盖索引中出错数据的当前内容,从而出错数据的错误。

由此,本申请实施例提供的方法中,还包括在更新索引时,从数据源中获取出错数据的更新内容,并以更新内容覆盖索引中出错数据的当前内容。由此,可以通过更新索引的方式尝试消除这些出错数据,使得最终构建完成正确的索引。

例如,以数据格式错误为例。对于数据源中分片1中的某一数据,其格式为yyyy-mm-dd(日期格式),实际获取到的数据的内容为1990,在建立索引时由于数据格式错误将导致索引出错,由此该数据即为出错数据。此后,数据源中的该数据被更新为1990-01-11,在更新索引时,通过分片信息可以快速读取数据源中分片1中的该出错数据的更新内容,即1990-01-11。通过将1990-01-11覆盖索引中的数据的当前内容1990,使得索引的错误被消除。

由此,本申请实施例的方案以分片为单位构建数据的索引,然后在需要更新索引时,仅需要在数据源内特定分区内的数据进行查询,从中查找出错数据的更新内容,覆盖索引中有误的数据内容即可,由此以分片为单位构建索引并对索引中的出错数据进行处理,降低了处理的粒度,适用于海量数据的场景,使得构建、维护索引的处理过程更加高效。

并且,在构建索引的整个过程中,首先基于已有的全部数据,以分片为单位读取数据,并对其建立索引,当数据源中的某一分片中有数据更新时,仅对涉及的分片进行单独处理,若更新的是索引中已有的出错数据,则将数据的更新内容覆盖目前索引中的当前内容,若是新写入的新增数据,则对该新增数据追加索引,使得索引更加完整。

在本申请的另一个实施例中,在对数据建立索引的过程中,还可以构建数据的主键,该主键不同于在数据源或者数据汇中所设定的主键,此时构建的主键用于用于在数据源的相应分片中定位所述数据,以便于在更新索引的过程中快速查找到数据。因此可以根据业务需求,有数据的多个字段组成。例如对于网上交易平台中的交易数据,可以由订单号、买方帐号、卖方帐号这几个字段组成该条数据的主键。

基于数据的主键,在更新索引时,可以先根据分片信息在数据源中确定出错数据所在的分片,然后根据数据的主键,在数据源的相应分片中定位出错数据,进而获取出错数据的更新内容,由此可以更加高效地查找到出错数据,提高构建索引的效率。

在实际场景中,可以对更新索引设定触发条件,例如当检测到数据源中本次构建索引操作的全部数据中的某一分片有数据发生了更新时,可以触发更新索引。检查发生变化的数据是否为出错数据,例如通过判断更新数据的主键是否与出错数据的主键相同,若相同,获取该数据的更新内容,用来覆盖索引中出错数据的当前内容。此外,也可以按照一定的时间间隔对索引进行更新。例如,每隔10秒检查一次是否有数据发生更新,若有数据发生更新,则对有更新的数据进行检查,确定更新的数据是否为出错数据,然后以类似的方式覆盖索引中出错数据的当前内容。

当更新索引的触发条件被触发时,例如检测到数据源中本次构建索引操作的全部数据中的某一分片有数据更新,将对更新的数据进行检查,如检查是否为出错数据。除此之外,还可以检查该数据是否为新增数据,若该数据不是已经建立过索引的数据,目前还未建立索引,属于新增数据,则需要追加索引。由此,可以从数据源中获取这个数据,对其建立索引,并生成与相应的分片信息、操作标记、时间戳等等信息。若对该新增数据建立的索引错误,则可以继续在下一次更新索引时,尝试消除该错误。

在对所述数据建立索引时,还可以生成关于所述数据的时间戳,该时间戳表示该数据建立索引的时间,能够用于确定出错数据是否存在更新内容。例如,比较出错数据的最后一次修改的时间戳和建立索引的时间戳,若最后一次修改的时间戳晚于该数据建立索引的时间,则可以确定该出错数据存在更新内容时,从而在更新索引时,获取该出错数据的更新内容,来覆盖其当前内容。

此外,本申请实施例提供的方法中,在以更新内容覆盖索引中出错数据的当前内容之后,可以更新出错数据的操作标记。例如,将数据的更新内容1990-01-11覆盖索引中的数据的当前内容1990之后,由于索引的错误已经被消除,由此可以将其操作标记由索引错误更新为索引正确。

由于在更新索引时,以更新内容覆盖索引中出错数据的当前内容之后,并非一定能够消除索引中的错误,修改后的数据仍然可能是错误的。例如,对于前述提及的数据格式错误的情况,yyyy-mm-dd,实际获取到的内容为1990,其更新后的更新内容可能是1990-14-11,由于实际情况下不会存在内容为14的月份数据,若能够感知该数据内容错误,则覆盖后该数据的索引仍然是错误。由此,可以在以更新内容覆盖索引中出错数据的当前内容之后,可以基于覆盖后的内容,更新出错数据的操作标记,若已经消除了索引错误,则将操作标记修改为索引正确,否则仍然标记为索引错误。

在实际场景中,出错数据有可能在尝试多次更新索引之后仍然无法消除错误,若对其尝试更新索引的次数过多,将会重复消耗一定量的计算资源。而在海量数据的场景中,这种资源消耗将被放大,导致计算资源的浪费,降低处理效率。由此,对于出错数据可以进行有限次的尝试,即当出错数据的操作标记的更新次数达到预设值时,停止从数据源中获取出错数据的更新内容,并以更新内容覆盖索引中出错数据的当前内容。例如,当在尝试了3次之后,即使操作标记仍然是索引错误,也会停止对该数据的索引进行更新。

此时,索引的错误仍然存在,但是继续通过自动化处理方式解决的效率较低,因此可以生成汇总报告,用来通知运维人员采用人工的方式介入。

基于同一发明构思,本申请实施例中还提供了构建索引的设备,该设备对应的方法是前述实施例中的构建索引的方法,并且其解决问题的原理与该方法相似。

本申请实施例提供的构建索引的设备包括传输装置和处理装置,能够用于将数据源中的数据构建索引,使得完成索引的数据能够写入到数据汇中,提供信息检索服务。传输装置和处理装置在构建索引的过程中,分别完成如下处理过程。

传输装置用于从数据源中,以分片为单位获取数据。为了降低处理粒度,在从数据源获取数据时,会首先将待索引的数据进行划分,使得本次构建索引操作所涉及的全部数据被划分为多个分片,从而以分片为单位获取数据。

对于分片的具体划分规则可以根据实际应用场景来确定,例如每个分片数据量的大小,每个分片所包含的具体数据等。在本申请的一个实施例中可以将数据表中n行的数据确定为一个分片,由此,一张数据表可以被划分为分片1、分片2、……、分片m。

处理装置用于对数据建立索引,并生成数据的分片信息。其中,分片信息用于标识数据在数据源中所在的分片,例如某一数据位于数据表中的第n+7行,由于第1至n行属于分片1,第n+1至2n行属于分片2,则该数据的分片信息能够用来标识该数据在数据源的分片2中。由于对数据构建索引目的在于提高检索到这些数据的速度,但同时索引构建和维护也需要占用存储资源以及计算资源,因此可以根据实际场景的需求来对每个分片中的数据建立索引。

对于索引中的出错数据,采用回滚或者重建的方式进行索引的更新操作是非常粗粒度的解决方案,本申请的方案通过降低处理粒度,对待索引的数据进行分片,来建立索引,并生成关于已建立索引的数据的分片信息,来对其在数据源中的位置进行标记,使得后续进行索引的更新时无需对整个索引的数据进行回滚或者重建,提高了处理效率。

在实际场景中,数据源中的数据可能会随时间推移而写入新增数据,这些新增数据是指当前还未建立索引的数据。对于此类数据,本申请实施例提供的设备中,传输装置还可以在更新索引时,从数据源中获取新增数据,然后由处理装置对新增数据建立索引,并生成新增数据的分片信息,从而使得构建的索引更加完整。

在建立索引时,数据格式错误、数据内容错误、数据重复等数据错误问题,都会导致索引出错,因此在建立索引时可以处理装置会生成数据的操作标记,对索引的情况进行标记。例如某一数据的操作标记可以是索引错误或者索引正确。由于已经建立的索引中会存在一些出错数据,这些出错数据即为操作标记为索引错误的数据。

由于分片信息能够标识数据在数据源中所在的分片,因此处理装置在更新索引时,可以根据分片信息确定包含这些出错数据所在的分片,若数据源中的相应分片所包含出错数据存在更新内容(即出错数据有更新),则可以从数据源相应的分片中查找到(例如确定数据属于分片2,则可以直接在数据表的第n+1至2n行中进行查找)该数据的更新内容,用来覆盖索引中出错数据的当前内容,从而出错数据的错误。

由此,本申请实施例提供的设备中,处理装置还可以在更新索引时,从数据源中获取出错数据的更新内容,并以更新内容覆盖索引中出错数据的当前内容。由此,可以通过更新索引的方式尝试消除这些出错数据,使得最终构建完成正确的索引。

例如,以数据格式错误为例。对于数据源中分片1中的某一数据,其格式为yyyy-mm-dd(日期格式),实际获取到的数据的内容为1990,在建立索引时由于数据格式错误将导致索引出错,由此该数据即为出错数据。此后,数据源中的该数据被更新为1990-01-11,在更新索引时,通过分片信息可以快速读取数据源中分片1中的该出错数据的更新内容,即1990-01-11。通过将1990-01-11覆盖索引中的数据的当前内容1990,使得索引的错误被消除。

由此,本申请实施例的方案以分片为单位构建数据的索引,然后在需要更新索引时,仅需要在数据源内特定分区内的数据进行查询,从中查找出错数据的更新内容,覆盖索引中有误的数据内容即可,由此以分片为单位构建索引并对索引中的出错数据进行处理,降低了处理的粒度,适用于海量数据的场景,使得构建、维护索引的处理过程更加高效。

并且,在构建索引的整个过程中,首先基于已有的全部数据,以分片为单位读取数据,并对其建立索引,当数据源中的某一分片中有数据更新时,仅对涉及的分片进行单独处理,若更新的是索引中已有的出错数据,则将数据的更新内容覆盖目前索引中的当前内容,若是新写入的新增数据,则对该新增数据追加索引,使得索引更加完整。

在本申请的另一个实施例中,处理装置在对数据建立索引的过程中,还可以构建数据的主键,该主键不同于在数据源或者数据汇中所设定的主键,此时构建的主键用于用于在数据源的相应分片中定位所述数据,以便于在更新索引的过程中快速查找到数据。因此可以根据业务需求,有数据的多个字段组成。例如对于网上交易平台中的交易数据,可以由订单号、买方帐号、卖方帐号这几个字段组成该条数据的主键。

基于数据的主键,传输装置在更新索引时,可以先根据分片信息在数据源中确定出错数据所在的分片,然后根据数据的主键,在数据源的相应分片中定位出错数据,进而获取出错数据的更新内容,由此可以更加高效地查找到出错数据,提高构建索引的效率。

在实际场景中,可以对更新索引设定触发条件,例如当检测到数据源中本次构建索引操作的全部数据中的某一分片有数据发生了更新时,可以触发更新索引。检查发生变化的数据是否为出错数据,例如通过判断更新数据的主键是否与出错数据的主键相同,若相同,获取该数据的更新内容,用来覆盖索引中出错数据的当前内容。此外,也可以按照一定的时间间隔对索引进行更新。例如,每隔10秒检查一次是否有数据发生更新,若有数据发生更新,则对有更新的数据进行检查,确定更新的数据是否为出错数据,然后以类似的方式覆盖索引中出错数据的当前内容。

当更新索引的触发条件被触发时,例如检测到数据源中本次构建索引操作的全部数据中的某一分片有数据更新,将对更新的数据进行检查,如检查是否为出错数据。除此之外,还可以检查该数据是否为新增数据,若该数据不是已经建立过索引的数据,目前还未建立索引,属于新增数据,则需要追加索引。由此,可以从数据源中获取这个数据,对其建立索引,并生成与相应的分片信息、操作标记、时间戳等等信息。若对该新增数据建立的索引错误,则可以继续在下一次更新索引时,尝试消除该错误。

在对所述数据建立索引时,处理装置还可以生成关于所述数据的时间戳,该时间戳表示该数据建立索引的时间,能够用于确定出错数据是否存在更新内容。例如,比较出错数据的最后一次修改的时间戳和建立索引的时间戳,若最后一次修改的时间戳晚于该数据建立索引的时间,则可以确定该出错数据存在更新内容时,从而在更新索引时,获取该出错数据的更新内容,来覆盖其当前内容。

此外,本申请实施例提供的设备中,处理装置在以更新内容覆盖索引中出错数据的当前内容之后,可以更新出错数据的操作标记。例如,将数据的更新内容1990-01-11覆盖索引中的数据的当前内容1990之后,由于索引的错误已经被消除,由此可以将其操作标记由索引错误更新为索引正确。

由于在更新索引时,处理装置以更新内容覆盖索引中出错数据的当前内容之后,并非一定能够消除索引中的错误,修改后的数据仍然可能是错误的。例如,对于前述提及的数据格式错误的情况,yyyy-mm-dd,实际获取到的内容为1990,其更新后的更新内容可能是1990-14-11,由于实际情况下不会存在内容为14的月份数据,若能够感知该数据内容错误,则覆盖后该数据的索引仍然是错误。由此,可以在以更新内容覆盖索引中出错数据的当前内容之后,可以基于覆盖后的内容,更新出错数据的操作标记,若已经消除了索引错误,则将操作标记修改为索引正确,否则仍然标记为索引错误。

在实际场景中,出错数据有可能在尝试多次更新索引之后仍然无法消除错误,若对其尝试更新索引的次数过多,将会重复消耗一定量的计算资源。而在海量数据的场景中,这种资源消耗将被放大,导致计算资源的浪费,降低处理效率。由此,对于出错数据,可以进行有限次的尝试,即当出错数据的操作标记的更新次数达到预设值时,处理装置停止从数据源中获取出错数据的更新内容,并以更新内容覆盖索引中出错数据的当前内容。例如,当在尝试了3次之后,即使操作标记仍然是索引错误,也会停止对该数据的索引进行更新。

此时,索引的错误仍然存在,但是继续通过自动化处理方式解决的效率较低,因此可以生成汇总报告,用来通知运维人员采用人工的方式介入。

图2示出了采用本申请实施例提供的方案构建索引时的原理示意图,其中数据源210用于存储数据,采用sparksql数据库,数据汇220用于存放基于数据所构建的索引,采用elasticsearch搜索引擎,设备230用于构建数据的索引。

设备230提供了数据源的传输配置,通过配置中指定的数据库、数据表、查询条件、分割分片的条件等,将数据源中的数据以分片为单位读取到设备230中。一次构建索引的操作对应一个批次的数据,这些会被划分为多个分片来读取并处理。同时,设备230根据业务场景定义了数据的主键具体由哪些字段组成,使得在读取数据后能够构建相应数据的主键。

在首次处理时,由于还未建立过关于本批次数据的任何索引,直接让这些获取到的数据进入到插入队列,建立关于这些数据的索引,同时将索引操作的结果记录下来,具体格式可以为:批次-分片-主键-操作标记,以及时间戳。

其后,在更新索引时,针对每个分片中变化的数据进行,即可以以分片为单位,仅读取本批次数据中每个分片中变化的数据,对于读取到的每行数据,根据主键判断是否为新增数据,如果是新增数据,则进入插入队列,追加该新增数据的索引;如果是内容有更新的出错数据,则进入更新队列,将出错数据的更新内容覆盖索引中该数据的当前内容。

综上,本申请实施例的方案从数据源中以分片为单位获取数据;然后对所述数据建立索引,并生成所述数据的分片信息,使得在后续更新索引时可以通过分片信息确定数据在数据源中所在的分片,由此降低建立、更新索引时的处理粒度,即使索引中存在错误,也可以通过分片信息快速查找到出错数据的更新内容,以实现索引更新,从而避免采用回滚或者重建的方式对实现索引的更新,适用于海量数据的场景,使得构建、维护索引的处理过程更加高效。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个如图3所示的构建索引的设备,该设备包括用于存储计算机程序指令的存储器320和用于执行程序指令的处理器310,其中,当该计算机程序指令被该处理器执行时,触发该设备运行基于前述根据本申请的多个实施例的方法和/或技术方案。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1