前言
應用系統通常需要借助數據預處理(如物化視圖等)來實現數據查詢加速的需求。目前業界主流數據庫主要有以下兩大類,一種是基於傳統RDBMS關系型數據庫來實現;另一種是基於NoSQL非關系型數據庫來實現。那么問題來了,哪一種類型的數據庫更符合產品的需要呢?
開源技術棧中,以應用最為廣泛的RDBMS關系型數據庫MySQL和NoSQL非關系型數據庫ElasticSearch(簡稱ES)為例,介紹下這兩類數據庫之間的區別和各自的優勢,然后再根據產品需求特性,很容易判斷哪類數據庫更適合產品的需要了。
MySQL vs ES
MySQL作為開源關系型數據庫,應用范圍非常廣泛,非常適合於結構化數據存儲和查詢。在數據查詢場景下,默認返回所有滿足匹配條件的記錄;而ES作為新生代NoSQL數據庫代表之一,非常適合於非結構化文檔類數據存儲、更創新支持智能分詞匹配模糊查詢。比如在電商網站商品搜索欄中,用戶輸入以空格為分隔符的字符串(如:家電電視等),后台ES數據庫搜索引擎會根據用戶輸入的信息,對數據庫中保存的非結構化數據進行分詞模糊匹配查詢,返回滿足匹配條件的前N條記錄給用戶;另外ES更典型應用在於根據用戶瀏覽記錄日志來追蹤用戶行為,智能推送用戶期望瀏覽的數據信息,此時通常借助ELK三大組件互相配合完成。
關於如何在MySQL和ES之間做到合理技術選型,ES官方網站也給出了指導性建議如下圖所示。從英文描述看,基本上和之前的介紹相符合。因此,如果業務數據為結構化數據,同時不需要特別關注排名和智能分詞模糊匹配查詢等特性,則建議采用關系型數據庫如MySQL來作為數據存儲介質並使用配套搜索引擎;反之,如果業務數據為非結構化數據,同時更關注排名和需要智能分詞模糊匹配的特性,則建議采用非關系型數據庫如ES作為數據存儲介質並使用配套搜索引擎。
怎么樣?還在猶豫到底使用哪種類型的數據庫嗎?看了這篇文章就自然就知道答案了,剩下就是大刀闊斧的開干吧~