原創: 梁桂釗
在服務端會經常遇到資料儲存的選型問題,是選擇使用關係型資料庫 mysql,還是選擇記憶體資料庫 redis,還是選擇文件資料庫 mongodb,還是選擇列族資料庫 hbase, 還是選擇全文搜尋引擎 elasticsearch 呢?本節主要介紹如何選擇合適的資料儲存方案。
關係型資料庫 mysql
mysql 是乙個最流行的關係型資料庫,在網際網路產品中應用比較廣泛。一般情況下,mysql 資料庫是選擇的第一方案,基本上有 80% ~ 90% 的場景都是基於 mysql 資料庫的。因為,需要關係型資料庫進行管理,此外,業務存在許多事務性的操作,需要保證事務的強一致性。同時,可能還存在一些複雜的 sql 的查詢。值得注意的是,前期儘量減少表的聯合查詢,便於後期資料量增大的情況下,做資料庫的分庫分表。
記憶體資料庫 redis
隨著資料量的增長,mysql 已經滿足不了大型網際網路類應用的需求。因此,redis 基於記憶體儲存資料,可以極大的提高查詢效能,對產品在架構上很好的補充。例如,為了提高服務端介面的訪問速度,盡可能將讀頻率高的熱點資料存放在 redis 中。這個是非常典型的以空間換時間的策略,使用更多的記憶體換取 cpu 資源,通過增加系統的記憶體消耗,來加快程式的執行速度。
在某些場景下,可以充分的利用 redis 的特性,大大提高效率。這些場景包括快取,會話快取,時效性,訪問頻率,計數器,社交列表,記錄使用者判定資訊,交集、並集和差集,熱門列表與排行榜,最新動態等。
使用 redis 做快取的時候,需要考慮資料不一致與髒讀、快取更新機制、快取可用性、快取服務降級、快取穿透、快取預熱等快取使用問題。
文件資料庫 mongodb
mongodb 是對傳統關係型資料庫的補充,它非常適合高伸縮性的場景,它是可擴充套件性的表結構。基於這點,可以將預期範圍內,表結構可能會不斷擴充套件的 mysql 表結構,通過 mongodb 來儲存,這就可以保證表結構的擴充套件性。
此外,日誌系統資料量特別大,如果用 mongodb 資料庫儲存這些資料,利用分片集群支援海量資料,同時使用聚集分析和 mapreduce 的能力,是個很好的選擇。
mongodb 還適合儲存大尺寸的資料,gridfs 儲存方案就是基於 mongodb 的分布式檔案儲存系統。
列族資料庫 hbase
hbase 適合海量資料的儲存與高效能實時查詢,它是執行於 hdfs 檔案系統之上,並且作為 mapreduce 分布式處理的目標資料庫,以支撐離線分析型應用。在資料倉儲、資料集市、商業智慧型等領域發揮了越來越多的作用,在數以千計的企業中支撐著大量的大資料分析場景的應用。
全文搜尋引擎 elasticsearch
在一般情況下,關係型資料庫的模糊查詢,都是通過 like 的方式進行查詢。其中,like 「value%」 可以使用索引,但是對於 like 「%value%」 這樣的方式,執行全表查詢,這在資料量小的表,不存在效能問題,但是對於海量資料,全表掃瞄是非常可怕的事情。elasticsearch 作為乙個建立在全文搜尋引擎 apache lucene 基礎上的實時的分布式搜尋和分析引擎,適用於處理實時搜尋應用場景。此外,使用 elasticsearch 全文搜尋引擎,還可以支援多詞條查詢、匹配度與權重、自動聯想、拼寫糾錯等高階功能。因此,可以使用 elasticsearch 作為關係型資料庫全文搜尋的功能補充,將要進行全文搜尋的資料快取乙份到 elasticsearch 上,達到處理複雜的業務與提高查詢速度的目的。
elasticsearch 不僅僅適用於搜尋場景,還非常適合日誌處理與分析的場景。著名的 elk 日誌處理方案,由 elasticsearch、logstash 和 kibana 三個元件組成,包括了日誌收集、聚合、多維度查詢、視覺化顯示等。
架構師之路 架構師思維的培養
公司的cms 綜合賦碼管理系統 是winform的cs架構。這套系統的架構師換了3屆,到現在已經幾年沒有架構師了。本來入職時,崗位目標就是這個 自動化架構師 後來和領導達成共識先爭取成為儲備架構師,因為架構首先是為業務服務的,而工控行業有許多特別的地方,不是普通的軟體技術堆疊就能做出優秀的工控軟體的...
架構師之路 架構師思維的培養
公司的cms 綜合賦碼管理系統 是winform的cs架構。這套系統的架構師換了3屆,到現在已經幾年沒有架構師了。本來入職時,崗位目標就是這個 自動化架構師 後來和領導達成共識先爭取成為儲備架構師,因為架構首先是為業務服務的,而工控行業有許多特別的地方,不是普通的軟體技術堆疊就能做出優秀的工控軟體的...
Entity bean選擇合適的資料儲存方案
1 認真考慮是否真要使用j2ee 2 選擇合適的分布模型 3 為entity bean選擇合適的資料儲存方案 4 慎重考慮ejbhome.findby list 的實現 設想對乙個百萬記錄級的表進行檢索,結果集很可能是上萬條 十萬條,這本身就是乙個耗費資源的過程 同時對於檢索到的每乙個記錄還要做一次...