source

MariaDB 및 Galera Cluster를 사용하여 ORACLE과 같이 시퀀스 번호를 생성하는 방법

factcode 2022. 9. 17. 09:49
반응형

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

반응형