MemSQL 架構初探


  MemSQL 自稱是最快的內存數據庫。目前已發布了2.5版本。

MemSQL 具有以下特點

1 高效的並行,尤其是分布式的MemSQL.

2 高效的並發,采用lock-free的內存數據結構skip list 和hash.支持MVCC.

3 查詢執行計划編譯成C++的形式,可以高效執行並且可以重用

4 支持數據的冗余存儲,提高可用性

5 支持重放事物日志的復制

6 支持JSON格式的數據處理

下面來看看Memsql的share-nothing分布式架構

 

 

兩層架構:分為aggregator 和 leaf
 
     Aggregator 存儲元數據,負責分發sql給leaf,然后綜合leaf的查詢結果。aggregator可以有多個,其中有一個為主aggregator。 主aggregator 還可以執行DDL和負責Leaf的auto-failover.其它普通aggregator 則不行。當主aggregator 失效,可以從其它普通aggregator 選擇一個通過sql命令設置為主aggregator 。
     Leaf上存儲真正的數據,數據通過主鍵hash存儲到各個leaf節點,leaf之間的數據均勻分布不會傾斜。目前還不支持范圍分區。在建庫時指定分區數,分區數應該為leaf節點的整數倍,一般設為8倍。每個leaf都是一個分庫,分取數據存儲在分庫的表中。表只持二級索引,同時支持以主鍵為前綴的唯一索引。
 
兩種表類型
    參照表(reference table): 數據分布在主aggregator和每個leaf節點。每個節點的數據都是完整的(沒有分區)。參照表同過復制從主aggregator向每個leaf節點同步數據。另外參照表的寫只能在主aggregator進行。
    分布表 (sharded table):數據通過hash分片存儲在每個leaf節點,個leaf節點只有部分數據。
 
數據冗余
    可用組(availability group),每個組是一些leaf的集合。組與組之間是冗余存儲的。目前最多支持兩個組。以兩個組為例,每個組都包含完整數據,每個分區表在兩個組都有一分copy.可以基於電力和網絡條件進行分組。
 
擴展性
     支持動態增刪Leaf節點,但需要執行rebalance partitions命令來重新分布分區數據。rebalance 操作都是在線進行的,即操作過程中不影響數據正常訪問。rebalance操作的單位是庫,最小粒度是 partition.
       下面是leaf節點狀態變化圖
 
MemSQL兼容mysql協議。支持mysql的ODBC,JDBC及其它語言接口。
 
一些思考

1 支持mysql 協議,使的memsql學習成本較低,同時mysql的ODBC,JDBC可以直接拿來使用,提高了可用性,同時也減少了MemSQL自身的開發成本。
2 redundancy_level目前最高支持2.集群中出現兩個Leaf節點同時故障的可能性不是很低。后需應該支持3及以上的level;在redundancy_level為2的情況下,如果一個leaf節點出現故障,對應的冗余節點負載一般會提升一倍,負載不均衡,很可能造成新的故障。
3 availability group是一個很好的分組方式,可以將不同的組放在不同的機房,提高可用性。
4 對於reblance table 操作,可以做到在線的方式進行,感覺難度比較大,但文檔中沒有看到更詳細的實現說明。

參考:

http://www.memsql.com 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM