SpringCloud 廣告系統實戰(六) - 廣告檢索系統(廣告資料索引的設計與實現)
0 聯絡我

2. 完整部落格連結
3. 個人知乎
4. gayhub
相關原始碼
廣告檢索系統的核心是實現廣告檢索服務,為加快廣告檢索的速度,良好的索引設計是不可缺少的.
本文首先對索引的設計與維護進行介紹,之後,實現廣告資料的索引服務.
1 廣告資料索引設計介紹

1.1 正向索引
-
定義
也稱為正排索引(Forward Index),通過唯一鍵/主鍵生成與物件的對映關係.
即通過主鍵(Key)檢索到文件(Doc)內容,以下簡稱正排表或Table.
Table 不僅提供按主鍵的增刪除改查,也配合倒排表實現檢索、過濾、讀取等功能.
作為核心資料結構,Table必須支援頻繁的欄位讀取和各型別的正排過濾,需要高效和緊湊的實現.
-
一個簡單的例子

正排儲存結構
為支援按 docID 的隨機訪問,把Table設計為一個大陣列結構(data區).
每個 doc 是陣列的一個元素且長度固定,變長欄位儲存在擴充套件區(ext區),僅在 doc 中儲存其在擴充套件區的偏移量和長度.
與大部分搜尋引擎的列儲存不同,將data區按行儲存,這樣可針對業務場景,儘可能利用CPU與記憶體之間的快取來提高訪問效率.
此外,針對NoSQL場景,可通過HashMap實現主鍵到docID的對映(idx檔案),這樣就可支援主鍵到文件的隨機訪問.由於倒排索引的docID列表可以直接訪問正排表,因此倒排檢索並不會使用該idx.
-
小結
這種組織方法在建立索引的時候結構比較簡單,建立比較方便且易於維護.
- 因為索引是基於文件建立的,若是有新的文件加入,直接為該文件建立一個新的索引塊,掛接在原來索引檔案的後面
- 若是有文件刪除,則直接找到該文件號文件對應的索引資訊,將其直接刪除.
但是在查詢的時候需對所有的文件進行掃描以確保沒有遺漏,這樣就使得檢索時間大大延長,檢索效率低下,儘管正排表的工作原理非常的簡單,但是由於其檢索效率太低,除非在特定情況下,否則實用性價值不大.
1.2 倒排索引(Inverted Index)

即通過關鍵詞(Keyword)檢索到文件內容.
為支援複雜的業務場景,如遍歷索引表時的演算法粗排邏輯,在此抽象了索引器介面Indexer.

索引器介面定義
倒排表以字或詞為關鍵字進行索引,表中關鍵字所對應的 記錄表 項記錄了出現這個字或詞的所有文件,一個表項就是一個字表段,它記錄該文件的ID和字元在該文件中出現的位置情況.
由於每個字或詞對應的文件數量在動態變化,所以倒排表的建立和維護都較為複雜,但是在查詢的時候由於可以一次得到查詢關鍵字所對應的所有文件,所以效率高於正排表。在全文檢索中,檢索的快速響應是一個最為關鍵的效能,而索引建立由於在後臺進行,儘管效率相對低一些,但不會影響整個搜尋引擎的效率.

倒排儲存結構
正排索引是從文件到關鍵字的對映(已知文件求關鍵字)
倒排索引是從關鍵字到文件的對映(已知關鍵字求文件)
-
一個簡單的例子
-
在檢索系統中的應用
核心用途是對各個維度限制的"整理"
2 廣告資料索引維護
全量索引 + 增量索引


3 推廣計劃索引物件定義與服務實現
-
索引介面
4 推廣單元索引物件定義與服務實現

5 關鍵詞索引物件定義與服務實現

6 興趣索引物件定義與服務實現

7 地域索引物件定義與服務實現

8 創意索引物件定義與服務實現

9 創意與推廣單元關聯索引物件定義與服務實現

10 索引服務類快取的實現
