0
我正在开发一个小型社交网络应用程序,面对N + 1选择问题。如何在单次扫描中从多个表中获取数据?
我有两个表格,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非常新颖。请在设计/框架级别帮助我解决此问题。
谢谢。
如果评论表只能有一列,我可以用你的第一个解决方案。但是,我的评论表是复杂的,并且包含多个限定符。我无法让你解决第二个问题。你是在谈论在单一表格中维持一对多的关系,即平面设计? – 2012-07-06 09:31:27
即使你想保留两个单独的表,你也可以使用get命令通过传递键列表来获取所有注释,如果你不想使用RowKeyFilter – 2012-07-06 11:46:16
是的,因为一个帖子可以有很多评论,所以它更好当它有1:N的关系时,保留在单独的列族中 – 2012-07-06 11:50:37