大数据:数据分片和数据路由(二)

分布式存储中常见的一项技术就是 :分布式哈希表。它是哈希表的分布式的扩展,就是在多台机器的情况下,每个机器只存储一些数据,如何通过 哈希方式 对 数据 进行增,删,改,查等一些数据操作。

   一致性哈希算法就是其中的一种实现方式。

    

                      

上图是表示长度为5的二进制数值的 一致性哈希算法 的环状序列 的示意图 (m=5),所以这个哈希数值空间可以表达的值是从 0~31。

每个机器可以通过 Ip和端口号 经过 哈希函数 映射到 哈希数值空间内。 所以上面的每个 大圆 均表示了 一个机器节点。 N (x)中的 X 表示的是哈希数值内对应的哈希数值。

举例:N20节点 存储的是 落在 N14到N20的哈希空间范围内的数据(经过哈希后的),N5存储的是N29后落在 30~31,0~5范围内的数据。

 


一致性哈希算法的路由: 

  一种高效的路由查找方式就是: 每个机器节点都配置路由表。

  原因:它原先是依靠有向环查找的,这样查找效率不太高,首先接收到 查询请求 的机器节点要根据函数 解出要查找的主键的哈希值,从本身节点的范围内先查找这个哈希值,如果不在就将它交个后趋节点,这样直到查找那个范围内有哈希值 的那个机器节点。

  

  输入:机器节点N(i)发起初始查询请求,查询主键 Key对应的值H(Key)=j。

  输出:N(i)给出对应的键值Value,或者返回键值不存在的信息。

  算法:通过不同节点之间发送消息来写作完成。假设当前执行的节点为N(c),其初始值是N(i),N(c)的后趋节点为N(s).重复执行下列步骤。

  步骤一:判断 c<=j<=s,如果是,结束查找,说明key如果存在,就在N(c)的后趋节点N(s)上,所以N(c)发消息给N(s)查找Key的值value,查找到后,N(s)将结果返回给N(i)。(每个消息都包含消息源 N(i).)

  步骤二:否则,N(c)查找其对应的路由表,找到小于 j的最大编号N(h),N(c)向N(h)发送消息,请求它代表N(i)查找Key的值value,N(h)此时成为当前节点N(c),  继续按照步骤一和步骤二递归执行。

      比如:

        N(14)节点接到查询Key的键值请求,其中 H(Key)=27。

    操作过程下图(红线部分):

            

    通常情况下,路由算法发送的消息不会多于m条,因为这个过程类似于 在 0~(2的m次方-1)数值空间上的二分查找法,每次当节点 N(c)通过路由表把消息发送给节点N(h),N(h)到目标所在节点N(d)的距离不会超过N(c)到N(d)的距离的一半,所以其可以通过不超过 条消息查找整个数值空间。

  

  
  

  

原文地址:https://www.cnblogs.com/lijiagui/p/10347399.html

时间: 2024-08-03 12:10:31

大数据:数据分片和数据路由(二)的相关文章

大数据图数据库之数据分片

节选自<大数据日知录:架构与算法>十四章,书籍目录在此 对于海量待挖掘数据,在分布式计算环境下,首先面临的问题就是如何将数据比较均匀地分配到不同的服务器上.对于非图数据来说,这个问题解决起来往往比较直观,因为记录之间独立无关联,所以对数据切分算法没有特别约束,只要机器负载尽可能均衡即可.由于图数据记录之间的强耦合性,如果数据分片不合理,不仅会造成机器之间负载不均衡,还会大量增加机器之间的网络通信(见图14-5),再考虑到图挖掘算法往往具有多轮迭代运行的特性,这样会明显放大数据切片不合理的影响,

大数据实践:ODI 和 Twitter (二)

大数据实践:ODI和Twitter(二) 在前面的文章中,我们已经使用flume将数据从twitter抓取到Hive中,现在我们来看看ODI(Oracle Data Integrator)如何在HIVE表中进行逆向工程,打开HIVE模型,然后在逆向工程中选择“新的数据存储”及待逆向的对象,如下: 逆向工程完成之后,得到如下的元数据信息: 上面的操作步骤与普通的关系型数据库一样,没有特殊之处,ODI可以对HIVE的表进行逆向工程,使用RKM Hive, RKM HBase, IKM File to

容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析

摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark + OSS on ACK,允许Spark分布式计算节点对阿里云OSS对象存储的直接访问. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark + OSS on

MongoDB分片之数据分割方式

随着移动互联网的发展,大量的非结构化数据随之产生,不仅对数据库存储大数据提出了新的要求,同时对于查询数据和进行大数据分析也提出了苛刻的要求,这些显然是单服务器处理能力无法满足的,自然建立一个集群是不可避免的.集群的复杂性大家众所周知,而MongoDB的优势之一正式可以帮助我们解决这些问题. 分片(sharding) 分片是MongoDB提供的一种机制,其可以将大型的集合分割保存到不同的服务器上.与其他的分区方案相比,MongoDB几乎能自动为我们完成所有事情.只要我们进行简单的配置,并告诉Mon

MongoDB的数据复制分片

一:MongoDB的简介: MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.而且可以很容易的和JSON类的数据结合,他不支持事务,但支持自动分片功能,这对大数据的分布式存储有着十分重要的作用. 二:MongoDB的索引类型: 单字段索引: 组合索引(多字段索引):对多个key做索引 多键索引:对key和value中的key做索引 空间索引:基于位置做索引 文本索引:全文搜索 hash索引:

大数据时代下是数据思维重要,还是相应技术重要?

技术做到一定程度,逐步发现自己的瓶颈.不由得开始思考这一方面的问题!到底大数据时代下,是相应的数据分析技术重要,还是相应数据思维重要? 先来说数据思维吧!什么是大数据思维,个人感觉应该是互联网思维的一种.是考虑到全面,而不是局部.是考虑到多维,而不是单一维度.不是靠拍脑门做决定,而是让数据说话,用数据做决策. 先说第一点,考虑全面,而不是局部.众所周知,移动互联网催生了大数据的产生.每一个人每一天通过手机能够的数据总和会是一个巨大的量.而通过这些非结构化的数据,我们首先面对的是如何处理这些数据,

2019大数据数博会-数据时代软件展览会

◆ >>>展会概况 随着现代信息技术的不断发展,世界已跨入了大数据+互联网时代,我国大数据产业发展迎来"黄金期",数据驱动的创新正逐步向经济社会各行业领域融合应用,拓展出行业发展新空间,助力行业结构转型升级.同时,随着双创战略.网络强国建设.互联网+行动计划.中国制造2025等国家战略的深入实施,为大数据.云计算.物联网等新兴技术与产业融合发展带来新机遇,成为助推数字经济创新发展的新动能是国家信息化和未来发展的关键.为更好的促进大数据产业务实发展,助力数字经济创新升级

我这么玩Web Api(二):数据验证,全局数据验证与单元测试

目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解的ModelState是微软在ASP.NET MVC中提出的一种新机制,它主要实现以下几个功能: 1. 保存客户端传过来的数据,如果验证不通过,把数据返回到客户端,这样可以保存用户输入,不需要重新输入. 2. 验证数据,以及保存数据对应的错误信息. 3. 微软的一种DRY(Don't Repeat

Redis数据持久化机制AOF原理分析二

Redis数据持久化机制AOF原理分析二 分类: Redis 2014-01-12 15:36  737人阅读  评论(0)  收藏  举报 redis AOF rewrite 目录(?)[+] 本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅读本文之前请先阅读Redis数据持久化机制AOF原理分析之配置详解文章,了解AOF相关参数的解析,文章链

C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: 1 /*读取txt文件到二维数组*/ 2 #include <iostream> 3 #include <fstream> 4 #include <vector> 5 #include <string> 6 7 using namespace std; 8 9 typedef vector< vector<int> > D2array; //二维数组 10 typed