gpt4 book ai didi

nosql - 使用文档数据库 (noSQL) 的基于集合的基本操作

转载 作者:行者123 更新时间:2023-12-01 11:16:08 25 4
gpt4 key购买 nike

与大多数人一样,我来自 RDMS 世界,试图了解 noSQL 数据库,特别是文档存储(因为我发现它们最有趣)。

我正在尝试了解如何使用文档数据库执行一些基于集合的操作(我正在使用 RavenDB)。

所以根据我的理解:

  • Union(如在 SQL UNION 中)是非常直接的追加。此外不同集合之间的联合(SQL JOIN)可以实现map/reduce。这RavenDB 神话书中给出的示例,其中 Comment counts on博客条目是一个好的开始。
  • Intersection 可以使用来自反规范化一直到创建“映射”或“链接”文档描述 here (以及下面的聚合器示例)。在 RDMS 中,这将使用简单的“INNER JOIN”或“WHERE x IN”执行
  • 减法(相对补语)是我卡住的地方。在 RDMS 中,此操作只是一个“WHERE x NOT IN”或一个“LEFT JOIN”,其中连接集为 NULL。

举个真实世界的例子,假设我们有一个 RSS 聚合器(例如 Google 阅读器),它有数百万甚至数十亿个 RSS 条目,有成千上万的用户,每个用户都标记收藏夹,等等。

在这个例子中我们关注入(inject)口、用户和标签;其中标签充当用户和条目之间的链接。

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 个没有任何标签的项目”。

所以我的问题是:

  • 你能给我指一些关于这个问题的阅读 Material 吗?
  • 你能分享一些关于如何完成任务的想法吗高效

注意:我知道您会失去文档数据库的查询灵 active ,但肯定有办法做到这一点?

最佳答案

疯狂的,在非关系数据库中,你想要的东西真的不能轻易完成。主要是因为他们不按套路思考并且与分布式计算有很强的联系。例如,如果不访问所有数据,您就无法真正执行有效的集合,这几乎意味着任何基于集合的操作都将需要访问所有这些数据。由于 NoSQL 数据库通常用于分布式场景,因此它们不能真正支持它。具体来说,RavenDB 允许对指定集合进行某些操作,但它建立在独立文档的假设之上,这些文档与其他文档或需要以相同方式一起操作的文档没有很强的关系。

关于nosql - 使用文档数据库 (noSQL) 的基于集合的基本操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com