2024年值得關注的八個未來數據庫
關系型數據庫管理系統在數據庫技術領域占據主導地位已經多年了。當SQL在1970年代首次出現時,關系型數據庫管理系統的使用和受歡迎程度迅速提升。很快,MySQL成為了大多數公司和團隊首選的數據庫。
然而,2023年帶來了一系列具有顛覆性的數據庫。盡管其中一些數據庫仍然使用傳統的關系模式構建,但其他數據庫提供了創新的方法,值得我們在2024進行重點關注。
在本文中,我們將探索一些創新和未來感十足的數據庫,并比較它們的特點。
PlanetScale
圖片
PlanetScale是基于Vitess水平擴展MySQL技術的無服務器MySQL平臺。Vitess是由谷歌開發的可擴展的開源數據庫,用于應對數十億YouTube用戶的需求。處理如此規模的工作并非易事。
PlanetScale有趣的地方在于它是一個分支數據庫,這是一種最近才出現但看起來非常有前景的新型工作流程。那么,什么是分支數據庫?
什么是分支數據庫?
圖片
分支數據庫允許你從主數據庫創建不同的分支,用于不同的目的。你可以將這個工作流程想象成類似于Git這樣的版本控制系統,可以在項目中進行更改而不會破壞整個代碼庫。
你可以將你的主數據庫或生產數據庫復制到一個單獨的數據庫分支中。然后,可以在該數據庫分支中進行實驗、進行更改,當你對它們完全滿意時,將其合并回主數據庫。因此,通過保持生產數據庫的完整性,你可以高效而直觀地對數據庫進行嘗試和實驗。
PlanetScale的分支工作流程
PlanetScale還為你的數據庫添加了分支,這樣你就可以在一個獨立的開發分支上測試模式更改。這個分支與生產分支或你的主數據庫是分開的。這提供了一個獨立的工作環境,而不需要顯式地創建一個用于嘗試模式更改的暫存或測試環境。
你可以在PlanetScale官方文檔了解更多有關分支的含義以及PlanetScale如何使用這個概念。
特點
PlanetScale自動創建每日備份,并在開箱即用時保護生產分支上的直接模式更改,減少了意外破壞生產數據庫的可能性。
非阻塞模式更改是它提供的另一個有趣的特性。當你想要更改數據庫模式時,你可以創建并部署一個請求來更新你的表,而不會中斷你的用戶。它還可以與Prisma等第三方工具簡單集成。
Prisma是一個開源的數據庫工具包,為現代Web應用程序提供了一個類型安全的ORM(對象關系映射)層。當你想要更改數據庫模式時,你可以使用Prisma的遷移功能生成必要的SQL腳本,以非阻塞的方式應用于你的數據庫,而不會中斷你的用戶。這樣,你可以將PlanetScale與Prisma集成,以便應用程序保持在線的同時高效地更新你的模式。
價格
雖然PlanetScale的團隊計劃每月需要599美元,但定價計劃中包含了一個免費的層級。在免費層級中,你可以獲得1個生產分支和1個開發分支,每月可以進行10億次讀取和100萬次寫入。如果你需要更多的讀取、寫入和分支,而又不想花費太多金錢,你也可以選擇他們的Scalar計劃,每月29美元。
缺點
因為它是一個相對較新的服務,所以它并不具備標準MySQL數據庫的所有特性,比如存儲過程、觸發器、索引和其他類似的功能。
此外,如果你對分布式數據庫的概念還不熟悉,學習曲線可能會成為一個問題。但對于這類新型的數據庫,還是值得關注的。
YugaByteDB
Yugabyte
YugaByteDB是一個開源的Postgres數據庫,在云原生環境中加載了所有Postgres的原生特性。它允許同時在多個云上托管你的數據庫,從而更好地控制數據庫系統,消除了供應商鎖定的問題。這也使你能夠在不同的地區部署你的云實例,從而為你的數據庫提供更高的故障容忍度。
特點
YugaByte支持SQL和NoSQL API。這使得開發人員可以根據他們的熟悉程度和使用情況選擇最適合的API類型。除了確保高性能和可伸縮性,它還提供高可用性。
價格
Yugabyte提供了一個完全托管的專用集群,每核心每小時0.25美元。
缺點
作為另一個分布式數據庫系統,與傳統的SQL數據庫相比,它可能具有更陡峭的學習曲線和一些額外的復雜性開銷。
Dolt
dolt
Dolt是一個獨特的數據庫,它與版本控制和Git的工作原理相同。它可以跟蹤數據的變化,并了解數據的變化是如何以及何時發生的。就像一個Git倉庫一樣,你可以推送、拉取、分叉或克隆數據庫。非常有趣,是吧?
Dolt的分支行為
和PlanetScale以及Neon一樣,Dolt也實現了分支行為,你可以在不破壞生產數據的情況下對數據進行實驗。
由于它是基于Git工作流程構建和運行的,使用Dolt時,所有的git命令,如git log、git add等,可以在命令行中用dolt log、dolt add等命令替代。
特點
Dolt支持SQL查詢,使得從傳統SQL背景下來的開發人員能夠輕松地檢索和更新數據。
Dolt提供的另一個有趣特性是協同編輯。使用Dolt的團隊可以同時在同一個Dolt數據庫上進行多個開發人員的工作。Dolt會自動處理對數據庫所做的所有更改的合并。
定價和缺點
Dolt是開源的,并且完全免費。然而,由于其功能有限,如存儲過程或用戶定義函數,它可能只適用于特定的用例。
CockroachDB
CockroachDB
由前谷歌員工開發的CockroachDB是與SQL和Postgres兼容的最強大的分布式數據庫系統之一。它使用Go語言構建,為SQL和NoSQL API提供多模型支持,支持像YugaByteDB一樣的多云部署,并能處理每秒數百萬次查詢。
它擁有強大的社區支持,并為開發人員提供了大量的學習資源,如教程、博客文章等。
定價
雖然它有一個免費版本,可以用于開發和測試模式下的小型項目,但它可能有點昂貴,特別是與其他開源替代品相比。然而,它的專用計劃的價格比PlanetScale低得多,每月295美元。
缺點
作為一個分布式數據庫系統,它需要設置和管理系統的復雜性開銷,同時還需要一個陡峭的學習曲線。由于性能問題,它也不是對于延遲低、吞吐量高的應用程序的理想選擇。
CloudFlare D1
現在讓我們介紹一個在邊緣運行SQLite數據庫的無服務器數據庫平臺。Cloudflare Durable Objects (D1)用于構建和部署有狀態應用程序。
CloudFlare D1使用與傳統SQL數據模型不同的數據模型,它看起來和工作起來非常像面向文檔的數據庫,如MongoDB。
如何在CloudFlare D1中存儲數據?
讓我們來看一個例子。我們知道,在傳統的SQL數據庫中,數據存儲在由行和列組成的表中。
假如一個名為“employees”的表,它有以下列作為“id”、“name”、“age”和“department”。
下面是表的示例:
id name age department
1 Alice 28 Sales
2 Bob 35 Marketing
3 Charlie 42 Finance
相比之下,CloudFlare D1將數據存儲為類似于文檔數據庫的對象形式。
因此,將上面的例子轉換為CloudFlare D1中的對象,我們有一個名為“Employee”的對象,它具有以下屬性:“id”、“name”、“age”和“department”:
Employee {
id: 1,
name: 'Alice',
age: 28,
department: 'Sales'
}
因此,上述數據以一個帶有唯一標識符的Employee對象的形式存儲。
特點
Cloudflare的一個很棒的地方是它已經有了適用于workers的鍵值存儲,但其中的一個折衷是原生事務不起作用。因此,你也可以使用JavaScript編寫存儲過程,并直接在數據庫中運行這些過程,它們基本上是代碼片段。然后你可以使用它們來創建事務或其他可重用的查詢。
此外,CloudFlare D1作為無服務器數據庫的特點使得部署和管理變得很容易。
定價
Cloudflare D1目前處于alpha階段,完全免費進行測試、使用和實驗。這是你玩弄它并了解它是否成為你未來首選數據庫的最佳時機。
缺點
CloudFlare D1目前尚未準備好用于生產。它的使用案例非常有限,不涉及復雜的數據結構或傳統的SQL查詢。持久化對象方法的另一個問題是遷移困難,最終導致供應商鎖定。總的來說,盡管這個數據庫聽起來很有前景,但你現在還不能在你的生產應用程序中使用它。
說到無服務器架構,Xata提供了一個基于Postgres和Elasticsearch的有趣的關系型數據庫。它將你的數據視為一個電子表格,使開發人員能夠輕松構建需要靈活模式的應用程序。你也可以將它想象成AirTable或Notion的開發人員友好的替代品。
Xata
圖片
xata
特點
它內置了全文搜索功能,并且可以幫助你使用提供的架構編輯器實時可視化表之間的關系。
它還支持像Dolt一樣的分支,并主要用于實時處理大量數據。它還支持一些高級查詢功能,如聚合、過濾、連接等。
定價
Xata的定價基于每秒的速率限制或可以進行的數據庫請求次數。它有一個免費計劃,每秒提供75個請求,最多支持75萬條記錄。
如果你是一家初創公司或計劃很快推出MVP,他們的免費計劃應該足夠使用。他們的專業計劃起價為每個單位每月8美元。
缺點
Xata的一些主要缺點包括未來遷移到其他平臺的困難以及總體復雜性,通常需要豐富的專業知識才能使用。
圖片
Surreal DB
Surreal DB是用Rust編寫的,它為關系型、文檔型和圖形數據庫提供了一個易于使用的單一API。
特點
在數據建模方面,它非常靈活,非常適合推薦引擎、社交網絡等應用。在這方面,它類似于流行的圖形數據庫Neo4J。
它還非常簡單,可以與任何SQL類型的查詢語言一起使用,并提供高效執行實時查詢的能力。
例如,下面是一個在SurrealQL中的插入查詢,看起來幾乎與SQL的插入查詢相同:
INSERT INTO company {
name: 'Siddhant',
age: 24,
hobbies: ['technical writing', 'basketball']
};
此外,你可以使用SurrealQL直接連接你的Surreal DB到你的客戶端應用程序。
缺點
由于它相對較新,文檔和社區支持有限,特別是與帖子中討論的其他數據庫相比。它還使用自己的查詢語言SurrealQL來編寫查詢。這可能會引入新的學習曲線,并且缺乏優質資源來掌握這個查詢語言可能會在許多用例中成為開發人員的障礙。
定價
目前,SurrealDB沒有任何云服務提供,但你可以加入他們的云等待名單,這是他們未來計劃的一部分。你可以自己在本地或私有服務器上進行自托管。
雖然SurrealDB不是完全開源的,但它根據商業源代碼許可證進行許可,這使得它在所有開發和生產使用中都是免費的。
Fauna DB
FaunaDB是最通用和易于使用的數據庫之一。它由前Twitter工程師創建,是一個NoSQL數據庫,遵循類似于MongoDB的文檔數據庫范例。
特點
盡管是一個NoSQL數據庫,它支持原生連接操作,這是文檔數據庫中最缺失的功能。它非常適用于處理復雜的關系型數據,如社交圖譜,并且有自己的自定義查詢語言FQL。它還默認支持Graphql API。
它使用分布式架構以提供高可用性和低延遲。它可以成為無服務器應用程序或微服務架構的理想選擇。
定價
它有一個免費計劃,提供10萬次讀取、5萬次寫入和5GB的存儲空間。非常適合個人項目,但可能不適用于MVP或更大的生產項目。
你可以升級到FaunaDB的任何計劃,價格從每月25美元的個人計劃,到每月150美元的團隊計劃,再到每月500美元的大型組織計劃。
缺點
和SurrealDB類似,FaunaDB也使用了自己的查詢語言FQL,這可能會給開發人員帶來學習曲線。
例如,下面是一個在FQL中常用的查詢:
Paginate(Documents(Collection("users")))
上述查詢基本上是從一個名為“users”的集合中檢索所有文檔,并默認進行分頁。
在SQL中的等效查詢是:
SELECT * from users
正如你所見,這兩個查詢非常不同,它們在語法上沒有相似之處。
此外,與我們在帖子中討論的其他數據庫相比,FaunaDB的價格相對較高。
結論
我們已經討論了一些最先進和未來感的數據庫。這些數據庫大多數采用了分布式架構,這可能需要額外的工作和資源來進行設置、掌握和充分利用。然而,它們的創新方法和新穎的工作流表明它們有著寶貴的應用。
如果你考慮完全擺脫SQL,選擇一個基于定價、易用性、社區支持和整體實用性等因素的數據庫。如果你偏愛文檔數據庫,FaunaDB是一個不錯的選擇。如果你對分支數據庫感興趣,可以看看PlanetScale或Dolt。如果你需要一個靈活的模式,Xata是一個很好的選擇。我們討論的每個數據庫都有其獨特的特點。