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

Hbase 如何在一次扫描中从多个表中获取数据?,hbase,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

我正在开发一个小型社交网络应用程序,面临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.通过将所有注释保留在同一个表(POST)中,每当出现新注释时,创建运行时列作为名称comment-(timestamp)或comment-(number)


2.通过另一种方式,您可以创建两个列族,一个是“Post”,另一个是“Comment”,因为注释可以更多,所以请将列族“Comment”的版本数设置为最大(最佳)值。

如果注释表只能有一列,我可以使用您的第一个解决方案。但是,我的注释表很复杂,包含多个限定符。我不能给你第二个解决方案。您是说在一个表中维护一对多的关系,即平面设计吗?即使您希望保留两个单独的表,您也可以使用get命令通过传递键列表来获取所有注释,如果您不想使用RowKeyFilterYes,因为一篇文章可能有许多注释,当它有1:N关系时,最好保留在单独的列族中感谢您的输入。我计划将所有注释键保留在Post表中,并将使用GETAPI按行键获取所有注释。