2012-02-14 111 views
2

从RDBMS背景来看,我需要一点帮助/建议来为以下用例设计Hbase架构。Hbase架构设计建议

这是一个使用hadoop生成应用程序的报告。现在,我们需要根据他的电子邮件ID跟踪特定用户的所有以前的报告生成历史记录。所以,数据需要被持久化,电子邮件ID,报告名称,开始日期,结束日期,状态。我计划,以保持电子邮件ID作为行键和其他实体为列, EMAILID(行密钥) - (列)应用程序的名字:所以reportName,APPNAME:的startDate,应用程序的名字:结束日期,应用程序的名字:状态

但问题是,同一个用户可以针对不同的日期范围运行相同的报告。所以它会覆盖appName:reportName和appName:status列。由于我是NoSQL世界的新手,我不知道如何解决这个问题。 有人可以建议我为这个需求设计模式的理想方式吗?

任何帮助将不胜感激。

感谢

+0

对于HBase,您打算用于查询数据的模式通常比存储的特定数据更重要。你计划通过用户ID进行查询吗?按报告ID?都?另外,您似乎需要存储用户运行报表的时间戳,对吗? – 2012-02-14 05:13:08

+0

我打算通过用户ID进行查询。它会是正确的吗?或者哪一个是最好的方法?我接受任何建议。是的,我还需要存储时间戳。谢谢。 – Raj 2012-02-14 05:20:41

回答

1

根据您的预计查询模式,这里是我建议:

RowKey         | Column Family (appName)     | 
[email protected] HH:MM:SSS | reportName | status | startDate | endDate | 

这样的设计为您提供了一些优势。首先,您可以在特定日期范围内快速查询(使用扫描)特定用户的所有行。其次,通过在rowkey中的时间戳之前使用用户的ID来避免写入热点。

每次用户触发生成报表时,您都可以向该模式写入一行,而且您不必担心覆盖列(除非用户在同一个数据库的1/10中生成两个报表第二)。