本周数据库业界探讨最火热的话题就是MemSQL,究竟是不是“旧瓶装新酒”引发了诸多的辩论,同时也引发了究竟是产品技术重要还是DBA重要的疑问。网络中有一些关于MemSQL的介绍,基本上都是来自官方文档。在本文中,数据库行业的著名独立分析师Curt Monash也发表了他对MemSQL的看法。   

MemSQL到底是什么?
内存关系型数据库
QL-92的子集 兼容MySQL(SQL覆盖问题除外)   

MemSQL的性能
读性能比memcached差10%左右
写性能比memcached强20%左右
一台64核、1/2 TB的机器上能跑到120万条插入每秒
同样条件下,20分钟之内能加载5亿条记录   

关于MemSQL的讨论主要集中在性能方面,包括: 数据通过哈希表和跳转表(skip lists)进行组织。MemSQL认为跳转表在多核上的扩展性非常好 查询模式可以编译成C++ MVCC/无读锁 轻量级写锁 可调整持久性,你可以fully durable的跑MemSQL,也可以设一个buffer size来限定可承受的交易数据量
其实将查询进行预编译很难说是一个创新,也不是业内的独一份。此前包括QlikTech、StreamBase以及ParAccel都做过类似的尝试。而MemSQL的特色在于: 编译成只要你想读就可以读的C++ 参数化,如果一个查询中包括一系列的参数,那么它会存储起来以备将来运行更多其它参数 持久性,如果服务器宕机,存储的编译查询不会丢失每个查询只占几KB的空间,在早期MemSQL的客户中,他们最多存储不会超过几千个查询模式。因此MemSQL对于编译这些查询会造成的影响还是表示非常乐观的,而使用LRU算法来释放空间的方式可能不会去考虑。   

MemSQL的持久性使用预写入日志到一个磁盘(传统或固态硬盘),同时发送快照到其他磁盘的方式。持久性的设计是连续的,但是在full-durability场景中是否也是就不清楚了。   

其他一些值得注意的技术细节包括: MemSQL可以运行在多温度环境下,通过DDL手动控制。也就是说,较新的数据会放到MemSQL中,旧数据放入到MySQL中 有一点我认为是最佳实践,MemSQL团队也秉承了这一理念,就是在两个或者多个服务器RAM中得到确认后,要第一时间提交写入 并行Group By,这个MemSQL的团队引以为豪 MemSQL不进行数据压缩,他们认为OLAP负载中才需要数据压缩 MemSQL的插入性能非常高,所以它们的目标客户群是那些存在频繁交易的系统用户

TechTarget中国原创内容,原文链接: http://www.searchdatabase.com.cn/showcontent_62951.htm

内存数据库MemSQL ——基于内存,MVCC+哈希表、跳表的更多相关文章

  1. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

  2. 自己动手实现java数据结构(九) 跳表

    1. 跳表介绍 在之前关于数据结构的博客中已经介绍过两种最基础的数据结构:基于连续内存空间的向量(线性表)和基于链式节点结构的链表. 有序的向量可以通过二分查找以logn对数复杂度完成随机查找,但由于 ...

  3. 跳表(SkipList)原理篇

    1.什么是跳表? 维基百科:跳表是一种数据结构.它使得包含n个元素的有序序列的查找和插入操作的平均时间复杂度都是 O(logn),优于数组的 O(n)复杂度.快速的查询效果是通过维护一个多层次的链表实 ...

  4. 聊聊Mysql索引和redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  5. Redis 学习笔记(篇三):跳表

    跳表 跳表(skiplist)是一种有序的数据结构,是在有序链表的基础上发展起来的. 在 Redis 中跳表是有序集合(sort set)的底层实现之一. 说到 Redis 中的有序集合,是不是和 J ...

  6. Redis中的跳表

    date: 2020-10-15 14:58:00 updated: 2020-10-19 17:58:00 Redis中的跳表 参考网址1 参考网址2 redis 数据类型 zset 实现有序集合, ...

  7. 基于内存的关系数据库memsql初探

    背景 广告系统中,算法模型预估需要根据广告的实时转化统计结果,才能做出更精准的预估:同时,支持多维度聚合查询(例如按照广告各个不同层级维度,按照时间不同粒度的维度),并跨大区合并.一开始的版本是基于m ...

  8. SpringSecurity实战记录(一)开胃菜:基于内存的表单登录小Demo搭建

    Ps:本次搭建基于Maven管理工具的版本,Gradle版本可以通过gradle init --type pom命令在pom.xml路径下转化为Gradle版本(如下图) (1)构建工具IDEA In ...

  9. RDD:基于内存的集群计算容错抽象(转)

    原文:http://shiyanjun.cn/archives/744.html 该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A Fa ...

随机推荐

  1. 类库探源——System.String

    一.MSDN描述 String 类: 表示文本,即一系列的 Unicode 字符 命名空间 : System 程序集 : mscorlib.dll 继承关系: 备注: 1. 字符串是 Unicode ...

  2. C++中数字与字符串之间的转换

    原文地址:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 (1)string --> ...

  3. PHP开发APP接口---返回数据的封装类

    参考视频http://www.imooc.com/learn/163 <?php /** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据 ...

  4. PHP代码分离

    所谓的代码分离 其实只是一种思路,既然是一种思路 那就意味着他是有需求的 没有需求就没有解决方案 没有方案就不存在思路. 在这之前,我们制作 PHP 程序页面的时候.都是 HTML 和 PHP 混合写 ...

  5. favicon.ico的使用方法

    favicon.ico怎么来,就自己决定了. 虽说是放在网站根目录下就行了, 但最好是放在网站images目录下,方便统一管理. 然后在head.tpl.php 中的<head></ ...

  6. window scipy install

    http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy whl包,使用pip install xx.whl  安装 1:先安装 numpy+mkl.  whl ...

  7. svn修改密码跟账户

    在co的时候直接输入账户跟密码 svn co  ${SVNURL} ./ --username **--password *** 或者删除缓存文件,在Linux上面 删除~/.subversion/a ...

  8. mp4下载完后才能播放的问题

    下载完后才能播放的问题.mp4视频有metadata,通常在文件尾部,而flash读到这个metadata才开始播放,解决办法是用工具处理一下mp4,把它的metadata移至文件头部. 推荐工具:m ...

  9. Keil_C51程序调试过程

    调试一般都是在发生错误与意外的情况下使用的.如果程序能正常执行,调试很多时候都是用不上的.所以,最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题. 单片机的程序调试分为两种,一种是使 ...

  10. PHP日常杂记

    1.php点击按钮跳转页面 <input type="button" onclick="window.location.href='login.php'" ...