我们正在考虑使用 HBase 进行实时分析。
在 HBase 之前,我们将在我们的日志文件上运行 Hadoop Map Reduce 作业并聚合数据,并将细粒度的聚合结果存储在 HBase 中,以便对聚合数据进行实时分析和查询。因此,HBase 表将具有预先聚合的数据(按日期)。
我的问题是:如何最好地设计 HBase 数据库的架构和主键设计,以实现快速但灵活的查询。
例如,假设我们将以下行存储在数据库中:
timestamp, client_ip, url, referrer, useragent
假设我们的 map-reduce 作业产生三个不同的输出字段,我们希望将每个字段存储在一个单独的“表”(HBase 列族)中:
- 日期、操作系统、浏览器
- 日期、网址、推荐人
- 日期、网址、国家
(我们的 map-reduce 作业从用户代理和 client_ip 数据中获取操作系统、浏览器和国家字段。)
我的问题是:我们如何构建 HBase 模式以允许对这些字段中的任何一个或组合进行快速、近实时和灵活的查找?例如,用户必须能够指定:
- operating_system 按日期(“此日期范围内有多少 iPad 用户?”)
- url 按国家和日期(“上个月有多少用户从该国家/地区访问此 url?”)
基本上还有其他自定义查询?
我们应该使用这样的键:
- date_os_browser
- date_url_referrer
- date_url_country
如果是这样,我们可以完成上面指定的查询吗?