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 技术详解

  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/eaglet/p/1728114.html
Copyright © 2011-2022 走看看