Как структурировать дизайн базы данных для простого фотоальбома в couchdb? - PullRequest
3 голосов
/ 09 февраля 2011

Я хочу попробовать CouchDb, разработав небольшое приложение PhotoAlbum, в котором разные пользователи могут иметь много альбомов с большим количеством фотографий.Я делаю это правильно, если я создаю документ для каждого пользователя, который содержит массив альбомов, который содержит фотографии с вложениями?

{ 
    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" }

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

1999 правильно. Еще два второстепенных пункта:

  1. Помните, Apache CouchDB поддерживает атомарные транзакции - но только внутри документа. Вы можете изменить что-либо в документе с помощью одной атомарной операции.
  2. В платформе безопасности CouchDB ваша политика безопасности применяется по одному документу за раз, изолированно. Функция validate_doc_update не может видеть иностранные документы, когда она должна решить, что может делать пользователь. (Если вы не используете CouchDB для учетных записей и аутентификации, это не имеет значения.)
1 голос
/ 09 февраля 2011

С моей точки зрения, лучше разделить ваши данные на небольшие части.Но это только твой выбор.Я выбрал разделение, потому что столкнулся с лимитом memcached-server в 1 Мбайт на «экземпляр ключа-значения» (мы кэшируем документы CouchDB в memcached), поэтому мы не могли хранить наши данные в одном документе.Конечно, есть преимущества хранения ваших данных в одном документе.Я надеюсь, что другие люди расскажут о своем опыте, и вы выберете то, что вам больше подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...