我正在寻找一些关于hbase的帮助(对它相当陌生,并试图了解我是否可以将它用于我的poc)。
用例:我需要一个历史价格数据表,例如将存储10个不同指数的数据。其中一项要求是跟踪或审计对一个组成部分、股份或工具的任何属性所做的更改。另外,如果我想找到在2010年1月价格变化n%的仪器清单。
数据,例如(一些可能性)(下面提到的列只是为了说明)
date instrument high low mid user ts
20130101 goog 34 33.4 33.8 system 10:30
20130101 yhoo 24 23.4 23.8 system 10:50
20130101 goog 34.1 33.3 33.8 ops 10:55
20130101 msft 134 133.4 133.8 system 11:00
20130101 msft 134 133.9 133.8 ops 11:30
20130101 goog 34.1 33.3 34.1 ops 11:30
20130101 aapl 48 48.4 47.9 system 11:30
类似的数据将可用于以后的日期。请注意,在一天中,任何用户都可以更改仪器的属性/属性值(如goog、msft所示),而有些用户则完全没有更改(aapl、yhoo)。
我可以用什么样的数据模型来存储这些数据,从中检索数据也很容易?
如果hbase有复合rowkey(如果有语法,请帮助我),那么我可以有这样的东西,
ROW COLUMN+CELL
goog-20130101 column=cf1:h1, timestamp=1389020633920, value=34
goog-20130101 column=cf1:h2, timestamp=1389020654614, value=34.1
goog-20130101 column=cf1:h3, timestamp=1389020668338, value=34.1
goog-20130101 column=cf1:l1, timestamp=1389020633920, value=33.4
goog-20130101 column=cf1:l2, timestamp=1389020654614, value=33.8
goog-20130101 column=cf1:l3, timestamp=1389020668338, value=33.3
goog-20130101 column=cf1:u1, timestamp=1389020633920, value=system
goog-20130101 column=cf1:u2, timestamp=1389020654614, value=ops
goog-20130101 column=cf1:u3, timestamp=1389020668338, value=ops
aapl-20130101 column=cf1:h1, timestamp=1389020633920, value=48
aapl-20130101 column=cf1:l1, timestamp=1389020633920, value=48.4
aapl-20130101 column=cf1:u1, timestamp=1389020633920, value=system
1) 我们可以创建这样的行键吗?怎样?2) 如果rowkey的数据已经存在(goog-20130101),例如,那么在本例中,我们如何通知/将数据放在同一rowkey中,但列名更改为h1、l1、u1?随后是h2、l2等。这是否可行?3) 如何检索最新数据及其值(在某个日期对goog说hi)?
或者,如果有人遇到了这样的数据(您在其中跟踪用户/对象的多个事件/活动一天内的任何内容并存储),您可以为适合hbase的更好模型提供建议。
事先谢谢你的帮助。
2条答案
按热度按时间wvyml7n51#
hbase中的行键是任意字节数组,因此您可以按自己的意愿制作它们。你可以打电话
Bytes.toBytes()
并将各种类型的行键转换为适合hbase的字节数组。hbase中没有像您希望的那样增加列名的本机方法。您将需要一些外部数据源来维护计数,并且您的应用程序代码将需要读取当前版本并在
Get
请求。这可能是hbase中的一列,当更新“h”、“l”和“u”时,该列将递增。写新的专栏不是问题,只要它有数百万个独特的专栏。您可以考虑的另一种技术是在限定符中包含时间戳,这样它们就可以是唯一的,而不需要额外的读取来跟上版本更改。要确定最新的更改,可以读取整行并自行处理,也可以使用筛选器(如:columnprefixfilter)检索特定范围之间的数据。
有一个项目opentsdb使用了rowkeys随时间变化的概念。它通常用于基础设施监控,但是代码是开源的,因此您可以在那里找到一些有用的技术。
ojsjcaue2#
hbase的一个方面您可能还没有完全理解,那就是它自动创建和维护一个单元的多个版本。单元格是hbase中的{row,column,version}元组。
默认情况下,hbase保留同一单元的三个版本,并且可以配置为存储任意数量的版本。最大值在创建表时设置。另请参阅hcolumndescriptor信息
hbase手册中的hbase版本控制信息
因此,您可以在选择行键时有更大的灵活性。