1

S3에서 Redshift 클러스터로 많은 데이터를로드하는 멋진 응용 프로그램을 Python으로 작성했습니다. 필요한 경우 여러 테이블에 대해 DDL을 한꺼번에 발행 한 다음 몇 가지 COPY 문을 사용하여 해당 테이블에 데이터를로드합니다.어떻게 다중 연결 데이터를 원자 적으로로드합니까?

이 전체 프로세스를 최대한 빨리 실행하기 위해 필자는 역 이식 된 futures modulepsycopg2's ThreadedConnectionPool을 사용하여 여러 연결에서 DDL 및로드 작업을 병렬로 배포했습니다.

잘 작동하는 것 같습니다. 이제 저는이 모든 과정을 원자 적으로 만들고 싶습니다.

작업은 매우 간단합니다. 주어진 테이블은 변경되고 정확히 한 번로드되기 때문에 교착 상태가 발생할 가능성은 없습니다. 또한로드가 지속되는 동안 리소스를 잠글 수도 있습니다. 마지막으로, 내가 관심있는 모든 활동에 대해 supports transactions의 Redshift가 있습니다. 따라서 이론적으로 내가하고 싶은 것은 가능해야합니다.

는 지금 내가 보는 옵션은 다음과 같습니다

  1. 은 어떻게 든 ThreadedConnectionPool.commitall()ThreadedConnectionPool.rollbackall()의 빈민가 등가물을 구현합니다. (이 방법은 존재하지 않습니다. 불행히도.)
  2. ZODB의 transaction machinery을보세요. 내 목적이 과도하게 보입니다.
  3. 부하를 부분적으로 롤백하는 자체적 인 방법을 굴립니다.
  4. 멀티 스레드 접근 방식을 포기하고 단일 연결에서 모든 작업을 수행하십시오.

놓친 적이있는 더 좋은 방법이 있습니까? 이 옵션들 중 어느 것도 훌륭하게 보이지 않습니다.

답변