基于MySQL存储引擎的融合查询方法

文档序号:6612407阅读:238来源:国知局
专利名称:基于MySQL存储引擎的融合查询方法
技术领域
本发明涉及数据库系统、全文检索与信息提取系统技术,特别是涉及一种基 于MySQL存储引擎的融合查询方法。
技术背景数据库系统和全文检索系统是计算机信息管理中最重要的两个系统。 一直以 来,这两个系统的发展基本上都是相互独立的,在其发展目标的研究内容上也 基本上没有交集。数据库系统主要处理高度结构化的数据,主要研究各类精确 高效的处理这类数据的方法。全文检索系统及以此为基础的信息提取领域则主 要处理非结构化的数据,主要研究各类查询结果排序和结果优劣的衡量方法。随着互联网技术的发展和Web应用的复杂化、诸如博客等内容管理系统与应 用的兴起,越来越多的应用迫切需要一个综合性系统能够统一处理结构化数据 和非结构化数据,提供求解同时涉及这两类数据的融合查询的能力。但由于数 据库与全文检索系统长期并行发展,目前尚缺乏一个成熟的融合查询解决方案。目前如Omcle、 DB2等成熟的商业数据库通过在关系数据库中引入提供全文 检索功能的扩展模块来实现部分融合查询功能。 一方面这一方法需要开发一个 完整的全文检索系统,实施难度高,且不利于充分利用全文检索领域已有研究 与实现成果。另一方面,这类过于集成的解决方案也限制了系统的灵活性,用 户无法选择其它的全文检索系统,也难以调整结构化数据与非结构化数据之间 的关联与同步关系,难以满足不同的应用需求。由于数据库与全文检索系统在各自的领域都已经历经几十年的发展,积累了 众多成熟的技术,因此融合查询实现应最大限度的利用两个系统已有的强大功 能,而非自底向上再开发一个全新的系统。 发明内容本发明的目的在于提供一种基于MySQL存储引擎实现融合查询的方法。 本发明解决其技术问题采用的技术方案是-1、 一种基于MySQL存储引擎和融合查询方法,该方法的步骤如下1) 根据应用对建索引性能、查询性能和数据实时性的要求,选择一个满足 融合査询需求的全文检索系统;2) 开发一个MySQL存储引擎实现MySQL与上述全文检索系统的交互;3) 分析应用主题域,确定要进行融合查询的原始数据库表或视图,确定表的标识字段和结构化与非结构化信息分量;4) 定义数据同步策略,开发"数据发布器"根据同步策略建立融合查询系统 并维持融合查询系统与原始数据库表或视图的同步关系;5) 应用程序使用标准SQL访问融合查询系统MySQL,以一个系统一个接口实现纯结构化、纯非结构化和融合三类查询的求解。2、步骤1)中选用的全文检索系统应满足以下条件支持多个文档域,支 持在一个或多个域中进行检索,现有大多数全文检索系统都满足这一需求。步骤2)中的存储引擎只负责以下两个任务a)将全文检索请求转发至全 文检索系统;b)将全文检索系统查询结构封装为MySQL内部的关系表示形式。4、 步骤2)中开发的存储引擎需要实现MySQL存储引擎接口中的以下方 法:a)实现index—read接口 ,转发全文检索请求到全文检索系统;b)实现index—next 接口,从全文检索系统中读取下一条全文检索结果,并转化为MySQL内部的关 系表示形式。5、 步骤3)的具体实施应满足如下需求1) 要进行融合查询的数据库表或视图需满足以下条件必须拥有一个为整数 类型字段,且该字段的值能够唯一确定一条记录的字段为表或视图的标识字段, 即该字段为候选码之一;2) 所有内容为字符串类型且需要进行关键字检索的字段作为表的非结构化信 息分量;所有需要进行结构化查询或需要在查询结果中返回的字段作为表的结 构化信息分量,结构化信息分量和非结构化信息分量可以有交集;3)标识字段不能被更新。6、 步骤4)中的数据同步策略包含以下内容1) 非结构化信息分量定时重建的周期与是否需要实时同步;2) 结构化信息分量定时重建的周期与是否需要实时同步。7、 步骤4)中"数据发布器"同步应用原始数据库存储与融合查询系统中数据 的方法如下1) 针对原始表或视图中的结构化信息分量,"数据发布器"在融合査询系统 MySQL中建立一张对应的"数据库实体表",该表包含原始表或视图中结构化信 息分量包含的字段及标识字段;2) 针对原始表或视图中的结构化信息分量,"数据发布器"在融合査询系统 MySQL中建立一张对应的"全文检索链接表",且指定该表使用步骤2)中开发的
存储引擎。"全文检索链接表"包含以下两个字段a)原始表或视图中的标识字段;b)—个为字符串类型的全文检索字符串字段,名为Query;3) 若数据同步策略要求结构化信息分量需要定时重建,则按指定周期选取原 始表或视图中的结构化信息分量包含的字段及标识字段插入到整合查询系统的 "数据库实体表"中;4) 若数据同步策略要求非结构化信息分量需要定时重建,则按指定周期选择 原始表或视图中的非结构化信息分量包含的字段及标识字段插入到全文检索系 统中,其中标识字段用作全文检索的文档ID,非结构化信息分量包含的每个字 段作为文档的一个域;5) 若数据同步策略要求结构化信息分量需要实时同步,则在原始数据库中新 建一张"结构化信息实时更新日志表",表中以下两个字段a)—个名为ID的自 动递增类型的字段;b)—个名为SQL的字符串类型的字段。同时在原始表或视 图上定义一个触发器,该触发器的特征为a)触发事件为记录插入、删除或更新 操作;b)当且仅当操作涉及数据的结构化信息分量或标识字段时,触发器向"结 构化信息实时更新日志表"中插入一个记录,其SQL字段的内容描述对原始表或 视图的操作。"数据发布器"实时按ID升序读取"结构化信息实时更新日志表"中 日志,应用到"数据库实体表"中后将这一 日志从"结构化信息实时更新日志表"6)若数据同步策略要求非结构化信息分量需要实时同步,则在原始数据库中 新建一张"非结构化信息实时更新日志表",模式与"结构化信息实时更新日志表" 相同。同时在原始表或视图上定义一个触发器,该触发器的触发事件和对插入 与删除操作的处理与4)类似,但只在操作涉及数据的非结构化信息分量或标识 字段时触发器生成日志记录。"数据发布器"实时按ID升序读取"非结构化信息实 时更新日志表"中日志,根据日志内容处理后将日志从"非结构化信息实时更新日 志表"中删除。8、歩骤5)中使用融合查询系统进行各类査询的方法如下1) 不需访问非结构化信息分量包含的字段的纯结构化查询使用通用的SQL 访问"数据库实体表",由MySQL本身提供的功能处理;2) 只需在非结构化信息分量包含的字段内进行关键字检索的纯非结构化查 询使用以下查询"SELECT标识字段FROM全文检索链接表WHERE Query= 关键字检索条件"。全文检索存储引擎即会将这一全文检索请求转发至全文检索 系统,由全文检索系统完成非结构化查询;3)同时需要进行关键字检索和结构化査询的融合查询使用"数据库实体表"和"全文检索链接表"的联合实现,基本的查询模式为"SELECT ... FROM数据库 实体表INNER JOIN全文检索链接表USING标识字段WHERE全文检索链 接表.Query-关键字检索条件AND数据库实体表上的其它条件"。 本发明具有的有益效果是充分利用了数据库和全文检索和现有研究和实现成果,基于已有系统可以 非常方便快捷的提供融合査询能力,并且不依赖于一种特有的全文检索系统实 现,使用者可根据应用需求选择最合适的全文检索系统,提供最好的性能。


图1是本发明实施步骤流程图。图2是融合查询系统工作原理示意图。
具体实施方式
现结合具体实施和示例对本发明的技术方案作进一步说明。 1、如图1与图2所示,本发明具体实施过程和工作原理如下1) 根据应用对建索引性能、査询性能和数据实时性的要求,选择一个满足融 合查询需求的全文检索系统;2) 开发一个MySQL全文检索存储引擎实现MySQL与上述步骤l)中选取的 全文检索系统的交互;3) 分析应用主题域,确定要进行融合査询的原始数据库表或视图,确定表的 标识字段和结构化与非结构化信息分量。结构化信息分量存储到数据库实体表 中,非结构化信息分量存储到全文检索系统中,在MySQL内部以全文检索链接4) 定义数据同步策略,开发数据发布器根据同步策略建立融合査询系统并维 持融合査询系统与原始数据库表或视图的同步关系。对原始数据表或视图的更 新操作使用触发器插入到更新日志表中,数据发布器实时读取更新日志表内容, 更新融合检索系统中的数据;5) 应用程序使用标准SQL访问融合查询系统MySQL,以一个系统一个接口 实现纯结构化、纯非结构化和融合三类查询的求解。步骤1)中选用的全文检索系统应满足以下条件a)支持多个文档域,支 持在一个或多个域中进行检索。现有大多数全文检索系统都满足这一需求,可根据具体应用需求从中选取,如1)若应用要求高的查询性能和数据实时性,可以选用Lucene;2)若应用要求高的建索引性能,可以选用Sphinx;步骤2)中的存储引擎只负责以下两个任务a)将全文检索请求转发至全 文检索系统;b)将全文检索系统査询结构封装为MySQL内部的关系表示形式;步骤2)中开发的存储引擎需要实现MySQL存储引擎接口中的以下方法 a)实现index—read接口 ,转发全文检索请求到全文检索系统;b)实现index—next 接口,从全文检索系统中读取下一条全文检索结果,并转化为MySQL内部的关 系表不形式;步骤3)的具体实施应满足如下需求1) 要进行融合查询的数据库表或视图需满足以下条件a)必须拥有一个为整数类型字段,且该字段的值能够唯一确定一条记录的字段为表或视图的标识字 段,即该字段为候选码之一;2) 所有内容为字符串类型且需要进行关键字检索的字段作为表的非结构化 信息分量;所有需要进行结构化査询或需要在查询结果中返回的字段作为表的 结构化信息分量,结构化信息分量和非结构化信息分量可以有交集;3) 标识字段不能被更新;以Web应用中常用的用户信息为例,设步骤3)中原始数据库表定义为 User(ID (标识)、Name (用户名)、Age (年龄)、Hobby (兴趣爱好)、Online (是否在线)),其中ID为标识字段。应用要求能够根据Name、 Age和Online 进行结构化查询,根据Hobby进行关键字查询,则该表的结构化信息分量包含 ID、 Name、 Age、 Online这些字段,非结构化信息分量包含ID和Hobby这两个 字段。步骤4)中的数据同步策略包含以下内容1) 非结构化信息分量定时重建的周期与是否需要实时同步;2) 结构化信息分量定时重建的周期与是否需要实时同步;歩骤4)中"数据发布器"同步应用原始数据库存储与融合查询系统中数据的 方法如下1) 针对原始表或视图中的结构化信息分量,"数据发布器"在融合査询系统MySQL中建立一张对应的"数据库实体表",该表包含原始表或视图中结构化信 息分量包含的字段及标识字段;2) 针对原始表或视图中的结构化信息分量,"数据发布器"在融合查询系统 MySQL中建立一张对应的"全文检索链接表",且指定该表使用步骤2)中开发的 存储引擎。"全文检索链接表"包含以下两个字段a)原始表或视图中的标识字段;
b)—个为字符串类型的全文检索字符串字段,名为Query;3) 若数据同步策略要求结构化信息分量需要定时重建,则按指定周期选取原 始表或视图中的结构化信息分量包含的字段及标识字段插入到整合査询系统的"数据库实体表"中;4) 若数据同步策略要求非结构化信息分量需要定时重建,则按指定周期选择原始表或视图中的非结构化信息分量包含的字段及标识字段插入到全文检索系统中,其中标识字段用作全文检索的文档ID,非结构化信息分量包含的每个字 段作为文档的一个域;5) 若数据同步策略要求结构化信息分量需要实时同步,则在原始数据库中新 建一张"结构化信息实时更新日志表",表中以下两个字段a)—个名为ID的自 动递增类型的字段;b)—个名为SQL的字符串类型的字段。同时在原始表或视 图上定义一个触发器,该触发器的特征为a)触发事件为记录插入、删除或更新 操作;b)当且仅当操作涉及数据的结构化信息分量或标识字段时,触发器向"结 构化信息实时更新日志表"中插入一个记录,其SQL字段的内容描述对原始表或 视图的操作。"数据发布器"实时按ID升序读取"结构化信息实时更新日志表"中 日志,应用到"数据库实体表"中后将这一日志从"结构化信息实时更新日志表"6) 若数据同步策略要求非结构化信息分量需要实时同步,则在原始数据库中 新建一张"非结构化信息实时更新日志表",模式与"结构化信息实时更新日志表" 相同。同时在原始表或视图上定义一个触发器,该触发器的触发事件和对插入 与删除操作的处理与4)类似,但只在操作涉及数据的非结构化信息分量或标识 字段时触发器生成日志记录。"数据发布器"实时按ID升序读取"非结构化信息实 时更新日志表"中日志,根据日志内容处理后将日志从"非结构化信息实时更新日 志表"中删除;以用户信息检索为例,步骤4)具体实施方式
如下1) "数据库实体表"可定义为UserEntity(ID、 Name、 Age、 Online),"全文检 索链接表"可定义为UserFT(ID、 Query);2) 重建结构化信息分量时只需要执行以下SQL语句INSERT INTO UserEntity SELECT ID, Name, Age, Online FROM User。重建非结构化信息分量 只需要从User表中选出ID和Hobby字段,其中ID的值作为全文检索系统的文 档ID、 Hobby字段内容作为全文检索文档的Hobby域插入到全文检索系统中;3) "数据发布器"可定义"结构化信息实时更新日志表"Slog(ID, Sql),并在
User表上定义触发器实现如下行为a)对User表的INSERT操作在Slog表中 产 生 如 下 日 志 "INSERT INTO UserEntity VALUES(@ID,@Name,@Age,@Online)",其中(^ID等为被插入记录中对应属性 的值;b)对User表的UPDATE操作在Slog表中产生如下日志"UPDATE UserEntity SET Name=@Name, Age=@Age, Online=@Online WHERE ID=@ID"; c)对User表的DELETE操作在Slog表中产生如下日志"DELETE FROM UserEntity WHERE ID = @ID";4)"数据发布器"可定义"非结构化信息实时更新日志表"NSlog(ID, Sql),并 在User表上定义触发器实现如下行为a)对User表的INSERT操作在NSlog 表中产生如下日志"INSERT INTO UserFT VALUES(@ID,@Hobby)",其中@10 等为被插入记录中对应属性的值;b)对User表的UPDATE操作在NSlog表中 产生如下两条日志"DELETE FROM UserFT WHERE H^(pD"和"INSERT INTO UserFT VALUES(@ID,@Hobby),,; c)对User表的DELETE操作在NSlog表中 产生如下日志"DELETE FROM UserFT WHERE ID = @ID";步骤5)中使用融合査询系统进行各类查询的方法如下1) 不需访问非结构化信息分量包含的字段的纯结构化査询使用通用的SQL 访问"数据库实体表",由MySQL本身提供的功能处理;2) 只需在非结构化信息分量包含的字段内进行关键字检索的纯非结构化査 询使用以下查询"SELECT标识字段FROM全文检索链接表WHERE Query= 关键字检索条件"。全文检索存储引擎即会将这一全文检索请求转发至全文检索 系统,由全文检索系统完成非结构化查询;3) 同时需要进行关键字检索和结构化査询的融合査询使用"数据库实体表" 和"全文检索链接表"的联合实现,基本的査询模式为"SELECT ... FROM数据库 实体表INNER JOIN全文检索链接表USING标识字段WHERE全文检索链 接表.Query:关键字检索条件AND数据库实体表上的其它条件"。以用户信息检索为例,步骤5)具体实施方式
如下。1) 对于纯结构化查询,只需要访问"数据库实体表"UserEntity,由MySQL 本身提供的功能处理。如查询所有在线的年龄在20岁至30岁之间的用户名可 使用如下SQL查询SELECT Name FROM User WHERE Online AND Age BETWEEN 20 AND 30;2) 对于纯非结构化查询,只需要访问"全文检索链接表"UserFT,由全文检 索存储引擎将査询请求转交给全文检索系统并转化全文检索系统查询结果为关
系表形式。如查询所有爱好"足球"的用户可使用如下SQL查询SELECT ID FROM UserFT WHERE Query ='足球,;对于这一查询,全文检索存储引擎将全文检索字符串'足球'发送至全文检索 系统,全文检索系统处理这一査询,返回满足条件的用户ID,再由全文检索存 储引擎将这一结果封装为MySQL所要求的记录格式。最终查询结果以关系表的 形式呈现给用户。3)对于同时涉及结构化和非结构化的融合查询,使用"全文检索链接表"与 "数据库实体表"的联接实现。如查询所有爱好"足球"的在线20岁至30岁之间的 用户信息可使用如下SQL査询WHERE Query ='足球,AND Online AND Age BETWEEN 20 AND 30;对于这一查询,MySQL首先通过全文检索全文检索存储引擎得到所有爱好 '足球,的用户ID,对每个ID,在User表中找到对应记录,然后过滤掉那些不满 足"Online AND Age BETWEEN 20 AND 30"的记录,最终产生融合査询的结果。
权利要求
1、一种基于MySQL存储引擎的融合查询方法,其特征在于采用以下步骤实现1)根据应用对建索引性能、查询性能和数据实时性的要求,选择一个满足融合查询需求的全文检索系统;2)开发一个MySQL存储引擎实现MySQL与上述步骤1)中选取的全文检索系统的交互;3)分析应用主题域,确定要进行融合查询的原始数据库表或视图,确定表的标识字段和结构化与非结构化信息分量;4)定义数据同步策略,开发数据发布器根据同步策略建立融合查询系统并维持融合查询系统与原始数据库表或视图的同步关系;5)应用程序使用标准SQL访问融合查询系统MySQL,以一个系统一个接口实现纯结构化、纯非结构化和融合三类查询的求解。
2、 根据权利要求1所述的一种基于MySQL存储引擎的融合查询方法,其 特征在于步骤l)中选用的全文检索系统应满足以下条件支持多个文档域, 支持在一个或多个域中进行检索,现有大多数全文检索系统都满足这一需求。
3、 根据权利要求l所述的一种基于MySQL存储引擎的融合查询方法,其 特征在于步骤2)中的存储引擎只负责以下两个任务a)将全文检索请求转 发至全文检索系统;b)将全文检索系统查询结构封装为MySQL内部的关系表 示形式。
4、 根据权利要求1所述的一种基于MySQL存储引擎的融合查询方法,其 特征在于步骤2)中开发的存储引擎需要实现MySQL存储引擎接口中的以下 方法a)实现index—read接口,转发全文检索请求到全文检索系统;b)实现 index—next接口 ,从全文检索系统中读取下一条全文检索结果,并转化为MySQL 内部的关系表示形式。
5、 根据权利要求l所述的一种基于MySQL存储引擎的融合查询方法,其 特征在于步骤3)的具体实施应满足如下需求1) 要进行融合查询的数据库表或视图需满足以下条件必须拥有一个为整数类型字段,且该字段的值能够唯一确定一条记录的字段为表或视图的标识字段,即该字段为候选码之一;2) 所有内容为字符串类型且需要进行关键字检索的字段作为表的非结构化信 息分量;所有需要进行结构化査询或需要在査询结果中返回的字段作为表的结 构化信息分量,结构化信息分量和非结构化信息分量可以有交集; 3)标识字段不能被更新。
6、 根据权利要求1所述的一种基于MySQL存储引擎的融合査询方法,其 特征在于步骤4)中的数据同步策略包含以下内容1 )非结构化信息分量定时重建的周期与是否需要实时同步; 2)结构化信息分量定时重建的周期与是否需要实时同步。
7、 根据权利要求1所述的一种基于MySQL存储引擎的融合査询方法,其 特征在于步骤4)中"数据发布器"同步应用原始数据库存储与融合查询系统中 数据的方法如下.-1) 针对原始表或视图中的结构化信息分量,"数据发布器"在融合査询系统 MySQL中建立一张对应的"数据库实体表",该表包含原始表或视图中结构化信 息分量包含的字段及标识字段;2) 针对原始表或视图中的结构化信息分量,"数据发布器"在融合查询系统 MySQL中建立一张对应的"全文检索链接表",且指定该表使用步骤2)中开发的 存储引擎。"全文检索链接表"包含以下两个字段a)原始表或视图中的标识字段; b)—个为字符串类型的全文检索字符串字段,名为Query;3) 若数据同步策略要求结构化信息分量需要定时重建,则按指定周期选取原 始表或视图中的结构化信息分量包含的字段及标识字段插入到整合査询系统的 "数据库实体表"中;4) 若数据同步策略要求非结构化信息分量需要定时重建,则按指定周期选择 原始表或视图中的非结构化信息分量包含的字段及标识字段插入到全文检索系 统中,其中标识字段用作全文检索的文档ID,非结构化信息分量包含的每个字 段作为文档的一个域;5) 若数据同步策略要求结构化信息分量需要实时同步,则在原始数据库中新 建一张"结构化信息实时更新日志表",表中以下两个字段a)—个名为ID的自 动递增类型的字段;b)—个名为SQL的字符串类型的字段。同时在原始表或视 图上定义一个触发器,该触发器的特征为a)触发事件为记录插入、删除或更新 操作;b)当且仅当操作涉及数据的结构化信息分量或标识字段时,触发器向"结 构化信息实时更新日志表"中插入一个记录,其SQL字段的内容描述对原始表或 视图的操作。"数据发布器"实时按ID升序读取"结构化信息实时更新日志表"中 日志,应用到"数据库实体表"中后将这一日志从"结构化信息实时更新日志表" 删除;6)若数据同步策略要求非结构化信息分量需要实时同步,则在原始数据库中 新建一张"非结构化信息实时更新日志表",模式与"结构化信息实时更新日志表" 相同。同时在原始表或视图上定义一个触发器,该触发器的触发事件和对插入 与删除操作的处理与4)类似,但只在操作涉及数据的非结构化信息分量或标识 字段时触发器生成日志记录。"数据发布器"实时按ID升序读取"非结构化信息实 时更新日志表"中日志,根据日志内容处理后将日志从"非结构化信息实时更新日 志表"中删除。
8、根据权利要求1所述的一种基于MySQL存储引擎的融合查询方法,其 特征在于歩骤5)中使用融合查询系统进行各类查询的方法如下1) 不需访问非结构化信息分量包含的字段的纯结构化查询使用通用的SQL 访问"数据库实体表",由MySQL本身提供的功能处理;2) 只需在非结构化信息分量包含的字段内进行关键字检索的纯非结构化查 询使用以下查询"SELECT标识字段FROM全文检索链接表WHERE Query= 关键字检索条件"。全文检索存储引擎即会将这一全文检索请求转发至全文检索 系统,由全文检索系统完成非结构化查询;3) 同时需要进行关键字检索和结构化查询的融合查询使用"数据库实体表" 和"全文检索链接表"的联合实现,基本的査询模式为"SELECT ... FROM数据库 实体表INNER JOIN全文检索链接表USING标识字段WHERE全文检索链 接表.Query^关键字检索条件AND数据库实体表上的其它条件"。
全文摘要
本发明公开了一种基于MySQL存储引擎的融合查询方法。利用MySQL数据库的存储引擎插件机制,开发全文检索存储引擎,将现有全文检索系统链接到MySQL数据库中。在MySQL数据库中使用“全文检索链接表”来表示全文检索系统,用户通过标准的SQL访问“全文检索链接表”时,全文检索存储引擎自动将全文检索请求转发至全文检索系统处理。通过“全文检索链接表”与其它表示结构化信息的数据库之间的联接等SQL操作实现融合查询。利用了数据库和全文检索和现有研究和实现成果,基于已有系统可以方便快捷的提供融合查询能力,并且不依赖于一种特有的全文检索系统实现,使用者根据应用需求选择最合适的全文检索系统,提供最好的性能。
文档编号G06F17/30GK101158958SQ20071015618
公开日2008年4月9日 申请日期2007年10月23日 优先权日2007年10月23日
发明者寿黎但, 源 汪, 胡天磊, 刚 陈, 珂 陈 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1