2012-07-05 18 views
0

我正在开发一个小型社交网络应用程序,面对N + 1选择问题。如何在单次扫描中从多个表中获取数据?

我有两个表格,Post和Comment在应用程序中起主要作用。

我将所有帖子存储在帖子表中,帖子的评论存储在评论表中。我以下面的方式使用部分键扫描功能获取数据。

Post: Start row = userID | Stop Row = userID +1 

Comment: Start row = postID | Stop Row = postID +1 

这里是代码片段,它是用来获取数据

HTable table = resource.getTable(getTableName()); 

Scan scan = new Scan(); 
scan.setStartRow(Bytes.toBytes(prefixId.toString())); 
scan.setStopRow(Bytes.toBytes(prefixId.toString() + 1)); 

ResultScanner scanner = table.getScanner(scan); //TODO store the scanner in cache. 
Result[] results = scanner.next(pageSize); 

问题的代码是,我可以取所有职位单查询的用户。但对于每篇文章,我必须做出单独的查询来获取所有评论。我分析了HBase客户端扫描API,但无法找到解决方案,以便在单个查询或最多两个查询中实现;一个用于发表评论和其他评论。

我开始了解过滤器,但过滤器又是性能瓶颈。

我刚开始使用NOSQL技术,并且对HBase非常新颖。请在设计/框架级别帮助我解决此问题。

谢谢。

回答

0

有两种方法在单次扫描来获得所需的数据,
1.通过将所有的意见纳入同一个表(POST),创建运行时列名comment-(时间戳)或comment-(数量)每当新的评论来了。

2.以其他方式您可以创建两列家庭一个是'发布'&另一个是'评论',因为评论可以更多,所以为列家庭'评论'设置版本数量最大(最佳) 。

+0

如果评论表只能有一列,我可以用你的第一个解决方案。但是,我的评论表是复杂的,并且包含多个限定符。我无法让你解决第二个问题。你是在谈论在单一表格中维持一对多的关系,即平面设计? – 2012-07-06 09:31:27

+0

即使你想保留两个单独的表,你也可以使用get命令通过传递键列表来获取所有注释,如果你不想使用RowKeyFilter – 2012-07-06 11:46:16

+0

是的,因为一个帖子可以有很多评论,所以它更好当它有1:N的关系时,保留在单独的列族中 – 2012-07-06 11:50:37

相关问题