分布式数据库HBase表设计
2016-06-15 12:10
225 查看
比较常用的数据库是关系型数据库,但很多场景下nosql数据库会更加擅长,从sql到nosql实施的第一步就是设计表结构,这是两种不同的思维方式,这里说下HBase表设计。
需求:需要一张stock表用于保存市场所有股票的分钟走向,即每个股票每分钟记录一次价格。
优点:不受记录数限制,通过id查询时能很快跳过行,拥有很好的扩展性,高表也是推荐的用法。
缺点:不利于原子性,hbase只有行具备原子性。
优点:更好的事务性。
缺点:宽表列数最多到百万级别,可扩展性较差。
后面有时间会写些hbase源码及其维护的相关的文章。
需求:需要一张stock表用于保存市场所有股票的分钟走向,即每个股票每分钟记录一次价格。
方案一:瘦表。
用stockId+datetime作为RowKey,这样方便通过stockId或datetime快速扫描获取到相关记录。RowKey | ColumnFamily “stock_cf” |
---|---|
stockId+datetime | stock_cf:price |
“00000120160615100000” | 10.02 |
“00000120160615100001” | 10.10 |
“00000120160615100002” | 10.08 |
“00000220160615100000” | 8.00 |
“00000220160615100001” | 8.10 |
“00000220160615100002” | 8.20 |
craete 'stock' , 'stock_cf'
优点:不受记录数限制,通过id查询时能很快跳过行,拥有很好的扩展性,高表也是推荐的用法。
缺点:不利于原子性,hbase只有行具备原子性。
方案二:宽表。
用stockId作为RowKey,datetime作为列,随着时间增长列会不断地增加,获取某个时间的记录将时间作为列。一个表的列族不要超过3个。RowKey | ColumnFamily “stock_cf” | ||
---|---|---|---|
stockId | “stock_cf:20160615100000” | “stock_cf:20160615100001” | “stock_cf:20160615100003” |
000001 | 10.02 | 10.10 | 10.08 |
000002 | 8.00 | 8.10 | 8.20 |
craete 'stock' , 'stock_cf'
优点:更好的事务性。
缺点:宽表列数最多到百万级别,可扩展性较差。
后面有时间会写些hbase源码及其维护的相关的文章。
相关文章推荐
- 怎么设置MySQL就能让别人访问本机的数据库了?
- memcached和redis的区别和应用场景
- Oracle数据库之SQL基础(二)
- mysql group by排序问题
- oracle的用户、表、表空间三者的关系
- mysql基础
- spring aop 做redis缓存
- sql优化
- [SQL] 理解SQL SERVER中的逻辑读,预读和物理读
- 分布式消息中间件(四)——Flume+Kafka+Storm+Redis生态架构实战
- sql 触发器
- Oracle:表空间
- MySql错误处理(三)- 错误处理的例子
- MySql错误处理(四)- 错误代码和消息
- Oracle如何实现类似MySQL的show create table,show index的功能
- plsql客户端显示菜单等
- Google 分布式关系型数据库 F1
- mongodb 数据操作
- sql server2008 字符串的替换
- 配置oracle允许远程访问