2011-02-09 3 views
3

다른 사용자가 많은 사진이 포함 된 많은 앨범을 가질 수있는 작은 PhotoAlbum 응용 프로그램을 개발하여 CouchDb를 사용해보고 싶습니다. 첨부 파일이있는 사진이 포함 된 앨범 배열을 포함하는 각 사용자에 대한 문서를 만들면 어떻게됩니까?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" } 

답변

1

. 그러나 이것은 단지 당신의 선택입니다. "key-value-instance"당 membached-server 한도 (memcached의 CouchDB 문서를 캐시 함) 당 1Mb의 한계에 직면했기 때문에 나누기를 선택했기 때문에 한 문서에 데이터를 저장할 수 없었습니다.

물론 하나의 문서에 데이터를 저장할 때 장점이 있습니다. 다른 사람들이 자신의 경험에 대해 이야기하고 자신에게 가장 적합한 것을 고를 수 있기를 바랍니다.

+1

데이터의 일부분을 별도로 저장하는 것을 잊어 버렸습니다 : 앨범에서 사진의 제목 중 하나를 변경하면 , 전체 문서가 업데이트 될 것이고 (그리고 ETag도), 그다지 좋지 않을 수 있습니다. –

1

1999입니다. 두 더 작은 점 :

  1. 기억 아파치 CouchDB를 원자 거래 — 만 문서 내를 지원합니다. 단일 원자 조작으로 문서의 내용을 변경할 수 있습니다.
  2. CouchDB 보안 프레임 워크에서 보안 정책은 한 번에 하나의 문서에만 적용됩니다. validate_doc_update 기능은 사용자가 수행 할 수있는 작업을 결정할 때 외국 문서를 볼 수 없습니다. (계정과 인증에 CouchDB를 사용하지 않는다면 이것은 의미가 없습니다.)
+0

유효성 검사는 좋은 지적이며, 이것을 사용해야합니다. thx –

관련 문제