12.03 2019年MongoDB的三個可供選擇的替代品

JAM Stack,PostgreSQL和Amazon的DynamoDB都是MongoDB的競爭替代品


2019年MongoDB的三個可供選擇的替代品

Photo by Marlene Prusik on Unsplash

NoSQL是用於描述任何與SQL關係模型不對應的數據庫類型的名稱。

NoSQL數據庫起源於2009年,當時MySpace等網站規模不斷擴大:

之所以出現NoSQL,是因為當時的數據庫無法滿足所需的規模。

— memSQL博客上的Rick Negrin

MongoDB是最著名的NoSQL數據庫。 它經常被JavaScript開發人員使用,特別是那些使用MERN Stack或MEAN Stack(將Mongo與Express,Angular或React和Node結合使用)的開發人員。


人們為什麼要放棄MongoDB

通常,NoSQL與以前的數據庫體系結構有顯著差異,可能會導致記錄丟失和性能下降:

NoSQL放棄了數據庫的一些核心功能,這些功能使它們具有高性能且易於使用。

— memSQL博客上的Rick Negrin

作為回應,許多開發人員正在考慮從MongoDB和NoSQL轉向其他替代方案,例如JAM Stack,PostgreSQL或DynamoDB。


著名的使用者離開了MongoDB

在線出版商和英國報紙《衛報》在其2018年11月關於放棄MongoDB的文章中獲得了100,000多次意見:

再見Mongo,您好Postgres | 數字博客

在《衛報》上,大部分內容(包括文章,實時博客,畫廊和視頻內容)都是運行在Postgres上。

在其中,進行切換的開發人員表明,他們的團隊在使用OpsManager(Mongo的數據庫管理軟件)時遇到了問題,並且在兩次停機期間,Mongo的支持代理並沒有太大幫助。

我深入探討了該出版商選擇“更好的編程”從MongoDB遷移到PostgreSQL的原因:

為什麼使用者從MongoDB切換到PostgreSQL

他們為何轉換,如何遷移以及今天為什麼不這樣做


MongoDB的三種替代選擇

當許多人繼續使用Mongo時,軟件開發人員和數據庫工程師可以使用許多替代方法,例如:

  • JAM Stack:無需網絡服務器即可提供快速,安全和動態的網站。
  • PostgreSQL:SQL數據庫,以其可靠性,功能完備和性能而聞名。
  • DynamoDB:Amazon Web Services(AWS)創建的NoSQL數據庫

這三個選項是當前MongoDB的最佳替代方案。 我們將在下一節中詳細介紹每種選擇的利弊。


MongoDB替代方案1:JAM Stack

JAM Stack是JavaScript,API和預渲染的Tag的縮寫,它是一種無服務器架構,可以完全避免使用數據庫。

只要數據可以移動到用Markdown編寫的大量JSON文件中,JAM Stack甚至可以替換文檔數據庫。

使用JAM Stack時,通常使用Gatsby之類的工具來編譯(或構建)整個應用程序。

不幸的是,這意味著任何更改都需要重建站點。

另一方面,如果通過API訪問動態內容,則動態內容可以實時更改,例如通過Disqus處理的註釋。

JAM Stack的優勢

閃電般快速的內容交付是JAM Stack的最大優勢,因為它沒有服務器,整個應用程序都在客戶端運行。

同時,還具有最大的SEO-因為該應用程序已經過預編譯,因此被當作靜態頁面使用,而不是按需生成。

JAM Stack的另一個優勢是最小的託管成本。 例如,靜態頁面基本上可以免費託管在AWS上。

JAM Stack的缺點

每個更改都必須重新構建。 這意味著需要重新編譯應用程序,然後該更改才能在線上可用。

並且,網站越大,構建時間越長。 每次。

因此,對於需要頻繁發佈,大量數據或實時編輯數據記錄的應用程序,通常認為JAM Stack不適合。


MongoDB替代方案2:PostgreSQL

提倡使用SQL的人認可了SQL體系結構的持續流行,以及SQL數據庫執行操作分析的卓越能力:

傳統數據庫已經過了長足的發展。 他們可以滿足現代應用程序所需的可伸縮性,可靠性和可用性要求,幾乎可以處理所有工作負載。

— memSQL博客上的Rick Negrin

換句話說,如果SQL數據庫可以擴展,那麼它比NoSQL更可取。

PostgreSQL(也稱為Postgres)是一種流行的免費SQL數據庫,在其網站上稱自己為“世界上最先進的開源數據庫”。

PostgreSQL的優點

PostgreSQL是功能強大的軟件,已經連續開發了30多年。 很多人使用它,並且它有一個充滿活力的社區。

它與平臺無關。 對於使用AWS的用戶,可以使用Amazon Relational Database Service(RDS)上的Amazon Aurora託管它。

另外,PostgreSQL正在迅速發展。 它的性能優於MySQL,MySQL已經比MongoDB快得多。

PostgreSQL的缺點

使用SQL本質上增加了任何項目的複雜性。 它是團隊每天使用的全新編程語言。

從NoSQL遷移到SQL可能很困難。 從根本上說,它們是一種不同類型的數據庫結構。 NoSQL是具有鍵值對的文檔存儲,而SQL由表和行組成。

一個選項是在其遷移中使用PostgreSQL中的JSONb列類型。 但是,使用JSON Blob有點像黑客,就像將NoSQL數據庫轉換為SQL格式一樣。


MongoDB替代方案3:DynamoDB

DynamoDB是Amazon Web Services(AWS)的NoSQL產品。 MongoDB和DynamoDB都使用任意模式存儲類似JSON的數據。

DynamoDB最近添加了一個稱為“靜態加密”的功能,現在它在仍然是NoSQL數據庫的同時,與MongoDB相比具有很高的競爭力。

這意味著從MongoDB遷移到DynamoDB確實非常容易。

DynamoDB的優點

DynamoDB是AWS上的旗艦NoSQL數據庫,因此其固有的優勢是AWS平臺的成本,速度和可靠性。

作為AWS產品,它可以輕鬆地與AWS Lambda和API Gateway集成。

DynamoDB對於當前使用Mongo的任何人的最大優勢是,用戶可以直接從MongoDB進行實時遷移到DynamoDB。

最好的部分是沒有可管理的基礎架構-Amazon負責管理。

DynamoDB的缺點

如果我認為NoSQL丟失記錄的可能性太大,那麼DynamoDB對我來說不是一個好選擇。

DynamoDB可能會遇到可伸縮性問題,例如與所謂的“熱鍵”相關的問題,這些記錄的評估頻率要比其他記錄高得多。

此外,與MongoDB相比,DynamoDB支持較少複雜的數據類型,並且是AWS專有的產品。


總結一下

JAM Stack(無服務器體系結構)是一個不錯的選擇,特別是對於大多數靜態站點而言,也是一種值得注意的出色技術。

PostgreSQL具有龐大的社區,並以可靠,功能豐富的開源軟件包提供了SQL的所有強大功能,並具有出色的性能。

DynamoDB是MongoDB的直接替代品,可為您提供規模,安全性和速度,而無需維護任何基礎架構。


我的意見

“容器贏得了戰鬥,但將輸給無服務器架構。”

— HackerNoon引用西蒙·沃德利(Simon Wardley)

JAM Stack是當今最酷的技術之一。 它非常快捷,可訪問且對SEO友好,而且可以免費在AWS上託管靜態文件。

但是,對於那些能夠擁有構建步驟並重新編譯所有更改的應用程序,JAM Stack是唯一正確的選擇。

如果您問我,我會爭辯說,即使是非常大的網站也可以通過計劃的編譯(例如每小時)在JAM Stack上構建。 JAM Stack是rad。

它可能不適用於新聞網站,但是許多動態網站並不需要更新的頻率更高,而靜態網站當然不需要。

SQL與NoSQL

如果需要一個編譯步驟是項目的重中之重,那麼它取決於SQL與NoSQL:PostgreSQL或DynamoDB。

PostgreSQL不必託管在Amazon上,儘管可以託管在Amazon RDS上。 DynamoDB由Amazon開發並且是Amazon專有的。

SQL數據庫本質上更強大,但也更復雜。 他們的優勢在於業務分析和搜索。

NoSQL數據庫更易於設置並且足以用於許多項目。 這就是為什麼《衛報》考慮DynamoDB撰寫230萬篇文章的原因。

最後,他們選擇了PostgreSQL,因為DynamoDB在2017年沒有提供靜態加密,但是如果他們今天考慮從MongoDB遷移,他們可能會做出不同的決定。


(本文翻譯自Dr. Derek Austin 的文章《The Top Three Alternatives to MongoDB in 2019》)


分享到:


相關文章: