我正在开发一个小型社交网络应用程序并面临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来说还是一个新手。请在设计/框架层面帮助我解决这个问题。
感谢。
答案 0 :(得分:0)
在一次扫描中有两种获取所需数据的方法,
1.通过将所有注释保留在同一个表(POST)中,每当有新注释时,创建运行时列作为名称注释(时间戳)或注释(数字)。
2.另外,你可以创建两个列Family 1是'Post'&另一个是“评论”,因为评论可以更多,因此将列数系列“评论”的版本数设置为最大(最佳)值。