如何快速查询Hbase数据?

时间:2017-06-11 02:31:09

标签: mongodb hadoop cassandra hbase

我遇到以下规则:

  1. 用户一次只能在一个场地。如果用户A在场地X检查然后在 场地Y,他们不再在场地X.
  2. 办理登机手续仅“持续”最多3个小时。如果用户A在场地X办理登机手续,那么 没有3个小时,他们不再在X会场。
  3. 使用Kafka和spark-streaming将数据解析为HBase。

    我想使用HBase和TTL是3小时,版本控制是1,符合上述条件。问题是我很困惑如何组织HBase中的数据以获得更快的查询响应,我应该使用具有场地名称或场地名称的单个列作为不同的列名称吗?

    这将是一个更好的选择,为什么?

    需要执行的查询是: 1.用户A现在在哪里? 2.目前X会场的用户是什么?

2 个答案:

答案 0 :(得分:1)

最有效的查询基于HBase表的行键。 我会使用用户名作为行键,以便能够快速获取特定用户的信息。而且每行需要一列 - 场地。

显然,要收集所有数据(查询2:用户在场地X的位置),您需要扫描整个(部分)表格。所以效率不高。查看HBase的二级索引 - 如果您遇到此类查询的性能问题。

答案 1 :(得分:1)

So, to address above scenario I would suggest having two table:

  1. The row key of the first table will be userID (I would also suggest adding some shard key like (userID % number of HBase regions) to evenly distribute data and avoiding hot spotting). This table will provide mapping userID -> venue, and checking where is particular user will take O(1).
  2. The row key for the second table will be venueID + userID (also prefixed with some shard key). Thus, you can user KeyOnlyFilter and PrefixFilter (prefix is venue) to get all users in a specific venue. This should be quite fast.

Since you use Kafka and Spark, ingesting to two tables should not affect your performance.

Please let me know if you need more details.