高吞吐低延遲的 NoSQL 數(shù)據(jù)庫(kù)——Scylla 3.0 發(fā)布
開(kāi)源 NoSQL 數(shù)據(jù)庫(kù) Scylla Open Source 發(fā)布第 3 個(gè)主要版本更新,這個(gè)版本提高了查詢效率并減少存儲(chǔ)的容量需求,盡可能降低維護(hù)時(shí)間,同時(shí)也還加強(qiáng)了整體數(shù)據(jù)庫(kù)的執(zhí)行效率,官方表示,Scylla 是目前性能***的 NoSQL 數(shù)據(jù)庫(kù),包括布署于生產(chǎn)環(huán)境的 Apache Cassandra 都不是對(duì)手。
2015 年發(fā)展至今,以 C++ 從頭打造的開(kāi)源 NoSQL 數(shù)據(jù)庫(kù) Scylla,其基礎(chǔ)設(shè)計(jì)與 Apache Cassandra 數(shù)據(jù)庫(kù)兼容,并提供相同的橫向擴(kuò)展和容錯(cuò)能力,但官方提到,其吞吐量可以是 Apache Cassandra 的 10 倍,并維持一致且個(gè)位數(shù)毫秒的延遲時(shí)間。
Scylla Open Source 3.0 加入了實(shí)例化視圖(Materialized Views)功能,將不同磁區(qū)找尋數(shù)據(jù)的復(fù)雜性,從應(yīng)用程序移到服務(wù)器上,因此實(shí)例將會(huì)更快也更可靠,這個(gè)方法讓?xiě)?yīng)用程序更容易對(duì)數(shù)據(jù)進(jìn)行多重審查。實(shí)例化視圖讓?xiě)?yīng)用程序只需要聲明額外的視圖,Scylla 會(huì)產(chǎn)生新的視圖表格,并且在每一次更新基礎(chǔ)表格(Base table)時(shí),視圖表格也會(huì)隨之自動(dòng)更新,寫(xiě)入動(dòng)作僅直接發(fā)生在基礎(chǔ)表格上,而讀取動(dòng)作則是對(duì)視圖表格。官方提到,一如往常的 Scylla 與 Apache Cassandra 版本兼容,包括這項(xiàng)功能更新與 CQL 語(yǔ)法。
另外,Scylla Open Source 3.0 也添加了已可用于生產(chǎn)的全局輔助索引(Global Secondary Indexes)功能,能夠擴(kuò)展至任何大小的分布式集群。全局輔助索引利用低端的實(shí)例化視圖索引,以使索引不相依于集群節(jié)點(diǎn)數(shù)。而輔助索引對(duì)大部分應(yīng)用程序來(lái)說(shuō)是可見(jiàn)的,因此查詢能夠訪問(wèn)表格中的所有字段,用戶可以在不更改應(yīng)用程序的情況下,添加或是刪除索引。
輔助索引能夠比實(shí)例化視圖索引花費(fèi)較少的存儲(chǔ)成本,因?yàn)檩o助索引只要復(fù)制索引的字段與主鍵值,而不像是實(shí)例化視圖索引必須復(fù)制查詢的字段,因此同樣的,輔助索引也能夠更高性能地執(zhí)行更新,因?yàn)槲ㄓ兄麈I值和索引列字段的改變,才能觸發(fā)索引視圖中的更新。
官方提到,輔助索引或?qū)嵗晥D的使用時(shí)機(jī),取決于應(yīng)用程序的需求,當(dāng)開(kāi)發(fā)者要求高性能并且需要對(duì)特定字段集進(jìn)行查詢,則需要使用實(shí)例化視圖。然而,如果應(yīng)用程序需要查詢不同的字段集,輔助索引就會(huì)是更好的選擇,因?yàn)榭梢愿鶕?jù)應(yīng)用程序的需求,以較少的存儲(chǔ)成本移除和增加查詢索引。
這個(gè)版本還支持了新的高性能存儲(chǔ)格式 SSTable,該格式與 Apache Cassandra 3.x 兼容,同時(shí)也與先前 Scylla 版本向后兼容,而且少掉了復(fù)制作業(yè)中不需要的重復(fù)數(shù)據(jù),能最多減少 3 倍存儲(chǔ)容量。官方提到,新布署的 Scylla Open Source 3.0 數(shù)據(jù)庫(kù)將自動(dòng)使用新格式,而既保存案不受影響。
另外,Hinted Handoff 功能則可以幫助節(jié)點(diǎn)因大量寫(xiě)入負(fù)載、硬件故障或是任何因素造成暫時(shí)無(wú)法回應(yīng)的情況,當(dāng)發(fā)生短暫網(wǎng)絡(luò)問(wèn)題或是節(jié)點(diǎn)重啟的時(shí)候,Hinted Handoff 將能幫助減少系統(tǒng)修復(fù)的時(shí)間,進(jìn)而提升分布式布署的整體性能。
官方解釋,提示(Hint)代表著寫(xiě)入請(qǐng)求的紀(jì)錄,這分紀(jì)錄會(huì)由協(xié)調(diào)器留存,直到故障節(jié)點(diǎn)再次連上線。而且當(dāng)寫(xiě)入成功但一個(gè)或多個(gè)副本皆無(wú)法確認(rèn)的時(shí)候,Scylla 會(huì)也會(huì)產(chǎn)生一個(gè)提示,在這些節(jié)點(diǎn)恢復(fù)時(shí),重新寫(xiě)入數(shù)據(jù)。這個(gè)功能在 Scylla Open Source 2.1 中屬實(shí)驗(yàn)性質(zhì),而在 Scylla Open Source 3.0 終于正式加入了。
在整體執(zhí)行性能方面,Scylla Open Source 3.0 也改進(jìn)了多重磁區(qū)掃描,Scylla 通過(guò)擴(kuò)展有狀態(tài)分頁(yè)以支持范圍掃描,在新版本中加入了新的控制算法,加速?gòu)乃蟹制x取范圍中的所有數(shù)據(jù),這些分片緩存了分片上的中介串流,并將分頁(yè)查詢引導(dǎo)到先前使用的配對(duì)緩存結(jié)果上。簡(jiǎn)單來(lái)說(shuō),新算法的本質(zhì)是一個(gè)多工器,在分片上結(jié)合讀取器輸出到單一串流中。





























