5

Google Cloud Spanner recommends은 기본 키에 대해 단조롭게 증가하는 정수를 사용하지 않습니다. 이것은 핫스팟을 생성하는 것처럼 최상위 테이블에 대한 완벽한 의미를 갖습니다. 그러나 인터리브 드 테이블은 어떻습니까? 그들은 어쨌든 동일한 노드에 저장 될 것입니다. 그것들은 정렬 된 순서로 유지되기 때문에 UUID 나 다른 임의의 ID를 사용하는 것이 차선책으로 보입니다. 특히 정렬 된 순서로 검색 될 경우 특히 그렇습니다.Google Cloud Spanner에서 자동 증가

최대 ID를 읽고 새 행의 maxId + 1을 올바른 해결책으로 여기에 있습니까?

답변

3

인터리브 된 자식 테이블 행에는 부모 테이블의 키가 접두어로 붙어 있으므로 부모 키가 비순환적일 때 비 순차 키라고 생각할 수 있습니다. 이 상황에서는 일반적으로주의해야하므로이 전체 키 범위는 하나의 스팬 서버에서 제공됩니다. 이 상황에서 단일 Span 서버를 핫 스폿으로 지정하는 것이 염려되는 경우 테이블을 인터리브하지 않는 것이 가장 좋습니다.

동일한 효과가 있으므로 범위의 반대쪽에만 실제로 적용되는 키가 감소하거나 키가 감소하는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. 인터리브 된 테이블에서 증가하는 숫자를 사용하는 가장 좋은 방법은 무엇입니까? 간단합니다 : max = read ("SELECT MAX (SubId) FROM SubTable WHERE ParentId = ..."); 쓰기 ("(+"최대 +1 "+", ...) ")") ")") 값을 SubTable (SubId, ...) –

+1

일반적으로 필요한 경우 순차 ID에 대해 열과 함께 UUID를 사용하지 않는 것이 좋습니다. 거기에 숨어있는 위험 요소가 많이 있습니다. 예를 들어, 트랜잭션에서 트랜잭션을 수행했는지 확인하십시오. 가장 최근 (최대 값) 값이 삭제되면 어떻게됩니까? 재사용 할 수 있습니까? 다른 테이블을 사용하여 카운터를 저장하고 적절한 트랜잭션이 있는지 확인하는 것이 좋습니다. –