您将如何使用文档存储(例如CouchDB,Redis,MongoDB,Riak等)构建博客

时间:2010-11-17 08:59:50

标签: mongodb redis couchdb riak nosql

我有点不好意思承认这一点,但我无法概念化如何在非关系世界中构建数据。特别是考虑到大多数文档/ KV商店的功能略有不同。

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

我认为有很多问题很重要:

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

3 个答案:

答案 0 :(得分:3)

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

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

  1. 您将在自己的文档中存储哪些数据,并将其他文档与之相关联。如果该文档将被许多其他文档使用,那么在其自己的文档中对其进行建模是有意义的。您还必须考虑查询文档。如果您要经常查询它,将它存储在自己的文档中可能是个好主意,因为您会发现很难查询嵌入式文档。
    • 例如,假设您有多个Blog实例,博客和文章应该在其自己的文档中,尽管文章可能嵌入在Blog文档中。
    • 另一个例子是用户和角色。为这些提供单独的文档是有意义的。在我的情况下,我经常查询用户,如果它被分隔为自己的文档会更容易。
  2. 您希望在另一个文档中存储(嵌入)哪些数据。如果该文档仅属于一个文档,那么将它存储在另一个文档中可能是一个很好的选择。

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

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

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

  3. 什么数据应该是普通数组。例如:
    • 将标记存储为数组是有意义的。 { article: { tags: ['news','bar'] } }
    • 或者,如果您要存储多个ID,即具有多个角色的用户{ user: { role_ids: [1,2,3]}}
  4. 这是关于使用文档存储进行建模的简要概述。祝你好运。

答案 1 :(得分:1)

答案 2 :(得分:0)

几周前,Ryan Bates做了一个关于mongoid的截屏视频,他使用博客应用程序的例子:http://railscasts.com/episodes/238-mongoid这可能是你开始的好地方。