eaglet

本博专注于基于微软技术的搜索相关技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

HubbleDotNet 软件架构

Posted on 2011-03-04 10:49  eaglet  阅读(10079)  评论(27编辑  收藏  举报

HubbleDotNet 目前已经有很多用户,但大部分用户还仅仅停留在使用层面,真正深入去研究和了解的人不是很多。作为一个开源项目,HubbleDotNet 除了可以提供应用的需要外,其本身的代码对希望了解信息检索和底层软件开发技术的开发人员也应该有一定的参考作用。为了方便对这方面感兴趣的开发人员阅读和理解 HubbleDotNet 的代码,我把HubbleDotNet 的软件设计架构公布出来,供大家参考。HubbleDotNet中文社区 目前还不是很活跃,主要还是我一个人在回答其他网友的提问,我希望对这方面有兴趣的网友在深入了解了HubbleDotNet 的内部机制后,可以更多的参与到这个社区的建设中来,众人拾柴火焰高。

 

软件架构图

 

image

 

如上图所示:HubbleDotNet 的软件架构包括了如下几个模块

1. Hubble.Framework

2. Hubble.Core

3. Hubble.Analysis

4. Hubble.SQLClient

5. QueryAnalyzer

6. HubbleTask

下面我分别介绍这几个模块

 

Hubble.Framework

这个模块提供支撑 HubbleDotNet 核心代码运行底层算法。这个模块包括 Data, Entity, IO 等子模块,分别司职不同的功能。下面把一些主要的子模块大概介绍一下:

Data 子模块

这个模块主要是提供一些数据库访问的 Provider。目前包括 OLEDB , SQLSERVER 和 SQLITE 的 Provider

Data Structure 子模块

这个模块包括了一些基础数据结构,比如

DFA (有穷自动机) 

Cache (缓存的泛型类)

FingerPirntDictionary (信息指纹字典)

HeapSort (堆排序, 包括部分堆排序算法)

VInt(Int 序列的可变字节码压缩)

VLong(Long 序列的可变字节码压缩)

QuickSort(快速排序,包括部分快速排序算法)

还有一些算法,我这里不再列举,有兴趣的可以直接去看代码。

Entity

这个子模块提供核心算法要用到的一些实体类。

IO

这个子模块提供了一些对IO操作的类封装。和.net 的IO 模块不同的是,这里提供的是一些面向应用的高级类封装,比如日志文件类,块状内存流等等。

Net

这个子模块提供网络访问的类封装。HubbleDotNet 的远程访问和分布式查询都要依赖于这个模块中提供的类。

Serialization

这个子模块提供一些核心算法需要的自定义序列化类,倒排索引的序列化依赖于这个模块的支持。

Threading

这个子模块提供多线程下的一些线程同步和管理方面的功能类。比如消息队列,多线程计算,共享独占锁。

 

Hubble.Core

这个模块是整个HubbleDotNet 软件系统的最核心模块,所有的信息检索方面的核心算法都在这个模块中实现。同样这个模块也有很多子模块。

Cache

这个子模块用于管理查询缓存(Query Cache)

Data

这个子模块是Core 模块的业务逻辑部分,所有的操作比如 Insert, Update, Delete 等的业务逻辑实现都在这个子模块完成。

DBAdapter

这个子模块提供数据适配器的接口以及一些HubbleDotNet 自带的数据库适配器。数据库适配器是HubbleDotNet 和关系数据库交互的接口,任何数据源都可以通过实现IDBAdapter 这个接口来和HubbleDotNet 对接。有关如何创建和安装自己的数据库适配器的方法,请参考 连接 Oracle 数据库 

Global

这个子模块负责全局配置和一些全局的方法

Index

这个子模块负责对全文进行倒排索引,所有的索引算法都在这个子模块实现

Query

这个子模块实现各种搜索算法,所有的搜索算法比如 Match, Contains, Like 等都在这个子模块实现

Right

这个子模块完成用户权限管理和认证功能

Service

这个子模块实现一些后台服务,包括HubbleDotNet的核心功能的后台服务调用入口以及Task Schedule 后台服务。整个后台部分的入口就在这个模块。

SFQL

这个子模块完成对SFQL  结构化全文查询语言的解析。所有的SQL语句的解析都在这个模块完成。这个模块还包括词法分析,语法分析,语义分析等几个子模块。

Store

这个子模块负责索引存储相关的操作。倒排索引的读写和优化都在这个子模块中完成。

StoredProcedure

这个子模块包含所有的系统存储过程。

 

Hubble.Analysis

这个模块实现分词器和HubbleDotNet 的接口。HubbleDotNet 是一个开发的系统,用户可以用HubbleDotNet 自带的 英文分词,盘古分词和简单分词对全文进行分词,也可以通过实现 IAnalyzer 接口安装自己开发的分词器。关于自定义分词器的安装方面的文章,过几天我将提供。

 

Hubble.SQLClient

这个是 HubbleDotNet 的客户端访问类,他的功能和 Ado.Net 的 SqlClient 的功能是类似的,提供访问HubbleDotNet 服务器的客户端支持。这个模块包括

HubbleCommand 和 HubbleConnection 两个数据访问类,这个两个类分别从 System.Data.Common.DbCommand 和 System.Data.Common.DbConnection 两个基类继承,其调用方法和ADO.Net 的其他Provider 如SQL SERVER 的SqlCommand 和 SqlConnection 的使用方法是类似的,非常容易使用。

另外Hubble.SQLClient 模块还提供了数据缓存的子模块,用于客户端数据的缓存,以提供系统并发能力和查询速度。

 

QueryAnalyzer

这个是 HubbleDotNet 提供的一个查询工具,这个工具可以帮助你对HubbleDotNet 服务器进行维护和管理。这个查询工具没有使用任何特殊的接口,它就是一个标准的HubbleDotNet 客户端应用,很多HubbleDotNet 的功能都可以参考这个模块的代码来实现。

 

HubbleTask

HubbleTask.exe 是服务侧核心代码的调用容器,由于 Hubble.Core.dll 是一个动态库,所以它必须通过一个exe 文件调用才能够被使用。这个模块没有太多特殊的功能,只是负责把Hubble.Core.dll 调起来。

HubbleService

HubbleService.exe 是HubbleDotNet 的后台服务,这个可执行文件的功能更简单,它只负责HubbleTask.exe 启动和关闭。

 

返回 HubbleDotNet 技术详解