一、Hbase Schema设计

1,Schema 创建

使用 Apache HBase Shell 或使用 Java API 中的 Admin 来创建或更新 HBase 模式。

Configuration config = HBaseConfiguration.create();
Admin admin = new Admin(conf);
TableName table = TableName.valueOf("myTable");admin.disableTable(table);HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1);      // adding new ColumnFamily
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2);    // modifying existing ColumnFamilyadmin.enableTable(table);

2,Schema 更新

当对表或 ColumnFamilies (如区域大小、块大小) 进行更改时,这些更改将在下一次出现重大压缩并重新写入 StoreFiles 时生效。

3,HBase Schema 设计规则

(1)目标区域的大小介于10到50 GB之间。
(2)目的是让单元格不超过10 MB,如果使用 mob,则为50 MB 。否则,请考虑将您的单元格数据存储在 HDFS 中,并在 *HBase 中存储指向数据的指针。
(3)典型的模式在每个表中有1到3个列族。HBase 表不应该被设计成模拟 RDBMS 表。
(4)对于具有1或2列族的表格,大约50-100个区域是很好的数字。请记住,区域是列族的连续段。
(5)尽可能短地保留列族名称。列族名称存储在每个值 (忽略前缀编码) 中。它们不应该像在典型的 RDBMS 中一样具有自我记录和描述性。
(6)如果您正在存储基于时间的机器数据或日志记录信息,并且行密钥基于设备 ID 或服务 ID 加上时间,则最终可能会出现一种模式,即旧数据区域在某个时间段之后永远不会有额外的写入操作。在这种情况下,最终会有少量活动区域和大量没有新写入的较旧区域。对于这些情况,您可以容忍更多区域,因为您的资源消耗仅由活动区域驱动。
(7)如果只有一个列族忙于写入,则只有该列族兼容内存。分配资源时请注意写入模式。

二、HBase数据模型操作

在 HBase 中有四个主要的数据模型操作,分别是:Get、Put、Scan 和 Delete。

1,Get(读取)

Get 指定行的返回属性。

(1)读取通过 Table.get 执行。

语法:
get ’<table name>’,’row1’示例:
hbase(main):012:0> get 'emp', '1'COLUMN                     CELLpersonal : city timestamp=1417521848375, value=hyderabadpersonal : name timestamp=1417521785385, value=ramuprofessional: designation timestamp=1417521885277, value=managerprofessional: salary timestamp=1417521903862, value=500004 row(s) in 0.0270 seconds

(1)读取指定列

格式:
hbase>get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}示例:
hbase(main):015:0> get 'emp', 'row1', {COLUMN=>'personal:name'}COLUMN                CELLpersonal:name timestamp=1418035791555, value=raju1 row(s) in 0.0080 seconds

2,Put(写)

Put 可以将新行添加到表中(如果该项是新的)或者可以更新现有行(如果该项已经存在)。Put 操作通过 Table.put(non-writeBuffer)或 Table.batch(non-writeBuffer)执行。

语法:
put ‘table name’,’row ’,'Column family:column name',’new value’示例:
(1)假设 HBase 中有一个表 EMP 拥有下列数据:
hbase(main):003:0> scan 'emp'ROW              COLUMN+CELL
row1 column=personal:name, timestamp=1418051555, value=raju
row1 column=personal:city, timestamp=1418275907, value=Hyderabad
row1 column=professional:designation, timestamp=14180555,value=manager
row1 column=professional:salary, timestamp=1418035791555,value=50000
1 row(s) in 0.0100 seconds(2)以下命令将员工名为“raju”的城市值更新为“Delhi”:
hbase(main):002:0> put 'emp','row1','personal:city','Delhi'
0 row(s) in 0.0400 seconds(3)更新后的表如下所示:
hbase(main):003:0> scan 'emp'ROW          COLUMN+CELL
row1 column=personal:name, timestamp=1418035791555, value=raju
row1 column=personal:city, timestamp=1418274645907, value=Delhi
row1 column=professional:designation, timestamp=141857555,value=manager
row1 column=professional:salary, timestamp=1418039555, value=50000
1 row(s) in 0.0100 seconds

3,Scan(扫描)

Scan 允许在多个行上对指定属性进行迭代。

格式:
scan ‘<table name>’ 示例:
public static final byte[] CF = "cf".getBytes();
public static final byte[] ATTR = "attr".getBytes();
...Table table = ...      // instantiate a Table instanceScan scan = new Scan();
scan.addColumn(CF, ATTR);
scan.setRowPrefixFilter(Bytes.toBytes("row"));
ResultScanner rs = table.getScanner(scan);
try {for (Result r = rs.next(); r != null; r = rs.next()) {// process result...}
} finally {rs.close();  // always close the ResultScanner!
}

4,Delete(删除)

Delete 操作用于从表中删除一行。Delete 通过 Table.delete 执行。HBase 不会修改数据,因此通过创建名为 tombstones 的新标记来处理 Delete 操作。这些 tombstones,以及没用的价值,都在重大的压实中清理干净。

语法:
delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’示例:
hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds

删除表的所有单元格:
使用 “deleteall” 命令,可以删除一行中所有单元格。

语法:
deleteall ‘<table name>’, ‘<row>’,示例:
hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds

使用 Scan 命令验证表。表被删除后的快照如下:

hbase(main):022:0> scan 'emp'ROW                  COLUMN+CELL2 column=personal data:city, timestamp=1417524574905, value=chennai 2 column=personal data:name, timestamp=1417524556125, value=ravi2 column=professional data:designation, timestamp=1417524204, value=sr:engg2 column=professional data:salary, timestamp=1417524604221, value=300003 column=personal data:city, timestamp=1417524681780, value=delhi3 column=personal data:name, timestamp=1417524672067, value=rajesh3 column=professional data:designation, timestamp=1417523187, value=jr:engg3 column=professional data:salary, timestamp=1417524702514, value=25000

Hbase Schema设计与数据模型操作相关推荐

  1. HBase Schema设计简介

    原文 HBase与传统的关系数据库(如MySQL.PostgreSQL,Oracle等)非常不同,它的架构和提供给HBase的功能使用它的应用程序. HBase权衡了其中一些功能,以实现可扩展性和灵活 ...

  2. mysql schema设计_mongodb 的 schema 设计方法

    mongodb 的schema设计方法 前言 mongodb是NoSQL的代表,从使用关系型数据库(MySQL)到使用非关系型数据库(mongodb),其中的一些以前的设计的思维惯性总是在不知不觉的影 ...

  3. 案例篇-HBase RowKey 设计指南

    1.为什么 Rowkey 这么重要 1.1 RowKey 到底是什么 我们常说看一张 HBase 表设计的好不好,就看它的 RowKey 设计的好不好.可见 RowKey 在 HBase 中的地位.那 ...

  4. hbase动态更改行键设计_谈笑间学会Hbase Rowkey设计

    谈笑间学会-Hbase Rowkey设计 1.为什么Rowkey这么重要 1.1.Rowkey是什么 类似于MySQL.Oracle中的主键,用于标示唯一的行 完全是由用户指定的一串不重复的字符串: ...

  5. TiDB数据库schema设计之表结构设计

    TiDB数据库schema设计之表结构设计 Schema的KV映射原理 聚簇表和非聚簇表 非聚簇表的写热点问题 分区表 TiDB的数据类型 TIDB的自增ID 聚簇表自增ID的写热点问题 Schema ...

  6. PCTP考试学习笔记之二:TiDB 数据库 schema 设计

    作者: OnTheRoad 原文来源: https://tidb.net/blog/6a1007ff 本系列学习笔记根据官方课程<TiDB 高级系统管理 [TiDB v5]>整理,感谢官方 ...

  7. Phoenix schema的 启用、操作、关闭

    SCHEMA 的启用.操作.关闭 1,启用 SCHEMA 注意: Phoenix 中将 HBase 的 namespace 叫做 SCHEMA,相当于 mysql 中的库的概念. (1)默认 Phoe ...

  8. Hbase基础介绍-2 数据模型

    Hbase基础介绍-2 数据模型 二.Hbase数据模型(数据格式:列族:列修饰符:值) 1.结构 (1)NameSpace: (2)表(table): (3)行(Row): (4)列(Column) ...

  9. B-07 Django-第二部分(熟练掌握)-模型(Model)设计-数据访问操作(记录查询-基本)

    模型(Model)设计-数据访问操作(查询操作介绍与基本API) 文章目录 模型(Model)设计-数据访问操作(查询操作介绍与基本API) 回顾 a.模型(Model)设计流程过程说明 目标 参考 ...

最新文章

  1. IT人请注意你的身体![转]
  2. 在mac上安装 docker
  3. 大数据和云计算时代的机遇
  4. ubuntun中文读书笔记
  5. 【计算机系统设计】实践笔记(6)改进数据通路:lw和sw指令
  6. POJ 3264 Balanced Lineup 【线段树】
  7. 查询商品列表报错This application has no explicit mapping for /error, so you are seeing this as a fallback
  8. python dataframe的某一列变为list_Pandas某一列是列表,怎么展开呢?
  9. 颠覆传统!麦肯锡的数字化咨询:只用5步,打造创新的数据架构
  10. Extjs项目使用技巧————文件上传
  11. (转)李嘉诚:成功源于花90%时间考虑失败
  12. 把栏杆拍遍--辛弃疾
  13. exchange 2010高可用平台的搭建和配置
  14. 搜狗拼音、QQ拼音输入法、2345拼音输入法、百度输入法 、手心输入法对比。(个人体会)...
  15. 瞅瞅Levels.fyi发布的2020年度程序员收入报告
  16. 免费的人脸识别SDK(基于 Java 实现的人脸识别功能)
  17. 史上超级详细:银行外包java面试题目
  18. Java--Mac系统终端编译运行java文件
  19. 畅谈癌症的过去现在未来
  20. iphone与android共享位置,如何使用“查找我”在iPhone和其他设备上共享您的位置...

热门文章

  1. 七牛云的存储对象的地区对应表
  2. 国内外常用学术网站(访问不了“谷歌学术”的,试一试有惊喜哦)
  3. 《落》用计算机弹,《坦克世界》里的防崩落内衬和水套的意思?AP弹和HE弹的具体用法(主流坦克哪些平适合AP哪些适合HE)?...
  4. 刑侦科推理试题(不知来源,最右APP看到)
  5. Cisco路由器的硬件结构、重要存储设备Flash和NVRAM
  6. 学习资料怎么打印,能用手机直接打印学习资料
  7. H5 Canvas实现荣誉证书生成器
  8. 2023二建各科资料
  9. mongodb 批量转换大写字符
  10. ubuntu 中安装 meld 的方式