著录项信息
专利名称 | 一种非入侵式的数据库爬虫的实现方法 |
申请号 | CN201210528786.5 | 申请日期 | 2012-12-07 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-06-18 | 公开/公告号 | CN103870465A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 厦门雅迅网络股份有限公司 | 申请人地址 | 福建省厦门市软件园二期观日路46号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 厦门雅迅网络股份有限公司 | 当前权利人 | 厦门雅迅网络股份有限公司 |
发明人 | 程行荣;张文章;余小峰;余顺丽 |
代理机构 | 厦门市首创君合专利事务所有限公司 | 代理人 | 连耀忠 |
摘要
一种非入侵式的数据库爬虫的实现方法,首先,在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表添加至少一个时间戳字段,当应用程序对数据库表中的记录更新的同时将该时间戳字段修改为更新时刻的时间戳,数据库爬虫初始化时,预先设置待跟踪数据变化的时间段包括开始时间和结束时间,同时还设置每次从数据库中拉取的更新记录的最大记录数,数据库爬虫进行拉取更新数据,而后根据预设的参数拉取更新数据并提交给搜索引擎处理。本发明的技术方案通过数据库爬虫主动探测数据库数据的变化,然后数据库爬虫再将变化数据提交给搜索引擎处理,该数据库爬虫对数据库和程序都没有入侵,模块之间的耦合度小,便于系统的扩展和维护。
1.一种非入侵式的数据库爬虫的实现方法,其特征在于:首先,在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表添加至少一个时间戳字段,当应用程序对数据库表中的记录更新的同时将该时间戳字段修改为更新时刻的时间戳,数据库爬虫初始化时,预先设置待跟踪数据变化的时间段包括开始时间和结束时间,同时还设置每次从数据库中拉取的更新记录的最大记录数,数据库爬虫进行拉取更新数据的步骤包括如下:
1)判断开始时间是否大于结束时间,若是,则数据库爬虫的任务结束,停止该爬虫的运行;若否则进入步骤2);
2)数据库爬虫将所述数据库中的时间戳字段值处于开始时间和结束时间之间的记录按顺序排列形成第一列表,依次从第一列表中获取最多为最大记录数的记录形成第二列表;
3)将第二列表中的记录逐条提取记录数据并提交给搜索引擎处理,根据第二列表中时间戳字段值最接近当前所述待跟踪数据变化结束时间的记录的时间戳来设置新的待跟踪数据变化时间段,重复步骤1)。
2.如权利要求1所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:在步骤2)中,数据库爬虫将所述数据库中时间戳字段值处于开始时间和结束时间之间的记录按照该时间戳字段值从小到大的顺序排列形成第一列表,从该第一列表的第0个开始提取最多为最大记录数的记录形成第二列表,该第二列表也按照该时间戳字段值从小到大的顺序排列。
3.如权利要求2所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:在步骤3)中,数据库爬虫将第二列表最后一条记录的时间戳字段的下一时刻值设为新的待跟踪数据变化的开始时间。
4.如权利要求1所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:数据库爬虫初始化时,预先设置一个参数offset来存储当次拉取的记录在第一列表的位置偏移量,该参数的初始值为0,在步骤2)中,数据库爬虫将所述数据库中所述时间戳字段值处于开始时间和结束时间之间的记录按顺序排列形成第一列表,然后从第一列表中的第offset个开始返回一个记录列表形成最多为最大记录数的第二列表。
5.如权利要求4所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:在步骤2)中,所述第一列表和第二列表分别为按所述时间戳字段值从小到大排列的列表。
6.如权利要求4或5所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:在步骤2)中,还包括有判断是否从数据库中拉取到有效的记录的步骤,若没有拉取到有效的记录,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若拉取到有效的记录,则进入步骤3)。
7.如权利要求6所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:数据库爬虫初始化时,预先设置一个参数pre_id来存储前一次拉取得到的第二列表中最后一个记录的编号,该参数的初始值为null,所述判断是否从数据库中拉取到有效的记录的步骤,具体包括如下,
2.1判断第二列表中的记录数是否为0,若是,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若否,则进入步骤2.2;
2.2判断pre_id是否为null,若是,则进入步骤3);若否,则判断是否出现记录拉取异常,若是,则重复步骤2);若否,则进入步骤3)。
8.如权利要求7所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:数据库爬虫初始化时,预先设置一个参数pre_last_modified来存储前一次拉取得到的第二列表中的最后一个记录的时间戳字段值,该参数的初始值为null,在步骤2.2中,判断是否出现记录拉取异常,具体包括如下步骤:
2.2.1判断第二列表中的第一个记录的编号是否等于pre_id,若否,则设置offset、pre_id,pre_last_modified为初始值,而后重复步骤2),若是则进入步骤2.2.2;
2.2.2判断该第二列表的记录数是否为1,若是,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若否,则将该第二列表的中的第一个记录从列表中移除,而后进入步骤3)。
9.如权利要求7或8所述的一种非入侵式的数据库爬虫的实现方法,其特征在于:在步骤3)中,具体包括如下步骤
3.1数据库爬虫依次遍历第二列表中的记录,并判断是否到达该第二列表的末尾,若是,则重复步骤1);若否则进入步骤3.2;
3.2提取第二列表中当前遍历到达的记录,将记录提交给搜索引擎处理,判断该记录的时间戳字段值是否等于pre_last_modified,若否,则将pre_last_modified设置为该时间戳字段值,将offset设置为0,而后进入步骤3.3;若是则将offset加1,而后进入步骤3.3;
3.3设置pre_id为该记录的编号,设置下一次拉取的开始时间为pre_last_modified,重复步骤3.1。
一种非入侵式的数据库爬虫的实现方法\n技术领域\n[0001] 本发明涉及计算机网络技术领域,特别是一种非入侵式的数据库爬虫的实现方法。\n背景技术\n[0002] 目前,在互联网中,很多面向互联网用户提供服务的系统,需要提供对海量数据的实时搜索,而海量数据通常是存储在数据库中,由专门的搜索引擎来提供对数据的索引和检索功能。因此,搜索引擎如何快速地感知数据库中数据的变化并且对发生变化的数据建立索引,是构建一个实时搜索系统的关键。\n[0003] 目前很多系统是通过入侵式方式来实现对数据库的变化数据跟踪。第一种入侵方式是对应用程序的入侵,如图1所示,客户端通过应用程序提交数据更新请求(新增、删除或修改),应用程序先将数据的更新写入数据库,然后再把更新后的数据提交给搜索引擎进行处理。该方式增加应用程序的实现复杂度,同时增加应用程序之间的耦合度,如果有多个应用程序都涉及对数据库的写操作,则每个应用程序都要与搜索引擎进行交互,增加前期开发和后期维护难度。第二种入侵方式是对数据库的入侵,如图2所示,客户端通过应用程序提交数据更新请求(新增、删除或修改),应用程序先将数据的更新写入数据库,然后由数据库将更新后的数据主动推送给搜索引擎。该方式需要修改数据库内部实现或者通过开发数据库插件才能让数据库直接与搜索引擎交互,实现难度大,同时影响数据库的性能,从而影响应用程序对数据库的正常业务访问。\n发明内容\n[0004] 本发明的主要目的在于克服现有技术中的采用入侵方式来实现对数据库的变化数据跟踪,增加了应用程序的实现复杂度和应用程序之间的耦合度,以及前期开发和后期维护难度等,提出一种能跟踪数据库中的数据的历史或实时的变化,并将变化的数据提交给搜索引擎进行处理的非入侵式的数据库爬虫的实现方法。\n[0005] 本发明采用如下技术方案:\n[0006] 一种非入侵式的数据库爬虫的实现方法,其特征在于:首先,在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表添加至少一个时间戳字段,当应用程序对数据库表中的记录更新的同时将该时间戳字段修改为更新时刻的时间戳,数据库爬虫初始化时,预先设置待跟踪数据变化的时间段包括开始时间和结束时间,同时还设置每次从数据库中拉取的更新记录的最大记录数,数据库爬虫进行拉取更新数据的步骤包括如下:\n[0007] 1)判断开始时间是否大于结束时间,若是,则数据库爬虫的任务结束,停止该爬虫的运行;若否则进入步骤2);\n[0008] 2)数据库爬虫将所述数据库中的时间戳字段值处于开始时间和结束时间之间的记录按顺序排列形成第一列表,依次从第一列表中获取最多为最大记录数的记录形成第二列表;\n[0009] 3)将第二列表中的记录逐条提取记录数据并提交给搜索引擎处理,根据第二列表中时间戳字段值最接近当前所述待跟踪数据变化结束时间的记录的时间戳来设置新的待跟踪数据变化时间段,重复步骤1)。\n[0010] 进一步的,在步骤2)中,数据库爬虫将所述数据库中时间戳字段值处于开始时间和结束时间之间的记录按照该时间戳字段值从小到大的顺序排列形成第一列表,从该第一列表的第0个开始提取最多为最大记录数的记录形成第二列表,该第二列表也按照该时间戳字段值从小到大的顺序排列。\n[0011] 进一步的,在步骤3)中,数据库爬虫将第二列表最后一条记录的时间戳字段的下一时刻值设为新的待跟踪数据变化的开始时间。\n[0012] 进一步的,数据库爬虫初始化时,预先设置一个参数offset来存储当次拉取的记录在第一列表的位置偏移量,该参数的初始值为0,在步骤2)中,数据库爬虫将所述数据库中所述时间戳字段值处于开始时间和结束时间之间的记录按顺序排列形成第一列表,然后从第一列表中的第offset个开始返回一个记录列表形成最多为最大记录数的第二列表。\n[0013] 进一步的,在步骤2)中,所述第一列表和第二列表分别为按所述时间戳字段值从小到大排列的列表。\n[0014] 进一步的。在步骤2)中,还包括有判断是否从数据库中拉取到有效的记录的步骤,若没有拉取到有效的记录,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤\n2);若拉取到有效的记录,则进入步骤3)。\n[0015] 进一步的,数据库爬虫初始化时,预先设置一个参数pre_id来存储前一次拉取得到的第二列表中最后一个记录的编号,该参数的初始值为null,所述判断是否从数据库中拉取到有效的记录的步骤,具体包括如下,\n[0016] 2.1判断第二列表中的记录数是否为0,若是,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若否,则进入步骤2.2;\n[0017] 2.2判断pre_id是否为null,若是,则进入步骤3);若否,则判断是否出现记录拉取异常,若是,则重复步骤2);若否,则进入步骤3)。\n[0018] 进一步的,数据库爬虫初始化时,预先设置一个参数pre_last_modified来存储前一次拉取得到的第二列表中的最后一个记录的时间戳字段值,该参数的初始值为null,在步骤2.2中,判断是否出现记录拉取异常,具体包括如下步骤:\n[0019] 2.2.1判断第二列表中的第一个记录的编号是否等于pre_id,若否,则设置offset、pre_id,pre_last_modified为初始值,而后重复步骤2),若是则进入步骤2.2.2;\n[0020] 2.2.2判断该第二列表的记录数是否为1,若是,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若否,则将该第二列表的中的第一个记录从列表中移除,而后进入步骤3)。\n[0021] 进一步的,在步骤3)中,具体包括如下步骤\n[0022] 3.1数据库爬虫依次遍历第二列表中的记录,并判断是否到达该第二列表的末尾,若是,则重复步骤1);若否则进入步骤3.2;\n[0023] 3.2提取第二列表中当前遍历到达的记录,将记录提交给搜索引擎处理,判断该记录的时间戳字段值是否等于pre_last_modified,若否,则将pre_last_modified设置为该时间戳字段值,将offset设置为0,而后进入步骤3.3;若是则将offset加1,而后进入步骤\n3.3;\n[0024] 3.3设置pre_id为该记录的编号,设置下一次拉取的开始时间为pre_last_modified,重复步骤3.1。\n[0025] 由上述对本发明的描述可知,与现有技术相比,本发明具有如下有益效果:\n[0026] 本发明的非入侵式的数据库爬虫的实现方法,通过非入侵式的方法实现一个数据库爬虫,该数据库爬虫能够跟踪数据库中数据的变化,并且将变化的数据提交给搜索引擎进行处理。本技术方案能够在避免对程序入侵和对数据库入侵的前提下,来实现对数据库的数据更新的跟踪。\n[0027] 通过本技术方案设计的算法,有效地克服了通过爬虫方式对数据库进行变化跟踪过程中,容易出现的更新记录被遗漏的情况。同时,该技术方案不仅能够跟踪数据库中某个历史时间段的数据变化,也能够实时跟踪数据库中数据的变化,所以能够作为实时搜索引擎的数据库数据采集方案,实现对信息的实时索引和检索。\n[0028] 另外本发明实现的数据库爬虫,不仅能够对单个数据库进行数据变化的跟踪,也能够对分布式存储系统中的任意多个数据库进行数据变化的跟踪,能够适用于不同应用场合。\n附图说明\n[0029] 图1为应用程序入侵式的数据库中的数据更新跟踪方法;\n[0030] 图2为数据库入侵式的数据库中的数据更新跟踪方法;\n[0031] 图3为本发明的非入侵式的数据库中的数据更新跟踪方法;\n[0032] 图4为本发明的从数据库拉取更新数据的基本方式;\n[0033] 图5采用图4所述方式在两次数据拉取的交界处发生的遗漏情况示意图;\n[0034] 图6为采用本发明另一方式的两次数据拉取的交界处的正常情况示意图;\n[0035] 图7为在两次数据拉取的交界处记录被删时的异常情况;\n[0036] 图8为数据库爬虫在分布式数据存储系统中的应用;\n[0037] 图9为采用本发明另一方式的流程示意图。\n具体实施方式\n[0038] 以下通过具体实施方式对本发明作进一步的描述。\n[0039] 如图3所示,本发明的技术方案通过数据库爬虫主动探测数据库数据的变化,然后数据库爬虫再将变化数据提交给搜索引擎处理,该数据库爬虫对数据库和程序都没有入侵,模块之间的耦合度小,便于系统的扩展和维护。\n[0040] 本技术方案的基本实现方法如下:\n[0041] 在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表(假设为t_obj)添加一个时间戳字段last_modified,该字段存储数据库表中的每个记录最后一次被修改的时间戳,该时间戳精确到毫秒。当应用程序对数据库的数据表中的记录进行写操作(增加、删除或修改)时,必须同时将记录的last_modified字段修改为更新时刻的时间戳。\n[0042] 在数据库爬虫初始化时,必须设置待跟踪数据变化的时间段,其中包括:开始时间start_time和结束时间end_time;同时,还必须设置每次从数据库中拉取的更新数据的最大记录数max_num。\n[0043] 从数据库中拉取更新数据的具体步骤包括如下:\n[0044] 1)判断start_time是否大于end_time,若是,则数据库爬虫的任务结束,停止该爬虫的运行;若否则进入步骤2);\n[0045] 2)数据库爬虫将修改时间last_modified在start_time和end_time范围内的记录按照last_modified从小到大排序形成第一列表,然后从该第一列表中第0个开始获取最多max_num个记录,利用SQL语句表示为:SELECT*FROM t_obj WHERE last_modified>=start_time AND last_modified=start_time AND last_modified
法律信息
- 2018-05-18
- 2015-10-14
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210528786.5
申请日: 2012.12.07
- 2014-06-18
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2011-07-20
|
2010-09-20
| | |
2
| |
2012-09-12
|
2012-02-20
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |