作為架構師,下一次你應該考慮的10個數據庫

1、PostgreSQL

PostgreSQL聽起來比較陌生,其實這種關係數據庫解決方案自1997年以來一直存在,並且是Ruby,Python,Go等社區中的首選。

作為架構師,下一次你應該考慮的10個數據庫

將PostgreSQL作為下一個項目的數據庫解決方案,您絕不會失望(國內郵儲銀行開始全面使用PostgreSQL作為oracle的替代品,騰訊正在大量使用PostgreSQL)。市面上已經有大量不錯的SQL客戶端可用於連接到PostgreSQL數據庫進行管理和開發。

與其他關係數據庫(特別是MySQL)相比,PostgreSQL具有一些引人入勝的功能,例如:

  • 數組,Range(範圍),UUID,地理位置等的內置數據類型。
  • 支持文檔存儲(JSON樣式),XML以及key-value存儲(Hstore)。
  • 同步、異步複製
  • 引入了使用其它程序語言編寫函數的能力,可在PL,Perl,Python等中編寫腳本
  • 全文搜索

何時使用PostgreSQL

  • 如果您正在開始一個新項目,之前被MySQL事務鎖定打敗過,那麼現在是考慮PostgreSQL的好時機。
  • 如果需要部分NoSQL功能用於混合數據模型,則PostgreSQL也具有明顯的優勢。由於天然支持文檔和key-value存儲,因此您無需去尋找,安裝,學習和維護另一個數據庫解決方案。

2、MariaDB

MariaDB是由開發MySQL的同一人創建的,以替代MySQL。奇怪不?在2010年MySQL被甲骨文接管之後(通過收購Sun Microsystems,這也是甲骨文控制Java的方式),MySQL的追隨者們開始了一個新的開源項目MariaDB。

作為架構師,下一次你應該考慮的10個數據庫

MariaDB是使用與MySQL相同的代碼庫創建。顯而易見,MariaDB可以用作MySQL的完全替代品。從MySQL遷移到MariaDB基本上做到零成本。不過切記,從MariaDB返回MySQL是不可能的,這可能導致永久性數據損壞!

儘管MariaDB本質上是MySQL的克隆,但事實上並非如此。兩者之間的差異一直在增長。採用MariaDB必須是您經過深思熟慮的決定。MariaDB中有很多新特性:

  • 真正的自由和開放:由於沒有單個公司實體控制MariaDB,無需擔心突然而來的掠奪性許可。
  • 滿足特定需求的存儲引擎。例如,用於分佈式事務的Spider引擎;ColumnStore用於海量數據倉庫;ColumnStore引擎,用於並行,分佈式存儲;
  • 與MySQL相比,速度有所提高,尤其是Aria存儲引擎可處理複雜的查詢。
  • 更好的複製功能(多源複製)
  • JSON數據格式支持
  • 虛擬列。對錶的每一行都可以有一個“虛擬列”,該列可以用於保存一個對象的不同屬性,每個屬性在各行之間可以完全不同,“虛擬列”的個數和內容完全有應用程序來控制和解釋。
  • 動態列。動態列允許在一個表中每個行可以存儲不同的列的集合。

何時使用MariaDB

如果您想真正地替代MySQL,希望保持創新並且不打算再次返回MySQL,則應該使用MariaDB。例如可以在MariaDB中使用新的存儲引擎來補充項目中現有的關係數據模型。

3、CockroachDB

CockroachDB背後的團隊似乎由受虐狂組成。有了這樣的產品名稱"蟑螂"。

作為架構師,下一次你應該考慮的10個數據庫

估計“蟑螂”的邏輯是無論發生什麼事蟑螂都能生存繁殖。CockroachDB背後的團隊(由前Google工程師組成)在使用傳統SQL解決方案時感到侷限性。因為從歷史上看,SQL解決方案應該託管在一臺機器上(數據不是那麼大)。長期以來,沒有運行SQL的數據庫集群。即使MySQL,PostgreSQL和MariaDB中使用各種複製技術來實現數據庫集群。事實上,通過複製功能來實現集群,使用起來還是複雜。

CoackroachDB希望改變這一點,為SQL世界帶來輕鬆的分片,集群和高可用性。

何時使用CockroachDB

如果您一直使用SQL並且對MongoDB的擴展功能有所瞭解,那麼您會喜歡CockroachDB。CockroachDB可以快速設置集群,對集群進行查詢,我們終於不需要使用數據庫中間件這種臨時產物來實現集群數據庫了。

4、Neo4j

近十年來最重要的發展之一就是關聯數據。幾乎事物都相互關聯。社交網絡是一個很好的例子。使用SQL乃至文檔數據庫構建類似的數據模型就是一場噩夢。這些解決方案的理想數據結構是圖形,它是完全不同的結構。您可以考慮Neo4j這樣的圖形數據庫。

圖形數據庫本身是獨特的,Neo4j幾乎是使用圖形唯一選擇。它具有的任何功能都是獨一無二的。

  • 支持事務應用程序和圖形分析。
  • 數據轉換能力,可將大型表格數據提取為圖形。
  • 用於查詢圖形數據庫的專用查詢語言(Cypher)
  • 可視化和發現功能

如果您需要數據之間基於圖形的關係,則需要Neo4j。

5、MongoDB

MongoDB是第一個在技術行業引起轟動的非關係數據庫,並且佔據相當大的關注份額。

作為架構師,下一次你應該考慮的10個數據庫

與關係數據庫不同,MongoDB是一個“文檔數據庫”,這意味著它以大塊形式存儲數據,而相關數據聚集在同一塊中。MongoDB具有一些獨特的功能,這些功能使您再也不想使用關係數據庫:

  • 適用於特殊/不可預測靈活模式。
  • 簡單的分片和聚類。您只需要為集群設置配置。
  • 從集群中添加或刪除節點非常簡單。
  • 分佈式事務鎖。早期版本中缺少此功能,最終已經包含。
  • 它針對寫入進行了優化,使其非常適合作為緩存系統的分析數據。

何時使用MongoDB

MongoDB是結構化SQL到無序NoSQL的橋樑。您真正需要擴展時。是的,您可以使用雲SQL服務來解決數據庫擴展問題,最後,有些場景用基於SQL的解決方案根本做不到。例如,如果您正在創建一個像Canva這樣的產品,用戶可以在其中創建任意複雜的設計,並可以在以後編輯它們,如果選擇使用關係數據庫,那就呵呵了!

6、RethinkDB

作為架構師,下一次你應該考慮的10個數據庫

顧名思義,當涉及到實時應用程序時,RethinkDB會 “重新考慮”數據庫的思想和功能。

數據庫更新後,應用程序將無法及時感知。公認的方法是應用程序在有更新時立即發出通知,該更新通過複雜的網橋推送到前端(PHP-> Redis-> Node-> Socket.io是一個示例)。但是,如果可以將更新直接從數據庫推送到前端怎麼辦?是的,這就是RethinkDB的承諾。

因此,如果您要製作一個真正的實時應用程序(遊戲,市場,分析等),Rethink DB值得一看。

7、redis

提起數據庫,很容易忽略Redis。這是因為Redis是一個內存數據庫,主要用於緩存等支持功能。

作為架構師,下一次你應該考慮的10個數據庫

Redis是一個簡單的K-V存儲,存儲的是帶有到期時間的字符串(當然,可以設置為無窮大)。Redis喪失了部分實用性,獲得性能方面巨大提升。由於它完全位於RAM中,因此讀寫速度非常快(每秒數十萬次操作並非聞所未聞)。Redis具有完善的pub-sub系統,該系統使該“數據庫”的吸引力提高了N倍。

如果您有一個可以從緩存中受益或具有一些分佈式組件的項目,則Redis是首選。

8、SQLite

作為架構師,下一次你應該考慮的10個數據庫

SQLite是一個輕量級的C庫,提供了一個關係數據庫存儲引擎。該數據庫中的所有內容都保存在一個文件中(擴展名為.sqlite),您可以將其放在文件系統中的任何位置。這就是使用它所需要的全部!是的,無需安裝任何“服務器”軟件,也沒有要連接的任何服務。

即使SQLite是MySQL之類的數據庫的輕量級替代品,它也帶來了很大的衝擊。其令人震驚的功能包括:

  • 通過COMMIT,ROLLBACK和BEGIN完全支持事務。
  • 每張表格支持32,000列
  • JSON支持
  • 64路JOIN支持
  • 子查詢,全文搜索等
  • 最大數據庫大小為140 TB!
  • 最大行大小為1 GB!
  • 比文件I / O快35%

何時使用SQLite

SQLite是一個非常專業的數據庫。如果您的應用程序相對簡單,並且您不希望擁有龐大的數據庫,那麼SQLite是一個不錯的選擇。對於中小型CMS應用、演示應用程序、嵌入式系統,值得您考慮。

9、Cassandra

作為架構師,下一次你應該考慮的10個數據庫

Cassandra屬於所謂的“ columnar”數據庫家族。Cassandra中的存儲抽象是一列而不是一行。它將所有數據物理上存儲在磁盤的同一列上,最大程度地減少查找時間。

獨特的功能

Cassandra設計時考慮了一個特定的用例——處理寫重負載和對停機時間的零容忍。這些成為其獨特的賣點。

  • 極快的寫入性能。在處理繁重的寫入負載時,Cassandra可以說是目前最快的數據庫。
  • 線性可伸縮性。也就是說,您可以繼續向群集中添加任意數量的節點,群集的複雜性或脆弱性將零增加。
  • 無與倫比的分區容限。也就是說,即使Cassandra群集中的多個節點出現故障,數據庫也可以不喪失完整性。
  • static 類型。(聲明為 static 的列只有一個值的,只存儲一份)。

何時使用Cassandra

  • 日誌記錄和分析是Cassandra的兩個最佳用例。
  • 當您需要處理非常大的數據量(蘋果公司有Cassandra部署,可以處理400 PB以上的數據,而在Netflix,每天處理1萬億個請求)
  • 當您需要停機時間幾乎為零(高可用性是Cassandra的標誌之一)。

10、Timescale

Timescale時序數據庫是物聯網(IoT)需要的最好的開源數據庫之一。

作為架構師,下一次你應該考慮的10個數據庫

與傳統數據庫的區別在於,它主要關注的是海量數據集的分析和可視化。時間序列數據庫很少會看到已有的數據的變化;比如:溫室中的傳感器發送的溫度讀數-新數據保持每秒積累,這對於分析和報告很重要。

Timescale DB跟同類的其他數據庫相比具有一些令人興奮的功能:

  • 它建立在PostgreSQL之上(目前最好的開源關係數據庫)。如果您的項目已經在運行PostgreSQL,Timescale可以重點考慮。
  • 通過熟悉的SQL語法進行查詢,從而減少了學習難度。
  • 極快的寫入速度-每秒數百萬次的插入。
  • 數十億行或PB的數據,對於Timescale來說沒什麼大不了的。
  • 模式具有真正的靈活性-可以根據需要選擇關係模式或無模式。

如果物聯網是您的領域,或者您追求類似的數據庫特性,那麼Timescale值得一看。


分享到:


相關文章: