Riak 是什么

Riak 是一个 erlang 开发的开源的分布式 key-value 数据库,

在 High Availability, Fault Tolerance, Scalability 方面表现优异。

其实现受 Amazon Dynamodb 启发,是一个很有代表性的分布式数据库。

Riak 集群是一个去中心化的集群。每个服务器节点都是平等的,可以自由地添加和删除。

这使得 Riak 的故障转移(Failure Over)和扩展非常容易。

在 CAP 理论方面,Riak 可以自由地在 CP 和 AP 之间做平衡。

理解 Riak 的分布式数据库模型

Riak 的数据冗余

下面还是让我们从简单的例子开始,来理解下 Riak 的分布式数据库模型,包括数据的存储,节点服务器的,CAP理论的关系等。

首先让我们先定义一个概念:N,表示数据的"份数"。在分布式数据库中,一份数据往往会存储多份拷贝(所谓冗余,或者 replications)

现在,假设我们有一个服务器节点(node1),存有三个数据(key分别是 P0, P1, P2),N = 1。那么可以想象,这三个数据都是存放在 node1 中。如下图所示:

当 N = 2 时,假设 P0, P1, P2 的冗余数据分别是 R0, R1, R2, 那么可以想象,这6个数据也应该都存储在 node1 中,如 下图所示:

这时候,让我们把服务器节点增加到2个(node1, node2),那么可以想象,6个数据有很多中组合方式,例如下面这两种:

也许你发现了,他们有个共同点:同一个数据的冗余数据放在不同的服务器节点中。这样就算一个节点删除(当机)了,集群的数据仍然能保证完整性。

这为故障转移(Failure over)提供了基础。

那么现在的问题来了,是否有什么科学(公式化)的方式来找到分配这些数据的组合(之一)呢?

Riak Ring

Riak 通过被称作 Riak Ring 的东西来解决这个问题。

首先,Riak 将所有的 key 通过 hash 函数映射到一个 160 bit 的整数空间中。

即一个 key 对应着一个 0 ~ 2^160 - 1 的整数。

然后,Riak 引入了 vnode(虚拟节点) 的概念,vnode 个数是可以配置的,默认是 64。

160 bit 的整数会均匀的分布到所有的 vnode。

最后,这些 vnode 会"均匀地"分配到 物理节点上。具体的分配的方法很巧妙,通过 Riak Ring 这样的东西。

下面我们用一幅图来具体解释下 Riak Ring。图中,假设 vnode 32 个,服务器节点 4个。

让我们把 160 bit 想像成一个环,环上的一小段代表一个 vnode。四种颜色分别代表 4 个服务器节点。

2^160 个整数按照从小到大的顺序均匀地分布到 32 个 vnode 中,例如 2^159 是第 17 个 vnode 上的第一个整数。

32 个 vnode 按照从小到大的顺序依次被分配到 4 个服务器节点上。即:

1, 5, 9...29 vnode 分配给第1个服务器节点(node1)

2, 6, 10...30 vnode 分配给第1个服务器节点(node2)

3, 7, 11...31 vnode 分配给第1个服务器节点(node3)

4, 8, 12...32 vnode 分配给第1个服务器节点(node4)

现在还剩下一个问题:

冗余数据的存储

我们先假设 N = 3(即有2份冗余存储)

假设要存储的数据,key 为 test-key ,根据 Riak Ring 算出来,应该存储在 vnode6(即:node2)上。

那么 拷贝1 存储在 vnode7(即:node3)上,拷贝2 存储在 vnode8(即:node4)上。

所以 Riak 对于冗余数据的存储策略是:将冗余数据依次存到下一个vnode中。

php riak,Riak的分布式数据库模型 - 分布式数据库相关理论 Part3相关推荐

  1. BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略

    BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介.下载.案例应用之详细攻略 目录 MongoDB的简介 1.MongoDB的主要功能特性 2.对MongoDB进行增删改查( ...

  2. 为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术

    作者简介:李海翔,网名"那海蓝蓝",腾讯金融云数据库技术专家.中国人民大学信息学院工程硕士企业导师.著有<数据库事务处理的艺术:事务管理和并发访问控制>.<数据库 ...

  3. MySQL分布式ID_分布式唯一ID系列(3)——数据库自增ID机制适合做分布式ID吗

    数据库自增ID机制原理介绍 在分布式里面,数据库的自增ID机制的主要原理是:数据库自增ID和mysql数据库的replace_into()函数实现的.这里的replace数据库自增ID和mysql数据 ...

  4. CSDN开发者周刊 TDengine:专为物联网订制的大数据平台 YugaByte DB:高性能的分布式ACID事务数据库

    CSDN开发者周刊:   TDengine:专为物联网订制的大数据平台 YugaByte DB:高性能的分布式ACID事务数据库 CSDN开发者周刊:只为传递"有趣/有用"的开发者 ...

  5. YugaByte DB 分布式 开源 关系型数据库介绍

    YugaByte DB 分布式 开源 关系型数据库介绍 什么是YugaByte DB? YugaByte DB是一个高性能的分布式SQL数据库,用于为全球互联网规模的应用程序提供支持.YugaByte ...

  6. channelfuture怎么拿到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾

    SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾 作者:一一哥 本节主要内容 一. 事务出现的原因 转账是生活中常见的操作,比如从A账户转账100元到B账 ...

  7. getprivateprofilestring读不到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾

    SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾 作者:一一哥 本节主要内容 一. 事务出现的原因 转账是生活中常见的操作,比如从A账户转账100元到B账 ...

  8. 大数据的分布式数据库相关知识

    现如今,大数据的发展得到了越来越多人的关注,当然,很多企业也开始关注大数据,通过大数据可以从数据中挖掘出有价值的数据,从而找出隐藏的商机,而大数据的分布式数据库是一个十分重要的内容.我们在这篇文章中就 ...

  9. 【金猿产品展】星环KunDB ——助力企业数字化转型的高性能分布式交易型数据库...

    星环科技产品 本项目由星环科技投递并参与"数据猿年度金猿策划活动--2021大数据产业创新服务产品榜单及奖项"评选. 数据智能产业创新服务媒体 --聚焦数智 · 改变商业 KunD ...

最新文章

  1. 未来几年自动驾驶预测(下)
  2. flowmap怎么做_Photoshop生成的流动贴图(flowmap)
  3. delphi dbgrid 焦点 行号_火箭VS爵士领衔,多场焦点对决!今日NBA全部比赛视频直播预告...
  4. 最佳拟合直线_JAVA
  5. 汇编指令:ldr和str,ldm和stm的区别
  6. Linux中Cache内存占用过高解决办法
  7. 程序员肚子越来越大_肚子越来越大,除了肥胖还可能是疾病信号!腰间搓一搓,排出痰浊,消脂防病~...
  8. android 抽屉侧滑冲突,利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
  9. linux命令行安装libxml,Ubuntu 14.04下libxml2的安装和使用
  10. php漏洞黑掉数据库,WDCPnbsp;add_user.php任意数据库添加任意用户漏洞分析
  11. 《商务与经济统计》(三)
  12. 最新mysql数据库源码编译安装。
  13. cass软件yy命令_南方CASS软件快捷命令大全,高手必备。。。
  14. java 存储空间不足 无法处理此命令_Java开发网 - java.io.IOException: 存储空间不足,无法处理此命令。...
  15. Luat 功能开发教程(十六) LittleVGL
  16. .htaccess是什么?.htaccess几个简单应用
  17. 打印20以内的素数c语言,c语言编程输出2~100之间的所有素数(每行输出10个),并将它们打印出来....
  18. Android开发自定义UI组件
  19. (附源码)springboot+基于微信小程序音乐播放器的设计与实现 毕业设计271156
  20. C语言做的接鸡蛋小游戏(附源码注释)【原创】

热门文章

  1. 正极前驱体生产废水除磷
  2. 大数据技术会偷看我们的邮件?
  3. 程序猿表白情诗代码,赶紧收藏一下
  4. 解决Echarts的toolbox只显示英文的问题
  5. 微医网爬虫(二) java实现
  6. 存储器2-两种接口:LVTTL和STTL接口
  7. day03-python字符串
  8. joycon手柄拆解_爱活电刑室 | 撬开海拉尔的大门! 任天堂Switch全拆解
  9. 计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...
  10. 有些视频不显示IDM的下载按钮