2017-05-24 1 views
6

dynamodb와 어떻게 집계됩니까? Mongodb와 couchbase는 맵 축소 지원을 제공합니다.Dynamodb을 사용하여 기본 집계를 수행하는 방법은 무엇입니까?

사용자가 기사를 게시 할 수있는 기술 블로그를 만들려고합니다. 기사에 태그를 지정할 수 있습니다.

user 
{ 
    id : 1235, 
    name : "John", 
    ... 
} 

article 
{ 
    id : 789, 
    title: "dynamodb use cases", 
    author : 12345 //userid 
    tags : ["dynamodb","aws","nosql","document database"] 
} 

현재 사용자 태그 및 해당 개수에 대해 표시하려는 사용자 인터페이스에서.

다음 집계를 달성하는 방법은 무엇입니까?

{ 
    userid : 12, 
    tag_stats:{ 
     "dynamodb" : 3, 
     "nosql" : 8 
    } 
} 

이 데이터는 나머지 API를 통해 제공되며 자주 호출됩니다. 이 정보는 앱 기본 페이지에 표시됩니다.

  • 모든 문서를 추출하고 응용 프로그램 수준에서 집계를 수행하는 것이 좋습니다. 하지만 내 용량이 소진 될 것 같습니다.
  • EMR, redshift, bigquery, aws lambda와 같은 도구를 사용할 수 있습니다. 그러나 나는 이것이 데이터웨어 하우징 목적을위한 것이라고 생각한다.

나는 동일한 것을 달성하는 다른 좋은 방법을 알고 싶다. 사람들은 비용 및 응답 시간을 고려하여 기본 데이터 저장소로 dynamodb를 선택한 것과 같이 동적 단순 쿼리를 어떻게 달성하고 있습니까?

답변

4

길었던 이야기 : Dynamo는 이것을 지원하지 않습니다. 이 유스 케이스에서는 빌드되지 않습니다. 대기 시간이 적은 빠른 데이터 액세스를위한 것입니다. 단순히 집계 기능을 지원하지 않습니다. Redshift 또는 EMR Hive

  • 수출 DynamoDB의 데이터 :

    당신은 세 가지 옵션이 있습니다. 그런 다음 부실 데이터에 대해 SQL 쿼리를 실행할 수 있습니다. 이 방법의 장점은 RCU를 한 번만 사용하지만 구식 데이터를 사용한다는 것입니다.

  • 하이브에 DynamoDB connector을 사용하고 DynamoDB에 직접 쿼리합니다. 다시 임의의 SQL 쿼리를 작성할 수 있지만이 경우 DynamoDB의 데이터에 직접 액세스합니다. 단점은 당신이하는 모든 쿼리에서 읽기 용량을 소비한다는 것입니다.

  • DynamoDB streams을 사용하여 별도의 테이블에 집계 된 데이터를 유지 관리하십시오. 예를 들어 테이블 UserId를 파티션 키로, 태그와 개수가 속성으로 포함 된 중첩 된 맵을 가질 수 있습니다. 원래 데이터의 모든 업데이트에서 DynamoDB 스트림은 호스트에서 람다 함수 또는 일부 코드를 실행하여 집계 테이블을 업데이트합니다. 가장 비용 효율적인 방법이지만 새 쿼리 각각에 대해 추가 코드를 구현해야합니다.

물론 응용 프로그램 수준에서 데이터를 추출하여 집계 할 수 있지만 그렇게하지 않는 것이 좋습니다. 작은 테이블이 아니라면 제한된 용량 (집계에 대해 RCU의 20 %를 사용하고 100 %가 아닌)을 사용하려는 일부 기능과 여러 작업자간에 작업을 배포하는 방법을 고려하여 제한에 대해 생각해야합니다 .

Redshift와 Hive는 이미이 작업을 수행하는 방법을 알고 있습니다. Redshift는 쿼리를 실행할 때 여러 작업자 노드를 사용하지만 Hive는 Map-Reduce를 기반으로합니다.또한 Redshift와 Hive는 미리 정의 된 RCU 처리량 비율을 사용할 수 있습니다.

관련 문제