クイズ: バックフィルと二重計上
한국어 원문으로 표시합니다.
백필을 정기 실행과 같은 코드로 돌려야 하는 가장 큰 이유는?
- 백필 전용 코드는 실행 시간이 길어져 정기 실행을 밀어내기 때문이다
- 두 경로가 서서히 갈라져 결과가 다를 때 원인을 설명할 수 없게 되기 때문이다
- 백필 전용 코드는 상태 저장소에 접근할 권한을 따로 받아야 하기 때문이다
- 스케줄러가 같은 이름의 작업만 과거 구간에 실행할 수 있기 때문이다
파티션 단위 치환이 되면 얻어지는 성질로 가장 정확한 것은?
- 구간을 나눠 돌리든 통째로 돌리든 같은 답이 나오고 중간부터 다시 시작할 수 있다
- 같은 행을 두 번 넣어도 기본 키가 막아 주므로 중복이 생기지 않는다
- 구간 전체가 한 트랜잭션이 되어 실패하면 전부 되돌아간다
- 백필이 도는 동안 정기 실행이 같은 파티션을 건드려도 안전해진다
파티션 표는 멱등한데 누적 집계만 틀어졌다. 가장 그럴듯한 원인은?
- 백필이 파티션 표를 지우고 다시 넣는 동안 누적 표가 잠겨 있었다
- 누적 표의 기본 키가 없어 같은 지표가 여러 줄로 들어갔다
- 누적을 원본에서 다시 세지 않고 실행마다 구간 합계를 더해 왔다
- 백필이 정기 실행과 다른 시간대를 써서 날짜 경계가 하루 밀렸다
백필이 도는 동안 정기 실행이 같은 파티션에 닿았다. 이 실습이 권하는 처리는?
- 정기 실행이 잠금을 기다렸다가 백필이 끝나면 이어서 돌린다
- 정기 실행이 나중에 돌았으므로 덮어쓰게 두고 로그에만 남긴다
- 두 실행 중 금액이 큰 쪽의 결과를 채택하고 나머지를 버린다
- 그 파티션을 건드리지 않고 건너뛴 뒤 누가 잡고 있는지 함께 보고한다
이미 고객에게 보고서로 나간 구간에 늦게 온 전표가 도착했다. 올바른 처리는?
- 그 구간을 봉인해 두고 새로 센 값을 정정 기록으로 따로 남긴다
- 그 구간을 다시 돌려 파티션 표를 새 값으로 덮어쓴다
- 늦게 온 전표를 다음 구간에 넣어 합계만 맞춘다
- 보고서가 이미 나갔으므로 그 전표는 버리고 기록하지 않는다
백필 실행기가 구간 전체를 한 트랜잭션으로 커밋할 때의 문제는?
- 트랜잭션이 길어 다른 연결이 읽기조차 못 하게 된다
- 구간이 길수록 메모리에 올릴 파티션 수가 늘어 반드시 실패한다
- 중간에 실패하면 어디까지 됐는지 상태 저장소에 남지 않아 처음부터 다시 해야 한다
- 커밋 한 번이 여러 번보다 느려 정기 실행 주기를 넘긴다