写在前面

本文主要是从学术而非商业数据库实践的角度来介绍分布式DBMS H-Store。H-Store是由Brown,MIT,CMU联合开发并在MIT的实验室成功部署实现的。

H-Store的研究者对外界公布的关于H-Store的论文主要是以下两篇:

The end of an architectural era, VLDB’07

H-Store: A High-Performance, Distributed Main Memory Transaction Processing System, PVLDB’08

其中第一篇是在分析和总结了面向磁盘数据库管理系统的种种弊端,从架构设计这一角度,高屋建瓴地提出了DBMS面临改革的必须,而引出了可能的新型内存数据库系统的设计,也成为了H-Store的原型;在第二篇文章中,研究者在前一个工作的基础上,对H-Store的设计做了更清晰的描述,每一部分的功能也更加具体化了,进而成为广受学术界欢迎和使用的关系数据库管理系统。顺带一提,H-Store有一个商业化的版本,叫做voltDB

本文是结合第二篇论文来进行讲解的,因此篇幅也会比较短。如果想关于H-Store的内容,欢迎阅读官方的介绍和源码:

Brown H-Store
Source Code

背景介绍

在H-Store, voltDB, Redis等一系列内存数据库管理系统问世以前,主流的DBMS是基于R系统1的,因此如H-Store研究者所言,因其太过“通用和广泛”,在性能上存在极大地瓶颈。尤其是对于TPC-C2这一类事务具有高度重复性及短寿性的benchmark来说,执行开销眼中,可用组件被多余的组件掣肘,不能发挥全部的功效。研究者认为,必须通过横向扩展系统,分割事务及处理职能给多个无共享架构(shared-nothing architecture)3的主机节点,才能有效提高DBMS的性能。

另外,面向数据库的DBMS存在着严重的IO开销,尤其是对于并发控制来说,锁机制会导致high skew(即事务多次重复访问相同部分的数据)下性能受阻。

因此,H-Store被开发为一个分布式的内存数据库系统。

系统概述

H-Store的系统设计架构如上图所示。

先列出几个H-Store的术语名词:

  • H-Store实例(instance): 由同一管理域部署的H-Store节点的集合;
  • H-Store节点(node):一个部署了一个或多个H-Store站点的单机系统;
  • H-Store站点(site):基本的操作实体,在多处理器系统中,通常一个处理器负责一个站点,它是一个单线程的守护进程,连接到外部的应用

每一个站点与其他站点(无论是否在同一主机节点上)都是相互独立的,既不共享数据结构也不共享内存。

数据库中每一个关系(relation)都被划分为一个或多个子集(partition),(由administrator控制管理)分布在多个站点中,形成replica集合。这就是说,一个relation可能分布在好几个不同的站点上( k≤N k \le N),这就提高了整个DBMS的可靠性,因为它能容许k次单站点故障。

由图1可以看出,H-Store的整个框架可以分为部署时和运行时两个部分。部署部分是在运行transaction之前就已经执行的。H-Store提供了一个带有cluster部署框架的管理器,它将存储程序、数据库schema、采样负载和cluster中的可靠站点作为输入,输出一系列用来引用运行时程序的独特的调用句柄。

此处值得注意的是,存储程序是H-Store设计者为了更高效执行transaction而采取的特殊手段。简单理解的话,可以把存储程序当做transaction本身。当一个transaction来临时,H-Store不是针对transaction本身去运行,而是执行transaction唤醒的存储程序,从而使得执行效率得到提高。

部署部分使用了两个阶段的query优化,具体细节我没有读,应该在第一篇论文里提及了。

运行时部分相对来讲更容易解释一些,OLTP应用与H-Store实例进行交互,通过API传入transaction。无论transaction所需要的数据是否在交互站点上,该站点都可以执行OLTP应用。比如OLTP应用随机地选择站点1进行交互,要求执行任务,但是transaction请求的数据大部分不在站点1,而是分布在站点2,3及5。这个时候,站点1就会与2、3、5进行通信,传达transaction任务。当transaction执行完毕后,各个站点会回送完成或失败信号给站点1,站点1再与应用交互。

数据库特性

与面向磁盘的数据库相仿,分布式内存数据库的性能也依赖于数据放置策略和物理数据库设计的支撑数据结构。但是由于OLTP的transaction具有高重复性,单任务短暂性的特点,可以对整个设计进行优化。

Transaction分类

  • 单站点transaction: 包含的所有的queries可以由H-Store cluster中的一个站点来执行;
  • One-shot transaction:所包含的queries不能由一个站点来执行完毕,但其中每个query都可以由一个站点来执行(说明该query所请求的数据全部在同一个站点上)

对于以上两种类型的OLTP Transaction,H-Store选择的优化方案是将transaction或者query交由特定的站点来执行,最小化节点之间的通信,从而提高系统性能。

容错与负载

由于H-Store不在磁盘上存储任何(数据库)数据,它就必须依赖一种数据分布策略来保证可靠性。它采用的是k-安全策略,这一点我们在前述部分已经讲过,即是将相同的partition分布在k个不同的站点上,这样当其中k-1个站点故障时,该partition的数据仍然可以使用。

另一方面,由于某些数据的访问频度较高,也就是存储该数据的站点访问频度也会随之增高。这可能会造成H-Store各节点工作负载不均衡的情况。一旦负载不均衡的情形超出控制器的监视指标,则H-Store的管理器需要对各partition的数据进行调整和分配。

总结与思考

H-Store是一个比较老的内存数据库系统,但是无论在今天还是今后的研究中,它都对我们具有十分重要的价值。无论是它本身分布式设计的理念,内存数据库分割数据,可靠性保证的方法,还是研究者在后来几年基于它所设计的Anti-Caching系统,都非常具有启发性。

我目前想做的是围绕H-Store系统,结合非易失内存NVM,针对数据logging和可靠性保证做出一点新意。结合上次的NVWAL,也许H-Store在修改的地方与SQLite会有较大的不同,这也是我可以插上一手展现自己创新工作的点。


  1. R Database是基于R语言的数据库设计范式,具体可参考官网介绍。 ↩
  2. 一种典型的OLTP事务测试指标及方案,可参考官方介绍。 ↩
  3. 无共享架构,指分布式框架下的cluster中主机不共享相同的内存空间,具体可参考维基百科 ↩

H-Store:一种分布式内存数据库管理系统相关推荐

  1. 对比 5 种分布式事务方案,还是宠幸了阿里的 Seata(原理 + 实战)

    本来不知道写点啥,正好手头有个新项目试着用阿里的 Seata 中间件做分布式事务,那就做一个实践分享吧! 介绍 Seata 之前在简单回顾一下分布式事务的基本概念. 分布式事务的产生 我们先看看百度上 ...

  2. 分布式数据库管理系统

    分布式数据库管理系统的发展 单个数据库分割成多个,然后把这些分割存放到同一网络中的不同计算机中.多点数据库是分布式数据库系统的核心.业务分布在不同的国家和地区需要分布式数据库管理系统.分布式数据库系统 ...

  3. 分布式内存数据库的CAP-BASE原理

    一.传统的关系型数据库遵循ACID规则: 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的 ...

  4. Apache Spark探秘:三种分布式部署方式比较

    2019独角兽企业重金招聘Python工程师标准>>> 目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark o ...

  5. spark on yarn 完全分布式_Apache Spark探秘:三种分布式部署方式比较

    [本文详细介绍了Spark的三种部署方式及其比较,欢迎读者朋友们阅读.转发和收藏!] 目前Apache Spark支持三种分布式部署方式,分别是 standalone . spark on mesos ...

  6. 分布式部署_Apache Spark探秘:三种分布式部署方式比较

    [本文详细介绍了Spark的三种部署方式及其比较,欢迎读者朋友们阅读.转发和收藏!] 目前Apache Spark支持三种分布式部署方式,分别是 standalone . spark on mesos ...

  7. git语言包安装_Git分布式版本管理系统快速入门指南

    为什么要使用版本管理系统 无论有没有使用过专业化工具,每个人都或多或少地有版本管理的需求.我们在做论文.写报告或者设计方案时,因为难以避免的不断改动,总会形成很多个不同的版本,我们可能会用" ...

  8. memcache_engine + memcachedb = 高性能分布式内存数据库

    关键字: memcachedb memcachedb是一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让m ...

  9. Spark支持三种分布式部署方式

    目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内 ...

最新文章

  1. jquery gridly (拖拽插件)
  2. 使用Git命令时出现fatal: this operation must be run in a work tree提示,该如何解决
  3. reactjs ref属性:字符串类型的ref和createRef
  4. 工作原理_逆变器工作原理
  5. Failed to load nodelet ‘/kinect2_bridge` of type `kinect2_bridge/kinect2_bridge_nodelet` to manager
  6. Composite UI Application Block(Cab)比较详细的一片文章
  7. 190521每日一句
  8. influxdb可视化工具
  9. [Campus]我的大学
  10. 一百多个Zbrush实用笔刷和Alpah大合集
  11. 双绞线与计算机连接的接口是,网线接口
  12. my ReadBook_zhulidianzishangwushi / dianzishangwushi
  13. 星期一到星期日的英文缩写「知识普及」
  14. 钉钉视频下载地瓜网络钉钉视频下载器
  15. Git 使用过程中遇到的问题以及解决办法
  16. 音视频技术开发周刊 | 274
  17. 微波技术大作业课设-分立电容电感+微带单枝短截线+微带双枝短截线
  18. Excel中如何快速地将成绩按比例来划分为等级?
  19. i春秋新春战疫公益赛复现
  20. IC_EDA虚拟机安装

热门文章

  1. redis的使用总结
  2. 优秀web前端工程师必备_优秀的Web工程师的技能和素质
  3. 3131: [Sdoi2013]淘金
  4. 万字攻略,详解腾讯面试(二,BAT等大厂必问技术面试题
  5. 肝了两周,我做了一个面试刷题小程序
  6. 潮牌服装专卖店装饰CAD图,设计属于自己的高档店!
  7. 关于使用微软拼音在Hbuilder打不出顿号、的问题
  8. 建设业务服务管理平台的规划蓝图
  9. 申请SSL证书CA机构的选择很重要
  10. 【暴力BFS】中山纪念中学暑期游Day10——洪水