NewSQL資料庫VoltDB特性簡介,newsql資料庫voltdb

來源:互聯網
上載者:User

NewSQL資料庫VoltDB特性簡介,newsql資料庫voltdb

VoltDB是一個革命性的新型資料庫產品,被稱作NewSQL資料庫。它基於H-Store,號稱比當前資料庫產品的輸送量高45倍,同時又具有很高的擴充性。它的特性主要有以下幾點:

Ø  高吞吐、低延遲:通過記憶體計算,預存程序和串列資料訪問實現。

Ø  可擴充性:自動分區和複製,保證效能和可擴充性。

Ø  高可用性:同步的多主複製(在VoltDB中叫K-safety)。

Ø  持久化:資料庫快照集與命令日誌(command log)的創新技術組合。

1 高吞吐、低延遲

VoltDB能夠提供高吞吐、低延遲的SQL操作,總體來說,它是通過記憶體計算避免磁碟阻塞(disk stall),通過預存程序避免使用者阻塞(user stall),通過叢集結點內的資料訪問序列化,避免傳統資料庫鎖、緩衝管理的開銷。此外,VoltDB並不是純Java開發,其SQL執行引擎是C++寫成的,所以並不受GC暫停影響。

Ø  記憶體計算:使VoltDB在事務執行期間無需等待磁碟載入,避免磁碟I/O開銷。充分利用了現代伺服器上龐大的記憶體,將輸送量最大化。

Ø  預存程序:避免應用與資料庫之間的多次通訊開銷,每個事務被定義成一個預存程序,因此事務只需一次通訊往返。然而,VoltDB並不是只支援預存程序,從1.1版本開始已經能夠支援來自JDBC、SQL命令列、HTTP/JSON、原生C++/PHP/C#/Node.js等等用戶端的SQL查詢。唯一的限制就是:VoltDB總是自動認可模式,不支援手動控制事務

Ø  資料訪問序列化:傳統資料庫在前面兩種阻塞等待的情況下,會切換執行其他事務,因此會導致很大的鎖(latching and locking)開銷。而一個VoltDB資料庫由許多記憶體計算引擎組成(叫做partition分區),每個分區都是資料和相關處理過程的集合。VoltDB在叢集內自動分發資料建立分區,每個分區內都是單線程的,從而避免了傳統資料庫對並發控制的開銷。

Ø  C++執行引擎:VoltDB使用原生C++代碼進行表資料的記憶體配置和SQL的執行,之所以核心不使用Java就是避免將表資料這種長時間存活的資料放置到JVM堆上,同時對記憶體使用量進行更細粒度的控制。此外,像靜態部署相關和schema相關的資料,儘管是在Java中管理,但也使用DirectByteBuffer分配到堆外記憶體。所以其實JVM堆只是用來分配事務相關的一些存活期很短的資料,這對於GC來說是合適的負載。

 

如果某個事務只涉及一個單一分區內的資料,則其處理流程如所示:


2 擴充性架構

從架構上看,VoltDB屬於shared nothing架構,因此可以很容易地實現擴充,可以通過增加已存在結點的容量與效能實現垂直擴充,通過動態增加新結點實現水平擴充,而在這個過程中不需要修改任何資料庫schema和應用程式代碼。

 

同時,VoltDB不僅支援表分區,還支援表複製。對於大表,可以通過分區來提高效能。對於頻繁讀取的小表,可以通過複製來減少join。


 

這與分布式緩衝GemFire中的mirrored region和partitioned region的概念很像。在GemFire這,mirrored region包含全量資料,而partitioned region只包含分區資料。但不同的是,VoltDB是根據表的特點選擇複製或分區,而GemFire則通過mirrored region將其他分區資料抓取到一起形成全量的資料鏡像。


 

如果一個事務涉及多個分區的資料訪問,那麼其處理流程如所示。一個結點會充當協調者(coordinator),負責分發任務給其他結點,並收集結果,完成任務。


3 高可用性

不像傳統RDBMS產品依賴第三方的HA解決方案,VoltDB提供三種HA能力:K-safety,網路故障檢測,存活結點重連(rejoin)。

3.1 K-safety

當配置成K-safety時,VoltDB會自動地複製資料庫分區,K表示副本的個數。例如K=0時表示沒有副本,所以任何一個結點的故障都會導致整個資料庫叢集的停止服務。當K=1時表示有1個副本,即一共2份拷貝。要注意的是:VoltDB中的副本是可以讀寫的,而不是傳統的主從複製關係。


 

關於資料同步問題的解決,任何發生在複製分區上的操作都會發送給各個拷貝的結點去執行,來保證一致性。如果其中一個結點失敗,那麼資料庫會繼續發送這個操作給失敗的結點。因此在這一點上VoltDB與傳統資料庫有很大不同,不存在多主(multi-master)情況下的資料同步衝突問題。所以K-safety也叫做同步多主複製。

3.2 網路故障檢測

當網路發生故障時,VoltDB的結點彼此之間被物理隔離開,而認為對方已經發生故障。那麼K-safety機制會使這兩側的結點繼續分別提供服務。如果不及時檢測到的話,這種“分離的大腦”(split brain)會導致嚴重的資料同步問題。因此,VoltDB會自動檢測網路故障,立即評估出那一側結點應該繼續服務,並快照另一側的結點資料後停掉服務。當網路故障解決時,可以直接使用下面將介紹到的存活結點重連技術將結點重新加入到叢集中。


3.3 存活結點重連

離線的VoltDB結點可以通過rejoin操作重新加入到叢集中。具體過程是:首先從兄弟結點獲得一份資料拷貝,當追趕上兄弟結點時,此存活結點就可以回到正常狀態,接受任務了。

4 持久化

儘管VoltDB的HA能夠降低當機機率,但故障還是偶爾會發生,而且DBA有時也要定期地停機維護。因此,VoltDB提供了高效能的快照和命令日誌(command log)來支援各種持久化需求。對於日誌,VoltDB支援同步和非同步,以及重新整理到磁碟的時間間隔等配置。


 

那command log與傳統的WAL(write-ahead log)有什麼區別呢?(待深入研究)


總結

但這樣也不代表VoltDB是萬能的,其設計和特性決定了其應用情境,VoltDB比較適合高頻率請求、短事務的應用,像金融、零售、Web2.0等,以及流式資料應用,像Recommendation Engine、即時廣告平台、點擊流處理、欺詐交易檢測等。

參考資料

1 VoltDB Technical Overview

2 Using VoltDB

3 Debunking Myths about the VoltDB in-memory database

4 Impact of Java Garbage Collection on in-memory databases

5 Command logging vs. Write-ahead Logging

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.