gpt4 book ai didi

nosql - 与 NoSQL 数据库建立关系的有效方法

转载 作者:行者123 更新时间:2023-12-04 20:52:16 28 4
gpt4 key购买 nike

我目前正在尝试实现类似 Tumblr 的用户交互,例如转发、关注、关注者、评论、我当前关注的人的博客文章等。
还需要显示每篇博客文章的事件。

我坚持为数据库创建适当的架构。有几种方法可以实现这种功能(定义嵌入的数据结构,如博客文章和评论,为每个操作创建一个事件文档等),但我目前无法决定哪种方法在性能和可扩展性方面是最好的。

例如,让我们看看我关注的人的实现情况。这是示例用户文档。

User = { id: Integer, 
username: String,
following: Array of Users,
followers: Array of Users,
}

这似乎微不足道。我可以根据用户操作(关注/取消关注)管理关注字段,但是如果我当前关注的用户被删除了怎么办。更新所有跟随已删除用户的用户记录是否有效。

另一个问题是从我关注的人那里创建博客文章的 View 。
 Post = { id: Integer, 
author: User,
body: Text,
}

那么它是否有效查询最新帖子,例如;
 db.posts.find( { author: { $in : me.followers} } )

最佳答案

似乎(对我而言)您正在尝试使用单个数据存储(在这种情况下是面向文档的 NoSQL 数据库)来满足(至少)两个不同的要求。您似乎要尝试做的第一件事是将数据存储在面向文档的存储中。我将假设您有这样做的正当理由。

您似乎要尝试做的第二件事是在您存储的文档之间建立关系。您的示例显示了 FOLLOWS 关系。我建议将此视为与在面向文档的 NoSQL 数据库中存储数据不同的要求,并考虑将关系存储在面向图形的 NoSQL 数据库(如 Neo4j)中。这样,您的实体可以仅使用文档 ID 存储在文档存储中,关系存储在图形存储中。

我的经验是,要让单个 NoSQL 数据库满足大中型应用程序的所有功能和非功能需求是困难的(如果不是不可能的话)。例如,我正在开发的最新应用程序除了 RDBMS 之外还使用了 MongoDB、Redis 和 Neo4j。我花了很多时间尝试各种技术并最终确定了这种组合。我一直致力于使用 Spring 3 和 Spring Data 项目,到目前为止,我的体验非常好。

关于nosql - 与 NoSQL 数据库建立关系的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225102/

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