前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式NoSQL列存储数据库Hbase_列族的设计(五)

分布式NoSQL列存储数据库Hbase_列族的设计(五)

作者头像
Maynor
发布2021-04-09 15:36:28
1.3K0
发布2021-04-09 15:36:28
举报

分布式NoSQL列存储数据库Hbase_列族的设计(五)

知识点01:课程回顾

  1. Hbase存储原理
    • 存储架构
      • Hbase:对外提供分布式内存
        • Master:集群管理
        • RegionServer:数据管理
      • HDFS:提供分布式磁盘
        • DataNode
      • Zookeeper:实现辅助选举、实现元数据存储
    • 存储结构
      • Table:分布式表,一张表划分了多个Region
      • RegionServer:分布式集群节点,管理所有表的region
        • Region:每张表的每个分区,对表的数据进行划分
          • region的划分规则:按照范围划分,从-oo 到+oo进行有序划分
          • 数据的划分规则:按照Rowkey或者Rowkey前缀,Rowkey属于哪个范围,写入对应的region
          • Store:对分区内部的数据再次划分,按照列族进行划分Store
          • MemStore:内存区域,用于存储刚写入的数据,使用的RegionServer的JVM内存
          • 如果到达一定的阈值,就会写入HDFS,变成文件
          • StoreFile:逻辑上属于Store,物理上存储在HDFS【HFILE】
    • HDFS存储关系
      • Hbase目录:/hbase
      • Hbase数据:/hbase/data
        • NS目录
          • Table的目录
          • Region的目录
          • 列族的目录
  2. 热点问题
    • 现象:大量的读写请求全部集中在某个Region或者某个RegionServer上
    • 原因:数据分配的不均衡
      • 情况一:表只有一个分区
      • 情况二:表有多个分区,但是Rowkey是连续的,或者与分区的划分不匹配
        • Rowkey是连续,写入同一个Region
        • 分区都是按照数字划分的,但是Rowkey是字母开头
    • 解决
      • 实现预分区
        • 方式一:创建表时候:SPLITS => [10,30……]
        • 方式二:指定分区的个数,根据数字和字母的Hash组合
          • 应用:Rowkey的前缀是字母和数字组合
        • 方式三:Java API
      • 合理的设计Rowkey,根据Rowkey的前缀或者完整的Rowkey来划分分区
        • Rowkey的设计规则
        • 业务原则:尽量用最常用的查询条件作为Rowkey的前缀
          • 目的:尽量走索引查询
        • 唯一原则:每条Rowkey是不能重复
          • 目的:唯一标识一条数据
        • 组合原则:将最常用的几个查询条件组合构建Rowkey
          • 目的:尽量大部分查询都走索引
        • 散列原则:Rowkey整体或者前缀不能是连续的,需要构建随机的散列
          • 目的:避免热点问题
        • 长度原则:在满足业务需求情况下,越短越好
          • 目的:提高性能
          • Rowkey本身每列都会存储:存储占用的空间越大
          • Rowkey会构建索引:内存的占用越大,比较就越慢

知识点02:课程目标

知识点03:Hbase设计:列族的设计

知识点04:聊天系统案例:需求分析

知识点05:聊天系统案例:Hbase表设计

知识点06:聊天系统案例:环境准备

知识点07:聊天系统案例:模拟生成数据

  • 目标
    • 模拟产生用户聊天数据,将每条聊天数据写入Hbase表中
  • 路径
    • step1:读取Excel文件,读取指定表格
    • step2:从表格的每一列中随机生成一条数据,构建一条模拟数据
    • step3:将模拟数据封装在一个Msg对象中
  • 实现
    • 读取Excel文件 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XPxKWFGg-1616666919964)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105117623.png)]
    • 随机取某一列的一个值 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9a9g0u0B-1616666919964)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105145249.png)]
    • 随机生成一条数据 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hm39BwML-1616666919965)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105206464.png)]
  • 总结 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvWhnY47-1616666919965)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322103055968.png)]

知识点08:聊天系统案例:构建Rowkey

知识点09:聊天系统案例:测试写入代码

知识点10:聊天系统案例:查询需求分析

知识点11:聊天系统案例:测试查询代码

知识点12:聊天系统案例:查询问题

知识点13:二级索引

附录一:Maven 依赖

代码语言:javascript
复制
    <repositories>
        <repository>
            <id>aliyun</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <properties>
        <hbase.version>2.1.2</hbase.version>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>${hbase.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>${hbase.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- Xml操作相关 -->
        <dependency>
            <groupId>com.github.cloudecho</groupId>
            <artifactId>xmlbean</artifactId>
            <version>1.5.5</version>
        </dependency>
        <!-- 操作Office库 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!-- 操作Office库 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!-- 操作Office库 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!-- 操作JSON -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <!-- phoenix core -->
        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-core</artifactId>
            <version>5.0.0-HBase-2.0</version>
        </dependency>
        <!-- phoenix 客户端 -->
        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-queryserver-client</artifactId>
            <version>5.0.0-HBase-2.0</version>
        </dependency>
    </dependencies>
代码语言:javascript
复制
   <!-- 操作Office库 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.0.1</version>
    </dependency>
    <!-- 操作JSON -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
    <!-- phoenix core -->
    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-core</artifactId>
        <version>5.0.0-HBase-2.0</version>
    </dependency>
    <!-- phoenix 客户端 -->
    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-queryserver-client</artifactId>
        <version>5.0.0-HBase-2.0</version>
    </dependency>
</dependencies>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分布式NoSQL列存储数据库Hbase_列族的设计(五)
    • 知识点01:课程回顾
      • 知识点02:课程目标
        • 知识点03:Hbase设计:列族的设计
          • 知识点04:聊天系统案例:需求分析
            • 知识点05:聊天系统案例:Hbase表设计
              • 知识点06:聊天系统案例:环境准备
                • 知识点07:聊天系统案例:模拟生成数据
                  • 知识点08:聊天系统案例:构建Rowkey
                    • 知识点09:聊天系统案例:测试写入代码
                      • 知识点10:聊天系统案例:查询需求分析
                        • 知识点11:聊天系统案例:测试查询代码
                          • 知识点12:聊天系统案例:查询问题
                            • 知识点13:二级索引
                              • 附录一:Maven 依赖
                              相关产品与服务
                              TDSQL MySQL 版
                              TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档