教科書常將資料庫技術演進劃分為三階段:人工管理、檔案系統、資料庫系統。但這三階段在 1960 年代前已結束,現代系統早已進入分散式、NoSQL、NewSQL 等新紀元。以百度搜尋引擎為例,其核心並非傳統關聯式資料庫,而是基於倒排索引的分散式儲存與計算架構。
為何搜尋引擎不直接用資料庫
- 資料模型不匹配:網頁為非結構化文本,需全文檢索,關聯式資料庫的 B+ 樹索引不支援高效關鍵字查詢。
- 規模與效能:百億級網頁、每秒萬級查詢,單機資料庫無法水平擴展;倒排索引結合分散式檔案系統(如 HDFS、GFS)實現線性擴展。
- 更新頻率:網頁增量更新極高,傳統資料庫的 ACID 交易機制成為瓶頸,搜尋引擎採用最終一致性、批次重建索引策略。
現代搜尋引擎儲存架構概覽
- 爬蟲系統:抓取網頁,存入分散式檔案系統(原始 HTML、解析後文本)。
- 索引建構:MapReduce/Spark 離線計算產生倒排索引(Term → DocID 列表),分片儲存於數千節點。
- 查詢服務:前端伺服器接收查詢,分詞後並行查詢索引分片,合併排序 Top-K 結果,再從文件儲存讀取摘要回傳。
- 即時索引:增量更新走獨立流程(Kafka + Flink/Storm),秒級生效。
啟示
課本三階段僅為歷史脈絡,實務中須根據資料特徵、存取模式、規模選擇技術棧:關聯式資料庫適合交易型應用;倒排索引適合全文檢索;鍵值存儲適合高併發快取;圖資料庫適合關係推理。盲目套用單一技術是架構設計大忌。