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 

MemSQL 架构初探(转)的更多相关文章

  1. MemSQL 架构初探

    MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...

  2. OceanBase 架构初探

    OceanBase 架构初探 原创衣舞晨风 发布于2018-11-13 08:44:14 阅读数 1417  收藏 展开 1.设计思路 OceanBase的目标是支持数百TB的数据量以及数十万TPS. ...

  3. scrapy架构初探

    scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...

  4. 云原生时代, Kubernetes 多集群架构初探

    为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”.我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的 ...

  5. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

  6. React Native For Android 架构初探

    版权声明:本文由王少鸣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/171 来源:腾云阁 https://www.qclo ...

  7. Scrapy的架构初探

    Scrapy,Python开发的一个web抓取框架. 1,引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想 ...

  8. DDD「领域驱动设计」分层架构初探

    前言 基于 DDD 传统分层架构实现. 项目 github地址:https://github.com/WuMortal/DDDSample 这个分层架构是工作中项目正在使用的分层架构,使用了一段时间发 ...

  9. Android架构初探

    #一 背景点评美团合并之后,业务需要整合,我们部门的几条业务需要往美团平台迁移,为了降低迁移成本,开发和维护成本,以及将来可能要做的单元测试,需要对架构进行相应的调整.之前的代码都堆在Activity ...

随机推荐

  1. echo() print() printf() print_r() 的区别

    echo是一个语言结构而非函数,因此它无法被变量函数调用, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print()    只能打印出简单类型变量的值(如int ...

  2. win10 内置软件经常不用,还占空间?如何轻松卸载

    Step1:首先,在电脑桌面上点击左下角的开始菜单,在依次选择打开所有应用—Windows PowerShell,在Windows PowerShell上单击右键,选择以管理员身份运行: Step2: ...

  3. 集合--(List、Set、Map)遍历、删除、比较元素时的小陷阱

    6,Map集合遍历的4中方法? 5,List遍历时如何remove元素 4.漏网之鱼-for循环递增下标方式遍历集合,并删除元素 如果你用for循环递增下标方式遍历集合,在遍历过程中删除元素,你可能会 ...

  4. [UE4]Format Text

    蓝图会自动把字符串中的占位换成参数输入. 字符串不会自动转换,需要手动转换

  5. ip route 命令详解

    linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  6. sas transpose 代码备忘

    OPTIONS NOCENTER LS=MAX PS=MAX; LIBNAME S '.\report';/*PROC PRINT DATA=S.doquestionr(WHERE=(sid=1972 ...

  7. 备用DNS域名服务器

    DNS:1.34.151.129,域名:www#eliuliang#com, 个人用解析地址,请勿使用.

  8. C# 线程 在 sleep,suspend 之后 Abort 的方法

    1) 线程在sleep时的Abort     方法:对线程函数用 catch ThreadAbortException ,并return.   示例: [csharp] view plaincopy ...

  9. Google C++命令规范

    最近发现自己在开发程序的过程中,经常会将好几种命名规范进行混用,这样使得程序的可读性下降,于是乎依然决定学习并使用Google的命令规范,并且坚持使用. copy from https://www.c ...

  10. Centos配置iptables开放ftp服务

    安装完vsftpd后,默认情况下,CentOS的防火墙是不开放ftp服务的,需要添加模块和开放21端口才能提供ftp访问.1.添加ip_conntrack_ftp 模块[root@hexuweb101 ...