1

AWS Redshift를 사용하여 분석 쿼리를 수행하고 있습니다. 쿼리는 계산을 수행하고 키 값을 업데이트합니다. 이 결과는 비동기 클라이언트가 소비 할 수 있도록 대기열 시스템으로 내보내집니다. 그러나 대기열 처리 시스템이 순서를 보장하지는 못하므로 순서를 결정하는 메커니즘이 필요합니다. "update_version"열과 같은 것이 필요합니다.이 열은 각 업데이트 작업에서 증가합니다. 이것은 optimistic locking과 유사합니다.레드 쉬프트에서 행 레벨 버전 관리를 수행하는 방법은 무엇입니까?

어떻게 적색 변이로 이것을 할 수 있습니까?

타임 스탬프를 사용하는 것이 하나의 방법이지만 클러스터의 개별 노드에서 타임 스탬프를 가져오고 clock skew이 발생하기 쉽기 때문에 신뢰할 수 없습니다.

전 세계적으로 주문할 필요가 없습니다.

참고 :이 질문의 범위 밖에서 다른 문제가 있으므로 주문 대기열을 사용하지 않는 것이 좋습니다.

+0

두 프로세스가 동시에 키 값을 업데이트하는 경우 왜 다른 프로세스보다 키 값이 정확합니까? 즉, 대기열 작업자가 가장 최근에 처리 된 메시지보다 오래된 새 메시지를 버린 경우, 시계의 왜곡은 어떤 차이가 있습니까? – systemjack

+1

또한 주어진 데이터 포인트의 값이 여러 노드에 분산 될 수 있지만 업데이트 쿼리를 실행하도록 선택된 작업자 노드의 시계 만 계산됩니다. 주어진 갱신에 대한 다양한 노드 저장소의 모든 시간 소인 값은 동일합니다. – systemjack

답변

1

당신은 다음 중 하나를 수행 할 수 다음 UPDATE은 테이블에 더 파괴적이다 INSERT INTO my_table SELECT *, update_version = N FROM my_table;

  • 실행 UPDATE my _table SET update_version = update_version+1;
  • 실행이 (기존의 데이터 범위가됩니다 점점 ​​분류되지 않은) 그러나보다 쉽게 질문. INSERT은 덜 파괴적입니다 (새 데이터는 정렬되지 않은 영역에 추가되며 기존 데이터는 영향을받지 않습니다). 그러나 현재 값을 찾아야 만 쿼리 할 수 ​​있습니다.

    당신은 UPDATE 전략을 사용하고 싶지만 당신이 역사에 대해 당신은 당신이 업데이트를 수행 전에 현재 행 값 쓰기 my_table_history 테이블을 고려해야한다 걱정합니다.

관련 문제