如今,有數百個SQL和NoSQL數據庫。其中有些數據庫很受歡迎,有些數據庫則被忽略;有些是用戶比較喜歡使用的并且有據可查,有些則很難使用;有些數據庫是開源的,有些是專有的;最重要的是有些數據庫是可伸縮的,優化的,高度可用的,而有些則很難擴展或維護。有一個自然的問題:如何選擇數據庫?為了回答這個問題,我們應該決定要使用數據庫實現的目標。要創建視圖,我們應該回答以下問題:我們需要對數據庫的分析訪問嗎?我們需要實時書寫或閱讀嗎?我們要存儲多少張表/記錄?我們需要什么可用性?我們需要列嗎?我們將訪問按列過濾還是按行過濾的表?
做出決定后,我們需要牢記一個或另一個數據庫能夠提供的內容。每個數據庫的特定功能可能會有所不同,但是通常,只有少數幾種類型的數據庫。在這些類型中,我們可以實現幾乎相同的目標。讓我們仔細看看它們。
1. SQL關系數據庫
如果您曾經使用過數據庫,則很可能已經開始使用這種類型的數據庫。這種類型是最流行和廣泛使用的。這些數據庫允許將數據存儲在具有特定類型的已定義列的關系表中。關系表是良好的規范化和聯接。
好處
SQL支持
ACID事務(原子性,一致性,隔離性和持久性)
索引和分區支持
缺點
對非結構化數據/復雜類型的支持不佳
錯誤的事件處理優化
困難/昂貴的縮放
示例:Oracle DB,MySQL,PostgreSQL。
2.面向文檔的數據庫
如果我們不想連接多個表來檢索所需的數據,我們可以看一下面向文檔的數據庫。這些數據庫允許以類似JSON的格式存儲記錄。使用這種格式,我們可以為任何鍵創建復雜的值,并將所有數據結構一次包含在一條記錄中。
好處
無架構
無需總是在每條記錄中寫入所有字段
良好的復雜類型支持
適合OLTP
缺點
交易支持不佳
不良的分析支持
困難/昂貴的縮放
示例:MongoDB
3.內存數據庫
這種類型的數據庫可以提供實時響應,以選擇和插入特定記錄。它們中的大多數主要將數據存儲到RAM中,但在某些情況下還可以在HDD或SSD上提供持久性存儲。這些數據庫中的大多數都使用鍵/值記錄進行操作,因此值可以調用面向文檔的格式。但是某些數據庫還使用列進行操作,并允許在同一表中進行二級索引。使用RAM可以快速處理數據,但使其更加不穩定和昂貴。
好處
快速寫作
快速閱讀
缺點
可靠性差
昂貴的縮放
示例:Redis,Tarantool,Apache Ignite
4.寬列數據庫
這些數據庫將數據存儲為HDD或SSD上的鍵/值記錄。這些解決方案旨在充分擴展,以管理分布式系統中數千個商用服務器中的PB數據。它們代表SSTable體系結構。該體系結構設計用于兩個用例:按鍵快速訪問和快速,高可用性的編寫。
好處
逐行快速書寫
快速讀取按鍵
良好的可擴展性
高可用性
缺點
鍵/值格式
沒有分析支持
示例:Cassandra,HBase
5.柱狀數據庫
有時我們需要快速訪問數據,而不是使用特定的鍵,而是使用特定的列。在這種情況下,我們最好避免逐行插入,而轉為批量寫入。批處理插入允許列式數據庫準備數據以供列快速讀取。
好處
按列快速閱讀
良好的分析支持
良好的可擴展性
缺點
僅適用于批量插入
示例:Vertica,Clickhouse
6.搜索引擎
如果我們想通過任何值甚至是列中的任何單詞使用過濾器訪問數據,我們都應該記住搜索引擎。這些數據庫對列中的每個單詞進行索引,并允許全文搜索。它們非常適合存儲和分析日志或較大的文本值。
好處
一字快速訪問
良好的可擴展性
缺點
僅適用于批量插入
不良的分析支持
示例:ElasticSearch,Apache Solr
7.圖形數據庫
對于某些用例,存在圖數據結構。我們可以在圖形數據庫中找到它們的實現。如果您的任務需要使用圖形,則可以使用專門設計的數據庫來滿足您的需求。
好處
圖形數據結構
實體之間的可管理關系
靈活的結構
缺點
特殊查詢語言
難以擴展
示例: Neo4j
關于如何選擇數據庫,上述推薦了7款使用比較廣泛的數據庫。至于到底如何選擇,其實所有類型的數據庫都可以完成所有任務。問題是它會多么昂貴和如何優化。選擇您慣用的工具可以縮短產品上市時間,但同時也會花費大量金錢維護和擴展您的硬件,而這可能會導致效率低下。始終嘗試按照其使用方式使用數據庫。也許,就能找到適合所需求的解決方案。想了解更多數據庫的信息,請繼續關注中培偉業。