HBase架构设计正确吗?

时间:2017-05-25 15:04:36

标签: hbase schema-design

我想问一下HBase表上的当前架构设计是否适用于以下场景: 我每天收到1000万个事件,每个事件都有一个unix纪元时间戳和一个id。我将不得不按天分组,以便我可以轻松扫描特定日期发生的事件。

当前设计: 事件时间戳转换为格式“MM-YYYY_DD”字符串作为键,并且当天发生的事件的每个id都存储在行中。这将导致一行中多达1000万列。 据我所知,HBase在单行上写入锁定。导入一天并降低性能导致许多锁定。

也许这会是一个更好的设计?:使用unix epoch时间戳作为行的键,导致许多行有几千列(同一秒可能发生多个事件,因为我的时间戳有最大分辨率为1秒。 扫描时可以计算unix时期的开始和结束时间并进行扫描。

2 个答案:

答案 0 :(得分:0)

我只是列出了一些关于hbase的知识,对于决定如何更好地修改设计可能会有所帮助。

HBase是基于列的分布式数据库。它基于行键的前缀在不同节点上分发记录。因此,取决于您拥有多少个节点,在您的情况下,它将按以下方式工作:不同月份的记录将转到不同的节点(特定月份的所有日期的所有数据将转到单个节点)。

同时可以使用长行密钥(带有偶数后缀),这很可能不会对分配产生很大影响。 HBase允许基于行键的前缀构建扫描查询,但不完全匹配。

答案 1 :(得分:0)

HBase最适合用于更快的随机读写。除此之外,你必须格外小心。在你的情况下,将行键保持为日期是非常糟糕的,因为正如你所说,它将导致数百万列。这不是好习惯。大多数情况下,当拿着这么大的行时,你可能会遇到内存问题。

您想要分组/分区 - 然后使用带过滤器的扫描并不是一个糟糕的方法。您可以使用" SingleColumnValueFilter"进行基于列的查询。与rowkey扫描相比,性能不是最佳的。同样,我不确定你期待的响应时间是什么。