声明: 1. 本文为我的个人复习总结, 并那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
              2. 由于是个人总结, 所以用最精简的话语来写文章
              3. 若有错误不当之处, 请指出

BigTable

一、出现的原因

没有BigTable时 如MySQL集群的痛点:

  1. 单机存储数据量低

  2. 随机读写性能慢

  3. 可伸缩性太差:

    • 扩容后, ip = hash % 集群数量, 将受到很大影响(数据查不到, 或者说得大量迁移数据)
    • 某一个节点可能存储负载过重
  4. 可运维性 高可用差:

    小部分节点的故障,不应该影响整个集群的运行; 集群自身也要有很强的容错能力,能够把对应的请求和服务,调度到其他节点去

如何解决伸缩性可运维性 高可用?

使用动态区间分区

我们不再是一开始就定义好需要多少个机器 以及应该怎么分区,

而是采用了一种自动去"分裂"(split)的方式来动态地进行分区, 自动进行分区合并

二、架构

组成架构:

  1. Master

    1. 调度 哪些 Tablets 分配给哪个 Tablet Server
    2. 平衡 Tablet Server 的负载
    3. 检测 Tablet Server 的新增和过期
    4. 管理表(Table)和列族的 Schema 变更,比如表和列族的创建与删除
    5. 对于 GFS 上的数据进行GC垃圾回收
  2. TabletServer

    只负责在线服务,不负责数据存储

    数据存储在线服务的职责是完全分离的: 我们调度 Tablet 的时候 只是调度在线服务的负载,并不需要把数据也一并搬运走 (类似于Hive & metastore)

  3. Chubby

    分布式锁和目录服务

    1. 确保集群里只有一个 Master(防止脑裂)

    2. 记录 METADATA 所在的 TabletSever

    3. 发现 Tablet Servers 以及在它们终止之后完成清理工作

    4. 存储 BigTable 的 Schema 信息

    5. 存储 ACL信息

  4. GFS

    存储数据

为什么数据读写不需要 Master?

分区Tablets 的分配信息,并没有放在 Master, 而是存成了 TabletSever 的一张 METADATA 表

即使Master 节点已经挂掉了,一时也不会影响数据的正常读写?

Master不存储分区Tablets 的分配信息 , 客户端不依赖 Master 提供数据读写服务

三、具体实现

timestamp: 让顺序写实现了增删改功能

LSM Tree结构: MemStore + SSTable, Split & Compact

WAL保证了数据的高可靠性

MemTable的优化:

使用跳表作为数据结构, O(LogN)实现数据的高效查询 & 插入

MemTable里是有随机写

MemTable 只有三种操作:

  1. 根据 RowKey 的随机数据插入,这个在数据写入的时候需要用到;

  2. 根据 RowKey 的随机数据读取,这个在数据读取的时候需要用到;

  3. 根据 RowKey 的有序遍历,在 MemTable 转化成 SSTable 的时候会被用到

查询SSTable的优化:

  1. 先查缓存

    两级缓存:

    • 高层的缓存(Scan Cache)

      是对查询结果如 www.baidu.com 进行缓存

    • 低层的缓存(Block Cache)

      是对查询所获取到的整个数据块进行缓存

      因为一个块里存储的数据都是排好序的, 所以下次查询 www.baidu.com1 这个行键时 就可以直接从 Block Cache 中获取到,而不需要再次访问SSTable 文件

    这两层缓存都是针对单个 SSTable 上的,而不是在单个 Tablet 上

    只要不出现 Compaction,或者整个SSTable 文件过期,这些缓存都不会主动失效; 新写入的数据更新都体现在 MemTable 中,不会影响到我们的 SSTable

  2. 再用 布隆过滤器的预判

  3. 再 布隆预判存在后, 还有索引块

访问MemTable: 跳表

访问SSTable: 缓存->布隆过滤器->索引

Compaction 的优化:

SSTable 里面的数据块是顺序存储的, Compact时 其实就是有序链表的多路归并

压缩:

以时间换空间

大数据论文_03_BigTable(个人总结)相关推荐

  1. 谷歌三篇大数据论文之mapreduce读后感

    ** 谷歌三篇大数据论文之mapreduce读后感** 天气预报.城市外来人口统计等很多现实问题都需要处理以TB计算的大量数据集,用一台高性能的电脑处理不仅成本高,出错率高及速度慢这些问题都令人头疼. ...

  2. 每周大数据论文(二)Data Mining with Big Data

    日常声明:论文均来自于谷歌学术或者其他国外付费论文站,博主只是读论文,译论文,分享知识,如有侵权联系我删除,谢谢.同时希望和大家一起学习,有好的论文可以推荐给我,我翻译了放上来,也欢迎大家关注我的读论 ...

  3. 第三届2022MathorCup高校数学建模挑战赛大数据论文加代码(附详解)

    基于系统决策树分类的移动用户体验影响因素研究 摘要 本题主要是一个研究预测模型,以中国移动通信集团北京公司为背景,让客户根据 自身在网络覆盖与信号强度方面的体验和语音通话过程中的整体体验来进行语音通话 ...

  4. 【大数据论文笔记】大数据技术研究综述

    大数据的基本概念: 1.大数据的产生 a.科学研究 b.物联网的应用 c.海量网络信息的产生 2.大数据概念的提出 3.大数据的"4V"特征 a.Volume(容量大):大数据巨大 ...

  5. 做大数据论文时的分析思路

    首先提一下平台化电子服务.平台化就是提供框架,集中现有的资源.而对于安卓来说,它主要是拥有第三方开发者,可以获取一些数据资源,并且开发的软件可以在安卓平台上实现推广. 行为数据就相当于是比如自己开了什 ...

  6. 面向智能化软件开发的开源生态大数据

    点击上方蓝字关注我们 面向智能化软件开发的开源生态大数据 张洋1, 王涛1, 尹刚2,3, 余跃1, 黄井泉3 1 国防科技大学计算机学院,湖南 长沙 410073 2 绿色计算产业联盟,北京 100 ...

  7. python大数据工程师薪资待遇_大数据岗位就业薪资具体多少?大数据职业发展的2大方向和5个职位...

    大数据发展非常火热的时候,很多想加入大数据行业的小伙伴,犹豫和困惑最大的问题就是大数据岗位薪资情况,下面就给大家分析分析. 数据开发在互联网岗位薪酬中,排名第二 1.职位量大增,投递量增长更快 从 2 ...

  8. AI和大数据如何落地智能城市?京东城市这6篇论文必读 | KDD 2019

    来源 | 京东城市(ID: icity-jd)作为世界数据挖掘领域的最高级别的学术会议,ACM SIGKDD(国际数据挖掘与知识发现大会,简称 KDD)将于 2019 年 8 月 4 日-8 日在美国 ...

  9. [资料分享]GIS+=地理信息+云计算+大数据+容器+物联网+...论文、会议、讲座资料分享...

    2019独角兽企业重金招聘Python工程师标准>>> [资料分享]GIS+=地理信息+云计算+大数据+容器+物联网+...论文.会议.讲座资料分享 超图研究所致力于打造一个GIS+ ...

最新文章

  1. 流程文件外发同步及加密
  2. day 05 python基础
  3. 计算机组成原理 第五章【中央处理器】课后作业解析【MOOC答案】
  4. 使用 TABLESAMPLE 限制结果集
  5. 保障Web服务的安全
  6. 伪原创文章生成器-自媒体洗稿工具-关键词文章生成工具免费
  7. ubuntu 16.04安装中文输入法
  8. Excel的常用快捷键
  9. 《数字连线大招版》攻略
  10. SVD计算旋转,平移矩阵
  11. 求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这三个字符及其对应的ASCII码值。
  12. 天兔3.8安装 centos7
  13. 守护进程(Daemon process)
  14. 100张经典信息可视化图表,让你脑洞大开
  15. 前端开发购买Macbook Pro的建议
  16. 毕设存档——APAP with moving dlt实现流程
  17. 樱花飘落python_樱花之吻(python.turtle)
  18. 8.4 输入某班学生某门课的成绩,(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数
  19. 相位解包裹(一)一维相位解包裹
  20. 3.《皮囊》生命本来轻盈——都是被肉体和欲望污浊给拖住

热门文章

  1. 技术文摘9 刘 樱桃
  2. ubuntu android编译和开发环境配置记录
  3. 瑞泰设立西南医科大学口腔医学院•瑞泰口腔奖学金
  4. 解压上传zip文件并获取excel表数据
  5. 设计模式——黑板模式
  6. BZOJ 4668: 冷战
  7. C语言sin()函数绘制正弦曲线代码(0-2π)
  8. 定义一个动物类java_Java问题利用接口继承完成对生物、动物、人三个接口的定义,其中生物接口定义呼吸抽象方法,动物接口定义了吃饭和睡觉两个抽...
  9. Latex 设置页眉与正文顶部距离
  10. 中台为什么做不好?拆系统“烟囱”容易,拆思维“烟囱”难!