HBase存储方案设计
需求描述
将数据记录持久化存储在HBase中,需要支持如下功能:
- 支持高吞吐量读写操作,实时采集10,000条/秒;
- 支持动态添加字段;
- 支持服务端过滤;
- 支持部分字段修改。
设计方案
按列存储
优点
- 扩展性好,支持动态添加新列;
- 支持服务端按列过滤;
- 可读性好,方便调试;
- 获取少量列数据时,读取数据少,节约网络带宽资源;
- 方便修改部分列值。
缺点
- 占用磁盘空间较多;
- 数据采集性能差。
列合并为JSON格式存储
优点
- 相对方案1,减少数据列,节约磁盘空间;
- 相对方案1,数据读、写性能较好;
- 扩展性好,支持动态添加新列;
- 相对方案3数据可读性好,方便调试;
缺点
- 不便于服务端按列过滤;
- 数据只能整体获取,当获取少量列时也需要将整个json对象获取,对磁盘和网络资源造成浪费;
- 不便于修改部分列值,需要整体反序列化替换修改值后再重新序列化后写入。
列合并为PB格式存储
优点
- 相对方案1,减少数据列,并通过PB格式对数据压缩,节约磁盘空间;
- 数据读、写性能好。
缺点
- 扩展性差,添加新列时需要修改PB对象;
- 不支持服务端按列过滤;
- 数据可读性差,不方便调试;
- 数据只能整体获取,当获取少量列时也需要将整个PB对象获取,对磁盘和网络资源造成浪费;
- 不便于修改部分列值,需要整体反序列化替换修改值后再重新序列化后写入。
批量写入性能对比
单线程连续批量发送100万条过车记录(每条记录37个字段,每批10000条记录),三种方案完成数据采集总耗时对比结果如下:
图3_1 HBase批量写入性能
批量读取性能对比
单线程批量读取100万条过车记录(每条记录37个字段,每批10000条记录),分别从非压缩表和Snappy压缩表读取记录并执行反序列化操作(按列存储格式的读取性能表示从result中获取属性值的时间消耗),记录每种存储格式的总耗时与反序列化耗时情况,图4_1对应非压缩表的测试结果,图4_2对应Snappy压缩表的测试结果:
注:
- 读取部分列测试只获取tfs_id,plate_image_path,image_path三列;
- 按列存储的测试数据中红色部分表示从result中获取字段的时间消耗。

图4_1 HBase非压缩表批量读取性能
图4_2 HBase snappy压缩表批量读取性能
存储空间占用对比
单线程连续批量发送100万条过车记录(37个字段),三种方案存储空间占用对比结果如下(下图数据表示一份数据的空间占用情况,不包括副本大小):
图5_1 HBase存储空间占用情况
HBase存储方案设计的更多相关文章
- 用Hbase存储Log4j日志数据:HbaseAppender
业务需求: 需求很简单,就是把多个系统的日志数据统一存储到Hbase数据库中,方便统一查看和监控. 解决思路: 写针对Hbase存储的Log4j Appender,有一个简单的日志储存策略,把Log4 ...
- HBase存储剖析与数据迁移
1.概述 HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储.所以,对于结构化的SQL语言查询,HBase自身并没有接口支持.在大数据应用中,虽然也有SQL查询引擎可以查询H ...
- hbase 存储结构和原理
HBase的表结构 建表时要指定的是:表名.列族 建表语句 create 'user_info', 'base_info', 'ext_info' 意思是新建一个表,名称是user_info,包含两个 ...
- HBase存储架构
以下的介绍是基于Apache Hbase 0.94版本: 从HBase的架构图上可以看出,HBase中的存储包括HMaster.HRegionServer.HRegion.Store.MemStore ...
- Hbase存储详解
转自:http://my.oschina.net/mkh/blog/349866 Hbase存储详解 started by chad walters and jim 2006.11 G release ...
- 一种安全云存储方案设计(下)——基于Lucene的云端搜索与密文基础上的模糊查询
一种安全的云存储方案设计(未完整理中) 一篇老文了,现在看看错漏颇多,提到的一些技术已经跟不上了.仅对部分内容重新做了一些修正,增加了一些机器学习的内容,然并卵. 这几年来,云产品层出不穷,但其安全性 ...
- HBase存储及读写原理介绍
一.HBase介绍及其特点 HBase是一个开源的非关系型分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java.它是Apache软件基金会的Hadoop项目的一部分,运行于HDF ...
- hbase存储优化
1.上面的2张图主要说明hbase的存储特点 (1).每个值(每条记录的每一个列的值)的存储,都完整的存储了rowkey.column family.column.版本(时间戳),以及该列的值. 这样 ...
- 爬虫代码实现四:采用Hbase存储爬虫数据(2)
导入hbase的jar包,在maven仓库找:进入http://mavenrepository.com/,输入hbase client,选择apache hbase client, 点击进入,选择 点 ...
随机推荐
- tensorflow 运行 python convolutional.py时
Traceback (most recent call last): File "convolutional.py", line 326, in <module> tf ...
- vim学习记录(转)
基本功 Vim有三种模式: 导航(navigation)模式. 这时候,字母就是上下左右键. 输入模式.这时候,你按字母键,才会输入字母. 命令模式.需要先输入":" 冒号,才会进 ...
- freemarker中include与import的区别
在inc1.ftl与inc2.ftl中的内容分别是: <#assign username="刘德华">与<#assign username="张学友&q ...
- 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之静态页面
一.引言 接着上一篇,京东个人中心的所有功能数据分析完成之后,现在需要把静态页面完成,实现过程中要用到的技术有:Bootstrap.html5表单新特性等.除此之外,还要利用Node.js的Expre ...
- JDK8 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
JDK8 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装时最好在 ...
- ZT:成熟是一种明亮而不刺眼的光辉
成熟是一种明亮而不刺眼的光辉, 一种圆润而不腻耳的音响, 一种不再需要对别人察言观色的, 一种终于停止向周围申诉求告的大气, 一种不理会哄闹的微笑, 一种洗刷了偏激的冷漠, 一种无需声张的厚实, 一种 ...
- JAVA_Error initializing endpoint怎么办
1 运行CMD,输入命令netstat –ano,找到这个TCP,后缀为8080的PID(我的是2660),然后打开任务管理器,在进程选项卡中打开PID查看 2 在右侧的进程窗口找到PID是左侧的 ...
- [集合]解决system权限3389无法添加的用户情况
Webshell有了SYSTEM权限,却无法成功添加administrators用户,因此导致无法成功连接3389.总结原因有以下几点:I.杀软篇1,360杀毒软件2,麦咖啡杀毒软件3,卡巴斯基杀毒软 ...
- js 原生方法获取所有兄弟节点
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- Centos7 安装 Maven 3.5.*
下载 Apache Maven 访问 Maven官方网站,打开后找到下载链接,如下: 解压 tar zxvf apache-maven-3.5.3-bin.tar.gz 添加环境变量 打开 /etc/ ...