zoukankan      html  css  js  c++  java
  • 《OD学HBase》20160820

    一、案例

    微博:

    微博内容:

    关注用户和粉丝用户: 添加或移除关注用户

    查看关注用户的微博内容

    微博数据存储:

    响应时间 秒级 无延迟

    (1)mysql分布式 

    (2)hbase数据库

    使用HBase数据库实现微博系统数据的存储

    表的设计:

    命名空间:weibo

    1. 微博内容表

    TableName: weibo:weibo-content

    RowKey:用户ID_timestamp

    列簇:cf

    列标签: cf:content,cf:title,cf:photo

    版本设计:只需要保留一个版本

    2. 用户关系表

    TableName: weibo:relations

    rowkey: 用户iID

    列簇:

    attend 关注用户

    fan 粉丝用户

    列标签:使用用户ID作为列标签,值为用户ID

    rowkey   attend          fan 

    0001       attend:0002=0002           fan:0004=0004

                  attend:0003=0003           fan:0004=0004

    版本设计:只需要保留一个版本

    3. 用户微博内容接收邮件箱表

    TableName: weibo:receive-content-email

    Rowkey:用户ID

    列簇:cf

    列标签:

     直接使用用户ID,vlaue值取微博内容的rowkey

    版本设计:设置最大版本为1000

    rowkey  cf

    00001  cf:0002=0002_2132455

         cf:0002=0002_2132456

    1)rowkey设计:

    (1)唯一性

    (2)长度: 最大64kb。rowkey是hbase中表数据冗余产生的因素

    10~100 字节

    最好 8字节 16字节 64位操作系统

    (3)散列原则:

    假如 时间戳_用户ID 作为rowkey

    10亿用户同时发微博,

    1456777_000001

    1456778_000002

    1456778_100000

    问题: 集中到某个region,造成这单独几个region负载量偏大,而其他region完全没有负载

    散列: 尽量将某一时刻内的数据均衡分散到所有Region中(大部分Region)中

    热点现象:数据在某一个时刻集中存储到某一两个Region上

    rowkey设计规范;

    方便查询,尽可能讲查询字段放到rowkey,HBase根据rowkey查询速度是最快。

    2)列簇设计:

    HBase面向列簇存储

    region起始rowkey --- 终止rowkey范围内一个列簇下的数据

    hdfs上的一个文件  

    StoreFile === HFile

    跨列簇查询,速度相对较慢

    一般设计一到两个列簇

    HBase中的缓存

    memstore: 写缓存

    blockcache:块缓存,读缓存

    HBase表单元格版本号:插入数据的时候如果没有单独制定,系统默认使用时间戳作为版本号。也可以自己制定时间戳。

    Get查询单行记录,Scan查询多行记录

  • 相关阅读:
    Thinkphp整合最新Ueditor编辑器
    git管理和自动部署项目
    [转]桶
    Linux下ThinkPHP网站目录权限设置
    ThoughtWorks FizzBuzzWhizz 代码实现
    windows bat脚本实现ftp自动下载 删除
    MCM/ICM2018美国大学生数学建模大赛D题翻译
    解决C/C++语言中全局变量重复定义的问题
    使用fabric解决百度BMR的spark集群各节点的部署问题
    解决百度BMR的spark集群开启slaves结点的问题
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5790225.html
Copyright © 2011-2022 走看看