模仿NoSQL文档数据库的连接

时间:2011-10-14 06:47:58

标签: mongodb couchdb ravendb nosql

是否有任何变通方法可以使用NoSQL文档数据库执行类似连接的查询?

示例:我们需要为评分超过千的用户选择上个月的文章。 SQL解决方案是

SELECT a.* FROM Articles as a
INNER JOIN Users as u ON a.UserId = u.Id
WHERE a.Date > (Now - Month) AND u.Rating > 1000

我可以想象几种NoSQL解决方案。首先是两个查询解决方案:

  1. 检索评分超过1000的用户
  2. 检索上个月针对这些用户的文章
  3. 我不喜欢它,因为我必须进行两次查询,我必须检索所有评级为>的用户1000(如果我有1kk用户怎么办?)

    我想到的另一个NoSQL解决方案是非规范化。但我不是它的忠实粉丝。我不反对将评论集合放到帖子实体(因为评论属于帖子),但我不喜欢将用户放在用户内的文章或文章中。

    还有其他解决方案吗?

3 个答案:

答案 0 :(得分:1)

您可以使用RavenDB使用多地图/减少索引来执行此操作。请参阅here

答案 1 :(得分:1)

RavenDB Multi Maps可以很好地处理这种情况:

http://ayende.com/blog/89089/ravendb-multi-maps-reduce-indexes

答案 2 :(得分:0)

另一个解决方案可能是playOrm,您可以在其中对表进行分区并选择并加入分区。 IT基本上就像使用JQL进行休眠,除了查询分区之外的所有内容。也许如果你按月分区,你可以在该分区上运行一个简单的旧学校选择查询,并将其与其他东西连接。 noSql现在似乎通​​过playOrm加入了连接;)。它当然不会在巨大的表上加入。在进行连接时,PARTITION需要与RDBMS表大小的比较大小....表大小可以是无限的(即,您有无限分区)。