2012-05-17 4 views
0

DynamoDB에서 쿼리 모델을 작성하는 방법에 어려움을 겪고 있습니다. 예를 들어 트위터를 사용하겠습니다. 제가 답변하고자하는 질문은 제가 따르는 사람들이 가장 최근의 20 개의 트윗을 보여줍니다.DynamoDB 여러 개의 해시 키에 대한 쿼리

내가 3 개 디나모 테이블이 있습니다

Users 
UserUID - Hash 
Handle 

Following 
UserUID - Hash 
FollowingUserUID - Range 

Tweets 
UserUID - Hash 
Tweet 
PostedDate - Range 

1234 20 개 가장 최근의 트윗을 보여 다음 UserUID 사람들을 위해 내가 질문에 대답하기 위해 수행해야 할 단계는 무엇인가.

단계는 내가 가진 :

1 단계 : 모든 사람들의 목록을 가져옵니다 1234은 다음과 UserUID.

2 단계 (내가 잃어버린 곳) : 그 ID의 목록에 대해 가장 최근의 20 개의 트윗을 보여주세요.

ID 목록에서 해시 키를 필터링하고 한도 및 범위 필터를 사용해야하므로 두 번째 쿼리를 구성하는 방법을 잘 모르겠습니다. 그 때문에 BatchGetItemRequest를 사용할 수 있다고 생각하지 않습니다. 이것이 가능한가요 아니면 제가 필요로하는 것보다 더 열심히 문제를 만들고 있습니까?

답변

3

2 단계 (내가 잃어버린 곳) : 그 ID의 목록에 대해 가장 최근의 20 개의 트윗을 보여주세요.

은 우리가 효율적으로 DynamoDB의 이러한 복잡한 매핑을 수행하는 "PostedDate BY ORDER"

유일하게 가능한 솔루션을 데이터 중복 저장하는 것입니다 조회 수 없기 때문에이 질문에 직접 대답이 없다. 겨드랑이의 경우 각 친구의 최근 20 개의 트윗을 가져 와서 이미 제안한 것처럼 웹 앱에서 정렬 할 수 있습니다. 그러나 누군가가 1000 명의 사용자를 추종하면 한 명의 사용자 요청에 대해 1000 회의 쿼리가 발생합니다.

  1. 가를 생성하여 트윗 테이블에 트윗 쓰기 : 데이터베이스에 새 트윗을 추가

    Users 
    UserUID - Hash 
    Handle 
    
    Following 
    UserUID - Hash 
    FollowingUserUID 
    
    FollowedBy 
    UserUID - Hash 
    FollowedByUserUID 
    
    RecentTweetsOfFriends 
    UserID - Hash 
    PostedDate - Range 
    TweetUUID 
    
    RecentTweetsOfUser 
    UserID - Hash 
    PostedDate - Range 
    TweetUUID 
    
    Tweets 
    TweetUUID - Hash 
    Tweet 
    UserID 
    PostedDate 
    

    절차 :

    는 그래서 생각 해낸 가능한 솔루션은 다음과 같은 것 그것을위한 새로운 UUID

  2. "FollowedBy"테이블에서 새로운 트윗을 제출하는 사용자를 따르는 모든 사용자를 얻으십시오
  3. 새 트윗을 t 그는 테이블 "RecentTweetsOfUser"와 "RecentTweetsOfFriends"이 솔루션을 사용하면 "다음"테이블이 필요하지 않습니다하지만이 두 방향에 대한 저장할 아마 깔끔한 때문에 내가 거기에 왼쪽 들어

합니다.

관련 문제