집 >데이터 베이스 >MySQL 튜토리얼 >재시도 없이 PostgreSQL에서 간격 없는 ID 시퀀스를 생성하는 방법은 무엇입니까?
재시도 논리 없이 PostgreSQL에서 간격 없는 ID 시퀀스 생성
송장 번호 매기기와 같이 간격 없는 고유 식별자가 필수적인 시나리오에서 , 간격 없이 이러한 시퀀스를 생성하는 것은 일반적인 과제입니다. 마지막으로 사용된 번호를 쿼리하고 이를 증가시키는 기존 접근 방식에서는 직렬화 격리 수준에서 문제가 발생하여 작업이 복잡해질 수 있습니다.
간격 생성 문제 이해
간격 숫자 순서는 데이터베이스 메커니즘으로 인해 발생합니다. 번호를 생성한 트랜잭션이 롤백되거나 오류가 발생하면 데이터베이스는 실제로 할당하지는 않지만 사용된 번호를 "사용됨"으로 표시합니다. 이로 인해 향후 생성되는 시퀀스에 잠재적인 공백이 발생합니다.
대체 공백 제거 기술
전용 번호 생성기 테이블:
시퀀스를 사용하는 대신 생성된 번호를 저장하고 관리하기 위한 전용 테이블을 유지합니다. 이 테이블은 적절한 잠금 메커니즘을 사용하여 동시 액세스를 처리하도록 설계할 수 있습니다.
숫자 생성 논리 캡슐화:
숫자 생성 논리를 캡슐화하고 직렬화하는 함수 또는 프로시저를 만듭니다. 잠금 메커니즘을 사용하여 액세스합니다. 이 접근 방식을 사용하면 모든 프로세스가 동일한 방법을 사용하고 충돌을 방지할 수 있습니다.
지연된 번호 생성:
트랜잭션에서 가능한 마지막 순간까지 번호 생성을 연기합니다. 이렇게 하면 롤백이나 오류로 인해 발생할 수 있는 격차가 최소화됩니다.
오류 처리:
다음과 같은 경우 생성된 번호를 풀에 "반환"하는 메커니즘을 구현합니다. 거래가 실패합니다. 이렇게 하면 숫자가 손실되지 않고 향후 시도에 사용될 수 있습니다.
원본 기사 참조:
자세한 내용은 "The"라는 제목의 종합 기사를 참조하세요. 데이터베이스를 사용하여 송장 번호를 연속적으로 유지하는 데 어려움이 있음" - Simon Fell: https://blog.codinghorror.com/the-difficulty-of-keeping-invoice-numbers-continuous-using-databases/
위 내용은 재시도 없이 PostgreSQL에서 간격 없는 ID 시퀀스를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!