值得關(guān)注的9款非主流數(shù)據(jù)庫(kù)
譯文
【51CTO.com快譯】總的來(lái)說(shuō),如果你需要一個(gè)數(shù)據(jù)庫(kù),可以使用某一款大牌的數(shù)據(jù)庫(kù):MySQL/MariaDB、PostgreSQL、SQLite、MongoDB,然后開始工作。但有時(shí)候一應(yīng)俱全的方法并不適合所有場(chǎng)景。主流數(shù)據(jù)庫(kù)有時(shí)無(wú)法支持你的使用場(chǎng)景,你需要尋找更專門化的數(shù)據(jù)庫(kù)。本文介紹了9款非主流數(shù)據(jù)庫(kù),從內(nèi)存中分析、鍵值存儲(chǔ)到時(shí)間序列系統(tǒng),不一而足。
DuckDB
“SQL OLAP系統(tǒng)”這個(gè)短語(yǔ)通常讓人聯(lián)想到處理數(shù)據(jù)的整體式系統(tǒng)或龐大的數(shù)據(jù)倉(cāng)庫(kù)集群。DuckDB之于分析數(shù)據(jù)庫(kù),尤如SQLlite之于MySQL和PostgreSQL。它不是為在與成熟的OLAP解決方案一樣龐大的規(guī)模下運(yùn)行而設(shè)計(jì)的,而是為本地?cái)?shù)據(jù)集提供快速的內(nèi)存中分析處理。
DuckDB的許多功能與大型OLAP產(chǎn)品中的功能相對(duì)應(yīng),盡管規(guī)模較小。數(shù)據(jù)存儲(chǔ)為列而不是行,查詢處理進(jìn)行矢量處理,以便最大程度地利用CPU緩存。雖然在直接連接至Tableau之類的報(bào)告解決方案方面辦法不多,但是手動(dòng)并入這種解決方案應(yīng)該不難。除了面向C++的綁定外,DuckDB還直接連接到兩個(gè)最常用的分析編程環(huán)境:Python和R。
EdgeDB
“邊緣”是圖數(shù)據(jù)庫(kù)中使用的術(shù)語(yǔ),指高度連接的數(shù)據(jù)集中兩個(gè)實(shí)體或節(jié)點(diǎn)(比如客戶與訂單或訂單與產(chǎn)品)之間的連接或關(guān)系。EdgeDB使用PostgreSQL核心及其提供的所有屬性(比如ACID事務(wù)和高可靠性)來(lái)構(gòu)建開發(fā)者所謂的“對(duì)象關(guān)系數(shù)據(jù)庫(kù)”,擁有強(qiáng)字段類型和類似SQL的查詢語(yǔ)言。
因此,EdgeDB結(jié)合了類似NoSQL的易用性和即時(shí)性、圖形數(shù)據(jù)庫(kù)的關(guān)系建模功能以及SQL的保證和一致性。盡管EdgeDB不是正式的文檔數(shù)據(jù)庫(kù),你也可以用它以這種方式存儲(chǔ)數(shù)據(jù)。你還可以使用GraphQL查詢語(yǔ)言輕松地從EdgeDB檢索數(shù)據(jù),就像使用Neo4j之類的原生圖形數(shù)據(jù)庫(kù)那樣。
FoundationDB
蘋果牽頭的開源項(xiàng)目FoundationDB是一種“多模”數(shù)據(jù)庫(kù),內(nèi)部將數(shù)據(jù)存儲(chǔ)為鍵值對(duì)(實(shí)際上是NoSQL模型),但可以組織成關(guān)系表、圖形、文檔及其他許多數(shù)據(jù)結(jié)構(gòu)。ACID事務(wù)保證了數(shù)據(jù)完整性,橫向擴(kuò)展和復(fù)制功能均可直接使用。不過(guò)FoundationDB的設(shè)計(jì)有一些嚴(yán)格的限制:鍵、值和事務(wù)都有嚴(yán)格的大小限制,事務(wù)還有嚴(yán)格的時(shí)間限制。
HarperDB
HarperDB的目標(biāo)是提供單一數(shù)據(jù)庫(kù),以處理企業(yè)中的結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)——介于FoundationDB之類的多模數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)或OLAP解決方案之間。所攝取的數(shù)據(jù)已經(jīng)過(guò)重復(fù)數(shù)據(jù)刪除,通過(guò)你選擇的界面:SQL、NoSQL、Excel等可供查詢使用。Tableau或Power BI等BI解決方案可以直接與HarperDB集成,無(wú)需提取或處理數(shù)據(jù)。企業(yè)版和社區(qū)版均有提供。
KeyDB
盡管Redis很流行很強(qiáng)大,但內(nèi)存中鍵值存儲(chǔ)因線程性能和易用性不盡如人意而受到批評(píng)。KeyDB與Redis在協(xié)議上兼容,因此可以臨時(shí)替代Redis。但KeyDB在底層作了一些出色的改進(jìn),主要是面向網(wǎng)絡(luò)I/O操作的多線程和查詢解析。Redis的下一版本Redis 6計(jì)劃也包括線程I/O,但KeyDB現(xiàn)在就可以使用。
M3DB
M3DB是優(yōu)步內(nèi)部工程團(tuán)隊(duì)開發(fā)的產(chǎn)品,這個(gè)分布式時(shí)間序列數(shù)據(jù)庫(kù)用于優(yōu)步的度量指標(biāo)平臺(tái)(實(shí)際上作為Prometheus的數(shù)據(jù)存儲(chǔ))。M3DB借鑒了Apache Cassandra和Facebook項(xiàng)目“Gorilla”的想法,支持任意的時(shí)間精度、無(wú)序插入以及可配置的復(fù)制和讀取一致性。然而,開發(fā)者特別指出M3DB可能不適合所有時(shí)間序列數(shù)據(jù)庫(kù)使用場(chǎng)合。比如說(shuō),M3DB無(wú)法在給定的時(shí)間窗口(默認(rèn)值為2小時(shí))外無(wú)序插入數(shù)據(jù),它主要針對(duì)存儲(chǔ)和檢索64位浮點(diǎn)數(shù)而不是其他類型的數(shù)據(jù)進(jìn)行了優(yōu)化。
RediSQL
名稱暗示著融合了Redis內(nèi)存中鍵值存儲(chǔ)和SQL查詢功能,而這正是RediSQL的本質(zhì)——具體來(lái)說(shuō),嵌入SQLite數(shù)據(jù)庫(kù)的Redis模塊。數(shù)據(jù)透明地存儲(chǔ)在Redis中,因此Redis處理持久性和內(nèi)存中處理。每個(gè)數(shù)據(jù)庫(kù)都與Redis鍵相關(guān)聯(lián),因此你可以在一個(gè)Redis實(shí)例上有多個(gè)SQL數(shù)據(jù)庫(kù)。針對(duì)這些數(shù)據(jù)庫(kù)的查詢是標(biāo)準(zhǔn)SQL,通過(guò)標(biāo)準(zhǔn)的Redis API來(lái)傳遞。你還可以在RediSQL中創(chuàng)建和預(yù)編譯語(yǔ)句(實(shí)際上是存儲(chǔ)過(guò)程),以加快查詢執(zhí)行。商業(yè)版和開源版均有提供。
RQLite
SQLite稱得上是個(gè)奇跡:這是一款運(yùn)行飛快、超級(jí)可靠的嵌入式開源數(shù)據(jù)庫(kù)。只要你在單用戶應(yīng)用程序中需要數(shù)據(jù)庫(kù),SQLite都是很好的默認(rèn)選擇,但SQLite實(shí)例僅限于一個(gè)節(jié)點(diǎn)。
RQLite基于SQLite創(chuàng)建分布式數(shù)據(jù)庫(kù)系統(tǒng)。設(shè)置多個(gè)節(jié)點(diǎn)很容易,數(shù)據(jù)使用Raft共識(shí)算法可在這些節(jié)點(diǎn)之間自動(dòng)復(fù)制。RQLite還提供節(jié)點(diǎn)之間的加密和發(fā)現(xiàn)服務(wù),該服務(wù)使自動(dòng)添加節(jié)點(diǎn)變得很容易。但RQLite也有幾個(gè)缺點(diǎn):寫速度不如SQLite,只有確定性的SQL函數(shù)(即保證在每個(gè)節(jié)點(diǎn)上生成同樣結(jié)果的函數(shù))可以安全使用。
UmbraDB
如今大多數(shù)高端數(shù)據(jù)庫(kù)都有某種內(nèi)存中功能,即使它涉及表固定之類的系統(tǒng)(比如SQL Server)。UmbraDB這種分析數(shù)據(jù)庫(kù)可以作為PostgreSQL的臨時(shí)替代來(lái)運(yùn)行,旨在盡可能使用內(nèi)存中處理。如果不行,它使用一種新穎的可變大小頁(yè)面機(jī)制從存儲(chǔ)系統(tǒng)對(duì)數(shù)據(jù)分頁(yè)處理。長(zhǎng)時(shí)間運(yùn)行的查詢針對(duì)使用LLVM執(zhí)行進(jìn)行了優(yōu)化。
原文標(biāo)題:9 offbeat databases worth a look,作者:Serdar Yegulalp
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】