mongodb - 您将如何使用文档存储(例如 CouchDB、Redis、MongoDB、Riak

承认这一点我有点尴尬,但我在概念化如何在非关系世界中构建数据时遇到了麻烦。尤其是考虑到大多数文档/KV 存储的功能略有不同。

我想从一个具体的例子中学习,但我找不到任何人讨论你将如何构建,例如,使用 CouchDB/Redis/MongoDB/Riak/etc 的博客。

我认为有几个问题很重要:

  1. 哪些数据应该去规范化(例如标签可能与文档一起存在,但用户呢)
  2. 如何链接文档?
  3. 创建聚合 View 的最佳方法是什么,尤其是需要排序的 View (例如博客索引)

最佳答案

首先,我认为您希望从列表中删除 redis,因为它是键值存储而不是文档存储。 Riak 也是一个键值存储,但你可以是一个文档存储库,如 Ripple .

简而言之,使用文档存储对应用程序建模就是要弄清楚:

  1. 您会将哪些数据存储在其自己的文档中并让另一个文档与之相关。如果该文档将被许多其他文档使用,那么在其自己的文档中对其进行建模是有意义的。您还必须考虑查询文档。如果您要经常查询它,最好将其存储在自己的文档中,因为您会发现很难通过嵌入式文档进行查询。
    • 例如,假设您有多个 Blog 实例,一个 Blog 和 Article 应该在其自己的文档中,即使 Article 可能嵌入在 Blog 文档中。
    • 另一个例子是用户和角色。为这些单独的文档是有意义的。就我而言,我经常查询用户,如果将其作为自己的文档分开会更容易。
  2. 您希望在另一个文档中存储(嵌入)哪些数据。如果该文档仅属于一个文档,那么将其存储在另一个文档中“可能”是一个不错的选择。

    • 有时将评论嵌入到另一个文档中会更有意义

    { article : { comments : [{ content: 'yada yada', timestamp: '20/11/2010' }] } }

    您需要考虑的另一个警告是嵌入文档的大小有多大,因为在 mongodb 中,嵌入文档的最大大小为 5MB。

  3. 什么数据应该是一个普通的数组。例如:
    • 将标签存储为数组是有意义的。 { 文章:{ 标签:['news','bar'] } }
    • 或者如果你想存储多个 id,即具有多个角色的用户 { user: { role_ids: [1,2,3]}}

这是关于使用文档存储进行建模的简要概述。祝你好运。

关于mongodb - 您将如何使用文档存储(例如 CouchDB、Redis、MongoDB、Riak 等)构建博客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202867/

相关文章:

mongodb - 命令以非零退出代码 : Error executing in Docker Co

node.js - MongoDB 与 Docker "failed to connect to s

java - Spring - mongodb - 聚合 - 需要 'cursor' 选项

mongodb - 从 mongo db $pull 中删除嵌入文档不起作用

mongodb - 如何使用 map/reduce 处理 10000 多个唯一键以在 MongoDB

python - Python中的跟踪系统和实时统计分析

c# - 如何将 MongoDB 驱动程序与 C# ASP.NET Core API 框架一起使用?

java - Spring Data Mongodb 的性能问题

mongodb安装 - 要求?

javascript - 查找和更新嵌套级别