【发布时间】:2011-10-06 10:29:09
【问题描述】:
与大多数人一样,我来自 RDMS 世界,试图了解 noSQL 数据库,特别是文档存储(因为我发现它们最有趣)。
我正在尝试了解如何使用文档数据库执行一些基于集合的操作(我正在使用 RavenDB)。
所以根据我的理解:
- Union(如在 SQL UNION 中)是非常直接的追加。此外 不同集合之间的联合(SQL JOIN)可以实现map/reduce。这 RavenDB 神话书中给出的示例,注释计数为 博客条目是一个好的开始。
- 交集可以使用多种技术来执行 反规范化直至创建“映射”或“链接” 文档如here 所述(以及下面的聚合器示例)。在 RDMS 中,这将使用简单的“INNER JOIN”或“WHERE x IN”来执行
- 减去(相对补码)是我卡住的地方。在 RDMS 中,此操作只是“WHERE x NOT IN”或“LEFT JOIN”,其中连接集为 NULL。
使用现实世界的示例,假设我们有一个 RSS 聚合器(例如 Google Reader),它有数百万甚至数十亿的 RSS 条目,有成千上万的用户,每个都标记为收藏夹等。
在这个例子中,我们关注入口、用户和标签;其中标签充当用户和条目之间的链接。
user {string id, string name /*etc.*/}
entry {string id, string title, string url /*etc.*/}
tag {string userId, string entryId, string[] tags} /* (favourite, read, etc.)*/
通过上述方法,很容易使用标签执行条目和用户之间的交集。但我无法理解如何执行减法。例如“返回所有没有任何标签的项目”,甚至更令人生畏的“返回最新的 1000 个没有任何标签的项目”。
所以我的问题:
- 你能告诉我一些关于这件事的阅读材料吗?
- 您能否分享一些关于如何完成任务的想法 高效?
注意:我知道您在使用文档数据库时失去了查询灵活性,但肯定有办法做到这一点吗?
【问题讨论】:
标签: nosql ravendb except complement rdbms