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