낙관적 병행 수행 제어
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
낙관적 병행 수행 제어(OCC)는 데이터베이스 트랜잭션의 동시성 제어 기법으로, 트랜잭션 시작 시 타임스탬프를 기록하고, 데이터 수정 후 유효성 검사를 통해 충돌 여부를 확인한다. 웹 환경에서는 HTTP의 ETag를 활용하여 OCC를 구현하며, 데이터베이스 관리 시스템, 프레임워크, 애플리케이션 등 다양한 시스템에서 사용된다. 미디어위키, 버그질라, 루비 온 레일스, GT.M, 마이크로소프트 엔티티 프레임워크, 미머 SQL, 구글 앱 엔진, 아파치 솔라, 엘라스틱서치, CouchDB, MonetDB, 레디스, 파이어버드, 아마존 다이나모DB, 쿠버네티스, 유가바이트DB, Firestore 등이 OCC를 지원하거나 활용하는 시스템의 예시이다.
낙관적 병행 수행 제어 트랜잭션은 '''시작''', '''수정''', '''유효성 검사''', '''커밋/롤백''' 단계를 거친다.[2] 각 단계에 대한 자세한 설명은 하위 섹션을 참고할 수 있다.
무상태 HTTP의 특성상 웹 사용자 인터페이스에서 잠금을 구현하는 것은 불가능하다. 사용자가 레코드 편집을 시작한 후 "취소" 또는 "로그아웃" 링크를 클릭하지 않고 떠나는 경우가 흔하기 때문이다. 잠금을 사용하면 다른 사용자가 동일한 레코드를 편집하려고 할 때 첫 번째 사용자의 잠금이 만료될 때까지 기다려야 한다.
2. 낙관적 동시성 제어의 단계
2. 1. 시작
트랜잭션 시작을 표시하는 타임스탬프를 기록한다.[2]
2. 2. 수정
낙관적 병행 수행 제어 트랜잭션에서 수정 단계는 데이터베이스 값을 읽고 변경 사항을 임시로 기록하는 단계이다.[2]
2. 3. 유효성 검사
낙관적 병행 수행 제어 트랜잭션은 다음과 같은 단계를 거친다.[2]2. 4. 커밋/롤백
낙관적 병행 수행 제어 트랜잭션은 다음과 같은 단계를 거친다.[2]3. 웹 환경에서의 활용
일부 데이터베이스 관리 시스템은 별도의 응용 프로그램 코드 없이도 낙관적 병행 수행 제어(OCC)를 기본적으로 제공한다. 그렇지 않은 시스템의 경우, 응용 프로그램은 데이터베이스 외부에 OCC 계층을 구현하여 대기하거나 레코드를 덮어쓰는 상황을 피할 수 있다. 이때 폼은 레코드의 원본 내용, 타임스탬프, 시퀀스 번호 또는 불투명 토큰을 포함하는 숨겨진 필드를 ব্যবহার할 수 있다. 제출 시 이러한 정보가 데이터베이스의 정보와 비교되고, 만약 다르다면 충돌 해결 알고리즘이 작동한다.
3. 1. HTTP ETag
HTTP는 낙관적 병행 수행 제어(OCC)의 한 형태를 내장하고 있다. 초기 GET 요청에 대한 응답에는 이후 PUT 요청이 `If-Match` 헤더에서 사용할 ETag가 포함될 수 있다. `If-Match` 헤더에 오래된 ETag가 있는 PUT 요청은 거부될 수 있다.[3]
4. 낙관적 동시성 제어 지원 시스템 및 예시
낙관적 동시성 제어(OCC)는 다양한 시스템과 애플리케이션에서 널리 사용된다. 그 예시는 다음과 같다.
- 대부분의 개정 관리 시스템은 동시성을 위한 "병합" 모델을 지원하며, 이는 OCC의 일종이다.
- 대부분의 소프트웨어 트랜잭션 메모리 구현은 OCC를 사용한다.
4. 1. DBMS
미머 SQL은 낙관적 병행 제어만 구현하는 DBMS이다.[10] MonetDB는 컬럼 지향 데이터베이스 관리 시스템의 트랜잭션 관리 방식으로 OCC를 기반으로 한다.[15]4. 2. 프레임워크 및 라이브러리
- 미디어위키의 편집 페이지는 낙관적 병행 수행 제어(OCC)를 사용한다.[4]
- 버그질라는 OCC를 사용하며, 편집 충돌은 "공중 충돌"이라고 불린다.[5]
- 루비 온 레일스 프레임워크는 OCC를 위한 API를 가지고 있다.[6]
- 그레일스 프레임워크는 기본 규칙에서 OCC를 사용한다.[7]
- GT.M 데이터베이스 엔진은 트랜잭션 관리를 위해 OCC를 사용한다. (단일 업데이트조차도 미니 트랜잭션으로 처리된다)[8]
- 마이크로소프트의 엔티티 프레임워크 (코드 우선 방식 포함)는 바이너리 타임스탬프 값을 기반으로 하는 OCC를 내장 지원한다.[9]
- 대부분의 개정 관리 시스템은 동시성을 위한 "병합" 모델을 지원하며, 이는 OCC이다.
- 미머 SQL은 낙관적 병행 제어만 구현하는 DBMS이다.[10]
- 구글 앱 엔진 데이터 저장소는 OCC를 사용한다.[11]
- 아파치 솔라 검색 엔진은 _version_ 필드를 통해 OCC를 지원한다.[12]
- 엘라스틱서치 검색 엔진은 OCC를 통해 문서를 업데이트한다. 문서의 각 버전에는 시퀀스 번호가 할당되며, 최신 버전은 더 높은 시퀀스 번호를 받는다. 문서에 대한 변경 사항이 비동기적으로 도착하면, 소프트웨어는 시퀀스 번호를 사용하여 이전 버전으로 최신 버전을 덮어쓰는 것을 방지할 수 있다.[13]
- CouchDB는 문서 개정을 통해 OCC를 구현한다.[14]
- MonetDB 컬럼 지향 데이터베이스 관리 시스템의 트랜잭션 관리 방식은 OCC를 기반으로 한다.[15]
- 대부분의 소프트웨어 트랜잭션 메모리 구현은 OCC를 사용한다.
- 레디스는 WATCH 명령을 통해 OCC를 제공한다.[16]
- 파이어버드는 데이터 관리를 위한 OCC 구현으로 다중 세대 아키텍처를 사용한다.
- 다이나모DB는 OCC 구현으로 조건부 업데이트를 사용한다.[17]
- 쿠버네티스는 리소스를 업데이트할 때 OCC를 사용한다.[18]
- 유가바이트DB는 주로 OCC를 사용하는 클라우드 네이티브 데이터베이스이다.[19]
- Firestore는 Firebase의 NoSQL 데이터베이스로, 트랜잭션에서 OCC를 사용한다.
4. 3. 애플리케이션
다음은 낙관적 병행 수행 제어(OCC)가 사용되는 애플리케이션 목록이다.- 미디어위키 편집 페이지[4]
- 버그질라 ( 편집 충돌은 "공중 충돌"이라고 불림)[5]
- 루비 온 레일스 프레임워크 (OCC를 위한 API 제공)[6]
- 그레일스 프레임워크 (기본 규칙에서 OCC 사용)[7]
- GT.M 데이터베이스 엔진 (트랜잭션 관리에 OCC 사용, 단일 업데이트도 미니 트랜잭션으로 처리)[8]
- 마이크로소프트 엔티티 프레임워크 (코드 우선 방식 포함, 바이너리 타임스탬프 값을 기반으로 하는 OCC 내장 지원)[9]
- 대부분의 개정 관리 시스템 (동시성을 위한 "병합" 모델 지원, OCC의 일종)
- 미머 SQL (DBMS 중 낙관적 병행 제어만 구현)[10]
- 구글 앱 엔진 데이터 저장소[11]
- 아파치 솔라 검색 엔진 (_version_ 필드를 통해 OCC 지원)[12]
- 엘라스틱서치 검색 엔진 (OCC를 통해 문서 업데이트, 문서의 각 버전에 시퀀스 번호 할당, 최신 버전은 더 높은 시퀀스 번호, 비동기적 변경 시 시퀀스 번호로 이전 버전 덮어쓰기 방지)[13]
- CouchDB (문서 개정을 통해 OCC 구현)[14]
- MonetDB 컬럼 지향 데이터베이스 관리 시스템 (트랜잭션 관리 방식이 OCC 기반)[15]
- 대부분의 소프트웨어 트랜잭션 메모리 구현
- 레디스 (WATCH 명령을 통해 OCC 제공)[16]
- 파이어버드 (다중 세대 아키텍처를 사용한 OCC 구현으로 데이터 관리)
- 다이나모DB (조건부 업데이트를 통한 OCC 구현)[17]
- 쿠버네티스 (리소스 업데이트 시 OCC 사용)[18]
- 유가바이트DB (주로 OCC를 사용하는 클라우드 네이티브 데이터베이스)[19]
- Firestore (Firebase의 NoSQL 데이터베이스, 트랜잭션에서 OCC 사용)
4. 4. 기타
- 미디어위키의 편집 페이지는 낙관적 병행 수행 제어(OCC)를 사용한다.[4]
- 버그질라는 OCC를 사용하며, 편집 충돌은 "공중 충돌"이라고 불린다.[5]
- 루비 온 레일스 프레임워크는 OCC를 위한 API를 가지고 있다.[6]
- 그레일스 프레임워크는 기본 규칙에서 OCC를 사용한다.[7]
- GT.M 데이터베이스 엔진은 트랜잭션 관리를 위해 OCC를 사용한다. (단일 업데이트조차도 미니 트랜잭션으로 처리된다).[8]
- 마이크로소프트의 엔티티 프레임워크(코드 우선 방식 포함)는 바이너리 타임스탬프 값을 기반으로 하는 OCC를 내장 지원한다.[9]
- 대부분의 개정 관리 시스템은 동시성을 위한 "병합" 모델을 지원하며, 이는 OCC이다.
- 미머 SQL은 낙관적 병행 제어만 구현하는 DBMS이다.[10]
- 구글 앱 엔진 데이터 저장소는 OCC를 사용한다.[11]
- 아파치 솔라 검색 엔진은 _version_ 필드를 통해 OCC를 지원한다.[12]
- 엘라스틱서치 검색 엔진은 OCC를 통해 문서를 업데이트한다. 문서의 각 버전에는 시퀀스 번호가 할당되며, 최신 버전은 더 높은 시퀀스 번호를 받는다. 문서에 대한 변경 사항이 비동기적으로 도착하면, 소프트웨어는 시퀀스 번호를 사용하여 이전 버전으로 최신 버전을 덮어쓰는 것을 방지할 수 있다.[13]
- CouchDB는 문서 개정을 통해 OCC를 구현한다.[14]
- MonetDB 컬럼 지향 데이터베이스 관리 시스템의 트랜잭션 관리 방식은 OCC를 기반으로 한다.[15]
- 대부분의 소프트웨어 트랜잭션 메모리 구현은 OCC를 사용한다.
- 레디스는 WATCH 명령을 통해 OCC를 제공한다.[16]
- 파이어버드는 데이터 관리를 위한 OCC 구현으로 다중 세대 아키텍처를 사용한다.
- 다이나모DB는 OCC 구현으로 조건부 업데이트를 사용한다.[17]
- 쿠버네티스는 리소스를 업데이트할 때 OCC를 사용한다.[18]
- 유가바이트DB는 주로 OCC를 사용하는 클라우드 네이티브 데이터베이스이다.[19]
- Firestore는 Firebase의 NoSQL 데이터베이스로, 트랜잭션에서 OCC를 사용한다.
참조
[1]
서적
Expert One-on-One J2EE Design and Development
Wrox Press
[2]
뉴스
On Optimistic Methods for Concurrency Control
https://apps.dtic.mi[...]
ACM Transactions on Database Systems
[3]
웹사이트
Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout
http://www.w3.org/19[...]
1999-05-10
[4]
문서
Help:Edit conflict
[5]
웹사이트
Bugzilla: FAQ: Administrative Questions
https://wiki.mozilla[...]
2012-04-11
[6]
웹사이트
Module ActiveRecord::Locking
http://api.rubyonrai[...]
[7]
웹사이트
Object Relational Mapping (GORM)
http://grails.org/do[...]
[8]
웹사이트
Transaction Processing
http://tinco.pair.co[...]
[9]
웹사이트
Handling Concurrency Conflicts
https://learn.micros[...]
2023-07-05
[10]
웹사이트
Transaction Concurrency - Optimistic Concurrency Control
https://developer.mi[...]
2023-12-22
[11]
웹사이트
The Datastore
http://code.google.c[...]
2010-08-27
[12]
웹사이트
Updating Parts of Documents
https://lucene.apach[...]
2018-06-28
[13]
웹사이트
Optimistic concurrency control
https://www.elastic.[...]
2024-02-05
[14]
웹사이트
Technical Overview
https://docs.couchdb[...]
2024-02-06
[15]
웹사이트
Transactions - MonetDB
http://www.monetdb.o[...]
2013-01-16
[16]
웹사이트
Transactions in Redis
http://redis.io/topi[...]
[17]
웹사이트
Working with Items and Attributes - Conditional Writes
https://docs.aws.ama[...]
2020-11-02
[18]
웹사이트
API Overview - Resource Operations
https://kubernetes.i[...]
2020-11-03
[19]
웹사이트
Explicit locking {{!}} YugabyteDB Docs
https://docs.yugabyt[...]
2022-01-04
[20]
서적
Expert One-on-One J2EE Design and Development
Wrox Press
[21]
뉴스
On Optimistic Methods for Concurrency Control
https://apps.dtic.mi[...]
ACM Transactions on Database Systems
2022-03-29
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com