我正在开发一个小型社交网络应用程序并面临 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 还很陌生。请在设计/框架级别帮助我解决这个问题。
谢谢。