【问题标题】:How to structure a database design for a simple photo album in couchdb?如何在 couchdb 中为简单的相册构建数据库设计?
【发布时间】:2011-06-24 02:39:59
【问题描述】:

我想通过开发一个小的 PhotoAlbum 应用程序来尝试 CouchDb,在该应用程序中,不同的用户可以拥有许多包含许多照片的相册。如果我为每个用户创建一个包含一系列相册、包含带附件的照片的文档,我这样做是否正确?

{ 
    user: "Dominik", 
    albums: [ 
        { name: "USA Trip", photos: 
            [ 
                { title: "Golden Gate Bridge", _attachments: [ the photo ] },
                { another photo } 
            ]
        },
        { ...} ] 
}

或者还有其他好方法吗?

还是将用户、相册和照片分别存储在不同的文档中更好?这将需要在 mysql 中的外键?

{ type: "user", name: "Dominik", albums: [ "a1", "a2", "a3" ] }
{ type: "album", _id: "a1", title: "USA Trip", photos: [ "p1", "p2" ... ] }
{ type: "photo", _id: "p1", _attachments: {...}, title: "Golden Gate Bridge" }

...

还是反过来?:

{ type: "user", _id: "u1", name: "Dominik" }
{ type: "album", _id: "a1", title: "USA Trip", user: "u1" }
{ type: "photo", _id: "p1", _attachments: {...}, title: "Golden Gate Bridge", album: "a1" }

【问题讨论】:

    标签: database-design nosql couchdb


    【解决方案1】:

    1999 年是对的。还有两个小问题:

    1. 请记住,Apache CouchDB 支持原子事务——但仅限于文档中。您可以通过单个原子操作更改文档中的任何内容。
    2. 在 CouchDB 安全框架中,您的安全策略一次单独应用一个文档。当validate_doc_update 函数必须决定用户可以做什么时,它不能看到外来文档。 (如果您不使用 CouchDB 进行帐户和身份验证,则无关紧要。)

    【讨论】:

      【解决方案2】:

      在我看来,最好将数据分成小部分。但这只是你的选择。我选择分割是因为我面临每个“键值实例”的 memcached-server 限制为 1Mb(我们将 CouchDB 文档缓存在 memcached 中),因此我们无法将数据存储在一个文档中。

      当然,将数据存储在一个文档中是有好处的。我希望其他人能讲述他们的经历,您会选择最适合自己的。

      【讨论】:

      • 我忘了告诉单独存储部分数据的另一个好处:如果您更改相册中的一张照片的标题,整个文档将更新(以及 ETag),这通常是不是很好。
      猜你喜欢
      • 2021-04-05
      • 2012-04-19
      • 2011-01-06
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多