2012-10-05 3 views
8

저는 DynamoDB를 처음 접했고 커다란 혼란을 겪었습니다 : 어떻게하면 테이블이 생겼을까요? (그 아직 읽지 않는 사람들을 위해 권장) http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html아마존 dynamodb에서 테이블 디자인하기

을 그리고 지금 나는 DynamoDB의가있을 것이다 사용하기 시작 모두를 생각하는 몇 가지 딜레마가 있습니다

여기 게시물을 읽었습니다.

첫째, 내 테이블 : 학생, 팀 프로젝트

학생 : ID, 연령 ...

TEAMS : ID, 학생 1-ID , 학생 2-ID, 현재 프로젝트, 이전 프로젝트, 최종 업데이트 된 날짜

개 프로젝트 : ID, 팀-ID, 질문의 목록, 목록 student1answers, 목록 student2answers

일부 의견 :

  1. 당신은 내가 범위 키를 사용하지 않는 볼 수 있습니다. 필요합니까?.
  2. 각 대답은 (질문 수, 텍스트, 삽입 한 날짜 수)의 json입니다.
  3. 모든 학생이 여러 팀으로 구성 될 수 있습니다.

내 딜레마 :

  1. 나는 특정 날짜 이후에 업데이트 된 특정 학생의 모든 팀을 싶어.

현재 2 개의 스캔 작업을 사용하고 있습니다. 하나는 student1을 검색하고 두 번째는 student2를 검색합니다.

 **Is there a better way ?** 

나는 새 테이블 추가하는 방법에 대한 생각 : 그래서 특정 학생들을 위해 팀을 조회 한 후 마지막으로 모든 팀 하지만 무엇을 batch_get_item 수있는 학생 ID, 팀 ID : 사용자 전투를 - 갱신? 어떻게 batch_get_item 내부에서 쿼리 할 수 ​​있습니까?

  1. 프로젝트가 끝나면 더 이상 사용하지 않습니다. 이전 항목으로 무엇을 할 것인가? 삭제 하시겠습니까? 그들을 다른 테이블로 옮기시겠습니까?

  2. 프로젝트 테이블에서 업데이트 할 수있는 특성은 응답 특성 인 입니다. 따라서 성능을 위해 다른 테이블로 이동하는 것이 좋습니다.

업데이트가 실제로 두 번 수행되어야합니까?(때 답을 보내 student1 때 답변을 보내 student2 - 다음 프로젝트는 옛)

을 내가 답변에 대한 새 테이블을 만들 경우 내가 JSON 형식으로 저장할 필요가 없습니다 *

어떻게 당신에게 것 테이블 디자인? 저에게 알려주세요.

답변

2
세부 사항의 많은

좋은 질문 나는 단지 하나의 조언이 있다면

:), 그것은 다음과 같습니다되는 NoSQL과 함께, 그것은도 OK하지만 정상뿐만 아니라,

염두에 두어야 데이터를 비정형 화하는 것이 좋습니다.

이것은 당신이 "딜레마"에 대해 말했듯이, 당신의 제안은 꽤 좋았습니다. 날짜는 range_key으로 비정규 화해야합니다.

  • hash_key : 한 가지 방법은 다음과 같이 테이블을 추가 할 수
  • range_key 학생 : 날짜
  • team : 테이블을 유지하는 것처럼

하지만 여전히, 이것은 완벽하지 team_id 성장하고있다. 각각은 새 객체를 삽입하여 업데이트합니다. 사실, 키를 편집 할 수 없습니다. 당신은 당신의 자신의 청소 코드를해야 할 것입니다.

DynamoDB에서 "오래된"항목 (스캔 제외)으로 인한 성능 저하를 걱정할 필요가 없습니다. 이것이 DynamoDB의 가장 큰 강점입니다. 그럼에도 불구하고 이것은 항상 데이터를 깨끗하게 유지하지만 일관성을 유지하는 좋은 방법입니다. 만료 된 프로젝트를 이동하려면 모두으로 이동하십시오. 그렇지 않으면 데이터가 어디에 있는지 알 수 없게됩니다.

마지막 제안 : 개체를 설명하는 데 "ids"가 가장 좋습니까? 대부분의 경우 이름, 날짜 또는 고유 속성이 더 나은 키를 만듭니다.

관련 문제