如何在单次扫描中从多个表中获取数据?

时间:2012-07-05 14:15:59

标签: hbase

我正在开发一个小型社交网络应用程序并面临N + 1选择问题。

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

我将所有帖子存储在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来说还是一个新手。请在设计/框架层面帮助我解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:0)

在一次扫描中有两种获取所需数据的方法,
  1.通过将所有注释保留在同一个表(POST)中,每当有新注释时,创建运行时列作为名称注释(时间戳)或注释(数字)。

2.另外,你可以创建两个列Family 1是'Post'&另一个是“评论”,因为评论可以更多,因此将列数系列“评论”的版本数设置为最大(最佳)值。