引言

大数据系统其中一个典型的特点就是集群化,方便节点横向扩展,也就是所说的弹性扩容。之所以进行横向扩展,是因为纵向扩展难以处理庞大的数据量。将大数据进行切分,是实现数据集群化存储和计算的一种常用手段。
这个过程的学名叫做数据分片,将一个整体的数据划分到不同的节点去存储,然后通过路由来寻找到指定的节点,进行数据的读写操作。常用的数据分片方法有Hash分片范围分片。而Hash分片包含所说的哈希取模法一致性哈希以及虚拟桶算法
本文,旨在从宏观层面,探讨Hash分片的三种方法。

哈希取模法

哈希取模法是最简单的一种哈希方法,其哈希函数无非就是mod,对于有k个成员的哈希算法即为:
H(key) = hash(key) mod K
这种方法比较容易实现,但是缺点就是不够灵活,当K的数量发生变化的时候,现有的集群就乱套了。

虚拟桶(virtual buckets)

虚拟桶方法是在索引key和存储节点之间放置一层中间的table,这个table就叫做虚拟桶。他的原理大致是这样的:

keys —- vBuckets —– node (server)

  1. 在keys和vBuckts之间的映射关系是通过hash函数来实现的,一个虚拟桶可以容纳下多个key.
    在代码实现上可以使用哈希取模法来映射到虚拟桶上,解决哈希冲突可以使用拉链法就搞定了。这样就可以实现一个桶对应多个key了
  2. 在vBuckts和Node之间,是通过查询table的方式来实现的。
    依然是多对一的关系,多个虚拟桶可以指向同一个物理节点。这一部分不是通过Hash函数来映射的,对应关系存储到table中,需要找到是路由到哪台节点上,可以通过查询表来找到,这个表是存储在内存中的,效率比较高。
    这样做的好处就是,实现了索引key和存储节点之间映射关系的解耦,如果有新的节点增加神马的,只需要修改内存表就可以了,用不着修改哈希函数。

一致性哈希

一致性性哈希算法要比上述两种算法复杂得多,其核心技术是DHT,就是分布式哈希表,且一致性哈希算法也不唯一,在每台机器上存储一部分的哈希数据。
哈希空间是一个首尾相接的环状序列,把集群中的每台节点的IP和端口号通过哈希函数映射到这个收尾相接的环中,每个节点在环中的位置一定是唯一的。每个节点记录好他的前驱结点和后继结点,那么宏观上来看,这个数据结构就形成了环状。
每台节点存储这个环中从的一部分数据,例如从本节点到下一个节点这区间的数据归这个节点来存储。
在寻找数据的时候,请求客户端向这个分布式哈希集群中的任意一台节点请求数据,节点如果认为这条key在他的管辖范围内,就进行解析,如果不在他的范围内,就扔给自己的后继结点。
实际上,这只是一种最简单的情况,在实际中这样做效率比较差,还有一种叫做一致性哈希路由算法的东西,实现起来也比较复杂,一般也没有必要去自己实现。

实现一致性哈希算法的数据库例如著名的卡桑德拉(cassandra),此外实现虚拟桶的数据库,例如couthDB.通过数据的分片和路由,就可以比较easy地处理海量数据,在进行集群任务分配与协作的其他场合,当然也同样适用。如果自己造轮子,一般实现一个虚拟桶一般场景就搞定了,一致性哈希实现起来相对不太容易,不过可以扒现有的代码。

白话大数据--Hash分片相关推荐

  1. 030 《白话大数据与机器学习》读后感

    大概如其名,里边的问题确实很大白话,或许对于小白来说,可能不失为一本不错的入门读物. 自己可能还是想针对技术理论讲解更深邃一点,实践性更强一点的读物吧.这本书不太符合自己现有的预期. 最近好像有点浮躁 ...

  2. 白话大数据 | 关于图数据库,没有比这篇更通俗易懂的啦

    近年来图数据库越来越火,讨论的话题也越来越多,但很多小伙伴还不清楚图数据库到底是个啥?和传统关系型数据库有什么区别?具体又有什么特点?那今天小编将通过有个男人叫小帅的故事来给大家通俗易懂地介绍下什么是 ...

  3. 《白话大数据与机器学习》学习笔记

    机器学习初使用 1 回归 1.1 线性回归 - 最小二乘法拟合 import numpy as np import matplotlib.pyplot as plt from IPython.disp ...

  4. 《白话大数据与机器学习》读书笔记2

    第6-10章 这部分介绍数据挖掘基础知识与算法 多维向量空间 回归 聚类 分类 这部分介绍数据挖掘基础知识与算法 多维向量空间 1.向量:Vector这个词最初来源于几何学,几何向量也称为欧几里得向量 ...

  5. 《白话大数据与机器学习》读书笔记3

    第11-15章 这部分介绍生产应用实践 关联分析 用户画像 推荐算法 文本挖掘 人工神经网络 这部分介绍生产应用实践 关联分析 关联规则是人在认识事物的过程中在认知中所建立的,即通过与客观世界互动,发 ...

  6. 白话大数据与机器学习

  7. 大数据技术导论|datawhale组队学习

    学习链接:https://datawhalechina.github.io/juicy-bigdata/#/README Task01阅读第一.二章 第一章 主要介绍了大数据的概念.应用以及其关键技术 ...

  8. 从小白到大数据人工智能专家的学习历程-送100G学习资料

    最近有很多人问我,大数据是怎么学?需要学什么技术以及这些技术的学习顺序是什么?今天有时间我把个问题总结成文章分享给大家. 大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统, ...

  9. 大数据与机器学习算法相关的电子书分享

    大数据与机器学习算法相关的电子书分享 近日,偶然看到一个帖子,上面有一些常用的机器学习常用的电子书下载路径,遂复制到这里,分享给大家,希望可以有你需要的- @ 欢迎关注微信公众号:算法全栈之路心智探奇 ...

  10. 非计算机专业想学编程语言进入大数据岗位必读书单推荐

    随着技术的迅猛发展和数据的快速增长,数据科学已经开始渗透各行各业. 大数据作为一门跨学科的领域,想要入门可以说并不轻松,需要学习的内容包括了SQL.Python编程语言.网络爬虫.数据分析.机器学习. ...

最新文章

  1. 干货 | 斯坦福的人工智能4年路线!
  2. Intel汇编程序设计-高级过程(上)
  3. Anaconda 安装与使用
  4. java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园
  5. Leetcode 208:实现Trie(前缀树)
  6. java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
  7. 位图和矢量图区别,PS和AI的区别
  8. iredmail mysql_iRedmail配置手册
  9. 求一元硬币兑换成1分、2分、5分的硬币的兑换方案
  10. 【Web技术】441- 蚂蚁前端研发最佳实践
  11. 是性格决定命运,还是命运造就性格?
  12. 【SDN】软件定义硬件
  13. 安卓数据转移到iphone老是中断_关于iPhone手机之间数据转移的几种方式
  14. 龙芯的3A5000:中国的最佳拍档?
  15. java 下载zip文件格式错误-流方式
  16. Python爬虫:scrapy辅助功能实用函数
  17. 键盘按键F1-F12失效的解决办法(ArchLinux)
  18. 【统计方法】基于熵值法的面板数据指标权重计算
  19. day48_电力系统框架搭建
  20. Android去掉百度地图sdk中卫星地图里的白色道路

热门文章

  1. python 伯努利分布
  2. 职业资格计算机操作员,职业资格 计算机操作员
  3. 各种类型文件头特征码
  4. 基于控制的角度无人机集群——目标追踪
  5. 兖州计算机老师,兖州最美教师 | 风采展示(二)
  6. 去掉百度地图api左下角百度logo标志或文字
  7. 分析系统业务流程和绘制系统业务流程图
  8. 【opencv-python】寻找矩形框
  9. 天骄辅助外挂制作,寻求合作
  10. 微信公众平台开发(十二) 发送客服消息