php使用hbase

github.com/aliyun/aliyun-apsaradb-... phpsdkdemo

一、背景信息#

云数据库 HBase 增强版,是由云原生多模数据库 Lindorm 的宽表引擎云原生多模数据库 Lindorm 的宽表引擎提供的、完全兼容 HBase 的云上托管数据库

二、hbase 遇到的问题#

  1. 问题:正式上线后三天、log 每天 200G 数据写入到 hbase 后变成了 2TB 数据

  2. 排查路线:排查到日志原始存储大小和和 hbase 中内存大小差异过大、使用阿里云 shell 工具查看表结构

  3. 表结构存在问题、遇到大数据量容易崩溃

  4. 没有设置列簇的压缩

  5. 没有设置冷热存储

  6. 没有设置数据过期时间自动删除机制

  7. 列簇过多设计不合理

  8. 解决方案:

// 设置列簇的压缩
disable ‘test_logs’
// 删除列簇
alter ‘test_logs’,’delete’=>’test_info’
// 设置列簇的压缩
alter ‘test_logs’ ,{NAME=>’test’,COMPRESSION=>’LZ4’,DATA_BLOCK_ENCODING => ‘DIFF’}
// 设置设置冷热存储、数据过期时间自动删除机制
alter ‘test_logs’ , {NAME=>’test’, COLD_BOUNDARY=>’604800’,TTL=>2592000}
// 启用 table
enable ‘test_logs’
// 压缩编码并不会立即生效,需要 major_compact,此会耗时较长,注意在业务低峰期进行。
major_compact ‘test_logs’

  1. 效果: hbase 从 1.5TB 降到 70G 左右

    三、hbase 命令详解#

  2. COMPRESSION 压缩算法方式、DATA_BLOCK_ENCODING 压缩算法
  3. 目前阿里云平台支持压缩算法有: LZO、ZSTD、GZ、LZ4、SNAPPY NONE,其中 NONE 就代表不开启压缩。不同压缩算法在不同场景的压缩比,及解压速度对比如下,都是来自线上真实场景。
  4. 阿里云接口文档:help.aliyun.com/document_detail/59...

| 业务类型 | 无压缩表大小 | LZO(压缩率 / 解压速度 MB/s) | ZSTD(压缩率 / 解压速度 MB/s) | LZ4(压缩率 / 解压速度 MB/s) |
| 监控类 | 419.75T | 5.82/372 | 13.09/256 | 5.19/463.8 |
| 日志类 | 77.26T | 4.11/333 | 6.0/287 | 4.16/496.1 |
| 风控类 | 147.83T | 4.29/297.7 | 5.93/270 | 4.19/441.38 |
| 消费记录 | 108.04T | 5.93/316.8 | 10.51/288.3 | 5.55/520.3 |

  1. COLD_BOUNDARY 数据在热存储的周期,之后存入冷存储
  2. TTL 数据过期时间单位(秒)
  3. 存活时间
  4. 列簇可以设置 TTL 秒数,HBase 在超时后将自动删除数据,HBase 里面 TTL 时间时区是 UTC。

存储文件仅包含有过期的行(expired rows),它们可通过 minor compaction 删除。将 hbase.store.delete.expired.storefile 设置为 false,可禁用此功能;将最小版本数设置成非 0 值也可达到同样的效果。

  1. HBase 的最新版本还支持将设定的时间存放在每个结构单元。TTL 单元通过 Mutation#setTTL 作为更变请求(Appends, Increments, Puts, etc.)的一个属性提交,如果 TTL 的属性被设定了,它将会应用到由于该变更操作更新的所有单元上。Cell TTL handling 和 ColumnFamily TTLs 间有两个显著的差别:

  2. Cell TTLs 的数量级是毫秒而不是秒。

  3. 一个 Cell TTL 不能超出 ColumnFamily TTLs 设置的有效时间。

  4. major_compact

  5. 合并文件

  6. 清除删除、过期、多余版本的数据

  7. 提高读写数据的效率

  8. 数据什么时候进冷存?

  9. Lindorm 通过 compaction 机制异步得将冷数据从热存中归档到冷存,触发时间默认为冷热分界的一半,最小为 1 天。比如您设置冷热边界是 3 天,那么默认 1.5 天就会自动触发一次 compaction;如果设置冷热边界为 1 天,后台会 1 天触发一次 compaction。

  10. 我可以手动强制触发 compaction 吗?

  11. 可以的,您可以通过 HBase shell 对表执行 major_compact ‘tableName’ 命令来强制触发 major compaction,不仅把热存中的冷数据归档到冷存中,同时也会合并所有冷区热区的文件。但请不要频繁使用该命令,它会加重 IO 负载。

  12. 为什么我的表冷数据归档的慢?

  13. 请检查您的 Lindorm 版本,如果版本不大于 2.1.20,可以升级到最新的版本,冷数据会根据 1 中提到的周期进入冷存。如果您选择暂缓升级,可以联系专家服务来帮您优化参数。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。