一种实现高性能数据库最终一致性全文检索的方法
技术领域
本发明涉及一种数据库的检索方法,特别涉及一种可实现高性能数据库最终一致性的全文检索方法。
背景技术
在全球,新型分布式数据库存在多种不同的技术产品,例如:MongoDB、Cassandra、HBase等。国内则包括SequoiaDB巨杉数据库,阿里巴巴的OceanBase等。这些数据库的核心功能都是记录的存储与检索。
一般来说,数据库的精确检索机制包括对字段的等于、大于小于、大于等于、小于等于、不等于等操作,而模糊查询一般支持SQL的LIKE机制或正则表达式。在执行效率上,模糊查询的效率远远低于建立好索引的精确检索,这是由于大部分数据库使用树形索引、或bitmap索引,对于支持模糊检索的倒排索引支持不多。
在现有应用程序中支持全文检索有两种形式:一种形式是在业务端以双写的方式,一方面向数据库写入记录,得到返回结果中的记录ID后,再向搜索引擎写入一次。这样搜索引擎就有了一个记录ID,全文检索出ID后再从数据库查一遍,这样就可得到最终的检索结果。这种做法虽然简单、方便,但可能造成存储数据的不一致性,尤其是在并发存在的场景下很容易出现多个任务对同一条记录进行更改,造成搜索引擎和数据库产生不一致。最坏情况下,如果应用服务器在写入数据库后崩溃,没有来得及写入到搜索引擎中,那么搜索引擎就会检索不到这条记录,造成检索失败。另一种形式是在数据库内部直接实现倒排索引,但开发和维护难度则大大增加,后期使用成本和使用复杂性高,普及性差。
如何改善这一情况,开发一种针对高性能数据库的全文检索模式,就成为本发明所要解决的问题。
发明内容
鉴于上述现有情况和不足,本发明旨在提供一种在不直接实现内置倒排索引的前提下,结合数据库内部处理机制,实现数据库与第三方搜索引擎之间的数据同步,并利用第三方搜索引擎可靠、稳定的实现高性能数据库最终一致性的全文检索方法,以消除现有传统双写机制带来的稳定性和一致性差的问题,大幅提升检索性能,保证检索质量。
本发明的目的是利用搜索引擎进行全文检索,而如何设计数据库内部的数据处理流程,确保数据库与搜索引擎之间的安全交互,确保即使在数据切分、节点崩溃、网络异常等情况下也不会出现问题,确保数据库引擎与搜索引擎之间的数据一致性和同步性,且对于应用程序做到完全透明,都是本发明所述方法需要考虑和解决的问题。
本发明是通过以下技术方案来实现的:
一种实现高性能数据库最终一致性全文检索的方法,具体步骤包括:
步骤1、将搜索引擎通过连接器与数据库连接。
步骤2、当数据写入数据库后记录入一个临时循环日志文件中,临时循环日志文件中包括有需要索引的字段内容以及记录的ID。
步骤3、使用数据库内的工具顺序读取临时循环日志文件,并根据对临时循环日志文件的操作通过连接器将相应需要检索的字段内容写入到搜索引擎中,同时,工具记录已完成索引的临时循环日志文件偏移。
步骤4、工具根据已完成索引的临时循环日志文件偏移,持续读取临时循环日志文件直到最后,并将每次操作的相应内容通过连接器写入到搜索引擎中,完成搜索引擎内数据的建立。
步骤5、工具监听后续数据到来,如有数据来到,重复上述步骤4;否则,继续步骤6。
步骤6、通过搜索引擎键入要检索的关键字,得到返回的主键ID,将主键ID通过连接器输入到数据库,并通过连接器读取该主键ID对应的数据库记录,完成全文检索。
所述步骤2还包括:如果数据在写入临时循环日志之前数据库发生故障,在下次数据库恢复时进行回滚,完成数据库和临时循环日志文件的建立。
所述步骤3还包括:如果在读取临时循环日志文件时连接器发生故障,数据库重启后,工具根据已完成索引的临时循环日志文件偏移读取后续日志内数据并写入到搜索引擎中。
所述步骤3还包括:如果工具在写入搜索引擎后、更新偏移前崩溃,数据库重启,工具根据之前记录的最后成功偏移重新读取相应的临时循环日志文件的内容并写入到搜索引擎中,具体写入过程包括:如工具为INSERT操作,此操作被工具端忽略;如工具为UPDATE操作,此操作被确认执行;如工具为DELETE操作,此操作被工具端忽略。
所述步骤2中,字段内容包括:一个作为记录指针的记录RID,包括数据页和偏移,一个代表增删改操作的操作符和一个相对于增改操作需要索引的全文字段的长字符串。
本发明所述一种实现高性能数据库最终一致性全文检索的方法的有益效果包括:
1、有效实现了搜索引擎内数据内容与数据库中需要进行全文检索字段内容的一致性,保证了检索过程的准确性,提高了检索效率。
2、全面消除和克服了数据建设和传送过程中可能出现的各种问题,保证了数据库以及搜索引擎中数据建立的完整性和准确性。
3、搜索引擎对业务完全透明,业务不需要进行双写,仅需要写入数据库后即可返回,简化了数据建立和使用过程。
4、避免了数据库内部直接使用倒排索引方式带来的开发和维护难度大的问题以及传统双写模式带来的稳定性差的弊端。
具体实施方式
本发明的中心思想是:通过对临时循环日志文件复制的方式,使数据库与搜索引擎的数据保持最终一致,为搜索引擎的正常、准确搜索提供支持。
本发明所述的一种实现高性能数据库最终一致性全文检索的方法,具体步骤包括:
步骤1、将搜索引擎通过连接器与数据库连接。
连接器作为一个独立运行的进程,随着数据库的启动而启动,并作为传输通道将数据库与搜索引擎联系在一起。
步骤2、当数据写入数据库后记录入一个临时循环日志文件中,临时循环日志文件中包括有需要索引的字段内容以及记录的ID,字段内容包括:一个作为记录指针的记录RID,包括数据页和偏移;一个代表增删改操作的操作符;一个相对于增改操作需要索引的全文字段的长字符串。其中,如果数据在写入临时循环日志之前数据库发生故障,则在下次数据库恢复时进行回滚,完成数据库和临时循环日志文件的建立。
当然,如果数据库在工具读取临时循环日志文件之后故障,则数据库与搜索引擎中均会存在该记录。由于工具是独立进程,所以不需要做特殊处理。
步骤3、使用数据库内的工具顺序读取临时循环日志文件,并根据对临时循环日志文件的操作通过连接器将相应需要检索字段的内容写入到搜索引擎中,同时,工具记录已完成索引的临时循环日志文件偏移。如果在读取临时循环日志文件时连接器发生故障,即传送通道发生故障,则数据库重启后,工具根据已完成索引的临时循环日志文件偏移读取后续日志内数据并写入到搜索引擎中;如果工具在写入搜索引擎后、更新偏移前崩溃,则内容已被写入搜索引擎中,而偏移则无记录,此时数据库重启,工具根据之前记录的最后成功偏移重新读取相应的临时循环日志文件的内容并写入到搜索引擎中,其具体写入过程包括:如工具为INSERT操作,由于增加的内容已被写入到搜索引擎中,此操作被工具端忽略;如工具为UPDATE操作,由于更新的内容已被写入到搜索引擎中,再做一次更新,此操作被确认执行;如工具为DELETE操作,由于搜索引擎中相应内容已被删除,再进行删除时将找不到相应内容,故此操作被工具端忽略。
步骤4、工具根据已完成索引的临时循环日志文件偏移,持续读取临时循环日志文件直到最后,并将每次操作的相应内容通过连接器写入到搜索引擎中,完成搜索引擎内数据的建立。
此时搜索引擎内数据内容与数据库中需要进行全文检索字段的内容保持一致,为后续准确检索提供了依据。
步骤5、工具继续监听后续的数据到来,如有数据来到,重复上述步骤4;否则,继续步骤6。
步骤6、通过搜索引擎键入要检索的关键字,得到返回的主键ID,将主键ID通过连接器输入到数据库,并通过连接器读取该主键ID对应的数据库记录,全文检索完成。
整个过程在数据库内工具的帮助下,在连接器的支持下,通过临时循环日志文件的建立,使搜索引擎内的数据内容始终与数据库中需要进行全文检索字段的内容保持一致,保证了检索过程的准确性,提高了检索效率。