0

나는 파티션 키와 정렬 키를 디자인 할 때 많은 DynamoDB 문서를 읽었지만 근본적인 것이 빠져 있어야한다고 생각합니다.단일 파티션 키 값에 대해 DynamoDB 최대 파티션 크기가 10GB입니까?

잘못된 파티션 키 디자인을 사용하는 경우 단일 파티션 키 값의 데이터가 10GB를 초과하면 어떻게됩니까?

'파티션 행동을 이해'섹션 상태 :

는 "단일 파티션 데이터의 약 10 기가 바이트 저장할 수있는"

는 어떻게 하나의 파티션 키를 분할 할 수 있습니까? 또한 로컬 보조 인덱스와 한계에 대해 이야기

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions

워드 프로세서는 사용자가 점점 오류를 시작 후 데이터 10GB의 제한된다.

"항목 컬렉션의 최대 크기는 10GB입니다.이 제한은 로컬 보조 인덱스가없는 테이블에는 적용되지 않으며 하나 이상의 로컬 보조 인덱스가있는 테이블에만 영향을줍니다." 내가 이해할 수

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html#LSI.ItemCollections

. 10GB를 초과하는 경우 단일 파티션 키에 대한 데이터를 파티셔닝하는 데 또 다른 마법이 있습니다. 아니면 그 파티션을 계속 성장시키고 있습니까? 그리고 당신의 핵심 디자인에 대한 그 의미는 무엇입니까?

배경은 멀티 테넌트 환경에서 TenantId를 파티션 키로 사용하는 사례를 많이 보았습니다. 그러나 특정 TenantId가 10GB 이상의 데이터를 보유 할 수있는 경우에는 제한적으로 보입니다.

내가 누락 되었습니까?

답변

2

TL : DR - 범위 키 값을 파티션 함수에 포함하여 동일한 파티션 키 값을 가진 경우에도 항목을 분할 할 수 있습니다.


긴 버전 :

이것은 아주 좋은 질문이며, 그것은 문서 herehere에서 해결되었습니다. 설명서에 나와 있듯이 DynamoDB 테이블의 항목은 h ashing function을 사용하여 파티션 키 값 (해시 키)을 하나 이상의 파티션으로 분할하여 분할됩니다. 파티션 수는 원하는 최대 Q 적 처리량 W 키 공간에서 항목의 분 h를 기]으로 파생됩니다. 즉, 파티션 키가 항목을 파티션 키 공간 전체에 균일하게 분배하도록 파티션 키가 선택되면 파티션은 거의 동일한 수의 항목을 갖게됩니다. 각 파티션의이 항목 수는 테이블의 항목 수를 파티션 수로 나눈 값과 거의 같습니다.

설명서에는 각 파티션의 공간이 약 10GB로 제한되어 있다고 나와 있습니다. 또한 모든 파티션에 저장된 모든 항목의 크기가 10GB를 초과하면 DynamoDB는 자동으로 투명하게 이러한 파티션을 절반으로 분할하여 두 개의 새 파티션을 생성하는 백그라운드 프로세스를 시작합니다. 다시 한번 말하지만, 아이템이 균등하게 분배된다면, 새로운 서브 파티션이 원래 파티션의 아이템의 절반 정도를 차지할 것이기 때문에 매우 좋습니다.

분할 할 때 중요한 점은 분할 파티션의 처리량이 원래 파티션에서 사용 가능한 처리량의 절반에 불과하다는 것입니다.

지금까지는 행복한 사례를 다루었습니다.

매우 많은 수의 항목에 해당하는 파티션 키 값을 하나 또는 몇 개 가질 수 있습니다. 이는 일반적으로 테이블 스키마가 정렬 키를 사용하고 여러 항목이 동일한 파티션 키에 해시되는 경우에 발생할 수 있습니다. 이 경우 하나의 파티션 키가 함께 10GB 이상을 차지하는 항목을 담당 할 수 있습니다. 그리고 이것은 분할을 초래할 것입니다. 이 경우 DynamoDB는 여전히 두 개의 새 파티션을 만들지 만 항목을 저장할 하위 파티션을 결정할 때 파티션 키만 사용하는 대신 정렬 키도 사용합니다.

일반성을 잃지 않고 거기 파티션 키 문자 (A-Z)입니다 테이블이며, 숫자는 정렬 키로 사용되는 상상, 추론하는 일을 더 쉽게 만드는. A, B, C가 1 번 파티션에 저장 될 문자 있도록 테이블에 대해 9 개의 파티션이

이미징, 문자 D는, E는, F 등 파티션 2 것 아래 그림에서

, 파티션 경계는 h(A0), h(D0) 등으로 표시되어 예를 들어 첫 번째 파티션에 저장된 항목은 h(A0)h(D0) 사이의 값으로 파티션 키 해시 - 0은 의도적이며 다음에 편리하게 표시됩니다. DF 너무 좋은 찾고되지 않습니다 대부분의 파티션 키 값에 대한 표 1 개 3 항목 사이가 있지만, 두 개의 파티션 키 값이 있다는 것을

[ h(A0) ]--------[ h(D0) ]---------[ h(G0) ]-------[ h(J0) ]-------[ h(M0) ]- .. 
    | A B C |  E F | G  I | J K L | 
    | 1 1 1 |  1 1 | 1  1 | 1 1 1 | 
    | 2 2 2 |  2 2 |   2 |  2  | 
    | 3   3 |   3 |   3 |    | 
    ..    ..    ..    ..    .. 
    |   100 |   500 |    |    | 
    +-----------------+----------------+---------------+---------------+-- .. 

알 수 있습니다. D에는 100 개의 항목이 있고 F에는 500 개의 항목이 있습니다.

파티션 키 값이 F 인 항목이 계속 추가되면 결국 [h(D0)-h(G0)) 파티션이 분할됩니다. 가능 동일한 해시 키가 항목을 분할하려면 범위 키 값이 사용되어야 할 것이다, 그래서 우리는 다음과 같은 상황이 될 겁니다 :

..[ h(D0) ]------------/ [ h(F500) ]/----------[ h(G0) ]- .. 
     |  E  F  |   F   | 
     |  1  1  |   501  | 
     |  2  2  |   502  | 
     |    3  |   503  | 
     ..      ..     .. 
     |    500  |   1000  | 
.. ---+-----------------------+---------------------+--- .. 

[h(D0)-h(G0))가로 분할 된 원래 파티션 [h(D0)-h(F500))

[h(F500)-h(G0)) 나는이 항목은 일반적으로 자신의 파티션 키 값에 해시 함수를 적용하여 얻은 해시 값을 기준으로 파티션에 매핑되는 것을 시각화하는 데 도움이되지만 필요하다면, 값이 파티션을 포함 할 수 해시되고 희망 key + 정렬 키 값.