source

Maria에서 동시에 작업하는 프로세스를 처리하는 방법DB

gigabyte 2022. 10. 1. 21:22
반응형

Maria에서 동시에 작업하는 프로세스를 처리하는 방법DB

낮에 이벤트를 수집하여 1일 1~2회 처리하는 어플이 있습니다.그러나 하나의 데이터베이스와 두 개의 애플리케이션 인스턴스가 있기 때문에 모든 이벤트가 한 번 처리되도록 하는 방법을 찾고 있습니다.

이벤트에는 등록 ID가 포함되어 있으며, 이벤트가 발생한 모든 등록을 하루에 한두 번 처리하고 싶습니다.모든 이벤트를 현재 타임스탬프와 함께 저장해야 한다는 의미라고 생각합니다.그러나 중복된 인스턴스를 고려하여 어떻게 처리해야 할지 막막합니다.

한 가지 방법은 처리된 열을 추가하는 것입니다.타임스탬프, 인스턴스는SELECT그 기둥이 있는 열NULL그리고.UPDATE현시점까지.그러나 이 워크플로우가 두 인스턴스가 동일한 등록을 처리하는 것을 확실하게 막지는 못할 것입니다.둘 다 할 수 있어SELECT첫 번째가 되기 전에UPDATE일어난다.

또 하나의 방법은 등록의 모든 이벤트를 잠그고 다른 인스턴스가 접근할 수 없도록 트랜잭션을 시작하는 것입니다만, 이것이 트랜잭션의 목적이 아니라고 생각합니다.

이는 여러 인스턴스를 처리할 때 흔히 볼 수 있는 문제처럼 보이지만 해결책은 무엇입니까?

FOR UPDATE는 처리의 주요 컴포넌트일 수 있습니다.

BEGIN;
SELECT (the rows you might process) FOR UPDATE;
do the processing
UPDATE (the rows you decided to process);
COMMIT;

이 패턴은 경합을 지연으로 바꾸는 경향이 있습니다.즉, 선택한 행은 다음 시간까지 다른 프로세스에서 사용할 수 없습니다.COMMIT이 시점에서 다른 프로세스에서는 행이 처리된 것을 확인하고 건너뜁니다.

A를 허용해서는 안 됩니다.BEGIN...COMMIT몇 초 이상 실행할 수 있습니다.

나는 필요없다고 생각한다.TIMESTAMP.

언급URL : https://stackoverflow.com/questions/56732277/how-to-deal-with-concurrent-processes-working-in-mariadb

반응형