数据库为什么不适合搜索引擎的底层存储?
原創不易,轉載請標明地址,或者直接附上我的博客首頁https://georgedage.blog.csdn.net/
文中有些并沒有解釋過于清楚,本篇更適合有基礎的同學閱讀,思考,思考,思考。
一、千億級實時搜索,要滿足的條件
》高并發,要能支持百萬級以上的并發
》實時性,響應時間不超過3秒
那么我們考慮,這樣的情況下,使用數據庫是否可以?
Mysql / pgsql / db2 / Oracle
首先先說出我們的結論,那就是不可以,那么為什么呢?請聽我細細給你叨嘮,本篇博客通過由淺入深,并且根據一個個問題去探討,或許你看完之后會有一點想法,不過如果有不妥之處,歡迎指出。
二、我們經常瀏覽博客,新聞,商品等,存儲這些數據的表應當具有什么樣的字段呢?
提出問題:
三、在數據庫中如何做到下面的查詢?以新聞表為例
或許對于稍微掌握點數據庫知識的同僚們,這些都不是問題!
那么,請看問題二!
四、當數據量變大時,這四個查詢都變慢了,該如何優化?
我們都知道,數據庫的常用數據庫優化方法為:
》建索引
》分區表
由此提出問題三。
五、建索引對“查詢標題與釣魚島有關的新聞”和“查詢與蒼老師有 關的新聞”有效果嗎?
或許對索引有點基本概念的同僚們,會想,沒關系呀。
嗯,好,那我問你,為什么呢?
(⊙o⊙)…(⊙o⊙)…(⊙o⊙)…
所以我們需要理解索引的原理是什么?
六、索引的原理是什么
即: 對列值創建排序存儲,數據結構={列值、行地址}。在有序數據列表中就可以利用二分查找快速找到要查找的行的地址,再根據地址直接取行數據。
或許這樣看會有點抽象,這里我們可以補充一下自己的基礎知識,當然也是面試中經常問到的。
數組,鏈表,樹,二叉樹,紅黑樹,mysql的b+tree
對于b+tree:
b+tree,葉子存儲數據,節點關鍵值
這里補充一道面試題:大劍無鋒之簡單說一下聚簇索引和非聚簇索引?【面試推薦】
然后根據索引的原理進一步思考索引!
七、索引的排序,是怎么排的?
》數值列
》時間列
》文本列
這里相信學過語言基礎的都知道,編碼字符集的應用。
就像漢字,在計算機中的存儲也是二進制,所以也就是我們常說的字典序。詳細這里不做過多的闡述。
八、在新聞標題列上建索引,當我們查詢標題=‘釣魚島’ ,數據庫會怎么去查?
但是我們查詢的是這樣一個字段呢?
或者說數據庫中有這樣一個字段,“中國擁有釣魚島”
如果走索引,這個是會被忽視的查詢不到,所以需要全局進行查詢。
【補充】這里我在網上看到有說到覆蓋索引可以解決類似問題,不過這個我并沒有進行研究呢,后續補上!
九、如果要對查詢出來的結果進行相關度排名,數據庫能否做到?
如果要對搜索的新聞字段設置不同的權重,比如新聞標題中包含這三個關鍵字的新聞的
相關性就遠高于新聞內容中包含這三個字。數據庫能否做到?
十、最后我們得出結論
結論:
數據庫適合結構化數據的精確查詢,而不適合半結構化、非結構化數據的模糊查詢及靈活搜索(特別是數據量大時),無法提供想要的實時性。
【補充】
總結
以上是生活随笔為你收集整理的数据库为什么不适合搜索引擎的底层存储?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发问题是怎样造成的
- 下一篇: 搜索引擎——反向索引原理揭秘及手写ik分