CN103870465B - 一种非入侵式的数据库爬虫的实现方法 - Google Patents
一种非入侵式的数据库爬虫的实现方法 Download PDFInfo
- Publication number
- CN103870465B CN103870465B CN201210528786.5A CN201210528786A CN103870465B CN 103870465 B CN103870465 B CN 103870465B CN 201210528786 A CN201210528786 A CN 201210528786A CN 103870465 B CN103870465 B CN 103870465B
- Authority
- CN
- China
- Prior art keywords
- database
- record
- list
- reptile
- time
- 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
Links
- 241000270322 Lepidosauria Species 0.000 title claims abstract description 72
- 238000000034 method Methods 0.000 title claims abstract description 24
- 238000012545 processing Methods 0.000 claims abstract description 12
- 238000013461 design Methods 0.000 claims abstract description 6
- 241000938605 Crocodylia Species 0.000 claims description 6
- 238000000605 extraction Methods 0.000 claims description 5
- 230000008878 coupling Effects 0.000 abstract description 4
- 238000010168 coupling process Methods 0.000 abstract description 4
- 238000005859 coupling reaction Methods 0.000 abstract description 4
- 238000012423 maintenance Methods 0.000 abstract description 4
- 239000000523 sample Substances 0.000 abstract description 2
- 230000008859 change Effects 0.000 description 6
- 230000009545 invasion Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2322—Optimistic concurrency control using timestamps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种非入侵式的数据库爬虫的实现方法,首先,在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表添加至少一个时间戳字段,当应用程序对数据库表中的记录更新的同时将该时间戳字段修改为更新时刻的时间戳,数据库爬虫初始化时,预先设置待跟踪数据变化的时间段包括开始时间和结束时间,同时还设置每次从数据库中拉取的更新记录的最大记录数,数据库爬虫进行拉取更新数据,而后根据预设的参数拉取更新数据并提交给搜索引擎处理。本发明的技术方案通过数据库爬虫主动探测数据库数据的变化,然后数据库爬虫再将变化数据提交给搜索引擎处理,该数据库爬虫对数据库和程序都没有入侵,模块之间的耦合度小,便于系统的扩展和维护。
Description
技术领域
本发明涉及计算机网络技术领域,特别是一种非入侵式的数据库爬虫的实现方法。
背景技术
目前,在互联网中,很多面向互联网用户提供服务的系统,需要提供对海量数据的实时搜索,而海量数据通常是存储在数据库中,由专门的搜索引擎来提供对数据的索引和检索功能。因此,搜索引擎如何快速地感知数据库中数据的变化并且对发生变化的数据建立索引,是构建一个实时搜索系统的关键。
目前很多系统是通过入侵式方式来实现对数据库的变化数据跟踪。第一种入侵方式是对应用程序的入侵,如图1所示,客户端通过应用程序提交数据更新请求(新增、删除或修改),应用程序先将数据的更新写入数据库,然后再把更新后的数据提交给搜索引擎进行处理。该方式增加应用程序的实现复杂度,同时增加应用程序之间的耦合度,如果有多个应用程序都涉及对数据库的写操作,则每个应用程序都要与搜索引擎进行交互,增加前期开发和后期维护难度。第二种入侵方式是对数据库的入侵,如图2所示,客户端通过应用程序提交数据更新请求(新增、删除或修改),应用程序先将数据的更新写入数据库,然后由数据库将更新后的数据主动推送给搜索引擎。该方式需要修改数据库内部实现或者通过开发数据库插件才能让数据库直接与搜索引擎交互,实现难度大,同时影响数据库的性能,从而影响应用程序对数据库的正常业务访问。
发明内容
本发明的主要目的在于克服现有技术中的采用入侵方式来实现对数据库的变化数据跟踪,增加了应用程序的实现复杂度和应用程序之间的耦合度,以及前期开发和后期维护难度等,提出一种能跟踪数据库中的数据的历史或实时的变化,并将变化的数据提交给搜索引擎进行处理的非入侵式的数据库爬虫的实现方法。
本发明采用如下技术方案:
一种非入侵式的数据库爬虫的实现方法,其特征在于:首先,在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表添加至少一个时间戳字段,当应用程序对数据库表中的记录更新的同时将该时间戳字段修改为更新时刻的时间戳,数据库爬虫初始化时,预先设置待跟踪数据变化的时间段包括开始时间和结束时间,同时还设置每次从数据库中拉取的更新记录的最大记录数,数据库爬虫进行拉取更新数据的步骤包括如下:
1)判断开始时间是否大于结束时间,若是,则数据库爬虫的任务结束,停止该爬虫的运行;若否则进入步骤2);
2)数据库爬虫将所述数据库中的时间戳字段值处于开始时间和结束时间之间的记录按顺序排列形成第一列表,依次从第一列表中获取最多为最大记录数的记录形成第二列表;
3)将第二列表中的记录逐条提取记录数据并提交给搜索引擎处理,根据第二列表中时间戳字段值最接近当前所述待跟踪数据变化结束时间的记录的时间戳来设置新的待跟踪数据变化时间段,重复步骤1)。
进一步的,在步骤2)中,数据库爬虫将所述数据库中时间戳字段值处于开始时间和结束时间之间的记录按照该时间戳字段值从小到大的顺序排列形成第一列表,从该第一列表的第0个开始提取最多为最大记录数的记录形成第二列表,该第二列表也按照该时间戳字段值从小到大的顺序排列。
进一步的,在步骤3)中,数据库爬虫将第二列表最后一条记录的时间戳字段的下一时刻值设为新的待跟踪数据变化的开始时间。
进一步的,数据库爬虫初始化时,预先设置一个参数offset来存储当次拉取的记录在第一列表的位置偏移量,该参数的初始值为0,在步骤2)中,数据库爬虫将所述数据库中所述时间戳字段值处于开始时间和结束时间之间的记录按顺序排列形成第一列表,然后从第一列表中的第offset个开始返回一个记录列表形成最多为最大记录数的第二列表。
进一步的,在步骤2)中,所述第一列表和第二列表分别为按所述时间戳字段值从小到大排列的列表。
进一步的。在步骤2)中,还包括有判断是否从数据库中拉取到有效的记录的步骤,若没有拉取到有效的记录,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若拉取到有效的记录,则进入步骤3)。
进一步的,数据库爬虫初始化时,预先设置一个参数pre_id来存储前一次拉取得到的第二列表中最后一个记录的编号,该参数的初始值为null,所述判断是否从数据库中拉取到有效的记录的步骤,具体包括如下,
2.1判断第二列表中的记录数是否为0,若是,则在一段预设的时间内暂停数据库爬虫的运行,而后重复步骤2);若否,则进入步骤2.2;
2.2判断pre_id是否为null,若是,则进入步骤3);若否,则判断是否出现记录拉取异常,若是,则重复步骤2);若否,则进入步骤3)。
进一步的,数据库爬虫初始化时,预先设置一个参数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)。
进一步的,在步骤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。
由上述对本发明的描述可知,与现有技术相比,本发明具有如下有益效果:
本发明的非入侵式的数据库爬虫的实现方法,通过非入侵式的方法实现一个数据库爬虫,该数据库爬虫能够跟踪数据库中数据的变化,并且将变化的数据提交给搜索引擎进行处理。本技术方案能够在避免对程序入侵和对数据库入侵的前提下,来实现对数据库的数据更新的跟踪。
通过本技术方案设计的算法,有效地克服了通过爬虫方式对数据库进行变化跟踪过程中,容易出现的更新记录被遗漏的情况。同时,该技术方案不仅能够跟踪数据库中某个历史时间段的数据变化,也能够实时跟踪数据库中数据的变化,所以能够作为实时搜索引擎的数据库数据采集方案,实现对信息的实时索引和检索。
另外本发明实现的数据库爬虫,不仅能够对单个数据库进行数据变化的跟踪,也能够对分布式存储系统中的任意多个数据库进行数据变化的跟踪,能够适用于不同应用场合。
附图说明
图1为应用程序入侵式的数据库中的数据更新跟踪方法;
图2为数据库入侵式的数据库中的数据更新跟踪方法;
图3为本发明的非入侵式的数据库中的数据更新跟踪方法;
图4为本发明的从数据库拉取更新数据的基本方式;
图5采用图4所述方式在两次数据拉取的交界处发生的遗漏情况示意图;
图6为采用本发明另一方式的两次数据拉取的交界处的正常情况示意图;
图7为在两次数据拉取的交界处记录被删时的异常情况;
图8为数据库爬虫在分布式数据存储系统中的应用;
图9为采用本发明另一方式的流程示意图。
具体实施方式
以下通过具体实施方式对本发明作进一步的描述。
如图3所示,本发明的技术方案通过数据库爬虫主动探测数据库数据的变化,然后数据库爬虫再将变化数据提交给搜索引擎处理,该数据库爬虫对数据库和程序都没有入侵,模块之间的耦合度小,便于系统的扩展和维护。
本技术方案的基本实现方法如下:
在设计数据库时,对提供给搜索引擎进行索引和检索的数据库表(假设为t_obj)添加一个时间戳字段last_modified,该字段存储数据库表中的每个记录最后一次被修改的时间戳,该时间戳精确到毫秒。当应用程序对数据库的数据表中的记录进行写操作(增加、删除或修改)时,必须同时将记录的last_modified字段修改为更新时刻的时间戳。
在数据库爬虫初始化时,必须设置待跟踪数据变化的时间段,其中包括:开始时间start_time和结束时间end_time;同时,还必须设置每次从数据库中拉取的更新数据的最大记录数max_num。
从数据库中拉取更新数据的具体步骤包括如下:
1)判断start_time是否大于end_time,若是,则数据库爬虫的任务结束,停止该爬虫的运行;若否则进入步骤2);
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<end_time ORDER BY last_modified ASC LIMIT 0,max_num。
3)数据库爬虫根据第二列表中的记录依次逐条提取记录数据并提交给搜索引擎处理,并且将记录集中最后一条记录的时间戳字段的下一时刻值设置为start_time的新值,重复步骤2),不断跟踪并拉取数据库中数据的变化,如图4所示。
上述方案在对数据库高并发进行写操作的情况下,会出现数据库表中的部分记录更新被遗漏的情况。目前,各数据库管理系统中记录的时间戳都是有精度限制,通常只能精确到毫秒级别,然而按照目前计算机的处理速度,能在1毫秒内往数据库进行写入操作达到成百上千次,所以依照上面的实现方法,在两次从数据库中拉取数据更新的时间节点处会出现记录更新被遗漏的情况,如图5所示。在第n次拉取和第n+1拉取的交界处,假设第n次拉取得到的记录列表中最后一条记录的时间戳为t,则第n+1次拉取的开始时间start_time=Tn+1=t+1。假设在t时刻同时有多条记录被更新,在第n次拉取过程中只获取到t时刻的前面几个记录,而第n+1次拉取过程只从t+1时刻开始拉取,此时,t时刻后面几个记录就出现被遗漏的情况。所以为了解决该问题,需要对前面的方案进行改进,提出另一改进实施方式,具体实现方法如下(参照图9)
在数据库爬虫启动时,进行参数初始化:拉取开始时间start_time;拉取结束时间end_time;拉取的记录在第一列表的位置偏移量offset,即第一个返回记录在第一列表中的偏移量offset,初始值为0;单次拉取的最大记录数max_num;前一次拉取得到的第二列表中的最后一个记录的编号pre_id,初始值为null;前一次拉取得到的第二列表中的最后一个记录的字段时间戳pre_last_modified,初始值为null。
1)如果start_time大于end_time,爬虫的任务结束,停止该爬虫的运行;否则,进入步骤2)。
2)将修改时间last_modified在start_time和end_time范围内的记录按照last_modified从小到大排序形成第一列表,然后从第一列表中第offset个开始获取最多max_num个记录,返回一个记录列表形成第二列表,该第二列表中的记录按照last_modified从小到大排序。该步骤利用SQL语句表示为:SELECT*FROM t_obj WHERE last_modified>=start_time AND last_modified<end_time ORDER BY last_modified ASC LIMIToffset,max_num。
2.1判断第二列表中的记录数是否为0,若是,则在一段预设的时间内(如3秒中)暂停数据库爬虫的运行,而后重复步骤2),继续跟踪数据库中的数据更新;若否,则进入步骤2.2;
2.2判断pre_id是否等于null,若是3.1,进入步骤;若否,则进入步骤2.2.1;
2.2.1判断第二列表中的第一个记录的编号是否等于pre_id,若否,则设置offset为0,设置pre_id为null,设置pre_last_modified为null,然后跳转到步骤2),若是,则进入步骤2.2.2;
2.2.2判断第二列表的记录数是否等于1,若是,则让该爬虫暂停一段预设的时间(如3秒中),而后重复步骤2),继续跟踪数据库中的数据更新;若否,则该记录列表中的记录数大于1,将该记录列表中的第一个记录从列表中移除,再跳转到步骤3.1进行处理;
3.1数据库爬虫依次遍历该第二列表中的记录,并判断是否到达该第二列表的末尾,若是,则重复步骤1);若否,则进入步骤3.2;
3.2提取第二列表中当前遍历到的记录,将该记录提交给搜索引擎处理,判断该记录的last_modified是否等于pre_last_modified,若否,则将pre_last_modified设置为该记录的last_modified值,并且将offset设置为0,而后进入步骤3.3;若是,即该记录的last_modified等于pre_last_modified,则将offset值加1,而后进入步骤3.3;
3.3设置pre_id为该记录的编号,设置start_time为pre_last_modified值,然后重复步骤3.1继续遍历处理第二列表中剩余的记录。
上述步骤1中,由start_time和end_time指定的时间段表示爬虫需要跟踪该时间段内数据库中变化的数据。如果start_time和end_time指定某个历史时间段,则爬虫就从数据库中获取在该时间段内变化的数据,通常在让搜索引擎通过爬虫对数据库中的数据第一次建立索引,或者在搜索引擎中的索引数据被破坏时需要重新对数据库中的数据建立索引时,才会采用这种设置方法。如果start_time设置为当前时间,而end_time设置为未来的某个时间(如100年后的某个时刻),则爬虫则会实时跟踪数据库中变化的数据,让搜索引擎得到实时得到最新的数据,从而实现对数据库中存储的信息进行实时索引和检索。
上述步骤2)中,如果从数据库中拉取的记录列表即第二列表中的有效记录数为0时,表示在数据库中没有侦测到满足条件的数据更新,则让爬虫暂停一段预设的时间后再在到数据库中去探测数据更新,而不是马上让爬虫就去数据库中侦测数据更新,这样能够减轻对数据库和爬虫程序所在的机器资源的消耗,提高工作效率。
通过上述步骤3)中,即步骤3.1至3.3,在依次遍历完当前拉取的记录列表后,会将start_time设置为当前拉取的记录列表中的最后一个记录的last_modified值,即让爬虫在下一次从数据库中拉取数据时,从当前列表的最后一个记录的last_modified时刻开始获取,而不是从当前列表的最后一个记录的last_modified的下一时刻开始来取。同时,如果当前列表的最后一个记录的last_modified时刻存在多个记录,如图6所示,利用offset参数让数据库跳过与最后一个记录的last_modified相同的前面的记录,避免重复拉取。但是,在正常情况下,在下一次拉取过程中,当前第二列表的最后一个记录会被下一次拉取过程时作为第一个记录拉取回来,目的是为了在步骤2.2中作异常判断。
上述步骤2.2中,如果记录列表中第一个记录的编号不等于pre_id,表明当前拉取的第二列表中的第一个记录并不是上一次拉取的第二列表中的最后一个记录,此时,通常是上一次拉取的第二列表中的最后一个记录,或其之前的与之last_modified相同的记录,发生被再次修改或被删除的情况。如图7所示,第n次拉取的记录r1,r2在数据库中被删除时,第n+1次拉取时的第一个记录就不是第n次拉取的最后一个记录r3而是r5,此时r4记录就被遗漏了,所以为了纠正该异常情况,就必须放弃该次拉取的结果,并修正offset为0,让下次拉取时,从t时刻的第0个位置开始拉取。
在实际的应用系统中,本发明的数据库爬虫可以部署任意多个,让不同的爬虫跟踪不同的数据库,或者同一数据库的不同时间段的数据变化,从而实现系统的负载均衡和扩展。图8展示了分布式数据存储系统中数据库爬虫的实现方法。
在图8所示的系统中,数据记录根据id(即记录的编号)分布存储在n个不同的数据库组中,其中由id与n的取模得到的值x决定记录存储在第x组数据库中。由此,实现了一个分布式存储系统。
如图8所示。在每个数据库组由1个主数据库和2个从数据库组成,应用程序只往主数据库中写数据,而主数据库实时地将数据变化同步到2个从数据库中(备注:数据库之间的同步在不同的数据库管理系统中有不同的实现)。应用程序可以从主数据库或者从从数据库中读取数据,从而减轻主数据库的压力。同样地,让数据库爬虫从从数据库中而不是从主数据库中跟踪数据的变化,能够有效地避免数据库爬虫影响应用程序在数据库的正常业务访问。
如图8所示,在系统中部署多个数据库爬虫,来分别跟踪不同数据库中数据变化,甚至可以针对其中某个数据库组部署多个数据库爬虫,来分别跟踪不同时间段的数据变化.
上述仅为本发明的两个具体实施方式,但本发明的设计构思并不局限于此,凡利用此构思对本发明进行非实质性的改动,均应属于侵犯本发明保护范围的行为。
Claims (9)
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。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210528786.5A CN103870465B (zh) | 2012-12-07 | 2012-12-07 | 一种非入侵式的数据库爬虫的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210528786.5A CN103870465B (zh) | 2012-12-07 | 2012-12-07 | 一种非入侵式的数据库爬虫的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103870465A CN103870465A (zh) | 2014-06-18 |
CN103870465B true CN103870465B (zh) | 2018-05-18 |
Family
ID=50909009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210528786.5A Active CN103870465B (zh) | 2012-12-07 | 2012-12-07 | 一种非入侵式的数据库爬虫的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103870465B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106357463B (zh) * | 2016-11-07 | 2019-10-25 | 深圳盛灿科技股份有限公司 | 非入侵式的访问链路跟踪实现方法及其系统 |
CN108153817B (zh) * | 2017-11-29 | 2021-08-10 | 成都东方盛行电子有限责任公司 | 一种智能网页数据采集方法 |
CN109558415A (zh) * | 2018-11-20 | 2019-04-02 | 北京松鼠山科技有限公司 | 知识库更新方法及装置 |
CN109992705B (zh) * | 2019-03-14 | 2021-03-05 | 福建省天奕网络科技有限公司 | 一种历史数据的追溯爬取方法及终端 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6629092B1 (en) * | 1999-10-13 | 2003-09-30 | Andrew Berke | Search engine |
CN102129442B (zh) * | 2010-09-20 | 2012-08-22 | 华为技术有限公司 | 一种分布式数据库系统和数据访问方法 |
CN102662946A (zh) * | 2012-02-20 | 2012-09-12 | 北京地拓科技发展有限公司 | 一种自动监测数据库中记录变化的方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020169777A1 (en) * | 2001-03-15 | 2002-11-14 | Liviu Balajel | Database architecture and method |
-
2012
- 2012-12-07 CN CN201210528786.5A patent/CN103870465B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6629092B1 (en) * | 1999-10-13 | 2003-09-30 | Andrew Berke | Search engine |
CN102129442B (zh) * | 2010-09-20 | 2012-08-22 | 华为技术有限公司 | 一种分布式数据库系统和数据访问方法 |
CN102662946A (zh) * | 2012-02-20 | 2012-09-12 | 北京地拓科技发展有限公司 | 一种自动监测数据库中记录变化的方法和系统 |
Non-Patent Citations (1)
Title |
---|
基于网络爬虫的地名数据库维护方法;张春菊等;《地球信息科学学报》;20110831;第492-499页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103870465A (zh) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521405B (zh) | 支持高速加载的海量结构化数据存储、查询方法和系统 | |
CN102521406B (zh) | 海量结构化数据复杂查询任务的分布式查询方法和系统 | |
CN103853727B (zh) | 提高大数据量查询性能的方法及系统 | |
CN103460208B (zh) | 用于将数据加载到时态数据仓库的方法和系统 | |
CN100562874C (zh) | 一种增量数据捕获方法和系统 | |
CN103870465B (zh) | 一种非入侵式的数据库爬虫的实现方法 | |
CN105677918A (zh) | 一种基于Kafka和Quartz的分布式爬虫架构及其实现方法 | |
CN102184222B (zh) | 一种在大数据量存储中快速检索的方法 | |
CN112613038B (zh) | 一种基于知识图谱的安全漏洞分析方法 | |
CN102521374B (zh) | 基于关系型联机分析处理的智能数据聚集方法及其系统 | |
JP2004518226A (ja) | データベースシステムおよびクエリオプティマイザ | |
CN105956123A (zh) | 基于局部更新软件的数据处理方法及装置 | |
US20180165333A1 (en) | Big data calculation method and system | |
CN108319652A (zh) | 一种基于hdfs的电梯数据的列式文件存储系统及方法 | |
CN107256263A (zh) | 互联网热点信息自动监测方法 | |
Yadamjav et al. | Querying recurrent convoys over trajectory data | |
CN106484694A (zh) | 基于分布式数据库的全文搜索方法及系统 | |
CN105095457B (zh) | 历史数据存储管理方法 | |
US20160078071A1 (en) | Large scale offline retrieval of machine operational information | |
CN110032586B (zh) | 储能电芯数据的存储方法、查询方法及采集存储系统 | |
CN109902116B (zh) | 一种生态设计知识主动推送系统和方法 | |
EP3719663A1 (en) | Iterative multi-attribute index selection for large database systems | |
Mavroudopoulos et al. | Sequence detection in event log files. | |
CN110008239A (zh) | 基于预计算优化的逻辑执行优化方法及系统 | |
CN109325036A (zh) | 一种实现实时数据同步的系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 303-e, Zone C, innovation building, software park, Xiamen Torch hi tech Zone, Xiamen, Fujian, 361000 Patentee after: Xiamen Yaxun Zhilian Technology Co.,Ltd. Country or region after: China Address before: No.46 guanri Road, phase II, software park, Xiamen City, Fujian Province, 361000 Patentee before: XIAMEN YAXON NETWORK Co.,Ltd. Country or region before: China |
|
CP03 | Change of name, title or address |