0

我正在开发一个小型社交网络应用程序并面临 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 客户端 Scan API,但无法找到解决方案以使其在单个查询或最多两个查询中成为可能;一个用于帖子,另一个用于评论。

我开始了解过滤器,但过滤器再次成为性能瓶颈。

我刚开始使用 NOSQL 技术,对 HBase 还很陌生。请在设计/框架级别帮助我解决这个问题。

谢谢。

4

1 回答 1

0

有两种方法可以在一次扫描中获取所需数据,
1. 通过将所有评论保存在同一个表中(POST),每当有新评论出现时,将运行时列创建为名称评论-(时间戳)或评论-(数字)。

2.通过其他方式,您可以创建两列系列,一列是“发布”,另一列是“评论”,因为评论可以更多,因此将列系列“评论”的版本数设置为最大(最佳)值。

于 2012-07-06T08:59:54.597 回答