分散式資料庫與搜索引擎的搜索效率,區別在哪裡?
當前項目中,有一個大數據量搜索的需求,通過對比搜索引擎(分片)和分散式資料庫(分片分區)的搜索響應時間,發現在同等條件下,模糊搜索和分散式資料庫,沒有多大差別,而走索引時,資料庫更快,是否我得出的結果不真實?還是搜索引擎的優點在搜索之外,還有其他資料庫無法替代的功能。搜索引擎提高效率的方法是多節點和數據分片,資料庫提高效率的方式是分表分區,兩個之間思想雷同,如果搜索引擎快,會快在哪裡?
資料庫是mysql 5.5,tokudb引擎,cobar中間件;搜索引擎是elasticsearch;當前數據10億,系統設計容量80億
資料庫歸根結底是做持久化的,在數據量少的情況下可以同時做到搜索服務的功能,當數據量大了之後往往需要一個專門做搜索的服務,搜索引擎處在這一層,底層數據還是關係資料庫,HDFS,HBase直流,針對大數據場景下,搜索引擎只是建立索引,這點是和資料庫最大的差別,設計到演算法和數據結構的處理。
發現在同等條件下,模糊搜索和分散式資料庫,沒有多大差別
當前數據10億,系統設計容量80億
10億數據,資料庫模糊查找和搜索引擎響應時間沒有多大差別,我想一定你打開搜索引擎的姿勢不對。
10億數據,每條記錄假設1K,數據量1T,假設你有100塊磁碟,隨機讀速度最多幾十M,一次全表掃描至少幾分鐘。
正確使用搜索引擎,響應時間可以在1秒以內。
謝邀。資料庫的模糊搜索 和 搜索引擎的功能 不是一個概念。資料庫的模糊搜索是不能走索引的,也不好實現搜索詞的邏輯(與或非)和範圍搜索(在特定的域中)。 能走的只有前綴索引,但是這大大限制了功能。
不過使用資料庫來實現搜索引擎也是一個思路,我有一個基於分散式資料庫的全文索引的方案(代號x)
相比solr或elasticsearch的區別如下:
1 solr或elasticsearch是以文檔進行均衡分片的,x是以單詞(term)進行均衡分片的。
2 solr或elasticsearch要到所有的shard上去搜索,最後在replica上合併結果;
x只需要到單詞(term)所在的節點上進行搜索(只有一個節點),而且資料庫有索引,速度非常快。
正是由於這個區別,搜索的速度得以提升,特別是在大數據量(機器多,分片多)的情況下,
x方案有它獨有的好處(精確定位term所在的節點),
代價就是在索引階段需要把單詞和文檔都定位到某個具體的節點上。
資料庫的表結構設計,由於是分散式資料庫,所以表示根據某個欄位分布到不同的資料庫節點上的:
單詞表 tab_term ,均衡欄位是 term_id,欄位意義:
term_name 單詞
field_name 單詞的域
doc_id 單詞所在的文檔
term_freq 單詞的頻率
term_tfidf 單詞的逆文檔頻率
score 單詞的得分,可以使用逆文檔頻率代替
文檔表 tab_doc , 均衡欄位是doc_id, 欄位意義:
doc_id 文檔id
doc_type 文檔類型
doc_content 文檔內容本身
索引過程:
1 一個文檔,經過分析(分詞),得到每個單詞的域 ,詞頻,詞頻-逆文檔頻率等信息
按照 term_name 作為均衡欄位,將數據分割到tab_term的各個節點上
2 然後將文檔進行hash,得到文檔id,文檔類型等,根據doc_id 將數據分散到tab_doc的各個節點上
搜索過程:
用戶輸入的關鍵詞進行分析(分詞) ,根據分詞到 tab_term 中檢索,得到每個 term 的 doc_id 列表;
然後對doc_id 進行排名,再去 tab_doc 返回原始文檔
個人理解:搜索引擎關注的是信息採集和關聯的能力。資料庫核心還是數據存儲和事務能力。
老大,搜索引擎是為詞一一文檔建了倒排索引啊
推薦閱讀:
※教你分析知乎用戶系列之陸
※App搜索功能探析(附原型模板)
※把飛機「黑盒」塗上顯眼顏色可行嗎?
※互聯網廣告新規出台,這些行業將會受到重大影響