對(duì)于內(nèi)存數(shù)據(jù)庫(kù),在Memcached基礎(chǔ)上,Redis改進(jìn)了持久緩存數(shù)據(jù)、使用字符串以外數(shù)據(jù)類型以及對(duì)數(shù)據(jù)執(zhí)行復(fù)雜操作等功能。
而Tarantool進(jìn)一步作出改進(jìn),它將可在數(shù)據(jù)集執(zhí)行的操作提升到新的水平,并在持久性和索引方面超越Redis,更不用說(shuō)速度和支持。事實(shí)上,基于Tarantool高質(zhì)量持久性流程,及其用于傳輸和大型數(shù)據(jù)集的設(shè)施,它可有效用于應(yīng)用程序的唯一數(shù)據(jù)庫(kù),這是Redis無(wú)法完成的功能。
Redis的主要限制是,它無(wú)法處理大于其服務(wù)器RAM的數(shù)據(jù)集。Tarantool提供多種存儲(chǔ)引擎選擇:Memtx,其功能類似于傳統(tǒng)內(nèi)存數(shù)據(jù)庫(kù),還有Vinyl/Disk,允許磁盤存儲(chǔ)與RAM結(jié)合使用。Vinyl可支持處理RAM大小10到100倍的數(shù)據(jù)集,它能處理這些大數(shù)據(jù)集是因?yàn)樗粌?yōu)化用于快速隨機(jī)寫(xiě)入,這是該配置出現(xiàn)的主要瓶頸。
從技術(shù)上來(lái)講,Vinyl采用的是被稱為日志結(jié)構(gòu)合并樹(shù)(LSM)的磁盤訪問(wèn)算法,而不是更常見(jiàn)的B-tree。
Redis和Tarantool都可使用Lua的變體進(jìn)行腳本化,從而允許在數(shù)據(jù)集執(zhí)行復(fù)雜的功能。同時(shí),除了這個(gè)自定義Lua腳本外,Redis和Tarantool都可使用LuaRocks生態(tài)系統(tǒng)中某些軟件包進(jìn)行擴(kuò)充。然而,Tarantool使用更快的LuaJIT,而Redis采用vanilla Lua。不僅如此,Tarantool運(yùn)行完整的非阻止的Lua應(yīng)用服務(wù)器,可訪問(wèn)網(wǎng)絡(luò)和外部服務(wù),而Redis的Lua部署被沙箱化,其腳本被阻止。換句話說(shuō),在Redis中,等待Lua進(jìn)程完成可能會(huì)導(dǎo)致性能問(wèn)題,而Tarantool則根本不存在這個(gè)問(wèn)題。
當(dāng)然,在比較Tarantool和Redis時(shí),不得不提到其相對(duì)吞吐量和延遲次數(shù)。在單個(gè)節(jié)點(diǎn)測(cè)試中,我們使用Yahoo! Cloud Server Benchmark’s (YCSB) 六個(gè)核心工作負(fù)載類型--“更新”、“大部分讀取”、“只讀”、“讀取最新”、“短范圍”以及“讀取-修改-寫(xiě)入”。測(cè)試結(jié)果表明,Tarantool在所有工作類型的吞吐量都要優(yōu)于Redis。Tarantool在很多工作負(fù)載類型具有降低的延遲性,Redis則在某些工作負(fù)載有著較低的延遲性。這包括具有以及不具有預(yù)寫(xiě)日志(持久功能)的工作負(fù)載。
與Redis相比,Tarantool的最大優(yōu)勢(shì)在于,與數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)一起,Tarantool運(yùn)行完整的應(yīng)用服務(wù)器。該服務(wù)器可單獨(dú)運(yùn)行,它包含Redis完全沒(méi)有的整套技術(shù)工具。Tarantool應(yīng)用服務(wù)器的殺手锏功能是它可與任何數(shù)量較慢的舊數(shù)據(jù)庫(kù)結(jié)合使用,從而加速其運(yùn)行,這些數(shù)據(jù)庫(kù)包括Oracle、IBM DB2、MySQL、MS SQL Server和PostgreSQL。
Tarantool可編排及虛擬化其目標(biāo)的數(shù)據(jù),使數(shù)據(jù)可更快速地被訪問(wèn)。向任何企業(yè)應(yīng)用和服務(wù)架構(gòu)添加Tarantool都可減輕集成和擴(kuò)展的代碼庫(kù),并降低對(duì)服務(wù)器和硬件的需求。例如,一臺(tái)Tarantool服務(wù)器可替代幾十臺(tái)運(yùn)行傳統(tǒng)DBMS的服務(wù)器,從而讓你可快速擴(kuò)展微服務(wù)器和應(yīng)用程序。