使用文档数据库(noSQL)的基于集合的基本操作
和大多数人一样,我来自和RDMS世界,试图了解noSQL数据库,特别是文档存储(因为我发现它们最有趣) 我试图理解如何使用文档数据库执行一些基于集合的操作(我正在玩RavenDB) 根据我的理解:使用文档数据库(noSQL)的基于集合的基本操作,nosql,ravendb,except,complement,rdms,Nosql,Ravendb,Except,Complement,Rdms,和大多数人一样,我来自和RDMS世界,试图了解noSQL数据库,特别是文档存储(因为我发现它们最有趣) 我试图理解如何使用文档数据库执行一些基于集合的操作(我正在玩RavenDB) 根据我的理解: 联合(与SQL联合一样)非常直接。另外 不同集合之间的联合(SQL连接)可以通过映射/减少来实现。这个 RavenDB神话书中给出的示例,带有注释 博客是一个好的开始 交叉可以使用以下多种技术执行: 从去规范化到创建“映射”或“链接” 如所述的文档(以及下面的聚合器示例)。在RDMS中,这将使用简单
- 联合(与SQL联合一样)非常直接。另外 不同集合之间的联合(SQL连接)可以通过映射/减少来实现。这个 RavenDB神话书中给出的示例,带有注释 博客是一个好的开始
- 交叉可以使用以下多种技术执行: 从去规范化到创建“映射”或“链接” 如所述的文档(以及下面的聚合器示例)。在RDMS中,这将使用简单的“内部联接”或“WHERE x In”来执行
- 减法(相对补码)是我陷入困境的地方。在RDMS中,此操作只是一个“WHERE x NOT In”或一个“LEFT JOIN”,其中连接集为NULL
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个没有任何标签的项目”
因此,我的问题是:
- 你能给我指一些关于这件事的阅读材料吗李>
- 你能分享一些关于如何完成任务的想法吗 高效地
注意:我知道使用文档数据库会失去查询灵活性,但肯定有办法做到这一点?从RDBMS到文档数据库的转换并不完全顺利,可能需要对模型进行一些重构以使其达到最佳状态。这是由于这些技术的性质不同 Re。RavenDB中基于集合的操作,请参见: 疯狂, 您想要的东西在非关系数据库中确实不容易实现。 这主要是因为他们不会集中思考,并且与分布式计算有着紧密的联系。 例如,如果没有访问所有数据的权限,就无法真正实现高效的集合,这几乎意味着任何基于集合的操作都必须访问所有这些数据。 由于nosqldbs通常用于分布式场景,因此它们不能真正支持这一点。
具体来说,RavenDB允许在指定的集合上进行某些操作,但它主要基于独立文档的假设,这些文档与其他文档没有很强的关系,或者需要以相同的方式一起操作的文档。不幸的是,您的回答并不能完全回答这个问题。您提供的链接指的是非常简单的操作。我要寻找的是一种使用文档存储处理两个集合之间的“不在”操作(减法或相对补码)的技术。在这个阶段,唯一明显的解决方案似乎是通过定制应用程序代码,这不会是完全有效的。鉴于ravenDB中的大量变化,这个评论有多正确?