MariaDB 및 Galera Cluster를 사용하여 ORACLE과 같이 시퀀스 번호를 생성하는 방법
Galera Cluster를 사용하는 MariaDB에 시퀀스 번호(프라이머리 키 또는 auto_increment가 아님)가 필요합니다.
시퀀스 이름, 현재 값, 저장 프로시저를 사용하여 다음 값을 반환할 수 있는 테이블을 생각하고 있습니다.
Galera 클러스터가 이 기능을 지원할지는 잘 모르겠습니다(http://www.sqlines.com/oracle-to-mysql/sequence):
CREATE FUNCTION NextVal (vname VARCHAR(30))
RETURNS INT
BEGIN
UPDATE _sequences
SET next = (@next := next) + 1
WHERE name = vname;
RETURN @next;
END
제 시험에서는 효과가 있지만 장담할 수 있을지 모르겠어요.이 길을 계속 가야 할까요, 아니면 다른 방법으로 처리해야 할까요?
멀티 프라이머리(M-M, Galera, InnoDB Cluster 등)에서 연속되는 번호를 취득하는 모든 기술은 다음 시퀀스 번호를 제공하기 전에 쓰기 가능한 모든 노드의 응답을 동기적으로 대기해야 합니다.이 작업에는 밀리초가 걸립니다.또는 노드가 지리적으로 멀리 떨어져 있는 경우에는 더 오래 걸릴 수 있습니다.
당신은 그런 지연을 감당할 수 있나요?예를 들어 초당 100개 이상의 새로운 번호가 필요하지 않은 경우 몇 가지 애드혹메커니즘이 적절하게 동작합니다.즉, 저장된 기능은 이러한 용도로 사용할 수 있는 것으로 보입니다.
다음 날짜에도 오류가 없는지 확인하십시오.COMMIT
교착 상태가 되면 트랜잭션을 재생합니다.
트랜잭션 외부에서 "다음" 번호를 얻는 것이 좋습니다. 그렇지 않으면 나머지 트랜잭션에 소요되는 시간이 다른 모든 노드를 정지시킵니다.
그러나 자체 트랜잭션에서 번호를 가져오면 다음 번호가 도착한 후 일부 노드에서 해당 시퀀스 번호를 사용하는 행을 사용할 수 있는 경우가 있습니다.즉, 124가 이미 테이블에 있는데도 123번 항목이 매우 잠깐 누락된 것 같습니다.이것이 받아들여지지 않는 경우는, 보다 복잡한(더 느린) 솔루션이 필요합니다.
(두 가지 케이스 중 하나를 사용하는 애플리케이션을 본 적이 있습니다.어떤 것이 당신의 신청에 적용되는지 모르겠습니다.)
언급URL : https://stackoverflow.com/questions/47560514/how-can-i-create-a-sequence-number-like-in-oracle-using-mariadb-and-galera-clu
'source' 카테고리의 다른 글
자바에서 cURL을 사용하는 방법 (0) | 2022.09.18 |
---|---|
리액트 라우터의 링크 컴포넌트 밑줄을 없애는 방법 (0) | 2022.09.18 |
MYSQL의 "Enum 필드"로 주문 (0) | 2022.09.17 |
최고의 자바 난독화기? (0) | 2022.09.17 |
Python에서 터미널 지우기 (0) | 2022.09.17 |