文章目錄
- Data 子模組
- Data Structure 子模組
- Entity
- IO
- Net
- Serialization
- Threading
- Cache
- Data
- DBAdapter
- Global
- Index
- Query
- Right
- Service
- SFQL
- Store
- StoredProcedure
HubbleDotNet 目前已經有很多使用者,但大部分使用者還僅僅停留在使用層面,真正深入去研究和瞭解的人不是很多。作為一個開源項目,HubbleDotNet 除了可以提供應用的需要外,其本身的代碼對希望瞭解資訊檢索和底層軟體開發技術的開發人員也應該有一定的參考作用。為了方便對這方面感興趣的開發人員閱讀和理解 HubbleDotNet 的代碼,我把HubbleDotNet 的軟體設計架構公布出來,供大家參考。HubbleDotNet中文社區 目前還不是很活躍,主要還是我一個人在回答其他網友的提問,我希望對這方面有興趣的網友在深入瞭解了HubbleDotNet 的內部機制後,可以更多的參與到這個社區的建設中來,眾人拾柴火焰高。
軟體架構圖
如所示: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 內建的 英文分詞,Apsara Distributed File System分詞和簡單分詞對全文進行分詞,也可以通過實現 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 技術詳解