zoukankan      html  css  js  c++  java
  • HubbleDotNet 开源全文搜索数据库项目数据库和数据表

    物理视图

    clip_image001

    Hubble.net 将全文搜索和关系数据库整合到一起,通过SQL语句对数据库中的数据进行全文和关系查询。Hubble.net 组件本身负责对全文数据进行倒排索引,并将索引存储到指定的目录下,数据的存储则由和Hubble.net 关联的关系数据库完成。Hubble.net 提供了一个 IDBAdpter 接口,用户可以根据这个接口实现自定义的数据库适配。如何添加自定义的数据库适配器,将在数据库适配器一节中阐述。建立倒排索引时需要对输入的全文文本进行分词,Hubble.net 为用户提供了一个 IAnalyzer 接口来完成自定义的分词器。如何添加自定义的分词器,将在分词器一节中阐述。Hubble.net 在安装后以一个系统服务的形式存在。 Hubble.net 提供一个 Hubble.SQLClient 组件来和Hubble.net 的系统服务进行交互,SQLClient 的接口和Ado.net 中的SqlClient接口类似,具体将在SQLClient一节中阐述。

     

    逻辑视图

    clip_image002

    Hubble.net 和 关系数据库一样,存在数据库和数据库表的概念。Hubble.net 的数据库和数据表只是提供一个和对应关系数据库的映射描述关系,并不存在数据库和数据表的实体。用户在通过SQL 语句操作Hubble.net 的数据库和数据表时,Hubble.net 将自动和对应的关系数据库实体进行关联,从用户侧看,Hubble.net就像一个数据库实体。

    Hubble.net 负责建立文本字段的倒排索引和Untokenized字段的单值索引。关系数据库负责建立B+树索引。这些索引如何协调工作将在本章的后续小节中详细介绍。

     

    数据表的种类

    主动更新数据表 (Active Table)

    Active Table 的特点是通过 hubble.net 更新索引时会同步更新数据库中对应的数据表,对hubble.net 的 active table 进行创建,删除,截断等操作时,hubble.net 也会联动的创建,删除,截断数据库中对应的表。Active table 一般用于实时性要求非常高的应用中,索引和数据可以实施更新。

    Active Table 在建表语句中体现为 IndexOnly 属性为 False.

    image

    如上图所示,这是一个典型的主动更新数据表的数据流图。

    创建,删除,增删改等SQL 语句由 Hubble.SQLClient 发起,到达Hubble.Core,Hubble.Core 首先更新对应的关系数据库中的表,然后更新Hubble.net的全文索引。从这个数据流图我们可以看出,关系数据库和全文索引是同步更新的,这样就保证了数据的实时性。

    被动更新数据表 (Passive Table)

    Active table 有着实时性强的优点,但在对现有数据库应用系统构建全文索引时,往往我们希望直接在现有数据表的数据基础上实现全文索引功能,而不是通过 Hubble.net 来创建一个新的数据表,这是我们就不能采用 Active Table 而必须才行 Passive Table 来构建全文索引。

    Passive Table 在建表语句中体现为 IndexOnly 属性为 True.

    image

     

    上图是一个典型的被动更新数据表的数据流图。

    关系数据库的数据更新后,hubble.net 并不会立即更新索引,需要通过 QueryAnalyzer 或者第三方的程序 (后续版本中,hubble.net 的服务端将集成一个简单的哦自动更新模块) 读取关系数据库中对应表的变化信息,然后将变化信息转变为 insert  , update 或者 delete 这样的SQL 语句发送给 Hubble.Core ,Hubble.Core 构建相应的全文索引。

    全文数据检索的数据流

     

    image

     

    上图为hubble.net 全文数据检索(即执行 Select 语句)的数据流图。检索指令从 SQLCLient 发送到Hubble.Core 后,Hubble.Core 将先进行查询优化,将查询语句进行分解并分析,根据分析结果分别到全文索引,单值索引或者关系数据库中进行检索并将检索得到的结果汇总到Hubble.Core 中,根据排序字段排序然后输出给SQLClient。

    这个检索流程对应主动和被动方式的数据表都是相同的。

     

    数据表的属性

    IndexOnly

    这个属性指明数据表是主动更新模式还是被动更新模式。

     

    Directory

    这个属性指明表的全文索引建立到那个目录下

    DBTableName

    这个属性指明关系数据库中对应表的名称

    DBAdapter

    这个属性指明采用哪种数据库适配器访问关系数据库

    DBConnect

    这个属性指明访问关系数据库的连接字符串

    DocId

    这个属性只有 Passive Table 才有,可以指定关系数据库中对应数据表里面某个字段为Hubble.net 的 DocId 字段。

     

    这些属性具体如何在建表语句中表述,我将在建表一节详细说明。

     

    返回 Hubble.net 技术详解

  • 相关阅读:
    深入理解计算机系统
    Python基础知识点
    贝叶斯分类器
    matplotlib 库的使用
    Linux 学习笔记
    支持向量机
    神经网络
    决策树
    k近邻法的实现
    智能过滤:九眼过滤管应对千变万化
  • 原文地址:https://www.cnblogs.com/eaglet/p/1728114.html
Copyright © 2011-2022 走看看