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
'source' 카테고리의 다른 글
하나의 SQL 트리거에서 여러 이벤트를 사용하는 방법 (0) | 2022.10.01 |
---|---|
PHP에서 문자열을 정수로 변환하는 가장 빠른 방법 (0) | 2022.10.01 |
MySQL 대원 거리(Haversine 공식) (0) | 2022.10.01 |
프로그램에서 JVM 버전을 찾는 방법 (0) | 2022.10.01 |
도커 파일에 mysql을 설치하시겠습니까? (0) | 2022.10.01 |