KR20180030115A - 분산 데이터베이스 시스템을 갖는 네트워크에서 데이터베이스 접근 제어를 제공하기 위한 방법 및 아키텍처 - Google Patents
분산 데이터베이스 시스템을 갖는 네트워크에서 데이터베이스 접근 제어를 제공하기 위한 방법 및 아키텍처 Download PDFInfo
- Publication number
- KR20180030115A KR20180030115A KR1020187004245A KR20187004245A KR20180030115A KR 20180030115 A KR20180030115 A KR 20180030115A KR 1020187004245 A KR1020187004245 A KR 1020187004245A KR 20187004245 A KR20187004245 A KR 20187004245A KR 20180030115 A KR20180030115 A KR 20180030115A
- Authority
- KR
- South Korea
- Prior art keywords
- transaction
- node
- transactions
- nodes
- record
- Prior art date
Links
Images
Classifications
-
- G06F17/30371—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
-
- G06F17/30303—
-
- G06F17/30356—
-
- G06F17/30362—
-
- G06F17/30377—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법은 제 1 노드에서, 트랜잭션들의 레코드들을 유지하는 단계에서 각각의 트랜잭션들은 노드들의 적어도 하나에서 실행되고, 각각은 하나의 트랜잭션 상태를 가지며, 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고, 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하며, 상기 제 1 트랜잭션을 포함하고 상기 제 2 트랜잭션의 시작 시간에서 제 1 트랜잭션 상태를 가지며 상기 제 2 노드에서 실행중인 임의의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드로 수신하는 단계와, 제 2 트랜잭션의 결과는 상기 리스트에 기초하여 상기 제 1 트랜잭션의 결과에 의존하는 것에 대한 결정 단계와, 그리고 상기 결정에 기초하여 상기 제 1 트랜잭션이 완료될 때까지 상기 제 2 트랜잭션의 실행을 중지시키는 단계를 포함한다.
Description
본 출원은 2015년 7월 10일 출원된 미국 특허 출원 숫자 제 62/190,843호에 대해 우선권을 주장한다.
본 명세서는 분산 데이터베이스 시스템 네트워크로 데이터베이스 접근 제어를 제공하기 위한 방법 및 구조에 관한 것이다.
데이터베이스는 소프트웨어 프로그램을 사용하여 관리되고 질의 될 수 있는 구조화된 영구적인 데이터 집합이다. 트랜잭셔널(transactional) 데이터베이스 관리 시스템은 "트랜젝션들(transactions)"을 사용하여 데이터베이스 내에서 데이터를 오퍼레이션(예: 저장 및 조작)을 하는 관계형 데이터베이스 시스템이다. 일반적으로, 데이터베이스 트랜잭션들은 데이터베이스 관리 시스템이 데이터베이스에서 수행하는 단일 작업 단위(적어도 하나의 오퍼레이션들을 포함하여)를 의미한다. 데이터베이스 트랜잭션들이 안정적으로 처리되도록 하기 위해, 데이터베이스 트랜잭션들은 원자적(atomic)이어야 하며(즉, 적어도 하나의 오퍼레이션들을 모두 포함하는 트랜잭션은 그 전체가 완료되거나 전혀 영향을 미치지 않아야 함), 일관성이 있어야 하며(즉, 트랜잭션은 데이터베이스를 하나의 유효 단계에서 다른 유효 단계로 이동 해야함), 격리되어야 하며(즉, 동시에 실행되는 트랜잭션들은 트랜잭션들이 순차적으로 실행되는 경우 결과적으로 데이터베이스의 동일한 상태가 됨), 안전성이 있어야 한다(즉, 커밋(commit)된 트랜잭션은 시스템 충돌, 오류와 다른 문제들에 관계없이 커밋된 상태로 유지되어야 함). 이 데이터베이스 트랜잭션의 특성 집합들은 종종 "ACID"라고도 한다.
일 측면에 따르면, 일반적으로, 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법은: 상기 복수의 노드들 중 제 1 노드에서, 복수의 트랜잭션들의 레코드들을 유지하는 단계 - 여기서 각각의 트랜잭션은 상기 복수의 노드들의 적어도 하나에서 실행되고, 각각의 레코드들은 복수의 트랜잭션 상태들 중의 하나의 트랜잭션 상태를 가지며, 상기 레코드들은 제 1 트랜잭션에 대한 레코드와 제 2 트랜잭션에 대한 레코드를 포함하고, 상기 복수의 노드들 중 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고, 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함함 -; 상기 제 2 트랜잭션의 시작 시간에 제 1 트랜잭션 상태를 갖고 상기 제 2 노드에서 실행중인 임의의 복수의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드에서 수신하는 단계 - 여기서, 상기 트랜잭션들의 리스트는 상기 제 1 트랜잭션을 포함함 -; 상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하는 단계; 그리고 상기 결정에 기초하여 상기 제 1 트랜잭션이 완료 될 때까지 상기 제 2 트랜잭션의 실행을 중단시키는 단계를 포함한다.
측면들은 적어도 하나의 다음의 특징들을 포함한다.
상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하는 단계는 상기 제 1 트랜잭션의 시작 시간이 상기 제 2 트랜잭션의 시작 시간 이전에 발생되는지와 상기 제 1 트랜잭션의 커밋 시간이 상기 제 2 트랜잭션의 시작 시간 이전에 발생되는지를 결정하는 단계를 포함한다.
상기 트랜잭션들의 리스트는 상기 제 2 트랜잭션의 시작 시간에서 상기 제 2 노드에서 수신된다.
상기 트랜잭션들의 리스트에 포함된 상기 트랜잭션들은 상기 제 2 노드에서 실행되며 상기 제 2 트랜잭션의 시작 시점에서 상기 제 1 트랜잭션 상태를 갖는 트랜잭션들로 이루어져있다.
상기 트랜잭션들의 리스트는, 트랜잭션들의 리스트내 각각의 트랜잭션에 대하여, 상기 트랜잭션의 시작 시간을 포함한다.
상기 제 1 트랜잭션 상태는 트랜잭션이 완료 준비중임을 지시한다.
상기 제 1 트랜잭션은 상기 제 1 데이터 요소를 기록(write)하고 상기 제 2 트랜잭션은 상기 제 1 데이터 요소를 판독(read)하며, 상기 제 2 트랜잭션에 의해 판독(read)된 상기 제 1 데이터 요소의 버전은 상기 제 1 트랜잭션의 결과에 의존한다.
상기 제 1 트랜잭션의 가능한 결과는 트랜잭션 취소된 결과 및 트랜잭션 커밋된 결과를 포함한다.
상기 제 1 트랜잭션의 완료 후에 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하고 상기 제 1 트랜잭션의 결과가 상기 트랜잭션이 취소된 결과인 경우 상기 제 1 데이터 요소의 제 1 버전을 판독(read)하는 단계를 더 포함한다.
상기 제 1 트랜잭션의 완료 후에 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하고 상기 제 1 트랜잭션의 결과가 상기 트랜잭션의 커밋된 결과인 경우 상기 제 1 트랜잭션에 의해 기록(write)된 상기 제 1 데이터 요소의 제 2의 상이한 버전을 판독(read)하는 단계를 더 포함한다.
상기 제 1 트랜잭션 및 상기 제 2 트랜잭션의 하나 또는 두 가지 모두는 상기 복수의 노드들의 제 3 노드에 저장된 데이터 요소들에 접근한다.
상기 제 1 트랜잭션 및 상기 제 2 트랜잭션 두 가지 모두는 상기 제 1 데이터 요소를 기록(write)하는 것을 시도하고 상기 제 2 트랜잭션은 상기 제 1 트랜잭션 상태에 있다.
상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하는 단계는 상기 제 1 트랜잭션의 커밋 시간 이전과 상기 제 1 트랜잭션의 시작 시간 이후에 제 2 트랜잭션의 시작시간이 발생되는 지를 결정하는 것을 포함한다.
상기 제 1 트랜잭션은 상기 제 2 트랜잭션 전에 자신의 기록(write)을 커밋하도록 스케쥴링되고 상기 제 2 트랜잭션의 취소 여부는 상기 제 1 트랜잭션이 트랜잭션 취소된 결과 또는 트랜잭션 커밋된 결과인지에 의존한다.
상기 제 1 트랜잭션의 완료 후에 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하며, 상기 제 1 트랜잭션의 결과가 상기 트랜잭션이 취소된 결과인 경우 상기 제 1 데이터 요소의 제 1 값을 기록(write)하는 단계를 더 포함한다.
상기 제 1 트랜잭션의 완료 이후 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하며, 상기 제 1 트랜잭션의 결과가 상기 트랜잭션 커밋된 결과인 경우 상기 제 2 트랜잭션을 취소하는 단계를 더 포함한다.
다른 측면에 따르면, 일반적으로, 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한, 비 일시적인 형태의 소프트웨어를 저장하는 컴퓨터-판독(read)가능한 매체로써, 상기 소프트웨어는 컴퓨터 시스템으로 하여금: 상기 복수의 노드들 중 제 1 노드에서, 복수의 트랜잭션들의 레코드들을 유지하며 - 여기서, 각각의 트랜잭션은 상기 복수의 노드들의 적어도 하나에서 실행되고, 각각의 레코드들은 복수의 트랜잭션 상태들 중의 하나의 트랜잭션 상태를 가지며, 상기 레코드들은 제 1 트랜잭션에 대한 레코드와 제 2 트랜잭션에 대한 레코드를 포함하고, 상기 복수의 노드들 중 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함함 -; 상기 제 2 트랜잭션의 시작 시간에 제 1 트랜잭션 상태를 갖고 상기 제 2 노드에서 실행중인 임의의 복수의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드에서 수신하고 - 여기서, 상기 트랜잭션들의 리스트는 상기 제 1 트랜잭션을 포함함 -; 상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하고; 그리고 상기 결정에 기초하여 상기 제 1 트랜잭션이 완료 될 때까지 상기 제 2 트랜잭션의 실행을 중단하도록하는 명령들을 포함한다.
다른 측면에 따르면, 일반적으로, 잠재적인 동시 트랜잭션들을 관리하는 장치는: 분산 데이터베이스 시스템에 배열된 복수의 노드 - 여기서, 각 노드는 적어도 하나의 프로세서를 포함함 -; 상기 복수의 노드 사이에서 정보를 송수신하기 위한 상기 복수의 노드들의 통신 매체 연결 포트들을 포함하되, 상기 복수의 노드들 중 제 1 노드는 복수의 트랜잭션들의 레코드들을 유지하도록 구성되며 - 여기서, 각각의 트랜잭션은 상기 복수의 노드들의 적어도 하나에서 실행되고, 각각의 레코드들은 복수의 트랜잭션 상태들 중의 하나의 트랜잭션 상태를 가지며, 상기 레코드들은 제 1 트랜잭션에 대한 레코드와 제 2 트랜잭션에 대한 레코드를 포함하고, 상기 복수의 노드들 중 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고, 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함함 -; 상기 제 2 노드는 상기 제 2 트랜잭션의 시작 시간에 제 1 트랜잭션 상태를 갖고 상기 제 2 노드에서 실행중인 임의의 복수의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드에서 수신하도록 구성되고 - 여기서, 상기 트랜잭션들의 리스트는 상기 제 1 트랜잭션을 포함함 -; 상기 제 2 노드는 상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하도록 구성되며; 그리고 상기 제 2 노드는 상기 결정에 기초하여 상기 제 1 트랜잭션이 완료 될 때까지 상기 제 2 트랜잭션의 실행을 중단하도록 구성된다.
다른 측면에 따르면, 일반적으로, 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 데이터베이스 트랜잭션들을 관리하기 위한 방법은: 상기 복수의 노드들 중 제 1 노드에서 상기 시스템 내의 트랜잭션들의 복수의 제 1 레코드들을 유지하는 단계 - 여기서, 상기 복수의 제 1 레코드들의 각각의 레코드는 트랜잭션과 연관되고 상기 트랜잭션의 시작 시간 및 상기 트랜잭션의 시작 시간에서 활성화된 가장 오래된 트랜잭션의 시작시간을 포함하며, 상기 복수의 제 1 레코드들 내의 레코드들 중 하나는 상기 시스템내에서 현재까지 가장 오래된 활성 트랜잭션의 레코드임 -; 상기 복수의 노드들 중 제 2 노드에서 트랜잭션들의 복수의 제 2 레코드들을 유지하는 단계 - 여기서, 상기 복수의 제 2 레코드들은 상기 제 2 노드와 연관된 완료된 레코드들을 포함하며 상기 복수의 제 2 레코드들 중 각각의 레코드는 트랜잭션 시작시간 및 트랜잭션 종료 시간을 포함함 -; 상기 시스템에서 현재까지 가장 오래된 활성 트랜잭션의 트랜잭션 시작 시간에서 활성화된 가장 오래된 트랜잭션의 시작 시간을 포함하는 상기 제 1 노드로부터 메시지를 상기 제 2 노드에서 수신하는 단계; 상기 가장 오래된 트랜잭션의 시작 시간 이전에 발생하는 트랜잭션 종료 시간을 가진 완료된 트랜잭션들의 임의의 레코드들을 상기 복수의 제 2 레코드들로 부터 제거하는 단계를 포함한다.
측면들은 적어도 하나의 다음의 특징들을 갖는다.
상기 제 1 노드로부터 상기 메시지에 대한 요청을, 상기 제 2 노드로부터, 송신하는 단계를 더 포함한다.
상기 시스템에서 활성 트랜잭션들의 레코드들을 가지는 복수의 제 3 레코드들을 포함하는 상기 제 1 노드로부터 메시지를 상기 제 2 노드에서 수신하는 단계는 복수의 제 3 레코드들 중 각각의 레코드는 트랜잭션 시작 시간을 포함하고 상기 복수의 제 2 레코드들 상에서 완료된 트랜잭션의 각각에 레코드에 대해서, 상기 복수의 제 3 레코드들을 기초로 상기 레코드 제거 할지 여부를 결정하는 단계를 포함한다.
상기 복수의 제 3 레코드들을 기초로 상기 레코드를 제거 할지 여부를 결정하는 단계는 상기 복수의 제 3 레코드들의 활성 트랜잭션들의 레코드들의 상기 트랜잭션 시작 시간들을 상기 완료된 트랜잭션의 레코드의 트랜잭션 시작 시간에서 시작되고 상기 완료된 트랜잭션의 레코드의 상기 트랜잭션 완료 시간에서 종료되는 시간 간격을 비교하는 단계를 포함한다.
상기 복수의 제 3 레코드들을 기초로 상기 레코드를 제거 할지 여부를 결정하는 단계는 상기 복수의 제 3 레코드들의 활성 트랜잭션들의 레코드들의 상기 트랜잭션 시작 시간들의 어느것도 상기 완료된 트랜잭션의 레코드의 트랜잭션 시작에서 시작되고 상기 완료된 트랜잭션의 레코드의 트랜잭션 종료 시간에서 종료되는 시간 간격에 해당 되지 않는 경우, 상기 복수의 제 2 레코드들로부터 상기 완료된 트랜잭션의 레코드를 제거하는 단계를 포함한다.
상기 복수의 제 3 레코드들을 기초로 상기 레코드를 제거 할지 여부를 결정하는 단계는 상기 복수의 제 3 레코드들의 활성 트랜잭션들의 레코드가 상기 트랜잭션 시작 시간들을 상기 완료된 트랜잭션의 레코드의 트랜잭션 시작 시간에서 시작되고 상기 완료된 트랜잭션의 레코드의 트랜잭션 종료 시간에서 종료되는 시간 간격내에서 트랜잭션 시작 시간과 연관되는 경우, 상기 복수의 제 2 레코드들로부터 상기 완료된 트랜잭션의 레코드를 보존하는 단계를 포함한다.
상기 복수의 제 3 레코드들을 기초로 상기 레코드를 제거 할지 여부를 결정하는 단계는 가장 오래된 트랜잭션의 상기 시작 시간 이전에 발생하는 트랜잭션 완료 시간을 가진 완료된 트랜잭션들의 임의의 레코드들을 상기 복수의 제 2 레코들로부터 제거한 이후 발생한다.
상기 제 2 노드에서, 상기 제 2 노드와 연관된 데이터 요소를 접근하기 위한 제 1 트랜잭션을 수신하는 단계와, 상기 제 2 노드에서 활성 트랜잭션들의 레코드들을 포함하는 복수의 제 3 레코드들을 유지하는 단계와, 상기 복수의 제 2 레코드들 및 상기 복수의 제 3 레코드들 중 하나 또는 두가지 모두를 기초로 상기 데이터 요소의 복수 버전들 중의 데이터 요소의 하나의 버전을 상기 제 1 트랜잭션이 접근하도록 허용하는 것을 결정하는 단계를 포함한다.
상기 복수의 제 2 레코드들 및 상기 복수의 제 3 레코드들 중 하나 또는 두가지 모두를 기초로 상기 데이터 요소의 복수 버전들 중의 데이터 요소의 하나의 버전을 상기 제 1 트랜잭션이 접근하도록 허용하는 것을 결정하는 단계는 상기 데이터 요소의 버전과 연관된 제 2 트랜잭션의 레코드가 상기 복수의 제 3 레코드들에 포함되어 있는지 여부를 결정하는 단계를 포함하되, 만약 그런 경우, 상기 제 1 트랜잭션이 상기 데이터 요소에 접근하도록 허용하는 것을 결정하는 단계를 포함하며, 상기 제 2 트랜잭션의 레코드가 상기 복수의 제 3 레코드들에 포함되어있지 않는 경우, 상기 복수의 제 2 레코드들에 상기 제 2 트랜잭션의 레코드가 포함되어 있는지를 결정하는 단계를 포함하고, 만약 그런 경우, 상기 제 1 트랜잭션이 상기 데이터 요소에 접근하도록 허용할지 여부에 대해 결정하기 위해 상기 제 1 트랜잭션 시작 시간과 상기 제 2 트랜잭션의 종료시간을 비교하는 단계를 포함하며 그리고 상기 제 2 트랜잭션의 레코드가 상기 복수의 제 2 레코드들 또는 상기 복수의 제 3 레코드들에 포함되어 있지 않는 경우, 상기 제 1 트랜잭션이 상기 데이터 요소에 엑세스하도록 허용하는 단계를 포함한다.
상기 제 2 트랜잭션의 상기 트랜잭션 종료시간이 상기 제 1 트랜잭션의 트랜잭션 시작 시간 보다 먼저 발생하고 상기 복수의 제 2 레코드들내의 제 3 트랜잭션의 레코드가 존재하지 않는 경우 상기 제 1 트랜잭션이 상기 데이터 요소의 버전을 판독하도록 허용하고, 상기 제 3 트랜잭션은 상기 데이터 요소의 기록된 제 2 버전을 가지고 상기 제 2 트랜잭션의 트랜잭션 종료 시간 이후 및 상기 제 1 트랜잭션의 상기 트랜잭션 시작 시간 이전에 발생하는 트랜잭션 종료 시간을 갖는다.
상기 데이터 요소의 버전이 상기 제 1 트랜잭션에 의해 기록되는 경우, 상기 제 1 트랜잭션이 상기 데이터 요소의 버전을 판독하도록 허용한다.
상기 제 2 트랜잭션의 트랜잭션 시작 시간이 상기 제 1 트랜잭션의 트랜잭션 시작 시간 이후에 발생된 경우, 상기 제 1 트랜잭션을 상기 데이터 요소의 버전을 판독하는 것을 허용하지 않는다.
상기 복수의 제 2 레코드들의 완료된 트랜잭션들의 레코드들은 상기 레코드들의 트랜잭션 종료 시간을 기초로 정렬되는 것을 특징으로 하는 복수의 노드들을 포함한다.
상기 복수의 제 2 레코드들로부터 가장 오래된 활성 트랜잭션들의 레코드의 트랜잭션 시작 시간 이전에 발생되는 트랜잭션 종료 시간을 가진 완료된 트랜잭션들의 임의의 레코드들을 제거하는 단계는 가장 오래된 트랜잭션의 레코드의 트랜잭션 시작 시간 이전에 발생되는 트랜잭션 종료 시간을 가진 완료된 트랜잭션의 레코드가 식별될때까지, 상기 복수의 제 2 레코드들을 통해, 상기 복수의 제 2 레코드들 내의 가장 최근에 완료된 트랜잭션의 레코드로부터 시작한 순서대로 반복하는 단계와, 상기 복수의 제 2 레코드들로부터 상기 식별된 레코드를 제거하는 단계를 포함한다.
상기 식별된 레코드의 트랜잭션 종료 시간 이전에 발생되는 트랜잭션 종료 시간들을 가진 완료된 트랜잭션들의 임의의 레코드들을 상기 복수의 제 2 레코드들로부터 제거하는 단계를 더 포함한다.
다른 측면에 따르면, 일반적으로, 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 데이터베이스 트랜잭션들을 관리하기 위한 비 일시적인 형태의 소프트웨어를 저장하는 컴퓨터 판독 가능 매체로서, 상기 소프트웨어는 컴퓨팅 시스템으로 하여금: 상기 복수의 노드들 중 제 1 노드에서 상기 시스템내의 트랜잭션들의 복수의 제 1 레코드들을 유지하고 - 여기서, 상기 복수의 제 1 레코드들의 각각의 레코드는 트랜잭션과 연관되고 상기 트랜잭션의 시작 시간 및 상기 트랜잭션의 시작 시간에서 활성화된 가장 오래된 트랜잭션의 시작시간을 포함하며, 상기 복수의 제 1 레코드들 내의 레코드들 중 하나는 상기 시스템내에서 현재까지 가장 오래된 활성 트랜잭션의 레코드임 -; 상기 복수의 노드들 중 제 2 노드에서 트랜잭션들의 복수의 제 2 레코드들을 유지하며 - 여기서, 상기 복수의 제 2 레코드들은 상기 제 2 노드와 연관된 완료된 레코드들을 포함하며, 상기 복수의 제 2 레코드들 중 각각의 레코드는 트랜잭션 시작시간 및 트랜잭션 종료 시간을 포함함 -; 상기 시스템에서 현재까지 가장 오래된 활성 트랜잭션의 트랜잭션 시작 시간에서 활성화된 가장 오래된 트랜잭션의 시작 시간을 포함하는 상기 제 1 노드로부터 메시지를 상기 제 2 노드에서 수신하고; 그리고 상기 가장 오래된 트랜잭션의 시작 시간 이전에 발생하는 트랜잭션 종료 시간을 가진 완료된 트랜잭션들의 임의의 레코드들을 상기 복수의 제 2 레코드들로 부터 제거하도록 하는 명령들을 포함한다.
다른 측면에 따르면, 일반적으로, 데이터베이스 트랜잭션들을 관리하기 위한 장치로써, 상기 장치는: 분산 데이터베이스 시스템에서 배열된 복수의 노드들 - 여기서, 각각의 노드는 적어도 하나의 프로세서를 포함함 -; 및 상기 복수의 노드들 사이에서 송수신 정보를 위한 상기 복수의 노드들의 통신 매체 연결 포트들을 포함하되, 상기 복수의 노드들 중 제 1 노드는 상기 시스템내의 트랜잭션들의 복수의 제 1 레코드들을 유지하도록 구성되고 - 여기서, 상기 복수의 제 1 레코드들의 각각의 레코드는 트랜잭션과 연관되고 상기 트랜잭션의 시작 시간 및 상기 트랜잭션의 시작 시간에서 활성화된 가장 오래된 트랜잭션의 시작시간을 포함하며, 상기 복수의 제 1 레코드들 내의 레코드들 중 하나는 상기 시스템내에서 현재까지 가장 오래된 활성 트랜잭션의 레코드임 -; 상기 복수의 노드들 중 제 2 노드는 트랜잭션들의 복수의 제 2 레코드들을 유지하도록 구성되며 상기 복수의 제 2 레코드들은 상기 제 2 노드와 연관된 완료된 레코드들을 포함하며, 상기 복수의 제 2 레코드들 중 각각의 레코드는 트랜잭션 시작 시간 및 트랜잭션 종료 시간을 포함함 -; 상기 시스템에서 현재까지 가장 오래된 활성 트랜잭션의 트랜잭션 시작 시간에서 활성화된 가장 오래된 트랜잭션의 시작 시간을 포함하는 상기 제 1 노드로부터 메시지를 상기 제 2 노드에서 수신하도록 구성되고; 그리고 상기 가장 오래된 트랜잭션의 시작 시간 이전에 발생하는 트랜잭션 종료 시간을 가진 완료된 트랜잭션들의 임의의 레코드들을 상기 복수의 제 2 레코드들로 부터 상기 제 2 노드는 제거되도록 구성된다.
측면들에는 다음과 같은 장점이 하나 이상 있을 수 있다.
노드들의 네트워크에서 배열된 분산 데이터베이스 시스템은 큰 영역에 걸쳐 발생하는 시간당 많은 양의 트랜잭션을 처리 할 수 있다. 예를 들어, 글로벌 물류 프로세스 또는 신용 카드 프로세스는 전 세계적으로 작은시간에 다수의 트랜잭션을 수반 할 수 있다. 그러나, 특히 트랜잭션이 거의 동시에 발생하고 동일한 데이터를 사용하는 경우, 트랜잭션들에 의미 있는 결과를 얻으려면 데이터에 적용되는 연관된 오퍼레이션들과 엄청난 양의 트랜잭션은 조정(또는 관리)되어야 한다.
여기에 설명된 측면은 다중 버전 동시성 제어(multi-version concurrency control)를 사용하여 구현된 분산 데이터베이스 시스템을 포함한다. 일반적으로, 다중 버전 동시성 제어는 특정 데이터 요소의 다수의 다른 버전들(즉, 고유하게 식별 가능하고 독립적으로 변경 가능한 사본들)이 분산 데이터베이스 시스템에 유지 되도록한다. 신규 버전의 데이터 요소를 생성하는 것을 허용하면 각 데이터 요소의 단일 버전만 유지되는 경우 동일한 데이터 요소에 대한 동시(잠재적으로 충돌하는) 접근를 방지하기 위해 사용해야 할 수도 있는 특정 라킹(locking) 프로토콜의 필요성을 피할 수 있다. 이러한 라킹(locking)으로 인한 긴 대기 시간을 피할 수 있으며 잠재적으로 전체 시스템의 성능을 향상시킬 수 있다.
분산 데이터베이스 시스템에서 다중 버전 동시 제어(multi-version concurrency control)를 사용할 때 다수의 실제적인 이슈들이 발생한다. 예를 들어, 다수의 동시적인 트랜잭션들이 동일한 데이터 요소에 접근하는 경우, 트랜잭션 중 어느 것이 자신의 작업을 커밋 하는 것이 허용되는지에 대한 모호성이 발생할 수 있다. 일부 종래의 분산 데이터베이스 시스템은 잠재적으로 트랜잭션들의 소모적이고, 미숙하고, 부정확한 중단이라는 결과를 얻는 방식으로 이러한 모호성을 해결한다. 본 명세서에 설명 된 측면들은 잠재적으로 트랜잭션들의 소모적이고 미숙하고 부정확한 중단을 피할 수 있는 방식으로 이러한 모호성을 우아하게 해결하도록 구성된다.
메모리와 저장 용량이 제한된 실제 분산 데이터베이스 시스템에서 과거 버전의 데이터 요소를 너무 많이 보유하면 바람직하지 않은 양의 메모리 및/또는 저장 용량이 소모될 수 있다. 본 명세서에 기술된 측면은 더 이상 필요하지 않은 이전 버전의 데이터 요소를 정확하게 결정하고 불필요한 이전 버전의 데이터 요소만 삭제함으로써 불필요하고 진부한 이전 버전의 데이터 요소를 정교하게 처리한다. 다른 목적을 위해 메모리 및/또는 저장 용량의 가용성이 높아짐에 따라 전체 시스템의 성능이 향상된다.
다른 측면들 중에서, 본 명세서에 기술된 분산 데이터베이스 시스템은 분산된 다중 노드 데이터베이스 시스템상에서 다중 버전 동시성 제어와 충돌 해결을 구현한다. 측면들은 트랜잭션들이 실행중인 데이터베이스의 노드들에서 국부적으로, 그리고 다중 노드 데이터베이스의 리더 노드에서 트랜잭션 상태를 포함하여 트랜잭션들의 레코드들을 유용하게 유지한다. 트랜잭션들의 레코드들은 유용하게 분산 데이터베이스 시스템의 네트워크를 통해 동시적인 트랜잭션에 대한 세분화 된 제어를 허용한다.
특정 측면들은 다중 버전 동시성 제어의 스냅 샷 격리 양식을 유용하게 사용하며, 이는 여러 버전의 데이터 요소가 데이터베이스 시스템에 존재함과 동시에 충돌을 방지할 수 있다. 데이터베이스 내의 트랜잭션들과 데이터의 버전들은 모두 타임 스탬프들 또는 유사한 트랜잭션 식별자들과 연관이 있으며, 이는 트랜잭션들 간의 시간적 관계를 인코딩하고 동시적인 트랜잭션들 간의 충돌 해결을 위한 메커니즘을 제공한다.
데이터 요소의 여러 버전들을 유지하는 한 가지 장점은 데이터 요소에 접근하는 트랜잭션이 쉽게 중단될 수 있으며 이전 버전의 데이터 요소로 되돌림으로써 트랜잭션과 연관된 변경 사항을 쉽게 돌이킬 수 있다는 것이다.
어떤 측면은 트랜잭션의 원자성(atomicity)을 보장하기 위해 2 단계(two stage) 커밋 프로시저를 유용하게 사용한다.
측면들은 분산 데이터베이스 시스템에서 경쟁 조건들 및/또는 모호함의 영향을 완화하여 트랜잭션들의 조기 중단을 피할 수 있다.
분산 데이터베이스 시스템의 노드는 노드에서 이전에 완료되었거나 활성화된 트랜잭션들의 레코드들을 유지한다. 트랜잭션들의 레코드들은 분산 데이터베이스 시스템에서 경쟁 조건들 및/또는 모호성을 식별하는데 사용된다. 상기 노드들은 트랜잭션들의 관련된 레코드만 노드에서 관리되고 관련없는 레코드들이 노드에서 유지되지 않도록 보장하기 위해 제거 절차들을 구현한다. 삭제는 효율적인 방식으로 수행될 수 있으며, 따라서 삭제는 시스템에서의 다른 유용한 처리를 과도하게 방해하지 않는다. 삭제는 동일한 데이터에 접근하는 다중 트랜잭션 간의 충돌을 방지하기 위한 후속 처리를 또한 촉진할 수 있으며, 아마도 여러 버전의 데이터 요소들을 가질 수 있다.
본 발명의 다른 특징 및 이점은 하기의 설명 및 청구 범위로부터 명백해질 것이다.
도 1은 분산 데이터베이스 시스템을 포함하는 데이터 처리 시스템의 블록도이다.
도 2는 분산 데이터베이스 시스템에 참여하는 기록(write) 오퍼레이션을 포함하는 트랜잭션을 도시하는 블록도이다.
도 3은 도 2의 트랜잭션이 자신의 오퍼레이션들을 분산 데이터베이스에 실행하는 것을 도시하는 블록도이다.
도 4는 리더 노드로부터 준비(prepare)메시지들을 수신하는 도 2의 트랜잭션을 도시하는 블록도이다.
도 5는 리더 노드로 OK 메시지들을 송신하는 도 2의 트랜잭션을 도시하는 블록도이다.
도 6은 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 2의 트랜잭션을 도시하는 블록도이다.
도 7은 분산 데이터베이스 시스템에 참여하는 판독(read) 오퍼레이션을 포함하는 트랜잭션을 도시하는 블록도이다.
도 8은 도 7의 트랜잭션이 자신의 오퍼레이션들을 분산 데이터베이스에 실행하는 것을 도시하는 블록도이다.
도 9는 리더 노드로 준비 메시지들을 수신하는 도 7의 트랜잭션을 도시하는 블록도이다.
도 10은 리더 노드로 OK 메시지들을 송신하는 도 7의 트랜잭션을 도시하는 블록도이다.
도 11은 리더 노드로부터 커밋 메세지들(Commit messages)을 수신하는 도 7의 트랜잭션을 도시하는 블록도이다.
도 12는 최적화된 분산 데이터베이스 기록(write) 알고리즘의 단계들을 도시하는 흐름도이다.
도 13은 분산 데이터베이스 시스템에서 활성화된 제 1 트랜잭션 과 제 2 트랜잭션 를 도시하는 블록도이다.
도 14는 도 12의 분산 데이터 시스템에 있는 리더 노드로부터 준비 메시지들을 수신하는 제 1 트랜잭션을 도시하는 블록도이다.
도 15는 리더 노드로부터 트랜잭션 식별자들을 완료중 리스트를 포함하는 준비 메시지들을 수신하고 제 1 트랜잭션이 완료될 때까지 슬리핑(sleeping)하는 도 14 의 제 2 트랜잭션을 나타내는 블록도이다
도 16은 리더 노드로 not OK 메시지를 보내는 도 12의 제 1 트랜잭션을 도시하는 블록도이다.
도 17은 리더 노드로부터의 취소 메시지를 수신하는 도 12의 제 1 트랜잭션과 웨이킹(waking)하는 도 12의 제 2 트랜잭션을 도시하는 블록도이다.
도 18은 리더 노드로 OK 메시지를 송신하는 도 12의 제 2 트랜잭션을 도시하는 블록도이다.
도 19는 리더 노드로부터 커밋 메세지들(Commit messages)을 수신하는 도 12의 제 2 트랜잭션을 도시하는 블록도이다.
도 20은 최적화된 분산 데이터베이스 기록(write) 알고리즘의 단계들을 도시하는 흐름도이다.
도 21은 분산 데이터베이스 시스템에서 리더 노드로부터 준비 메시지들을 수신하는 제 1 트랜잭션을 도시하는 블록도이다.
도 22는 도 19의 분산 데이터베이스 시스템에 참여하는 판독(read) 오퍼레이션을 포함하는 제 2 트랜잭션을 도시하는 블록도이다.
도 23은 완료중 트랜잭션들의 리스트를 수신하고 분산 데이터베이스 시스템에서 자신의 오퍼레이션들을 안전하게 수행 할 수 있을 때까지 슬리핑(sleeping)하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 24는 OK 메시지를 리더 노드로 송신하는 도 19의 제 1 트랜잭션을 도시하는 블록도를 나타낸다.
도 25는 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 19의 제 1 트랜잭션과 웨이킹(waking)하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 26은 리더 노드로부터 준비 메세지들(prepare messages)을 수신하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 27은 리더 노드로 OK 메세지를 송신하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 28은 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 29는 순서가 잘못 정렬된 메세지(out of order message)를 다루는 알고리즘의 단계들을 도시하는 흐름도이다.
도 30은 분산 데이터베이스 시스템에서 제 1 트랜잭션과 제 2 트랜잭션이 활성화된 것을 도시하는 블록도이다.
도 31은 제 1 트랜잭션에 대한 END_TRANS 메세지를 수신하는 도 27의 분산데이터베이스 시스템 내의 리더 노드를 도시하는 블록도이다.
도 32는 제 2 트랜잭션에 대한 END_TRANS 메세지를 수신하는 도 27의 분산 데이터베이스 시스템 내의 리더 노드를 도시하는 블록도이다.
도 33은 제 1 트랜잭션이 완료될 때까지 슬리핑(sleeping)하고, 제 1 트랜잭션이 준비(prepare) 메세지를 수신하기 이전에 리더 노드로부터 트랜잭션 식별자들을 완료하는 리스트를 포함한 준비(prepare) 메세지들을 수신하는 도 27의 제 2 트랜잭션을 도시하는 블록도이다.
도 34는 준비(prepare) 메세지를 수신하는 도 27의 제 1 트랜잭션을 도시하는 블록도이다.
도 35는 OK 메세지들을 리더 노드로 송신하는 도 27의 제 1 트랜잭션을 도시하는 블록도이다.
도 36은 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 27의 제 1 트랜잭션을 도시하는 블록도이다.
도 37은 웨이킹(waking)하고 Not OK 메세지를 리더 노드로 송신하는 도 27의 제 2 트랜잭션을 도시하는 블록도이다.
도 38은 리더 노드로부터 취소 메세지들을 수신하는 도 27의 제 2 트랜잭션을 도시하는 블록도이다.
도 39는 분산 데이터베이스 시스템에서 삭제 요청 메시지(Purge Request Message)를 리더 노드로 송신하는 제 1 노드를 도시하는 블록도이다.
도 40은 로우 워터 마크(low water mark)와 활성화된 트랜잭션들의 리스트를 포함하는 메시지를 제 1 노드로 되돌려 보내는 도 39의 리더 노드를 나타내고 빠른 삭제 오퍼레이션(Quick Purge Operation)을 수행하는 제 1 노드를 나타내는 블록도이다.
도 41은 도 39의 리더 노드가 로우 워터 마크와 활성화된 트랜잭션들의 리스트들 포함하는 메시지를 제 1 노드로 되돌려 보내는 도 39의 리더노드를 나타내고 완전한 삭제 오퍼레이션을 수행하는 제 1 노드를 나타내는 블록도이다.
도 2는 분산 데이터베이스 시스템에 참여하는 기록(write) 오퍼레이션을 포함하는 트랜잭션을 도시하는 블록도이다.
도 3은 도 2의 트랜잭션이 자신의 오퍼레이션들을 분산 데이터베이스에 실행하는 것을 도시하는 블록도이다.
도 4는 리더 노드로부터 준비(prepare)메시지들을 수신하는 도 2의 트랜잭션을 도시하는 블록도이다.
도 5는 리더 노드로 OK 메시지들을 송신하는 도 2의 트랜잭션을 도시하는 블록도이다.
도 6은 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 2의 트랜잭션을 도시하는 블록도이다.
도 7은 분산 데이터베이스 시스템에 참여하는 판독(read) 오퍼레이션을 포함하는 트랜잭션을 도시하는 블록도이다.
도 8은 도 7의 트랜잭션이 자신의 오퍼레이션들을 분산 데이터베이스에 실행하는 것을 도시하는 블록도이다.
도 9는 리더 노드로 준비 메시지들을 수신하는 도 7의 트랜잭션을 도시하는 블록도이다.
도 10은 리더 노드로 OK 메시지들을 송신하는 도 7의 트랜잭션을 도시하는 블록도이다.
도 11은 리더 노드로부터 커밋 메세지들(Commit messages)을 수신하는 도 7의 트랜잭션을 도시하는 블록도이다.
도 12는 최적화된 분산 데이터베이스 기록(write) 알고리즘의 단계들을 도시하는 흐름도이다.
도 13은 분산 데이터베이스 시스템에서 활성화된 제 1 트랜잭션 과 제 2 트랜잭션 를 도시하는 블록도이다.
도 14는 도 12의 분산 데이터 시스템에 있는 리더 노드로부터 준비 메시지들을 수신하는 제 1 트랜잭션을 도시하는 블록도이다.
도 15는 리더 노드로부터 트랜잭션 식별자들을 완료중 리스트를 포함하는 준비 메시지들을 수신하고 제 1 트랜잭션이 완료될 때까지 슬리핑(sleeping)하는 도 14 의 제 2 트랜잭션을 나타내는 블록도이다
도 16은 리더 노드로 not OK 메시지를 보내는 도 12의 제 1 트랜잭션을 도시하는 블록도이다.
도 17은 리더 노드로부터의 취소 메시지를 수신하는 도 12의 제 1 트랜잭션과 웨이킹(waking)하는 도 12의 제 2 트랜잭션을 도시하는 블록도이다.
도 18은 리더 노드로 OK 메시지를 송신하는 도 12의 제 2 트랜잭션을 도시하는 블록도이다.
도 19는 리더 노드로부터 커밋 메세지들(Commit messages)을 수신하는 도 12의 제 2 트랜잭션을 도시하는 블록도이다.
도 20은 최적화된 분산 데이터베이스 기록(write) 알고리즘의 단계들을 도시하는 흐름도이다.
도 21은 분산 데이터베이스 시스템에서 리더 노드로부터 준비 메시지들을 수신하는 제 1 트랜잭션을 도시하는 블록도이다.
도 22는 도 19의 분산 데이터베이스 시스템에 참여하는 판독(read) 오퍼레이션을 포함하는 제 2 트랜잭션을 도시하는 블록도이다.
도 23은 완료중 트랜잭션들의 리스트를 수신하고 분산 데이터베이스 시스템에서 자신의 오퍼레이션들을 안전하게 수행 할 수 있을 때까지 슬리핑(sleeping)하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 24는 OK 메시지를 리더 노드로 송신하는 도 19의 제 1 트랜잭션을 도시하는 블록도를 나타낸다.
도 25는 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 19의 제 1 트랜잭션과 웨이킹(waking)하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 26은 리더 노드로부터 준비 메세지들(prepare messages)을 수신하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 27은 리더 노드로 OK 메세지를 송신하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 28은 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 22의 제 2 트랜잭션을 도시하는 블록도이다.
도 29는 순서가 잘못 정렬된 메세지(out of order message)를 다루는 알고리즘의 단계들을 도시하는 흐름도이다.
도 30은 분산 데이터베이스 시스템에서 제 1 트랜잭션과 제 2 트랜잭션이 활성화된 것을 도시하는 블록도이다.
도 31은 제 1 트랜잭션에 대한 END_TRANS 메세지를 수신하는 도 27의 분산데이터베이스 시스템 내의 리더 노드를 도시하는 블록도이다.
도 32는 제 2 트랜잭션에 대한 END_TRANS 메세지를 수신하는 도 27의 분산 데이터베이스 시스템 내의 리더 노드를 도시하는 블록도이다.
도 33은 제 1 트랜잭션이 완료될 때까지 슬리핑(sleeping)하고, 제 1 트랜잭션이 준비(prepare) 메세지를 수신하기 이전에 리더 노드로부터 트랜잭션 식별자들을 완료하는 리스트를 포함한 준비(prepare) 메세지들을 수신하는 도 27의 제 2 트랜잭션을 도시하는 블록도이다.
도 34는 준비(prepare) 메세지를 수신하는 도 27의 제 1 트랜잭션을 도시하는 블록도이다.
도 35는 OK 메세지들을 리더 노드로 송신하는 도 27의 제 1 트랜잭션을 도시하는 블록도이다.
도 36은 리더 노드로부터 커밋 메세지들(commit messages)을 수신하는 도 27의 제 1 트랜잭션을 도시하는 블록도이다.
도 37은 웨이킹(waking)하고 Not OK 메세지를 리더 노드로 송신하는 도 27의 제 2 트랜잭션을 도시하는 블록도이다.
도 38은 리더 노드로부터 취소 메세지들을 수신하는 도 27의 제 2 트랜잭션을 도시하는 블록도이다.
도 39는 분산 데이터베이스 시스템에서 삭제 요청 메시지(Purge Request Message)를 리더 노드로 송신하는 제 1 노드를 도시하는 블록도이다.
도 40은 로우 워터 마크(low water mark)와 활성화된 트랜잭션들의 리스트를 포함하는 메시지를 제 1 노드로 되돌려 보내는 도 39의 리더 노드를 나타내고 빠른 삭제 오퍼레이션(Quick Purge Operation)을 수행하는 제 1 노드를 나타내는 블록도이다.
도 41은 도 39의 리더 노드가 로우 워터 마크와 활성화된 트랜잭션들의 리스트들 포함하는 메시지를 제 1 노드로 되돌려 보내는 도 39의 리더노드를 나타내고 완전한 삭제 오퍼레이션을 수행하는 제 1 노드를 나타내는 블록도이다.
도 1은 분산 데이터베이스 시스템(102)을 포함하는 데이터 처리 시스템 (100)의 예시를 도시한다. 상기 분산 데이터베이스 시스템(102)은 통신 네트워크 (106) (예를 들어, WAN, LAN, 또는 멀티-프로세서 시스템내의 또는 칩상의 네트워크)를 통해 M 개의 데이터베이스 클라이언트(104)와 통신한다.
1. 분산 데이터베이스 시스템
상기 분산 데이터베이스 시스템(102)은 N 개의 노드(또는 "파티션들")(108)를 포함하며, 그 위에 데이터베이스 D의 프래그먼트들(fragments) Dn이 할당된다. 일부 실시 예들에서, 각각의 노드(108)는 서버 컴퓨팅 시스템에 실행되는 서버 프로세스에 대응된다. 일부 실시 예들에서, 여러 개의 노드들(108)은 단일의 프로세서나 컴퓨팅 머신에서 호스트 될 수 있고 또는, 상기 노드들(108)은 다수의 프로세서들 또는 컴퓨팅 머신들에 걸쳐 분산 될 수 있다(예를 들어, 각 노드(108)가 자신의 프로세서 상에 호스팅 되는것 처럼).
각각의 노드(108)는 데이터베이스 D의 프래그먼트가 저장되는 데이터 저장 장치(112)와 상기 데이터 저장장치(112)에 상기 데이터베이스의 프래그먼트를 관리하는 데이터베이스 관리자(110)를 포함한다. 또한, 노드(108)에 대한 상기 데이터베이스 관리자(110)는 상기 데이터 저장 장치(112)상의 데이터베이스의 프래그먼트와, 상기 클라이언트들(104) 및 다른 노드들(108)과 같은 노드(108) 외부의 엔티티들(entities) 사이의 인터페이스로써 기능한다.
오퍼레이션(Operation)시에, 상기 클라이언트들(104)은 상기 데이터베이스 D에 실행 동안에 적어도 하나의 데이터베이스 트랜잭션들을 특정한다. 상기 클라이언트들(104)에 의해 특정된 트랜잭션들은 통신 네트워크(106)를 통해 노드들(108)의 데이터베이스 관리자들(110) 중 적어도 하나로 전송된다. 트랜잭션이 N 개의 노드(108)중 n 번째 데이터베이스 관리자(110)에 도달하면, 상기 n 번째 데이터베이스 관리자(110)는 상기 n 번째 데이터베이스 관리자(110)에 의해 관리되는 상기 n 번째 데이터 저장 장치(112)에 저장된 데이터베이스의 프래그먼트에서 트랜잭션이 실행되도록 한다.
일부 실시 예들에서, 하나의 트랜잭션이 다수의 노드들(108)에 저장된 상기 데이터베이스의 다수의 프래그먼트들에 접근할 때, 상기 n번째 데이터베이스 관리자(110)는 상기 트랜잭션을 상기 다수의 노드들(108)의 데이터베이스 관리자들(110)로 전송한다. 다른 실시 예에서, 상기 트랜잭션이 유래하는 클라이언트(104)는 상기 트랜잭션을 완료하는데 필요한 적절한 노드들(108)로 트랜잭션을 전송한다. 그러나, 다른 실시 예들에서, 상기 트랜잭션이 유래하는 클라이언트(104)는 상기 트랜잭션을 리더 노드에 전송하고, 상기 리더 노드는 상기 트랜잭션을 완료하는 데 필요한 적절한 노드들(108)로 상기 트랜잭션을 전송한다.
상기 적절한 노드들(108)에서 수신된 적어도 하나의 트랜잭션들로, 상기 적어도 하나의 트랜잭션들은 상기 데이터베이스를 실행하고 접근 할 수 있다. 종래의 중앙 집중식 트랜잭셔널 데이터베이스들의 경우와 마찬가지로 상기 적어도 하나의 트랜잭션들이 서로 충돌하여 일부 트랜잭션이 성공적으로 완료되고 다른 트랜잭션들이 실패 될 수 있으며, 그 시점에서 변경 내용을 취소하고 다시 시도 해야한다.
일부 실시 예들에서, 전술한 각각의 데이터베이스 관리자들(110)은, 다른 태스크들 중에서도, 과거에 또는 현재 노드(108)에서 실행중인 각각의 트랜잭션의 레코드를 유지하기 위한 로컬 트랜잭션 관리자(114)를 포함한다. 일부 실시 예들에서, 상기 로컬 트랜잭션 관리자(114)에 의해 유지되는 트랜잭션의 각각의 레코드는 트랜잭션 식별자(예를 들어, 트랜잭션의 시작 시간), 상기 트랜잭션에 대한 커밋 식별자(예를 들어, 트랜잭션이 커밋된 시간), 트랜잭션에 대한 상태(예, 활성화(ACTIVE), 준비중(PREPARING), 커밋티드(COMMITTED), 또는 취소중(ABORTING)를 포함한다. 도면에 명시적으로 도시되지는 않았지만, 일부 실시 예들에서, 상기 각각의 데이터베이스 관리자(110)는 상기 데이터베이스 관리자(110)에 의해 관리되는 데이터 저장 장치(112)에 저장된 데이터베이스의 프래그먼트의 관리를 담당하는 데이터 프로세서, 적어도 하나의 노드(108)상의 데이터베이스 프래그먼트들에 대한 접근을 요구하는 요청들을 처리하는 어플리케이션 프로세서, 상기 클라이언트들(104)및 다른 노드들(108)과 통신하기 위한 통신 소프트웨어를 또한 포함한다.
일부 실시 예들에서, 상기 노드들(108) 중 하나(예를 들어, 도 1 의 제 2 노드)는 리더 노드로 지정된다. 상기 리더 로드는 새로운 트랜잭션들에 대한 트랜잭션 식별자들 할당, 트랜잭션들에 대한 커밋 식별자들 할당, 그리고 분산 데이터베이스 시스템(102)내의 다양한 노드(108)사이에서 커밋 오퍼레이션들을 조정하는 것을 담당하는 전역 트랜잭션 관리자(116)를 포함한다. 일부 실시 예들에서, 상기 전역 트랜잭션 관리자(116)는 또한 상기 분산 데이터베이스 시스템(102)에서 현재 활성화된 모든 트랜잭션의 레코드를 유지한다. 일부 실시 예들에서, 활성화된 트랜잭션의 각각의 레코드는 상기 트랜잭션에 대한 트랜잭션 식별자(트랜잭션의 시작 시간), 상기 트랜잭션에 대한 커밋 식별자(트랜잭션이 커밋된 시간), 상기 트랜잭션이 오퍼레이션 되고 있는 노드들에 대한 리스트, 트랜잭션에 대한 상태(예, 활성화(ACTIVE), 준비중(PREPARING), 커밋티드(COMMITTED), 또는 취소중(ABORTING))를 포함한다.
1.1 데이터베이스 트랜잭션들
일반적으로, 상기 분산 데이터베이스 시스템(102)에서 동작하는 각각의 데이터베이스 트랜잭션은 트랜잭션의 수명을 나타내는 시간 간격과 연관된다. 시간 간격을 설정하기 위해 상기 데이터베이스에서 동작하는 트랜잭션 T 가 시작되면 트랜잭션 식별자가 T 에 할당된다. 상기 트랜잭션 식별자는 상기 트랜잭션에 대한 시작 시간(즉, 시간 간격의 시작)을 특정하고 상기 분산 데이터베이스 시스템(102)에서 상기 트랜잭션을 식별하는 전역적으로 구분되는 숫자이다. 일부 실시 예들에서, 이러한 식별자를 얻기 위해, 상기 트랜잭션 식별자들은 시간의 개념을 전달하기 위한 단일적으로-증가하는 일련의 숫자들로 생성된다. 예를 들어, 트랜잭션 식별자 "10" 인 제 1 트랜잭션은 T[10]으로, 트랜잭션 식별자 "20" 의 제 2 트랜잭션은 T[20]이며, T[10]에 대한 상기 트랜잭션 식별자가 T[20]에 대한 트랜잭션 식별자 이전에 오기 때문에 T[20]이 시작되기 전에 T[10]이 시작되었음을 알 수 있다.
트랜잭션이 커밋 할 준비가 될 때, 상기 트랜잭션은 상기 트랜잭션의 종료 시간 (즉, 시간 간격의 끝)을 특정하는 커밋 식별자를 할당 받는다. 상기 커밋 식별자는 상기 트랜잭션 식별자와 동일한 일련의 숫자들에서 유래되며 시간 개념을 전달한다.
일부 실시 예들에서, 표기 T[a, b]는 a에서 b까지의 범위에 걸친 수명을 가진 트랜잭션을 나타내기 위해 사용된다. 상기 트랜잭션 식별자 a는 항상 커밋 식별자 b보다 작다. 현재 활성 트랜잭션(즉, 커밋되지 않은 트랜잭션)은 T[a,FUTURE]로 나타낼 수 있으며 b=FUTURE는 상기 트랜잭션이 FUTURE내의 어떤 알려지지 않은 시간에 대해 끝날 것임을 암시한다. 일부 실시 예들에서, 현재 활성화 트랜잭션은 축약 표현 T[a]를 사용함으로써 나타낼 수 있으며 b=FUTURE를 암시한다.
상기 트랜잭션들과 연관된 시간 간격은 트랜잭션들 간 관계에 대한 정보를 제공할 수 있다. 예를 들어, 제 1 트랜잭션의 T[10,15]와 제 2 트랜잭션의 T[16,20]의 시간 간격을 살펴보면 두 트랜잭션이 연속적으로 실행되어 제 1 트랜잭션이 끝난후 제 2 트랜잭션이 시작된다는 정보를 제공한다. 제 3 트랜잭션의 T[10,20]와 제 4 트랜잭션의 T[15,25]의 간격들(intervals)을 살펴보면 두 트랜잭션이 동시에 실행되었다는 정보가 제공된다. 본 출원에서, 2 개의 트랜잭션의 각각의 수명이 겹칠때 2 개의 트랜잭션들이 동시에 실행되는 것으로 간주 됨을 주의한다. 트랜잭션들의 수명은 트랜잭션 식별자와 연관된 시간에 시작되며, 트랜잭션이 유용한 작업을 수행하기 위해 활성화되어 실행되는 시간을 포함하고, 유효성 검사 단계(예 : 트랜잭션과 연관된 참여(JOIN), 준비(PREPARE), 커밋(COMMIT) 메시지/단계를 위한 시간을 포함하고), 커밋 식별자와 연관된 시간에 끝나고 그 다음에 트랜잭션이 완료된 것으로 간주된다. 두 개의 동시 트랜잭션 중 하나 또는 둘 모두는 자신이 수명 중 어느 부분동안 유용한 작업을 수행하기 위해 활성화되지 않은 채 실행되는 중단 (또는 "슬립(sleep)") 상태 일 수 있으며, 이러한 트랜잭션들은 겹친 수명으로 인해 동시에 실행되는 것으로 간주된다.
일부 실시 예들에서, 신규 트랜잭션이 상기 분산 데이터베이스 시스템(102)에 도달 할 때, 상기 트랜잭션은 "참여(joining)"이라 불리는 프로세스를 거치게 된다. 참여(join)하기 위해, 상기 트랜잭션은, 이전에 상기 트랜잭션의 레코드가 없는 노드상의 데이터에 접근을 요청한다. 상기 요청을 수신하자마자, 상기 노드는 "참여(join)" 메시지를 리더 노드상의 전역 트랜잭션 관리자(116)로 송신하며 상기 메시지는 노드의 명칭(예를 들어 제 1 노드)을 포함한다. 상기 전역 트랜잭션 관리자(116)는 상기 메시지를 수신하면, 상기 노드는 상기 트랜잭션내에 참여자로써 등록된다.
이후 상기 전역 트랜잭션 관리자(116)는 상기 트랜잭션에 대한 트랜잭션 식별자인, 상기 트랜잭션에 대한 "로우 워터 마크(low water mark)"와 상기 트랜잭션에 대한 "완료중 트랜잭션 식별자들"의 리스트와 함께 상기 노드(108)에 응답을 송신한다. 매우 일반적으로, 상기 트랜잭션에 대한 로우 워터 마크(low water mark)는 상기 트랜잭션이 시작된 시점에서 상기 분산 데이터베이스 시스템(102)내의 가장 오래된 활성화된 트랜잭션에 대한 트랜잭션 식별자이다. 상기 완료중 트랜잭션 식별자들의 리스트는 상기 트랜잭션이 시작되었을 때 준비중 프로세스내에 있는 트랜잭션들의 리스트이다. 상기 로우 워터 마크(low water mark)와 상기 완료중 트랜잭션 식별자들의 리스트는 하기에 보다 자세히 기술되어있다.
1.2 데이터 요소 버전 관리
일부 실시 예들에서 데이터베이스 D 는 특정 형식의 MVCC 멀티 버전 동시 제어(Multi-Version Concurrency Control)인 스냅 샷 격리 기술을 사용하여 구현된다. 이러한 데이터베이스에서 상기 데이터베이스의 적어도 하나의 데이터 요소들에 대해 복수의 버전이 있을 수 있다. 데이터 요소에 대한 각각의 버전은 데이터 요소의 다른 버전들이 서로 구별될 수 있도록 고유한 식별자를 갖는다. 일부 실시 예들에서, 데이터 요소의 각 버전에 대해, 버전에 대한 고유 식별자는 상기 버전을 상기 데이터베이스에 기록(write)하는 트랜잭션의 트랜잭션 식별자에 대응된다. 즉, 트랜잭션이 데이터 요소의 신규 버전을 데이터베이스에 기록(write)할 때마다 상기 신규 버전을 기록하는 트랜잭션의 트랜잭션 식별자가 신규 버전의 식별자로 할당된다. 예를 들어, x라는 데이터 요소는 각각 트랜잭션 T[25, 30], T[37, 42], T[53, 59]에 의해 기록(write)된 x[25], x[37], x[53]를 포함하는 복수의 버전을 가질 수 있다.
1.3 데이터 가시성
전술한 버전 관리 기술들은 상기 분산 데이터베이스 시스템(102)의 노드들(108)에 의해 트랜잭션이 접근할 수 있는 데이터 요소의 버전을 결정하고 오퍼레이션이 충돌하는 트랜잭션을 식별하는데 사용될 수 있다. 충돌하는 오퍼레이션들을 가진 트랜잭션들이 확인되면, 트랜잭션들 중 하나는 취소되도록 강요될 수 있다. 이러한 목적으로, 일부 실시 예들에서, 상기 분산 데이터베이스 시스템(102)의 노드들(108)은 트랜잭션이 적어도 하나의 데이터 요소들을 접근 시도 할 때 다음의 규칙들을 따르게 된다.
1) 데이터 요소 x가 주어졌을때, x[m]은 트랜잭션 T[m]에 기록(write)된 x의 버전이며, 트랜잭션 T[i]가 x의 판독(read)을 시도할 때, T[i]는 T[i]가 시작되기 전 커밋된 가장 최근의 x 버전을 판독(read)할 수 있다. 즉, j가 i보다 작은 가장 큰 트랜잭션 식별자인경우, T[j]는 x를 기록(write)하고 T[j]는 T[i]가 시작되기 전에 커밋되도록,T[i]가 x[j]를 판독(read)할 수 있다.
2) X[i]가 트랜잭션 T[i]에 의해 기록(write)된 x의 버전인 경우, 데이터 요소 x가 주어졌을 때, T[j]가 x를 기록하고 T[j]가 T[i]와 동시적이고 T[j]가 먼저 커밋되도록, 트랜잭션 T[j]가 없으면, T[i]는 커밋될 수 있다.
일반적으로, 상기 전술된 규칙들은 동시적인 트랜잭션들 간에 높은 수준의 격리를 제공한다. 특히, 제 1 규칙은 더티 판독들(read)(즉, 데이터 요소의 커밋되지 않은 버전의 판독(read))를 방지하고, 제 2 규칙은 데이터의 의도하지 않은 겹쳐진 기록(write)을 방지한다. 어느 규칙들도 차단(blocking) 또는 대기(waiting)를 필요로 하지 않는다.
1.4 2 단계 커밋 프로시져
상기 분산 데이터베이스 시스템(102)의 분산된 특성으로 인해, 상기 통신 네트워크(106)를 통한 메시지들의 송신과 수신 사이에는 본질적인 지연이 존재하며, 네트워크 메시지들이 노드(108)에서 수신되고 처리되는 순서는 노드가 전송된 순서와 다를 수 있다. 이러한 본질적인 지연으로 인해 원자성(atomicity)(클라이언트의 관점에서)을 확보하는 것은 복잡한 동작이다. 상기 클라이언트의 관점으로부터 원자성을 확보하기 위해, 상기 분산 데이터베이스 시스템(102)은 상기 분산 데이터베이스 시스템(102)의 상기 노드들(108) 가운데 커밋 오퍼레이션들을 조정하기 위해 2 단계 커밋 프로시져를 사용한다.
상기 2 단계 커밋 프로시져에서, 상기 분산 데이터베이스 시스템(102)에서 동작하는 트랜잭션은 활성화(ACTIVE)상태, 준비중(PREPARING) 또는 준비된(PREPARED)상태, 커밋팅(COMMITTING) 또는 커밋티드(COMMITTED) 상태, 또는 취소중(ABORTING) 또는 취소된(ABORTED) 상태일 수 있다. 준비(PREPARE) 단계에서 트랜잭션에 참여하는 각각의 노드는 트랜잭션이 커밋 할 수 있는지 여부를 결정하는 유효성 프로시져를 수행한다. 모든 파티션들이 상기 트랜잭션이 커밋 될 수 있다고 동의하면(긍정적으로) 트랜잭션이 커밋된다. 그렇지 않으면, 상기 트랜잭션은 취소된다.
1.5 분산 데이터베이스 기록(write)
도 2 내지 도 6을 참조하면, 데이터 요소의 신규 버전을 기록(write)하고 2 단계 커밋 프로토콜을 사용하여 성공적으로 커밋하는 트랜잭션의 한 가지 예시가 도시되어있다. 도 2를 참조하면, 분산 데이터베이스 시스템(202)의 일부는 제 1 노드(108a), 제 2 노드(108b) 그리고 제 5 노드(108c)를 포함한다. (본 실시 예에 대한 노드의 "첫 번째" 또는 "두 번째" 등으로 라벨을 지정해도, 다른 실시 예들 에서는, 적당한 경우 이러한 라벨들의 변경을 막을 수 없다.) 상기 제 2 노드(108b)는 상기 분산 데이터베이스 시스템(202)에 대한 리더 노드로 지정된다. 제 1 트랜잭션의 T[52,75]은 이전에 상기 제 1 노드(108a)에서 완료되어, 데이터 요소 x[52](218)의 버전을 결과적으로 얻고, x[52](218)는 제 1 노드(108a)에서 제 1 데이터베이스 프래그먼트(112a)에 기록(write)된다. 상기 제 1 트랜잭션의 제 1 로컬 레코드(220)는 상기 제 1 노드(108a)의 제 1 로컬 트랜잭션 관리자(114a)에 저장된다.
제 2 트랜잭션 는 클라이언트가 시작 트랜잭션(Begin Transaction)메시지(미도시)를 상기 전역 트랜잭션 관리자(116)로 송신할 때, 상기 분산 데이터베이스 시스템(202)에서 시작된다. 상기 전역 트랜잭션 관리자(116)는 상기 제 2 트랜잭션: T[105, FUTURE]에 대한 전역 레코드(221)를 생성하고 클라이언트에 Started T[105] 메시지(미도시)로 응답한다. 이후 상기 클라이언트는 상기 제 1 노드(108a)에서 트랜잭션 T[105]에 대한 Write(x) 명령, 그리고 상기 제 5 노드(108c)에서 트랜잭션 T[105]에 대한 적어도 하나의 다른 명령들(미도시)을 발행한다. 상기 제 2 트랜잭션은 상기 제 1 노드(108a)와 제 5 노드(108c)에 대해 새로운 것이기 때문에, 상기 제 1 노드(108a)와 제 5 노드(108c) 각각은 상기 제 2 트랜잭션에 대한 참여(T[105])메시지를 리더 노드(즉, 제 2 노드(108b))의 전역 트랜잭션 관리자(116)로 전송한다. 상기 전역 트랜잭션 관리자(116)는 제 1 노드(108a)와 제 5 노드(108c)가 트랜잭션:T[105,FUTURE]:N1N5에 참여되었다는 것을 반영하기 위해 상기 전역 레코드(221)를 업데이트 한다. 상기 전역 레코드(221)는 상기 트랜잭션 식별자(105)를 가진 트랜잭션은 현재 활성 상태(즉, 상기 전역 레코드(221)의 커밋 식별자는 퓨처(FUTURE))이고, 상기 제 1 노드(108a)와 제 5 노드(108c)에서 동작중임을 지시한다. 도 3 을 참조하면, 상기 전역 트랜잭션 관리자(116)는 트랜잭션(T [105])에 대한 엠프티(empty) "완료중 트랜잭션 리스트"(즉, 하기에 보다 상세히 기술됨)를 상기 제 1 노드(108a)과 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 송신한다. 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c) 각각은 제 2 트랜잭션:T[105, 퓨처(FUTURE)]에 대한 제 2 로컬 레코드(222)를 생성한다. 상기 제 1 노드(108a)는 Write(x) 명령의 실행을 계속하여, 상기 제 1 데이터베이스 프래그먼트(112a)에 기록(write)된 x의 제 2 버전 x[105](224)을 얻는다. 비록, 도시되지는 않았지만, 상기 제 5 노드(108c) 또한 제 2 트랜잭션에 대한 명령들의 실행을 진행한다.
도 4를 참조하면, 상기 제 2 트랜잭션의 명령들이 완료되면, 상기 클라이언트는 상기 전역 트랜잭션 관리자(116)에 완료중 트랜잭션(End Transaction) 메시지(미도시)를 전송하고, 상기 전역 트랜잭션 관리자(116)는 이후 상기 제 2 트랜잭션에 대한 커밋 식별자(즉, 111)를 생성하고 상기 제 2 트랜잭션에 대한 전역 레코드(221)를 업데이트하여 커밋 식별자를 포함시킨다. 또한, 상기 전역 트랜잭션 관리자(116)는 상기 제 2 트랜잭션(도 4에 별표로 도시됨)이 준비(PREPARE)상태인것으로 상기 전역 레코드(221)를 표시하고 상기 로컬 레코드(221)의 업데이트 버전인 T[105,111]*:N1N5를 결과적으로 얻는다. 상기 전역 트랜잭션 관리자(116)는 완료중 트랜잭션 식별자(즉, ())들의 엠프티(empty) 리스트를 포함하는 Prepare(T[105,111]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 전달한다. 상기 전역 트랜잭션 관리자(116)로부터 Prepare(T [105,111]) 메시지를 수신한 것에 응답함으로써, 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)은 상기 제 2 트랜잭션에 대한 자신들의 로컬 레코드를 T[105,111]로 업데이트하고 이들이 제 2 트랜잭션을 커밋 할 준비가 되어 있는지 여부를 결정한다.
도 5를 참조하면, 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c) 모두는 상기 노드들(108a, 108c)이 상기 제 2 트랜잭션을 커밋될 준비가 되었음을 나타내는 OK(T[105]) 메시지로서 상기 전역 트랜잭션 관리자(116)에 응답한다. 도 6 을 참조하면, 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로부터 상기 전역 트랜잭션 관리자(116)는 OK(T [105]) 메시지를 수신한 것에 응답하여, commit(T[105]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 전송하고, 제 2 트랜잭션이 커밋되도록하고 x의 신규로 기록된 버전인 x[105]를 커밋하는 것을 포함한다.
1.6 분산 데이터베이스 판독(read)
도 7 내지 도 11를 참조하면, 2 단계 커밋 프로토콜을 사용하여 데이터 요소들의 버전을 판독(read)하고 커밋하는 트랜잭션의 실시 예가 도시되어 있다. 도 7을 참조하면, 분산 데이터베이스 시스템(202)의 부분은 제 1 노드(108a), 제 2 노드(108b), 그리고 제 5 노드(108c)를 포함한다. 상기 제 2 노드(108b)는 상기 분산 데이터베이스 시스템(202)에서 리더 노드로 지정된다. 제 1 트랜잭션의 T[52,75]은 상기 제 1 노드(108a)에서 미리 완료되어, 상기 제 1 노드(108a)에 제 1 데이터베이스 프래그먼트(112a)에 기록(write)되는 데이터 요소 x의 버전인, x[52](1518)이 된다. 제 1 트랜잭션의 제 1 로컬 레코드(1520)는 상기 제 1 노드(108a)의 제 1 로컬 트랜잭션 관리자(114a)에 저장된다.
클라이언트가 시작 트랜잭션(Begin Transaction) 메시지(미도시)를 전역 트랜잭션 관리자(116)로 송신할 때 제 2 트랜잭션은 상기 분산 데이터베이스 시스템(202)에서 개시된다. 상기 전역 트랜잭션 관리자는 제 2 트랜잭션:T[80, FUTURE] 에 대한 전역 레코드(1521)를 생성하고 Started T[80] 메시지(미도시)로 클라이언트에 응답한다. 이후 상기 클라이언트는 상기 제 1 노드(108a)에서 상기 트랜잭션 T[80]에 대한 Read(x) 명령과 상기 제 5 노드(108c)에서 상기 트랜잭션 T[80](미도시)에 대한 적어도 하나의 다른 명령들을 발행한다. 상기 제 2 트랜잭션은 상기 제 1 노드(108a)과 상기 제 5 노드(108c)에서 신규이므로, 상기 제 1 노드(108a)과 상기 제 5 노드(108c)는 상기 제 2 트랜잭션에 대한 Join(T [80]) 메시지를 리더 노드(즉, 제 2 노드(108b))의 전역 트랜잭션 관리자(116)로 전송한다. 상기 전역 트랜잭션 관리자(116)는 상기 제 1 노드(108a)과 상기 제 5 노드(108c)가 트랜잭션: T[80, FUTURE]: N1N5에 참여했다는 것을 반영하도록 상기 제 2 트랜잭션에 대한 상기 전역 레코드(1521)를 업데이트한다. 상기 전역 레코드(1521)는 트랜잭션 식별자 80을 갖는 트랜잭션이 현재 활성화(즉, 전역 레코드(1521)의 커밋 식별자는 퓨처(FUTURE) 이고 상기 제 1 노드(108a)와 상기 제 5 노드(108c)에 오퍼레이션 중임을 지시한다.
도 8을 참조하면, 상기 전역 트랜잭션 관리자(116)는 T[80]에 대한 완료중 트랜잭션 식별자들의 리스트(즉, (), 이는 이 경우 비어 있음)를 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 다시 보낸다. 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)은 각각 제 2 트랜잭션: T[80, FUTURE]에 대한 상기 로컬 레코드 2(1622)를 생성한다. 상기 제 1 노드(108a)는 상기 Read(x) 명령을 계속해서 실행하여 결과적으로 x[52]이 상기 제 1 데이터베이스 프래그먼트(112a)로부터 판독(read)된다. 또한, 도시되지는 않았지만, 상기 5 노드(108c) 역시 상기 제 2 트랜잭션에 대한 명령들을 계속해서 실행시킨다.
도 9를 참조하면, 상기 제 2 트랜잭션의 명령들이 완료되면, 클라이언트는 전역 트랜잭션 관리자(116)에 완료중 트랜잭션 메시지(미도시)를 전송함으로써 제 2 트랜잭션에 대한 커밋 시퀀스를 시작하고, 전역 트랜잭션 관리자(116)는 이후 제 2 트랜잭션에 대한 커밋 식별자를 생성하며(즉 85), 상기 커밋 식별자를 포함하도록 상기 제 2 트랜잭션에 대한 전역 레코드(1521)를 업데이트한다. 상기 전역 트랜잭션 관리자(116)는 제 2 트랜잭션(도 9에서 별표로 표시됨)에 대한 전역 레코드(1521)를 준비(PREPARE) 상태로 표시하여 전역 레코드(1521)의 업데이트 된 버전인 T[80,85]*:N1N5를 생성한다. 상기 전역 트랜잭션 관리자(116)는 완료중 트랜잭션 식별자들(즉,())의 엠프티(empty) 리스트를 포함하는 Prepare(T[80,85]) 메시지를 상기 제 1 노드(108a)와 제 5 노드(108c)의 상기 로컬 트랜잭션 관리자들(114a, 114c)로 송신한다. 상기 전역 트랜잭션 관리자(116)로부터 Prepare(T [80,85]) 메시지를 수신한 것에 응답하여, 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(l14a, 114c) 각각은 상기 제 2 트랜잭션에 대한 상기 제 2 로컬 레코드(1622)를 T[80,85]로 업데이트 하며 제 2 트랜잭션을 커밋할 준비가되어 있는지 여부를 결정한다.
도 10을 참조하면, 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)은 상기 제 1 노드(108a)와 상기 제 5 노드(108c) 모두가 상기 제 2 트랜잭션을 커밋할 준비가 되었음을 지시하는 OK(T [80]) 메시지로 상기 전역 트랜잭션 관리자(116)에 응답한다. 도 11을 참조하면, 상기 전역 트랜잭션 관리자(116)는 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로부터 OK(T[80]) 메시지를 수신한 것에 응답함으로써, 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)에 메시지 Commit(T [80])를 전송하여 제 2 트랜잭션을 커밋시킨다.
1.7 최적화된 분산 데이터베이스 오퍼레이션
전술한 예시적인 분산 데이터베이스 트랜잭션에서, 판독(read)과 기록(write) 오퍼레이션들은 분산 데이터베이스에서 실행되며 2 단계 커밋 프로시져(porcedure)에서 아무런 문제가 발생하지 않는다. 그러나, 일부 실시 예들에서, 적어도 하나의 트랜잭션들이 자신의 준비(PREPARE)단계들에 있을 때, 모호성들이 발생하여 상기 분산 데이터베이스 시스템(102)에서 비효율적인 오퍼레이션을 초래할 수 있다.
하기에서 보다 상세히 기술되는 바와 같이, 이러한 모호성들은 자신의 노드(108)에 실행되는 각각의 트랜잭션의 레코드를 유지하는 로컬 트랜잭션 관리자(114)를 사용하여 완화된다. 상기 로컬 트랜잭션 관리자에 저장된 트랜잭션의 각각의 레코드는 트랜잭션의 수명 T[i,k](여전히 활성 트랜잭션의 경우 k = FUTURE을 가짐)을 포함한다. 상기 로컬 트랜잭션 관리자에 의해 유지되는 레코드들은 모호성들로부터 유래된 특정 충돌들을 해결하는데 사용될 수 있다.
1.7.1 최적화된 분산 데이터베이스 기록(write)
일부 실시 예들에서, 제 1 트랜잭션과 제 2 트랜잭션 모두는, 데이터 요소의 상이한 버전을 기록(write)하고 제 2 트랜잭션의 트랜잭션 식별자가 상기 제 1 트랜잭션에 대한 트랜잭션 식별자보다 크고 상기 제 1 트랜잭션의 커밋 식별자보다 작은 상태로 준비(PREPARE)단계에 있을 때, 모호성으로 인해 비효율이 발생할 수 있다. 특히, 상기 제 2 트랜잭션의 경우 상기 제 1 트랜잭션이 커밋 될지 또는 취소 될지 여부를 알 수 없기 때문에 자신의 기록(write) 오퍼레이션을 취소 해야 할지 여부에 대해 알 수 있는 방법이 없다. 이는 상기 제 2 트랜잭션의 너무 이른 취소의 결과를 가져온다.
도 12를 참조하면, 이러한 상황이 발생하는 것을 피하기 위해, 최적화된 데이터베이스 기록(write) 알고리즘(1200)이 사용된다. 상기 최적화된 데이터베이스 기록(write) 알고리즘(1200)의 제 1 단계(1202)에서, 데이터베이스 기록(write) 오퍼레이션(아마도 다른 오퍼레이션들 중 가운데에서)을 포함하는 트랜잭션에 대한 시작 트랜잭션(Begin Transaction)메시지가 리더 노드의 전역 트랜잭션 관리자에서 수신한다. 제 2 단계(1204)에서, 데이터베이스 기록(write) 오퍼레이션에 참여할 데이터베이스 시스템의 노드들의 로컬 트랜잭션 관리자는 전역 트랜잭션 관리자에 참여 메세지들(Join() messages)을 보낸다. 제 3단계(1206)에서, 상기 트랜잭션들은 트랜잭션에 참여하는 노드들에 저장된 데이터 요소들 상에서 실행된다. 제 4 단계(1208)에서, 상기 트랜잭션의 실행이 완료되자마자, 종료 트랜잭션(End Transaction)메시지는 전역 트랜잭션 관리자에서 수신한다. 제 5 단계(1210)에서, 상기 전역 트랜잭션 관리자는 완료중 트랜잭션들의 리스트를 포함하는 준비 메세지들(prepare() messages)을 상기 참여 노드들의 로컬 트랜잭션 관리자들로 송신한다.
제 6 단계(1212)에서, 참여 노드들의 상기 로컬 트랜잭션 관리자들은 트랜잭션들의 완료중 트랜잭션들의 리스트를 자신들이 현재 관리하고 있는 트랜잭션 레코드와 비교하여 상기 트랜잭션과 동일한 데이터 요소들에 오퍼레이션하는 임의의 다른 트랜잭션이 트랜잭션 준비 상태가 되기 전에 준비(PREPARE) 상태에 놓였는지 여부를 결정한다. 이러한 과거의 트랜잭션들이 존재하면, 상기 알고리즘은 상기 로컬 트랜잭션 관리자가 과거의 상기 트랜잭션들이 완료될 때까지 상기 트랜잭션을 슬립(sleep)(즉, 로컬 트랜잭션 관리자에 의해 중단된 상태가 됨) 상태로 만드는 제 7 단계(1214)로 진행한다. 이러한 방식으로 상기 트랜잭션을 중단하면 과거의 트랜잭션들의 결과가 알려질 때까지 상기 트랜잭션을 취소 할지 여부를 결정하는 것을 지연시킨다.
이와 같은 과거의 트랜잭션들이 존재하지 않거나, 상기 트랜잭션이 깨어날 때, 상기 알고리즘은 상기 로컬 트랜잭션 관리자들이 상기 트랜잭션이 커밋될 수 있는지 결정하는 제 8 단계(1216)로 진행한다.
상기 트랜잭션이 커밋 될 수 있는 경우, 상기 알고리즘은 참여 노드들의 모든 로컬 트랜잭션 관리자들이 상기 전역 트랜잭션 관리자에 OK() 메시지를 전송하는 제 9 단계(1218)로 진행한다. 이어서, 제 10 단계(1220)에서, 상기 전역 트랜잭션 관리자는 Commit() 메시지를 참여 노드들의 로컬 트랜잭션 관리자들에게 송신한다. 마지막으로, 제 11 단계(1222)에서, 상기 트랜잭션들의 변화는 참여 노드들에서 커밋된다.
상기 트랜잭션이 커밋 될 수 없는 경우, 상기 알고리즘은 적어도 하나의 참여 노드들의 로컬 트랜잭션 관리자가 NotOK() 메시지를 전역 트랜잭션 관리자로 전송하는 제 12 단계(1224)로 진행한다. 이후, 제 13 단계(1226)에서, 상기 전역 트랜잭션 관리자는 Abort() 메시지를 참여 노드들의 로컬 트랜잭션 관리자들로 송신한다. 마지막으로, 제 14 단계(1228)에서, 상기 트랜잭션들의 변경들은, 참여 노드들에서 롤백 된다.
다음의 예는 도 12의 알고리즘의 단계들(1210-1228)의 적용을 도시한다. 도 13을 참조하면, 분산 데이터베이스 시스템의 일부분은 제 1 노드(108a), 제 2 노드(108b), 제 5 노드(108c)를 포함한다. 상기 제 2 노드(108b)는 상기 분산 데이터베이스 시스템(202)의 리더 노드로서 지정된다. 제 1 트랜잭션 T[100, FUTURE]의 상기 제 1 노드(108a)의 제 1 데이터베이스 프래그먼트(112a)에 데이터 요소 x의 제 1 신규 버전인 x[100](626)을 기록(write)하고 상기 제 5 노드(108c)에서 적어도 하나의 다른 오퍼레이션들(미도시)을 수행한다. 제 2 트랜잭션 T[105, FUTURE]은 상기 제 1 노드(108a)의 제 1 데이터베이스 프래그먼트(112a)에 데이터 요소 x의 재 2 새로운 버전 x[105](224)을 기록(write)하고(122), 적어도 하나의 다른 오퍼레이션들(미도시)을 상기 제 5 노드(108c)에서 수행한다. 상기 전역 트랜잭션 관리자(116)는 제 1 트랜잭션:T[100,FUTURE]:N1N5에 대한 제 1 전역 레코드(721)를 포함한다. 상기 제 1 전역 레코드(721)는 상기 제 1 트랜잭션이 트랜잭션 식별자 100을 가지며 상기 제 1 노드(108a)와 상기 제 5 노드(108c)에서 현재 활성화임을 지시한다. 상기 전역 트랜잭션 관리자(116)는 또한, 상기 제 2 트랜잭션:T[105,FUTURE]:N1N5에 대한 제 2 전역 레코드(726)를 포함한다. 상기 제 2 전역 레코드(726)는 상기 제 2 트랜잭션이 트랜잭션 식별자 105를 가지며 상기 제 1 노드(108a)와 상기 제 5 노드(108c)에서 현재 활성화임을 지시한다. 상기 제 1 트랜잭션의 제 1 로컬 레코드의 T[100,FUTURE](720)와 제 2 트랜잭션의 제 2 로컬 레코드의 T[105,FUTURE](722) 모두는 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a,114c)에 저장된다.
도 14 를 참조하면, 상기 제 1 트랜잭션의 명령들이 완료되면, 클라이언트는 완료중 트랜잭션(End Transaction) 메시지(미도시)를 상기 전역 트랜잭션 관리자(116)로 송신함으로써 상기 제 1 트랜잭션과 상기 제 2 트랜잭션에 대한 커밋 시퀀스를 시작하고, 상기 전역 트랜잭션 관리자(116)는 이후 상기 제 1 트랜잭션에 대한 커밋 식별자(즉, 110)를 생성하며 상기 커밋 식별자가 포함되도록 상기 제 1 트랜잭션에 대한 상기 제 1 전역 레코드(721)를 업데이트 한다. 또한, 상기 전역 트랜잭션 관리자(116)는 상기 제 1 트랜잭션에 대한 상기 제 1 전역 레코드(721)를 준비(PREPARE) 상태(도 14에서 별표로 도시됨)로 표시하여, 업데이트 된 버전인 상기 제 1 전역 레코드(721):T[100,110]*:N1N5의 결과적으로 얻는다. 상기 전역 트랜잭션 관리자(116)는 완료중 트랜잭션 식별자들(즉,())의 엠프티(empty) 리스트를 포함하는 Prepare(T[100,110]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 관리자들(114a,114c)로 송신한다. 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)은 각각은 전역 트랜잭션 관리자(116)로부터 Prepare(T [100,110]) 메시지를 수신한 것에 응답하여, 상기 제 1 트랜잭션에 대한 제 1 로컬 레코드(720)를 T[100, 110]로 업데이트하고 그들이 상기 제 1 트랜잭션을 커밋 할 준비가 되었는지 여부를 결정하기 시작한다.
도 15를 참조하면, 상기 제 2 트랜잭션에 대한 명령들이 완료되면, 클라이언트는 상기 전역 트랜잭션 관리자(116)에 종료 트랜잭션(End Transaction)메시지(미도시)를 송신함으로써 상기 제 2 트랜잭션에 대한 커밋 시퀀스를 개시하고 상기 전역 트랜잭션 관리자(116)는 상기 제 2 트랜잭션에 대한 커밋 식별자(즉,111)를 생성하여 상기 제 2 트랜잭션에 대한 제 2 전역 레코드(726)를 업데이트하여 상기 커밋 식별자를 포함시킨다. 상기 전역 트랜잭션 관리자(116)는 또한 상기 제 2 트랜잭션에 대한 제 2 전역 레코드(726)를 준비(PREPARE) 상태(도 15에서 별표 표시로 도시됨)인것으로 표시하여 업데이트 된 버전인 상기 제 2 전역 레코드(726):T[105,111]*:N1N5을 결과적으로 얻는다. 상기 전역 트랜잭션 관리자(116)는 Prepare(T[105,111]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 전역 관리자들(114a,114c)로 송신한다. Prepare(T [105,111]) 메시지에 따라서, 상기 전역 트랜잭션 관리자(116)는 "완료중 트랜잭션 식별자"의 리스트를 송신한다. 일부 실시 예에서, T[100]은 완료중 트랜잭션(즉, T [100]이 Prepare (T [105,111]) 메시지가 전역 트랜잭션 관리자(116)에 의해 전송되기 전에 준비(PREPARE) 상태에 있음)이기 때문에 완료중 트랜잭션 식별자의 리스트에는 T[100]이 포함된다.
상기 전역 트랜잭션 관리자(116)로부터 Prepare(T[105,111]) 메시지를 수신하는 것에 응답하여, 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a,114c) 각각은 상기 제 2 트랜잭션에 대한 제 2 로컬 레코드(722)를 T[105,111]으로 업데이트 하고 그들이 제 2 트랜잭션을 커밋 할 준비가 되었는지 여부를 결정하기 시작한다.
도 15에 도시된 시점에서, 상기 분산 데이터베이스 시스템(102)은 제 2 트랜잭션이 안전하게 커밋 될 수 있는지를 결정할 필요가 있다. 그렇기 위해 한 가지 간단한 방법으로, 상기 분산 데이터베이스 시스템(102)은 상기 제 1 트랜잭션의 커밋 식별자와 상기 제 2 트랜잭션의 커밋 식별자를 비교하여 어느 트랜잭션이 가장 빠른 커밋 식별자를 갖는지를 결정할 수 있다. 상기 두 개의 커밋 식별자들의 중 후자가 취소된다. 도 15 의 실시 예에서, 상기 제 2 트랜잭션은 이러한 간단한 방법을 사용함으로써 취소될 수 있다. 그러나, 상기 제 1 트랜잭션은 준비(PREPARE) 상태에 있고 아직 커밋되지 않았다. 또한, 상기 제 1 트랜잭션은 취소될 수도 있다. 상기 제 1 트랜잭션이 취소될 경우, 이후 전술한 이러한 간단한 방법은 두 트랜잭션들이 모두 취소될 경우 비효율적이고 바람직하지 않은 결과를 가져오게 된다.
이러한 비효율적이고 바람직하지 않은 결과를 피하기 위해 완료중 트랜잭션 식별자들의 리스트를 사용하는 다른 방법을 사용하여 제 2 트랜잭션이 안전하게 커밋 될 수 있는지 여부를 결정한다. 특히, 상기 제 2 트랜잭션이 준비(PREPARE) 단계에 있을 때, 상기 제 2 트랜잭션과 동일한 데이터 요소(들)에 접근하고 트랜잭션 식별자가 제 2 트랜잭션의 트랜잭션 식별자보다 작은 트랜잭션 식별자를 가진 완료중 트랜잭션 식별자들의 리스트가 존재하는지 결정하기 위해 완료중 트랜잭션 식별자들의 리스트가 참조된다. 이러한 경우, 제 1 트랜잭션(완료중 트랜잭션 식별자들의 리스트에 포함되어 있는)은 준비중(PREPARING) 상태이며, 제 2 트랜잭션(즉, x)와 동일한 데이터 요소에 접근하고, 제 2 트랜잭션의 트랜잭션 식별자(즉, 105)보다 작은 트랜잭션 식별자(즉, 100)를 갖는다. 로컬 트랜잭션 관리자(114)가 제 1 트랜잭션이 성공적으로 커밋될지 또는 취소될지 알 수 없기 때문에, 상기 로컬 트랜잭션 관리자(114)는 제 1 트랜잭션이 커밋되거나 취소 될 때까지 제 2 트랜잭션을 중단시킨다.
도 16을 참조하면, 상기 제 1 노드(108a)의 데이터베이스 관리자(110a)는 상기 제 1 트랜잭션이 커밋 할 수 있음을 지시하는 OK(T [100]) 메시지를 전역 트랜잭션 관리자(1l16)에 전송한다. 그러나, 상기 제 5 노드(108c)는 제 1 트랜잭션이 커밋 할 수 없음을 지시하는 NotOK(T [100]) 메시지를 전역 트랜잭션 관리자(116)에 전송한다. 도 17을 참조하면, 상기 제 5 노드(108c)로부터 상기 Not OK(T[100]) 메시지를 수신하는 것에 대한 결과로서, 상기 전역 트랜잭션 관리자(116)는 제 1 전역 레코드(721)를 삭제하고 Abort(T [100]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)로 전송함으로써 상기 제 1 트랜잭션을 취소한다.
상기 전역 트랜잭션 관리자(116)로부터 Abort(T[100]) 메시지를 수신 하자마자, 상기 제 1 노드(108a)는 자신의 데이터 프래그먼트(112a)으로부터 데이터 요소 x의 x[100] 버전을 삭제하고 자신의 로컬 트랜잭션 관리자(114a)로부터 상기 제 1로컬 레코드(720)를 삭제한다. 또한, 마찬가지로, 상기 제 5 노드(108c)는 자신의 로컬 트랜잭션 관리자(114c)로부터 제 1 로컬 레코드(720)를 삭제한다. 제 1 트랜잭션이 취소됨에 따라, 제 2 트랜잭션이 웨이크(wake)된다.
도 18을 참조하면, 웨이킹(waking)하자마자 상기 제 1 노드(108a)의 데이터베이스 관리자(110a)는 상기 제 2 트랜잭션이 커밋 할 준비가 되었음을 지시하는 OK(T [105]) 메시지를 상기 전역 트랜잭션 관리자(116)에 송신한다. 또한, 상기 제 5 노드(108c)는 상기 제 2 트랜잭션이 커밋 될 준비가 되었음을 지시하는 OK(T[105]) 메시지를 상기 전역 트랜잭션 관리자(116)로 송신한다.
상기 제 1 노드(108a)와 상기 제 5 노드(108c)로부터 수신하는 상기 OK(T[105]) 메시지들을 도 19 에서 참조하면, 상기 전역 트랜잭션 관리자(116)는 상기 제 2 트랜잭션상에서 동작되고 있는 모든 노드들이 상기 제 2 트랜잭션이 커밋될 준비가 되었음을 지시하였는지를 결정한다. 상기 전역 트랜잭션 관리자(116)는 상기 제 2 전역 레코드(726)가 더 이상 준비되지 않은 것으로 표시하고 Commit(T [105]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)로 전송하며, x의 x[105] 버전이 상기 제 1 노드(108a)의 데이터베이스 프래그먼트(112a)에 커밋 하도록 하는 것을 포함하여, 제 2 트랜잭션이 커밋되도록한다.
1.7.2 최적화된 분산 데이터베이스 판독(read)
일부 실시 예에서, 제 1 트랜잭션이 데이터 요소의 신규 버전을 기록(write)하고 준비(PREPARE) 단계에 존재하며, 상기 데이터 요소를 판독(read)하기 위한 오퍼레이션을 포함하고 상기 제 1 트랜잭션의 트랜잭션 식별자보다 크고 제 1 트랜잭션의 커밋 식별자보다 큰 트랜잭션 식별자를 갖는 제 2 트랜잭션이 활성이면, 시스템의 비효율적인 오퍼레이션을 일으킬 수 있는 모호성이 발생할 수 있다. 특히, 제 1 트랜잭션이 커밋되거나 취소되는지 여부에 대해 알려지지 않았기 때문에 상기 데이터 요소의 신규 버전을 판독(read)하거나 또는 상기 데이터 요소의 이전 버전을 판독(read)해야 하는지 제 2 트랜잭션은 알 수 있는 방법이 없다.
도 20을 참조하면, 이러한 상황 발생을 피하기 위해, 최적화된 데이터베이스 판독(read) 알고리즘(1900)이 사용된다. 최적화된 데이터베이스 판독(read) 알고리즘(1900)의 제 1 단계에서 데이터베이스 판독(read) 오퍼레이션(다른 오퍼레이션들 중 가운데에서)을 포함하는 트랜잭션에 대한 시작 트랜잭션(Begin Transaction) 메시지는 리더 노드의 상기 전역 트랜잭션 관리자에서 수신한다. 제 2 단계(1904)에서, 상기 데이터베이스 시스템의 노드들의 로컬 트랜잭션 관리자들은 데이터베이스에서 판독(read) 오퍼레이션에 참여하고 상기 전역 트랜잭션 관리자에 Join() 메시지들을 송신한다. 제 3 단계(1906)에서, 상기 전역 트랜잭션 관리자는 완료중 트랜잭션의 리스트를 참여 노드들의 상기 로컬 트랜잭션 관리자에 송신한다.
제 4 단계(1908)에서, 데이터 요소를 판독(read) 전에, 참여 노드들의 로컬 트랜잭션 관리자는 완료중 트랜잭션 리스트를 현재 관리하고 있는 트랜잭션과 비교하여 완료중 트랜잭션 리스트가 다른 트랜잭션이 준비(PREPARE) 상태에 있는지 여부를 판별하고 상기 트랜잭션을 개시하기 전에 데이터 요소의 버전을 기록(write)한다. 이러한 완료중 트랜잭션들이 존재하면, 상기 로컬 트랜잭션 관리자가 완료중 트랜잭션들이 완료될 때까지 상기 트랜잭션을 중단상태가 되도록 하는 제 5 단계(1910)로 진행한다. 트랜잭션을 중단되도록 하는 것은 상기 트랜잭션에 의해 판독(read)된 데이터 요소의 버전의 결정을 지연시킨다. 이러한 완료중 트랜잭션들이 존재하지 않거나 상기 트랜잭션들이 실행될 때, 상기 알고리즘은 상기 판독(read) 오퍼레이션이 상기 트랜잭션의 시작 이전에 가장 최근에 커밋된 데이터 요소들의 버전에 실행되는 제 6 단계(1912)로 진행된다.
제 7 단계(1913)에서, 종료 트랜잭션(End Transaction)메시지는 상기 전역 트랜잭션 관리자에서 수신한다. 제 8 단계(1915)에서, 상기 전역 트랜잭션 관리자는 준비 메세지들(Prepare() messages)을 메시지를 참여 노드들의 로컬 트랜잭션 관리자들에게 송신한다.
제 9 단계(1914)에서, 상기 로컬 트랜잭션 관리자는 상기 트랜잭션이 커밋되었는지 여부를 결정한다. 상기 트랜잭션이 커밋 될 경우, 상기 알고리즘은 모든 참여 노드들의 상기 로컬 트랜잭션 관리자들이 OK() 메시지를 상기 전역 트랜잭션 관리자에게 송신하는 제 10 단계(1916)로 진행된다. 이후, 제 11 단계(1918)에서, 상기 전역 트랜잭션 관리자는 참여 노드들의 상기 로컬 트랜잭션 관리자들에게 커밋 메시지를 송신한다. 마지막으로, 제 12 단계(1920)에서, 상기 트랜잭션의 변경들은 참여 노드들에서 커밋된다.
상기 트랜잭션이 커밋되지 않는 경우, 상기 알고리즘은 참여 노드들의 적어도 하나의 상기 로컬 트랜잭션 관리자가 상기 전역 트랜잭션 관리자에 NotOK() 메시지를 송신하는 제 13 단계(1922)로 진행된다. 이후, 제 14 단계에서, 상기 전역 트랜잭션 관리자는 Abort() 메시지를 상기 참여 노드들의 로컬 트랜잭션 관리자들에 송신한다. 마지막으로, 제 15 단계(1926)에서, 상기 트랜잭션의 변경들은 참여 노드들에서 롤백된다.
예를 들어, 분산 데이터베이스 시스템(202)의 일정 부분은 제 1 노드(108a), 제 2 노드(108b), 제 5 노드(108c)를 포함한다. 상기 제 2 노드(108b)는, 상기 분산 데이터베이스 시스템(202)에서 리더 노드로 지정된다. 제 1 트랜잭션의 T[52,75]는 상기 제 1 노드(108a)에서 이전에 완료되고, 데이터 요소의 x의 신규 버전인 x[52](2018)가 상기 제 1 노드(108a)상의 제 1 데이터베이스 프래그먼트(112a)에 기록(write)된다. 제 2 트랜잭션의 T[100,110]은 상기 제 1 노드(108a)와 상기 제 2 노드(108b) 모두에서 활성되었으며, 상기 제 1 노드(108a)에 상기 제 1 데이터베이스 프래그먼트(112a)에 데이터 요소 x의 버전인 x[100](2019)를 기록(write)한다. 상기 제 1 트랜잭션의 제 1 로컬 레코드(2020)는 상기 제 1 노드(108a)의 로컬 트랜잭션 관리자(114a)에 저장된다. 제 2 로컬 레코드(2022)는 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)에 저장된다. 상기 전역 트랜잭션 관리자(116)는 제 2 트랜잭션에 대한 완료중 트랜잭션 식별자들(즉, ())의 엠프티(empty) 리스트들을 포함하는 Prepare(T[100,110])을 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 전송한다.
도 22를 참조하면, 클라이언트가 시작 트랜잭션(Begin Transaction) 메시지(미도시)를 전역 트랜잭션 관리자(116)에 메시지를 송신할 때 제 3 트랜잭션은 분산 데이터베이스 시스템(202)에서 시작된다. 상기 트랜잭션 관리자(116)는 상기 제 3 트랜잭션의 T[111,FUTURE]에 대한 전역 레코드(2127)를 생성하여 Started(T[111])메시지(미도시)를 가진 클라이언트에 응답한다. 상기 클라이언트는 이후 상기 제 1 노드(108a)에서 트랜잭션 T[111]에 대한 Read(x) 명령과 제 5 노드(108c)에서 트랜잭션 T[111](미도시)에 대한 적어도 하나의 명령들을 발행한다. 상기 제 3 트랜잭션이 제 1 노드(108a)와 제 5 노드(108c)에서 신규이기 때문에, 제 1 노드(108a)와 제 5 노드(108c) 각각은 제 3 트랜잭션에 대한 Join(T[111]) 메시지를 리더 노드(즉 제 2 노드(108b))의 전역 트랜잭션 관리자(116)로 송신한다. 상기 전역 트랜잭션 관리자(116)는 이후 상기 제 1 노드(108a)와 상기 제 5 노드(108c)이 상기 트랜잭션의 T[111,FUTURE]:N1N5에 참여되었다는 것을 반영하는 제 3 트랜잭션에 대한 제 2 전역 레코드(2127)를 업데이트 한다. 상기 제 2 전역 레코드(2127)는 상기 트랜잭션 식별자(111)가 현재 활성화(즉, 상기 제 2 전역 레코드(2127)가 FUTURE 상태임)이며 상기 제 1 노드(108a)와 상기 제 5 노드(108c)에서 동작중임을 지시한다.
도 23을 참조하면, 상기 전역 트랜잭션 관리자(116)는 완료중 트랜잭션 식별자들의 리스트를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 다시 보낸다. 이 실시 예에서, 완료중 트랜잭션 식별자들은 T[100]이 완료중 트랜잭션(즉, T[100]은 준비(PREPARE)상태)이므로 T[100]을 포함한다. 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 상기 로컬 전역 트랜잭션 관리자들 각각은 상기 제 3 트랜잭션:T[111,FUTURE]에 대한 제 3 로컬 레코드(2225)를 생성한다.
도 23에 도시 된 시점에서, 상기 제 3 트랜잭션 이전에, T[111]는 x를 판독(read)하려고 시도한다. 상기 제 1 노드(108a)에 대한 상기 로컬 트랜잭션 관리자(114a)는 상기 제 3 트랜잭션과 동일한 데이터 요소들에 접근하고 상기 제 3 트랜잭션의 트랜잭션 식별자보다 작은 트랜잭션 식별자를 갖는 임의의 완료중 트랜잭션이 존재 하는지를 결정하기 위해 완료중 트랜잭션 리스트를 참조함으로써 상기 제 3 트랜잭션이 x를 판독(read) 것이 안전 한지 여부를 결정한다. 이러한 완료중 트랜잭션들이 존재한다면, 상기 제 3 트랜잭션이 x를 판독(read)하는 것이 안전하지 않다. 이러한 경우, 제 2 트랜잭션은 준비중(PREPARING)단계에 있고 상기 제 3 트랜잭션(즉, x)과 동일한 데이터 요소에 접근하며 그리고 상기 제 3 트랜잭션(즉, 111)의 트랜잭션 식별자 보다 작은 트랜잭션 식별자(즉, 100)를 갖는다.
준비중(PREPARING)인 제 2 트랜잭션로 인해, 상기 제 3 트랜잭션인 T[111]은 자체적으로 x[52] 또는 x[100]을 판독(read) 해야할지 여부에 대해 결정할 수 없다. 준비 상태에 있는 T[100,110]인 상기 제 2 트랜잭션에 대해서, 상기 제 2 트랜잭션이 커밋(COMMIT) 또는 취소(ABORT)되어야 하는지 알 수 없다. 상기 제 2 트랜잭션이 취소될 경우, 이후 제 3 트랜잭션은 x[52]를 판독(read)해야 한다. 그렇지 않을 경우, 제 2 트랜잭션이 커밋되면, 이후 제 3 트랜잭션은 x[100]을 판독(read)해야 한다.
그러나, 상기 제 2 트랜잭션이 자신의 결정(즉, 커밋 또는 취소)을 해야되는지는 알 수 없기 때문에, 그래서 상기 제 1 노드(108a)의 상기 로컬 트랜잭션 관리자(114a)는 상기 제 2 트랜잭션이 완료(즉, 커밋되는)될 때까지 중단해야한다.
도 24를 참조하면, 제 1 노드(108a)와 제 5 노드(108c)의 로컬 전역 관리자들(114a, 114c) 두 가지 모든 노드들(108a, 108c)은 제 2 트랜잭션에 대해 커밋할 준비가 되었는지를 지시하는 OK(T[100]) 메시지로 상기 전역 트랜잭션 관리자(116)에 응답한다. 도 25를 참조하면, 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a,114c)로부터 상기 OK(T[100])메세지들을 수신하는 것에 응답하여, 상기 전역 트랜잭션 관리자(116)는 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)에 Commit(T[100]) 메세지를 송신하여 상기 제 2 트랜잭션이 커밋되도록 한다.
Commit(T[100]) 메시지들이 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로부터 수신되면, 상기 로컬 트랜잭션 관리자들(114a, 114c)은 상기 제 2 트랜잭션이 성공적으로 커밋(그리고 취소되지 않음) 되었음을 안다. 상기 로컬 트랜잭션 관리자들(114a,114c)은 제 3 트랜잭션을 실행하도록 만들고 이후 상기 제 1 데이터베이스 프래그먼트(112a)로 부터 x[100]을 판독(read)한다. 도 26 을 참조하면, 제 3 트랜잭션의 오퍼레이션이 완료되면, 상기 전역 트랜잭션 관리자(116)는 상기 제 3 트랜잭션에 대한 커밋 식별자(즉, 115)를 생성시키고 상기 제 3 트랜잭션에 대한 상기 제 2 전역 레코드(2127)가 상기 커밋 식별자를 포함하도록 업데이트한다. 상기 전역 트랜잭션 관리자(116)는 또한 상기 제 3 트랜잭션(도 26에서 별표로 도시됨)이 준비(PREPARE)상태임을 표시하며 제 2 전역 레코드(2127):T[111,115]*:N1N5의 업데이트 버전의 결과를 얻는다.
상기 전역 트랜잭션 관리자들은 완료중 트랜잭션 식별자(즉,())들의 엠프티(empty) 리스트를 포함하는 Prepare(T[111,115]) 메시지를 상기 제 1 노드(108a)과 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)로 송신한다. 상기 전역 트랜잭션 관리자(116)로부터 Prepare(T[111,115])를 수신하는 것에 응답하여, 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 관리자들(114a, 114c)은 자신들의 개별적인 제 3 트랜잭션에 대한 제 3 레코드들(2225)을 T[111,115]로 업데이트 하며 상기 제 3 트랜잭션으로 커밋할 준비가 되었는지 여부에 대해 결정한다.
도 27을 참조하면, 상기 제 1 노드(108a)과 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c) 모두는 두 가지 노드들(108a,108c)이 제 3 트랜잭션에 대해 커밋할 준비가 되었는지 지시하는 OK(T[111]) 메시지들로 상기 전역 트랜잭션 관리자(116)에 응답한다. 도 28을 참조하면, 상기 제 1 노드(108a)과 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)의 OK(T[111]) 메세지들로 수신하는 것에 응답하여, 상기 전역 트랜잭션 관리자(116)는 Commit(T[111]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c)에 송신한다.
1.8 순서가 잘못 정렬된 메시지 처리
일부 실시 예들에서, 둘 이상의 트랜잭션에 대한 준비(PREPARE) 메시지들과 같은 메시지들은 상기 전역 트랜잭션 관리자(116)로부터 상기 분산 데이터베이스 시스템(102)의 노드(108)들로 제 1 순서로 전송 될 수 있지만 상기 로컬 트랜잭션 관리자(114)에 적어도 하나의 노드(108)에 제 1 순서와 다른 제 2 순서로 도착한다. 준비(PREPARE) 메시지들이 전역 트랜잭션 관리자(116)로부터 전송된 순서가 아닌 로컬 트랜잭션 관리자들(114)에서 수신한 순서대로 처리되는 경우, 커밋해야 할 트랜잭션을 잘못 취소함으로써 제 1 커밋 규칙을 위반하는 것과 같은(즉, 데이터 요소를 기록(write)하는 두 개의 동시적인 트랜잭션의 경우 제 1 트랜잭션이 커밋되고 다른 트랜잭션이 취소되어야 함)과 부작용이 발생한다. 이러한 부작용들은 비효율성과 잠재적으로 시스템의 부정확한 오퍼레이션을 일으킬 수 있다.
도 29를 참조하면, 이러한 상황 발생을 예방하기 위해, 순서가 잘못 정렬된 메시지 처리 알고리즘(2700)이 사용된다. 제 1 단계(2702)에서, 완료중 트랜잭션들의 리스트를 포함하는 Prepare()는 제 1 트랜잭션에 참여하는 노드들의 상기 로컬 트랜잭션 관리자들에서 수신한다. 제 2 단계(2704)에서, 상기 로컬 트랜잭션 관리자는 완료중 트랜잭션들의 리스트와 상기 트랜잭션 관리자에 의해 관리되는 트랜잭션들을 제 1 트랜잭션과 비교하여 참여 노드에서 제 1 트랜잭션이지만 아직 준비(PREPARE) 상태에 있는 동일한 데이터 요소들에 기록(write)하는 완료중 트랜잭션들 리스트내의 임의의 트랜잭션인지 여부에 대해 결정한다.
이러한 트랜잭션이 식별되면, 상기 제 1 트랜잭션에 대한 Prepare() 메시지는 순서가 정렬되지 않은 상태로 수신하고, 상기 알고리즘은 로컬 트랜잭션 관리자들이 식별된 트랜잭션이 완료될 때까지 상기 제 1 트랜잭션을 중단되도록 하는 제 3 단계(2706)로 진행한다. 식별된 트랜잭션들이 완료될 때까지 상기 제 1 트랜잭션이 일시 중단 되도록 하여 제 1 커밋터 규칙을 위반하지 않도록 올바른 메시지 순서를 다시 설정한다.
제 1 트랜잭션에 대한 Prepare() 메시지가 순서대로 수신하지 않거나 제 1 트랜잭션이 실행되면, 알고리즘은 상기 로컬 트랜잭션 관리자가 상기 제 1 트랜잭션이 커밋 될 수 있는지 여부를 결정하는 제 4 단계(2708)로 진행한다. 상기 제 1 트랜잭션이 커밋되어지면, 상기 알고리즘은 모든 참여 노드들의 상기 로컬 트랜잭션 관리자들이 OK() 메시지를 상기 전역 트랜잭션 관리자에게 송신하는 제 5 단계(2710)로 진행한다. 이후, 제 6 단계(2712)에서, 전역 트랜잭션 관리자는 참여 노드의 로컬 트랜잭션 관리자에게 Commit() 메시지를 보낸다. 마지막으로, 제 7 단계(2714)에서, 상기 제 1 트랜잭션 들의 변화는 참여 노드들에서 커밋된다.
제 1 트랜잭션이 커밋 되지 않는 경우, 상기 알고리즘은 제 8 단계(2716)로 진행하여, 참여 노드들 중 적어도 하나의 로컬 트랜잭션 관리자가 NotOK() 메시지를 상기 전역 트랜잭션 관리자로 전송한다. 이후, 제 9 단계(2718)에서, 상기 전역 트랜잭션 관리자는 Abort() 메시지를 참여중인 노드들의 상기 로컬 트랜잭션 관리자들에게 송신한다. 마지막으로, 제 10 단계(2720)에서, 상기 제 1 트랜잭션의 변경은 참여 노드에서 롤백된다.
예를 들어, 도 30 을 참조하면, 분산 데이터베이스 시스템의 한 부분은 제 1 노드(108a), 제 2 노드(108b), 그리고 제 5 노드(108c)를 포함한다. 상기 제 2 노드(108b)는 상기 분산 데이터베이스 시스템(202)에 대한 리더 노드로써 지정된다. 제 1 트랜잭션인 T[100,FUTURE]는 데이터 요소 x의 제 1 신규 버전인 x[100]을 상기 제 1 노드(108a)상의 제 1 데이터베이스 프래그먼트(112a)에 기록(write)하고 상기 제 5 노드(108c)에서 적어도 하나의 오퍼레이션들(미도시)을 수행한다. 제 2 트랜잭션인 T[105,FUTURE]는 데이터 요소 x의 제 1 신규 버전인 x[105](224)를 상기 제 1 노드(108a)에 제 1 데이터베이스 프래그먼트(112a)에 기록(write)하며 상기 제 5 노드(108c)에 적어도 하나의 다른 오퍼레이션들(미도시)을 수행한다. 상기 전역 트랜잭션 관리자(116)는 상기 제 1 트랜잭션:T[100,FUTURE]:N1N5에 대한 전역 레코드 1(721)을 포함한다. 상기 제 1 전역 레코드(721)는 제 1 트랜잭션이 트랜잭션 식별자(100)를 가지고 있으며 상기 제 1 노드(108a)와 상기 제 5 노드(108c)에서 현재 활성화임을 지시한다. 상기 전역 트랜잭션 관리자(116)는 상기 제 2 트랜잭션:T[105,FUTURE]:N1N5에 대한 제 2 전역 레코드(726)를 포함한다. 상기 제 2 전역 레코드(726)는 상기 제 2 트랜잭션이 트랜잭션 식별자(105)를 가지고 있으며 상기 제 1 노드(108a)와 상기 제 5 노드(108c)상에서 현재 활성화임을 지시한다. 상기 제 1 트랜잭션의 T[105,FUTURE](720)인 제 1 로컬 레코드와 상기 제 2 트랜잭션의 T[105,FUTURE](722)인 제 2 로컬 레코드 모두는 상기 제 1 노드(108a)와 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a,114c)에 저장된다.
도 31을 참조하면, 상기 전역 트랜잭션 관리자(116)가 END_TRANS(T[100])메시지(예를 들어, 클라이언트들(104)중에 하나로 부터)를 수신할 때, 상기 전역 트랜잭션 관리자(116)는 제 1 트랜잭션에 대한 커밋 식별자(예, 110)를 생성하며 상기 제 1 트랜잭션에 대한 상기 제 1 전역 레코드(721)가 커밋 식별자에 포함되도록 업데이트 한다. 상기 트랜잭션 관리자(116)는 또한 상기 제 1 트랜잭션에 대한 상기 전역 레코드(721)를 준비(PREPARE)상태로 표시하며, 상기 제 1 전역 레코드(721)의 업데이트된 버전인 T[100,110]*:N1N5을 결과적으로 얻는다.
도 32를 참조하면, 상기 전역 트랜잭션 관리자(116)가 END_TRANS(T[105]메시지(예를 들어, 클라이언트(104)중 하나로 부터)를 수신할 때, 상기 전역 트랜잭션 관리자(116)는 제 2 트랜잭션에 대한 커밋 식별자(즉, 111)를 생성하며 상기 제 2 트랜잭션에 대한 제 2 전역 레코드(726)가 상기 커밋 식별자에 포함되도록 업데이트 한다. 상기 전역 트랜잭션 관리자(116)는 또한 상기 제 2 트랜잭션에 대한 제 2 전역 레코드가 준비(PREPARE) 상태(도 32에 별표로 도시된)있음을 표시하며, 업데이트된 버전인 제 2 전역 레코드(726):T[105,111]*:N1N5을 결과적으로 얻는다.
도 33을 참조하면, 상기 전역 트랜잭션 관리자(116)는 우선 완료중 트랜잭션 식별자(즉,())의 엠프티(empty) 리스트를 포함하는 Prepare(T[100,110]) 메시지를 로컬 트랜잭션 관리자들(114a, 114c)에게 송신한다. 상기 전역 트랜잭션 관리자는 이후의 Prepare(T[105,111])메시지를 완료중 트랜잭션 식별자 T[100]을 포함한 리스트와 함께 상기 트랜잭션 관리자들(114a,114c)에게 송신한다.
도 33의 실시 예에서, 상기 Prepare(T[105,111])메시지와 자신의 완료중 트랜잭션 식별자들과 연관된 리스트들은 상기 Prepare(T[105,111])메시지 이전에 상기 로컬 트랜잭션(114a, 114c)에 도달한다. 즉, 상기 Prepare(...) 메시지들은 순서가 정렬되지 않은 상태로 수신한다. 준비(Prepare) 메시지가 로컬 트랜잭션 관리자(114a, 114c)에서 수신된 순서대로 간단하게 처리된 경우, 상기 로컬 트랜잭션 관리자(114a, 114c)는 제 2 트랜잭션의 T[105,111]가 제 1 커밋터이고, T[100]이 취소되도록 결정할 것이다. 물론 상기 제 2 트랜잭션의 T[105,111]가 실제로 제 1 커미터가 아니기 때문에 상기 제 1 트랜잭션을 취소하면 T[100]은 잘못된 오퍼레이션이된다. 즉, 상기 제 1 트랜잭션은 상기 제 2 트랜잭션의 커밋 식별자인 111 보다 작은 상기 제 1 전역 레코드(721)내의 커밋 식별자 110을 갖고 있으므로 T[100,110]은 제 1 커밋터가 된다.
상기 제 1 트랜잭션이 부정확하게 취소되는 것을 피하기 위해, 이 실시 예에서, Prepare(T[105,111])메시지를 수신하자마자, 상기 로컬 트랜잭션 관리자들(114a, 114c)은 어떤 트랜잭션들이 제 2 트랜잭션의 T[105,111]와 동일한 데이터 요소(들)을 기록(write)했는지와 준비(PREPARE)상태인지 여부에 대해 결정하기 위하여 완료중 트랜잭션 식별자들의 리스트를 검사한다. 이러한 경우, T[100]인 제 1 트랜잭션은 완료중 트랜잭션 식별자들(즉, 제 1 트랜잭션의 T[100]은 준비(PREPARE)상태임)은 상기 리스트에 포함되어 있고 데이터 요소 x의 버전이 제 2 트랜잭션의 T[105,111]에 기록(write)되어졌기 때문에 이러한 조건들을 만족한다. 상기 제 1 트랜잭션의 T[100]을 취소시키는 것보다, 상기 로컬 트랜잭션 관리자들(114a,114c)은 제 2 트랜잭션인 T[105,111]을 제 1 트랜잭션인 T[100]이 알려질 때까지 중단한다.
도 34를 참조하면, Prepare(T[105,111]) 메시지가 상기 로컬 트랜잭션 관리자들 (114a, 114c)에서 수신된 이후의 어떤 시점에서, 상기 Prepare(T[105,111]) 메시지가 상기 로컬 트랜잭션 관리자들(114a, 114c)에서 수신된다. 상기 전역 트랜잭션 관리자(116)로부터 상기 Prepare(T[100,110]) 메시지를 수신하는 것에 응답하여, 상기 제 1 노드(108a)와 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자들(114a, 114c) 각각은 상기 제 1 트랜잭션에 대한 제 1 로컬 레코드(720)을 T[100,110]으로 업데이트하여, 상기 제 1 트랜잭션이 커밋 할 준비가 되었는지 여부에 대해 결정하는 것을 개시한다.
도 35 를 참조하면, 상기 제 1 노드(108a)의 데이터베이스 관리자(110a)는 상기 제 1 트랜잭션이 커밋할 준비가 되었는지 지시하는 OK(T[100]) 메시지를 상기 전역 트랜잭션 관리자(116)로 송신한다. 또한, 상기 제 5 노드(108c)는 상기 제 1 트랜잭션이 커밋될 준비가 되었는지를 지시하는 OK(T[100]) 메시지를 상기 전역 트랜잭션 관리자(116)으로 송신한다.
수신된 상기 제 1 노드(108a)와 상기 제 5 노드(108c)로부터의 OK(T[100]) 메시지들을 포함하는 도 36을 참조하면, 상기 전역 트랜잭션 관리자(116)는 상기 제 1 트랜잭션이 동작중에 있는 모든 노드들이 상기 제 1 트랜잭션이 커밋할 준비가 되었다는것을 지시했다는 것을 결정한다. 상기 전역 트랜잭션 관리자(116)는 상기 제 1 전역 레코드(721)를 더 이상 준비하지 않은 것으로 표시하고 Commit(T[100]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)에 전송하여 x의 x[100] 버전이 상기 제 1 노드(108a)의 데이터베이스 프래그먼트(112a)에 커밋하도록 하는 것을 포함하여 상기 제 1 트랜잭션이 커밋되도록 한다.
도 37 을 참조하면, 상기 제 1 트랜잭션이 커밋됨에 따라, 상기 제 2 트랜잭션이 실행된다. 웨이킹(waking) 되자마자, 상기 제 1 노드(108a)의 상기 데이터베이스 관리자(110a)는 상기 제 2 트랜잭션이 상기 제 1 커밋터 승자 규칙을 위반했기 때문에 상기 제 1 노드(108a)에서 커밋될 수 없음을 지시하는 NotOK[T[105]) 메시지를 상기 전역 트랜잭션 관리자에게 송신한다. 상기 제 5 노드(108c)의 데이터베이스 관리자는 상기 제 2 트랜잭션이 커밋될 수 있음을 지시하는 OK(T[105])메시지를 송신한다.
도 38을 참조하면, 상기 제 1 노드(108a)로부터 NotOK(T[105])메시지를 수신하는 것에 대한 결과로서, 상기 전역 트랜잭션 관리자(116)는 상기 제 2 전역 레코드(726)를 삭제함으로써 Abort(T[105]) 메시지를 상기 제 1 노드(108a)와 상기 제 5 노드(108c)로 송신하고 상기 제 2 트랜잭션을 취소한다.
상기 전역 트랜잭션 관리자(116)로부터 상기 Abort(T[105]) 메시지를 수신하자마자, 상기 제 1 노드(108a)는 자신의 데이터 프래그먼트(112a)로 부터 데이터 요소 x의 x[105] 버전을 삭제하며, 자신의 로컬 트랜잭션 관리자(114a)로부터 상기 제 2 로컬 레코드(722)를 삭제한다. 또한, 상기 제 5 노드(108c)는 자신의 로컬 트랜잭션 관리자(114c)로부터 상기 제 2 로컬 레코드(722)를 삭제한다.
1.9 로컬 트랜잭션 관리자 삭제 메카니즘 (Local Transaction Manager Purging Mechanism)
전술한 바와 같이, 상기 분산 데이터베이스 시스템(102)의 상기 노드들(108) 각각에 대한 상기 로컬 트랜잭션 관리자(114)는 상기 제 1 노드(108)에서 과거에 가진 또는 현재에 실행되고 있는 각각의 트랜잭션의 레코드를 유지한다. 일부 실시 예에서, 이 프로세스의 확장을 어렵게 하는 기술적 세부 사항이 있다. 예를 들어 트랜잭션 T[10]이 데이터 요소의 버전 x[8]을 판독(read)할 수 있는지 여부를 결정하는 경우를 고려하자. x[8]은 T[8]에 의해 기록(write) 된 것으로 알려져 있으며, 상기 T[8]은 T[10] 이전에 시작되었다. 그러나, T[8]이 커밋된 시간 또는 T[8]이 전혀 커밋되지 않았는지는 알려지지 않았다(x[8] 자체적으로 부터). 비록 T[10]이 T[8]의 커밋 정보를 x로부터 직접적으로 얻을 수는 없지만, T[10]은 상기 로컬 트랜잭션 관리자(114)에 저장된 T[8]의 상기 레코드로부터 이러한 정보를 얻을 수 있다. 네 가지 경우 중 한 가지가 될 것이다:
1. T[8]은 여전히 활성화(그리고 상기 로컬 트랜잭션 관리자(114)는 T[8]이 여전히 활성화임을 알고 있음). 이러한 경우, T[10]은 x[8]을 판독(read)할 수 없다.
2. T[8]은 취소중(그리고 상기 로컬 트랜잭션 관리자(114)는 T[8]이 취소중임을 알고 있다), 그러나 상기 취소는 x[8]을 "실행 취소" 해야 한다. 이러한 경우, T[10]은 x[8]을 판독(read)할 수 없다.
3. T[8]은 T[10]이 시작하기 이전에 커밋되며, T[8]은 T[8,9]임을 의미한다. 이러한 경우, T[10]은 x[8]을 판독(read)할 수 있다.
4. T[8]은 T[10]이 시작한 이후 커밋되며, 그 결과 T[8]은 T[8,12]이다. 이러한 경우, T[10]은 x[8]을 읽을 수 없다.
문제는 위의 3번 그리고 4번에서 유래된다. 특히, 상기 로컬 트랜잭션 관리자(114)는 자신의 트랜잭션들에 대한 트랜잭션 상태들을 메모리에 유지한다(효율적인 접근을 위한). 3번 그리고 4번은 상기 로컬 트랜잭션 관리자(114)가 T[8]의 커밋 이후 특정 시간 기간 동안에 T[8]의 트랜잭션 상태를 반드시 유지해야 한다는 것을 암시하고 있다. 이로 인해 수명이 긴 서버 프로세스들에서 문제가 발생된다. 특히, 상기 로컬 트랜잭션 관리자(114)는 가시성 계산을 용이하게 하는데 요구되는 만큼 T[8] 상태를 유지 해야하고, 상기 로컬 트랜잭션 관리자(114)는 이 상태를 무기한 유지할 수 없으며, 그렇지 않으면 서버 프로세스가 메모리 부족과 충돌을 일으킬 것이다.
메모리 충돌을 예방하기 위해, 상기 분산 데이터베이스 시스템(102)내의 로컬 트랜잭션 관리자(114)는 "오래된" 트랜잭션 상태(즉, 트랜잭션들의 오래된 레코드들)를 주기적으로 삭제한다. 상기 로컬 트랜잭션 관리자(114)는 빠른 삭제가 충분하지 않은 경우에, 두 가지 삭제 전략, 즉 가장 일반적인 경우( "빠른 삭제")를 다루는 알고리즘적으로 효율적인 전략과 덜 효율적이지만 보다 완전한 전략 ("완전한 삭제")을 사용한다.
일반적으로 상기 삭제 알고리즘들은 "전역 로우 워터 마크(global low water mark)" 개념에 의존 할 수 있다. 상기 전역 로우 워터 마크(global low water mark)는 다음과 같이 정의하며 T[i]가 시스템에서 가장 오래된 활성화 트랜잭션이라 가정하면, T[j]는 T[i]가 시작된 시점에서 가장 오래된 활성화 트랜잭션이라 가정한다. 상기 전역 로우 워터 마크는 j이다. 트랜잭션 레코드 삭제와 연관하여 전역 로우 워터 마크(global low water mark)는 다음을 의미한다: 트랜잭션 식별자가 j보다 작은 모든 트랜잭션은 가시성 계산들을 위해 자신의 상태 정보가 절대로 필요하지 않을 정도로 오래 전에 커밋되어야 한다.
1.9.1 빠른 삭제(Quick Purge)
상기 빠른 삭제 알고리즘이 시작되기 이전에, 제 1 노드(108)에 대한 상기 로컬 트랜잭션 관리자(114)는 커밋 식별자에 의해 정렬된 커밋된 트랜잭션들의 리스트를 포함하고 있다. 이 리스트는 가시성 계산들에 대한 필요한 모든 커밋된 트랜잭션들을 포함하고 있다. 상기 빠른 삭제 프로세스를 시작하기 위해, 상기 로컬 트랜잭션 관리자(114)는 상기 분산 데이터베이스 시스템(102)의 전역 트랜잭션 관리자(116)로 상기 분산 데이터베이스 시스템(102)의 전역 로우 워터마크(global low water mark)를 요청하는 네트워크 메시지와 전역적으로 활성화된(globally-active)인 트랜잭션들의 리스트를 송신한다. 상기 전역 트랜잭션 관리자(116)는 상기 요청된 정보를 포함하는 메시지로서 로컬 트랜잭션 관리자(114)에 응답한다. 상기 로컬 트랜잭션 관리자(114)는 커밋된 트랜잭션들의 각각의 커밋 식별자들을 전역 로우 워터마크(global low water mark)와 비교하는 것을 포함하여 자신의 커밋된 트랜잭션들의 자신의 리스트를 처리한다. 상기 예시적인 전역 로우 워터 마크 (global low water mark)보다 적은 커밋 식별자를 가진 모든 커밋된 트랜잭션은 상기 로컬 트랜잭션 관리자(114)로부터 삭제된다. 일부 실시 예에서, 상기 빠른 삭제 알고리즘은 조기 종료 조건을 가진 선형 원패스(one-pass) 알고리즘이다. 하나의 로컬 트랜잭션 관리자에서, 상기 빠른 삭제 알고리즘은 정정 오퍼레이션(correct operation)에 필요한 가장 작은 수의 트랜잭션들을 검사할 수 있는 능력이 있다.
도 39를 참조하면, 분산 데이터베이스 시스템(202)의 한 부분은 제 1 노드(108a), 제 2 노드(108b), 제 5 노드(108c)를 포함한다. 상기 제 2 노드(108b)는 상기 분산 데이터베이스 시스템(202)에서 리더 노드로써 지정된다. 상기 제 1 노드(108a)의 로컬 트랜잭션 관리자(114a)는 상기 제 1 노드(108a)에서 기존의 완료된 5 개의 트랜잭션들의 로컬 레코드를 가지고 있으며 즉, T[100,120]의 제 1 로컬 레코드(2840), T[63,80]의 제 2 로컬 레코드(2842), T[50,62]의 제 3 로컬 레코드 (2844), T[25,35]의 제 4 로컬 레코드(2846), 그리고 T[20,30]의 제 5 로컬 레코드 (2848)이다. 상기 제 5 노드(108c)의 로컬 트랜잭션 관리자(114c)는 상기 제 5 노드(108c)에 활성화인 2개의 트랜잭션들의 로컬 레코드들을 포함하며, T[110,FUTURE]의 제 6 로컬 레코드(2850)과 T[53,FUTURE]의 제 7 로컬 레코드(2852)이다. 상기 전역 트랜잭션 관리자(116)는 상기 분산 데이터베이스 시스템에서 활성화인 트랜잭션들의 2개의 로컬 레코드들 - T[110,FUTURE]:N5 의 제 1 전역 레코드(2854), T[53,FUTURE]:N5의 제 2 전역 레코드(2856) - 을 포함한다. 상기 제 1 노드(108a)의 로컬 트랜잭션 관리자(114a)는 상기 분산 데이터베이스 시스템(102)에 대한 상기 전역 로우 워터 마크를 요청하는 "삭제 요청 메시지"와 전역적으로 활성화(globally-active) 트랜잭션들의 리스트를 상기 전역 트랜잭션 관리자(116)로 송신한다.
도 40을 참조하면, 상기 전역 트랜잭션 관리자(116)는 "삭제 요청 메시지("Purge Request Message")"에 대해 예를 들어 이러한 경우 48을 지닌 상기 전역 로우 워터 마크(global low water mark)로서, 그리고 T[10] 및 T[53]을 포함하는 전역 활성 트랜잭션들의 리스트로서 응답한다. 상기 선택적인 빠른 삭제를 수행하기 위해 상기 로컬 트랜잭션 관리자(114a)는, 과거에서부터 가장 최근까지 트랜잭션들의 자신의 로컬 레코드들을 통해 반복하며, 어떤 로컬 레코드를 삭제해야 할지 결정하기 위하여 상기 로컬 레코드들의 커밋 식별자들과 상기 예시적인 전역 로우 워터 마크(global low water mark)를 비교한다. 이 실시 예에서, 상기 제 5 로컬 레코드(2848)의 커밋 식별자(즉, 30)는 예시적인 전역 로우 워터 마크(즉, 48)와 비교된다. 30이 48보다 작기 때문에, 상기 제 5 로컬 레코드(2848)는 상기 로컬 트랜잭션 관리자(114a)로부터 삭제된다. 추가적으로, 상기 제 4 로컬 레코드(2846)의 상기 커밋 식별자(즉, 35)는 상기 전역 로우 워터 마크(즉, 48)과 비교된다. 35가 48보다 작기 때문에, 상기 제 4 로컬 레코드(2846)는 상기 로컬 트랜잭션 관리자(114a)로부터 삭제된다. 이후, 상기 제 3 로컬 레코드(2844)의 커밋 식별자(즉, 62)는 상기 예시적인 전역 로우 워터 마크(즉, 48)과 비교된다. 62가 48보다 크기 때문에, 상기 제 3 로컬 레코드(2844)는 삭제되지 않고 이 경우에, 상기 빠른 삭제 알고리즘이 완료된다.
1.9.2 완전한 삭제
일부 실시 예에서, 전술한 빠른 삭제 알고리즘은 트랜잭션들이 상대적으로 안정된 속도로 도착되고, 실행되고 완료되는 작업 부하량에 효과적이다. 그러나, 모든 작업부하량이 반드시 이러한 특성들을 갖는 것은 아니다. 특히, 일부 실시 예에서, 상기 빠른 삭제 알고리즘은 장기-실행 트랜잭션들(즉, 수명이 평균보다 상당히 긴 트랜잭션)을 잘 처리하지 못한다. 이러한 실시 예에서, 상기 로컬 트랜잭션 관리자(114)는 완전한 삭제 알고리즘을 사용한다.
일반적으로, 상기 로컬 트랜잭션 관리자(114)가 예시적인 전역 로우 워터 마크와 전역적으로 활성화된 트랜잭션 식별자들의 리스트를 소유하고 이미 빠른 삭제 알고리즘을 수행한 경우 완전한 삭제 알고리즘이 실행된다. 상기 완전한 삭제 알고리즘은 상기 로컬 트랜잭션 관리자(114)에 저장된 커밋된 트랜잭션의 로컬 레코드들을 통해 반복할 수도 있다. 각각의 로컬 레코드 T[i, j]에 대해, 상기 로컬 트랜잭션 관리자(114)는 전역적으로 활성화 트랜잭션 식별자들의 리스트에 대해서 반복하고 로컬 레코드를 제거 할 수 있는지 여부를 결정하기 위해 각각의 전체적으로 활성화 트랜잭션 식별자 g를 트랜잭션 식별자(즉 i) 및 커밋 식별자(즉 j)와 비교할 수 있다. 일반적으로 전역적으로 활성 상태인 트랜잭션 식별자 g가 i <g <j 인 경우 로컬 레코드를 제거 할 수 없다. 이러한 g가 확인되지 않는다면, 상기 로컬 레코드는 삭제될 수도 있다.
i <g <j 인 g가 존재하는 경우 T [i, j]를 유지해야할 필요가 있다는 것은 아래의 의미가 있음을 유의해야 한다. 특정 로컬 트랜잭션 관리자(114)와 함께 참여하지 않지만 T[i, j]와 동시에 발생되는 활성 트랜잭션인 T[g]가 존재한다. T[g]가 참여 된다면, T[i, j]의 상태 정보는 T[g]의 가시성 결정에 필요할 수 있다.
도 41을 참조하면, 상기 빠른 삭제 알고리즘이 수행되며(도 40에 도시된), 상기 로컬 트랜잭션 관리자(114a)는 전역적으로 활성화 트랜잭션들인 T[53]와 T[110]의 리스트를 가지고 있다. 상기 완전한 삭제 알고리즘은 상기 제 1 로컬 레코드(2840), 상기 제 2 로컬 레코드(2842), 그리고 상기 제 3 로컬 레코드(2844)를 통해 반복된다.
상기 완전한 삭제 알고리즘이 상기 제 1 로컬 레코드(2840)에 도달하게 되면, 상기 알고리즘은 전역적으로 활성화 상태인 트랜잭션들(즉, 53 그리고 110)의 리스트의 트랜잭션 식별자들을 상기 트랜잭션 식별자(즉, 100) 및 상기 제 1 로컬 레코드(2840)의 커밋 식별자(즉, 120)와 비교하여 상기 제 1 로컬 레코드(2840)의 삭제 될 수 있는지 여부를 결정한다. 이러한 실시 예들에서, 트랜잭션 식별자 '110'을 가진 전역적으로 활성 상태인 트랜잭션이 존재한다. '110'은 상기 트랜잭션 식별자(즉, 100)와 상기 제 1 로컬 레코드(2840)의 커밋 식별자(즉, 120) 사이에 존재하기 대문에, 상기 제 1 로컬 레코드(2840)는 삭제되지 않는다.
상기 완전한 삭제 알고리즘이 제 2 로컬 레코드(2842)에 도달하게 되면, 상기 알고리즘은 전역적으로 활성화 트랜잭션들(즉, 53 그리고 110)의 리스트의 트랜잭션 식별자들을 상기 트랜잭션 식별자(즉, 63)및 상기 제 2 로컬 레코드(2842)의 커밋 식별자(즉, 80)와 비교하여 상기 제 2 로컬 레코드(2842)이 삭제 될 수 있는지 여부를 결정한다. 이러한 실시 예에서, 상기 전역적으로 활성 상태인 트랜잭션들의 트랜잭션 식별자들 어느것도 상기 트랜잭션 식별자(즉, 63)와 제 2 로컬 레코드(2842)의 상기 커싯 식별자(90)사이에 있지 않기 때문에, 상기 제 2 로컬 레코드(2842)는 삭제된다.
상기 완전한 삭제 알고리즘이 제 3 로컬 레코드(2844)에 도달하면, 상기 알고리즘은 전역적으로 활성화 트랜잭션(즉, 53 그리고 110)의 리스트의 트랜잭션 식별자들을 트랜잭션 식별자(즉, 50)및 제 3 로컬 레코드(2844)의 커밋 식별자(즉, 62)와 비교하여 상기 제 3 로컬 레코드(2844)이 삭제될 수 있는지 여부를 결정한다. 이 실시 예에서, '53'의 트랜잭션 식별자를 가진 전역적으로 활성화 트랜잭션이 존재한다. '53'이 상기 제 3 로컬 레코드(2844)의 상기 트랜잭션 식별자(즉, 50)와 제 3 로컬 레코드(2844)의 커밋 식별자(즉, 62)사이에 존재하기 때문에, 상기 로컬 레코드 3(2844)은 삭제되지 않는다.
도 41의 실시 예에서, 완전한 제거 알고리즘의 완료시점에서, 상기 제 1 로컬 레코드(2840)와 상기 제 3 로컬 레코드(2844)를 제외한 모든 로컬 레코드들은 제 1 노드(108a)의 로컬 트랜잭션 관리자(114a)로부터 삭제된다.
2. 구현
전술 한 상기 분산 데이터베이스 시스템은, 예를 들어, 적절한 소프트웨어 명령을 실행하는 프로그램 가능한 컴퓨팅 시스템을 사용하여 구현 될 수 있거나, 또는 필드-프로그램가능한 게이트 어레이(FPGA) 또는 일부 하이브리드 형태와 같은 적절한 하드웨어로 구현 될 수 있다. 예를 들어, 소프트웨어에 대한 프로그램된 접근은 적어도 하나의 프로그램된 또는 프로그램 가능한 컴퓨팅 시스템(다양한 종류의 분산된, 클라이언트/서버, 또는 그리드)이나 프로시져들을 포함할 수 있으며 각각은 적어도 하나의 프로세서, 적어도 하나의 데이터 저장 시스템(휘발성 및/또는 비휘발성 메모리 및/또는 저장 장치들), 적어도 하나의 유저 인터페이스(적어도 하나의 입력 장치 또는 포트를 사용함으로써 입력을 수신하고, 적어도 하나의 출력 장치 또는 포트를 사용함으로써 출력을 제공함)를 포함한다.
상기 소프트웨어는 기간(예를 들어, 동적 RAM과 같은 동적 메모리 장치의 리프레시 주기들 사이의 시간) 동안 매체(예를 들어, 표면 피트들 및 랜드들(pits and lands), 자기 구역(magnetic domains) 또는 전하)의 물리적 특성을 사용하여 휘발성 또는 비 휘발성 저장 매체 또는 임의의 다른 비 일시적 매체로 구현되는 것과 같이 비 일시적 형태로 저장 될 수 있다. 명령어들에 대한 로딩 준비를 위해, 상기 소프트웨어는 CD-ROM 또는 다른 컴퓨터 판독(read) 가능 매체(예를 들어, 일반적으로 판독(read) 가능한, 특정 목적의 컴퓨팅 시스템 또는 디바이스)와 같은 유형의 비 일시적인 매체 상에 제공 될 수거나, 진행되는 컴퓨팅 시스템의 유형의, 비일시적인 매체로 네트워크의 통신 매체를 통해 전달될 수 있다(예를 들어, 전파된 신호로 인코딩 된). 처리의 일부 또는 전부는 특수 목적 컴퓨터에서 수행되거나 코어 프로세서 또는 필드-프로그램가능한 게이트 어레이들(FPGAs) 또는 응용 주문형 집적 회로(ASICs)와 같은 특수 목적 하드웨어를 사용하여 수행 될 수 있다. 처리는 소프트웨어에 의해 특정된 계산의 다른 부분이 상이한 계산 요소에 의해 수행되는 분산 방식으로 구현 될 수 있다. 이러한 각각의 컴퓨터 프로그램은 바람직하게는 범용 또는 특수 목적 프로그램 가능한 컴퓨터에 의해 접근 가능한 저장 장치(예를 들면, 솔리드 스테이트 메모리 또는 매체, 또는 자기 또는 광학 매체)의 컴퓨터 판독(read) 가능 저장 매체에 저장되거나 다운로드되며, 본 명세서에 기술된 처리를 수행하기 위해 저장 장치 매체가 컴퓨터에 의해 판독(read) 될 때 컴퓨터를 구성하고 오퍼레이션을 위한 명령을 포함한다. 본 발명의 시스템은 또한 컴퓨터 프로그램으로 구성되는 유형의 비 일시적인 매체로서 구현되는 것으로 고려될 수 있으며, 그렇게 구성된 매체는 컴퓨터가 특정 그리고 사전 정의된 방식으로 오퍼레이션하여 적어도 하나의 처리 단계 여기에 설명되어 있다.
본 발명의 복수의 실시 예들이 기재되었다. 그럼에도 불구하고, 전술 한 설명은 예시하기 위한 것이지, 다음의 청구 범위의 범주에 의해 정의되는 본 발명의 범위를 제한하는 것은 아니다. 따라서, 또 다른 실시 예들이 다음의 청구 범위에 있다. 예를 들어 본 발명의 범위를 벗어나지 않고 다양한 변형 예들이 만들어 질 수 있다. 또한, 전술 한 단계들의 일부는 순서에 독립적 일 수 있으며, 따라서 설명 된 것과 다른 순서로 수행 될 수있다.
100: 데이터 처리 시스템
102: 분산 데이터베이스 시스템
110a: 데이터베이스 관리자
112a: 데이터베이스 프래그먼트 1
202: 분산 데이터베이스 시스템
102: 분산 데이터베이스 시스템
110a: 데이터베이스 관리자
112a: 데이터베이스 프래그먼트 1
202: 분산 데이터베이스 시스템
Claims (18)
- 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법으로서, 상기 방법은
상기 복수의 노드들 중 제 1 노드에서, 복수의 트랜잭션들의 레코드들을 유지하는 단계 - 여기서 각각의 트랜잭션은 상기 복수의 노드들의 적어도 하나에서 실행되고, 각각의 레코드들은 복수의 트랜잭션 상태들 중의 트랜잭션 상태를 가지며, 상기 레코드들은 제 1 트랜잭션에 대한 레코드와 제 2 트랜잭션에 대한 레코드를 포함하고, 상기 복수의 노드들 중 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고, 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함함 -;
상기 제 2 트랜잭션의 시작 시간에 제 1 트랜잭션 상태를 갖고 상기 제 2 노드에서 실행중인 임의의 복수의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드에서 수신하는 단계 - 여기서, 상기 트랜잭션들의 리스트는 상기 제 1 트랜잭션을 포함함 -;
상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하는 단계; 및
상기 결정에 기초하여 상기 제 1 트랜잭션이 완료 될 때까지 상기 제 2 트랜잭션의 실행을 중단시키는 단계를 포함하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법. - 선행하는 어느 한 항에 있어서, 상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하는 단계는 상기 제 1 트랜잭션의 시작 시간이 상기 제 2 트랜잭션의 시작 시간 이전에 발생되는지와 상기 제 1 트랜잭션의 커밋 시간이 상기 제 2 트랜잭션의 시작 시간 이전에 발생되는지를 결정하는 단계를 포함하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 선행하는 어느 한 항에 있어서, 상기 트랜잭션들의 리스트는 상기 제 2 트랜잭션의 시작 시간에서 상기 제 2 노드에서 수신되는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 선행하는 어느 한 항에 있어서, 상기 트랜잭션들의 리스트에 포함된 상기 트랜잭션들은 상기 제 2 노드에서 실행되며 상기 제 2 트랜잭션의 시작 시점에서 상기 제 1 트랜잭션 상태를 갖는 트랜잭션들로 이루어지는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 선행하는 어느 한 항에 있어서, 상기 트랜잭션들의 리스트는, 트랜잭션들의 리스트내 각각의 트랜잭션에 대하여, 상기 트랜잭션의 시작 시간을 포함하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 선행하는 어느 한 항에 있어서, 상기 제 1 트랜잭션 상태는 트랜잭션이 완료 준비중임을 지시하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 선행하는 어느 한 항에 있어서, 상기 제 1 트랜잭션은 상기 제 1 데이터 요소를 기록(write)하고 상기 제 2 트랜잭션은 상기 제 1 데이터 요소를 판독(read)하며, 상기 제 2 트랜잭션에 의해 판독(read)된 상기 제 1 데이터 요소의 버전은 상기 제 1 트랜잭션의 결과에 의존하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 7 항에 있어서, 상기 제 1 트랜잭션의 가능한 결과는 트랜잭션 취소된 결과 및 트랜잭션 커밋된 결과를 포함하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 8 항에 있어서, 상기 제 1 트랜잭션의 완료 후에 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하고 상기 제 1 트랜잭션의 결과가 상기 트랜잭션이 취소된 결과인 경우 상기 제 1 데이터 요소의 제 1 버전을 판독(read)하는 단계를 더 포함하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 8 항에 있어서, 상기 제 1 트랜잭션의 완료 후에 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하고 상기 제 1 트랜잭션의 결과가 상기 트랜잭션의 커밋된 결과인 경우 상기 제 1 트랜잭션에 의해 기록(write)된 상기 제 1 데이터 요소의 제 2의 상이한 버전을 판독(read)하는 단계를 더 포함하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션 들을 관리 하기 위한 방법.
- 선행하는 어느 한 항에 있어서, 상기 제 1 트랜잭션 및 상기 제 2 트랜잭션의 하나 또는 두 가지 모두는 상기 복수의 노드들의 제 3 노드에 저장된 데이터 요소들에 접근하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 1 항에 있어서, 상기 제 1 트랜잭션 및 상기 제 2 트랜잭션 두 가지 모두는 상기 제 1 데이터 요소를 기록(write)하는 것을 시도하고 상기 제 2 트랜잭션은 상기 제 1 트랜잭션 상태에 있는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 12 항에 있어서, 상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하는 단계는 상기 제 1 트랜잭션의 커밋 시간 이전과 상기 제 1 트랜잭션의 시작 시간 이후에 제 2 트랜잭션의 시작시간이 발생되는 지를 결정하는 것을 포함하는 것을 특징으로 복수의 노드들을 포함하는 하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 12 항에 있어서, 상기 제 1 트랜잭션은 상기 제 2 트랜잭션 전에 자신의 기록(write)을 커밋하도록 스케쥴링되고 상기 제 2 트랜잭션의 취소 여부는 상기 제 1 트랜잭션이 트랜잭션 취소된 결과 또는 트랜잭션 커밋된 결과인지에 의존하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 14 항에 있어서, 상기 제 1 트랜잭션의 완료 후에 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하며, 상기 제 1 트랜잭션의 결과가 상기 트랜잭션이 취소된 결과인 경우 상기 제 1 데이터 요소의 제 1 값을 기록(write)하는 단계를 더 포함하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 제 14 항에 있어서, 상기 제 1 트랜잭션의 완료 이후 상기 제 2 트랜잭션을 다시 실행하는 단계를 더 포함하며, 상기 제 1 트랜잭션의 결과가 상기 트랜잭션 커밋된 결과인 경우 상기 제 2 트랜잭션을 취소하는 단계를 더 포함하는 것을 특징으로 하는 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한 방법.
- 복수의 노드들을 포함하는 분산 데이터베이스 시스템에서 잠재적인 동시 트랜잭션들을 관리하기 위한, 비 일시적인 형태의 소프트웨어를 저장하는 컴퓨터-판독(read)가능한 매체로써, 상기 소프트웨어는 컴퓨터 시스템으로 하여금:
상기 복수의 노드들 중 제 1 노드에서, 복수의 트랜잭션들의 레코드들을 유지하며 - 여기서 각각의 트랜잭션은 상기 복수의 노드들의 적어도 하나에서 실행되고, 각각의 레코드들은 복수의 트랜잭션 상태들 중의 트랜잭션 상태를 가지며, 상기 레코드들은 제 1 트랜잭션에 대한 레코드와 제 2 트랜잭션에 대한 레코드를 포함하고, 상기 복수의 노드들 중 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고, 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함함 -;
상기 제 2 트랜잭션의 시작 시간에 제 1 트랜잭션 상태를 갖고 상기 제 2 노드에서 실행중인 임의의 복수의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드에서 수신하고 - 여기서, 상기 트랜잭션들의 리스트는 상기 제 1 트랜잭션을 포함함 -;
상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하며; 그리고
상기 결정에 기초하여 상기 제 1 트랜잭션이 완료 될 때까지 상기 제 2 트랜잭션의 실행을 중단하도록하는 명령들을 포함하는 비 일시적인 형태의 소프트웨어를 저장하는 컴퓨터-판독(read)가능한 매체.
- 잠재적인 동시 트랜잭션들을 관리하는 장치로서, 상기 장치는:
분산 데이터베이스 시스템에 배열된 복수의 노드 - 여기서 각 노드는 적어도 하나의 프로세서를 포함 함-; 및
상기 복수의 노드 사이에서 정보를 송수신하기 위한 상기 복수의 노드들의 통신 매체 연결 포트들을 포함하되,
상기 복수의 노드들 중 제 1 노드는 복수의 트랜잭션들의 레코드들을 유지하도록 구성되며 - 여기서 각각의 트랜잭션은 상기 복수의 노드들의 적어도 하나에서 실행되고, 각각의 레코드들은 복수의 트랜잭션 상태들 중의 트랜잭션 상태를 가지며, 상기 레코드들은 제 1 트랜잭션에 대한 레코드와 제 2 트랜잭션에 대한 레코드를 포함하고, 상기 복수의 노드들 중 제 2 노드에서 상기 제 1 트랜잭션의 실행은 상기 제 2 노드에 저장된 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함하고, 상기 제 2 노드에서 상기 제 2 트랜잭션의 실행은 상기 제 2 노드에 저장된 상기 제 1 데이터 요소에 접근하기 위한 오퍼레이션을 포함함 -;
상기 제 2 노드는 상기 제 2 트랜잭션의 시작 시간에 제 1 트랜잭션 상태를 갖고 상기 제 2 노드에서 실행중인 임의의 복수의 트랜잭션들을 포함하는 트랜잭션들의 리스트를 상기 제 1 노드로부터 상기 제 2 노드에서 수신하도록 구성되고 - 여기서, 상기 트랜잭션들의 리스트는 상기 제 1 트랜잭션을 포함함 -;
상기 제 2 노드는 상기 트랜잭션들의 리스트에 적어도 부분적으로 기초하여 상기 제 2 트랜잭션의 결과가 상기 제 1 트랜잭션의 결과에 의존하는지를 결정하도록 구성되며; 그리고
상기 제 2 노드는 상기 결정에 기초하여 상기 제 1 트랜잭션이 완료 될 때까지 상기 제 2 트랜잭션의 실행을 중단하도록 구성되는 것을 특징으로 하는 잠재적인 동시 트랜잭션들을 관리하는 장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562190843P | 2015-07-10 | 2015-07-10 | |
US62/190,843 | 2015-07-10 | ||
PCT/US2016/040949 WO2017011219A1 (en) | 2015-07-10 | 2016-07-05 | Method and architecture for providing database access control in a network with a distributed database system |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180030115A true KR20180030115A (ko) | 2018-03-21 |
KR102074087B1 KR102074087B1 (ko) | 2020-02-05 |
Family
ID=56413915
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187004245A KR102074087B1 (ko) | 2015-07-10 | 2016-07-05 | 분산 데이터베이스 시스템을 갖는 네트워크에서 데이터베이스 접근 제어를 제공하기 위한 방법 및 아키텍처 |
KR1020187004250A KR102136941B1 (ko) | 2015-07-10 | 2016-07-05 | 분산 데이터베이스 시스템을 갖는 네트워크에서 데이터베이스 접근 제어를 제공하기 위한 방법 및 아키텍처 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187004250A KR102136941B1 (ko) | 2015-07-10 | 2016-07-05 | 분산 데이터베이스 시스템을 갖는 네트워크에서 데이터베이스 접근 제어를 제공하기 위한 방법 및 아키텍처 |
Country Status (9)
Country | Link |
---|---|
US (2) | US10489362B2 (ko) |
EP (3) | EP3320453B1 (ko) |
JP (2) | JP6563111B2 (ko) |
KR (2) | KR102074087B1 (ko) |
CN (2) | CN108140028B (ko) |
AU (2) | AU2016292783B2 (ko) |
CA (2) | CA2991131C (ko) |
HK (2) | HK1254285A1 (ko) |
WO (2) | WO2017011219A1 (ko) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108140028B (zh) | 2015-07-10 | 2022-04-29 | 起元技术有限责任公司 | 在具有分布式数据库系统的网络中提供数据库访问控制的方法和架构 |
US20180158034A1 (en) * | 2016-12-07 | 2018-06-07 | International Business Machines Corporation | Dynamic reordering of blockchain transactions to optimize performance and scalability |
EP3649558B8 (en) * | 2017-07-06 | 2024-04-17 | Chromaway AB | Method and system for a distributed computing system |
US11681667B2 (en) * | 2017-07-30 | 2023-06-20 | International Business Machines Corporation | Persisting distributed data sets into eventually consistent storage systems |
US11106670B2 (en) * | 2017-09-27 | 2021-08-31 | Sap Se | Local identifiers for database objects |
CN108363813B (zh) * | 2018-03-15 | 2020-06-02 | 北京星选科技有限公司 | 数据存储方法、装置和系统 |
CN108984639B (zh) * | 2018-06-22 | 2021-12-24 | 联想(北京)有限公司 | 服务器集群的数据处理方法和装置 |
CN109522098A (zh) * | 2018-11-28 | 2019-03-26 | 星环信息科技(上海)有限公司 | 分布式数据库中的事务处理方法、装置、系统和储存介质 |
CN109783578B (zh) * | 2019-01-09 | 2022-10-21 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
US11921701B2 (en) * | 2019-02-12 | 2024-03-05 | Ebay Inc. | Global distributed transactions across microservices |
US10880406B2 (en) * | 2019-03-05 | 2020-12-29 | Mastercard International Incorporated | Controlling access to data resources on high latency networks |
US11537565B2 (en) * | 2019-12-31 | 2022-12-27 | Micron Technology, Inc. | Lock management associated with a key-value database system |
CN113961639A (zh) * | 2020-06-22 | 2022-01-21 | 金篆信科有限责任公司 | 一种分布式事务处理方法、终端及计算机可读存储介质 |
US20220300484A1 (en) * | 2021-03-19 | 2022-09-22 | Microsoft Technology Licensing, Llc | Snapshot isolation query transactions in distributed systems |
CN112927770B (zh) * | 2021-04-12 | 2023-09-08 | 徐州市通用科技有限公司 | 医疗数据共享方法及系统 |
US20240020285A1 (en) * | 2022-03-01 | 2024-01-18 | Kinaxis Inc | Systems and methods for distributed version reclaim |
KR102518268B1 (ko) | 2022-04-13 | 2023-04-05 | 주식회사 비투엔 | 마이크로 서비스 아키텍처 기반의 트랜잭션 가상화 처리 장치 및 방법 |
US20240012797A1 (en) * | 2022-07-07 | 2024-01-11 | Palantir Technologies Inc. | Systems and methods for lineage-aware data retention |
US11921708B1 (en) * | 2022-08-29 | 2024-03-05 | Snowflake Inc. | Distributed execution of transactional queries |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000200253A (ja) * | 1999-01-05 | 2000-07-18 | Hitachi Ltd | デ―タベ―ス負荷分散処理方法及びその実施装置 |
US20110041006A1 (en) * | 2009-08-12 | 2011-02-17 | New Technology/Enterprise Limited | Distributed transaction processing |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5212788A (en) * | 1990-05-22 | 1993-05-18 | Digital Equipment Corporation | System and method for consistent timestamping in distributed computer databases |
US5504899A (en) * | 1991-10-17 | 1996-04-02 | Digital Equipment Corporation | Guaranteeing global serializability by applying commitment ordering selectively to global transactions |
JP2654612B2 (ja) * | 1995-02-23 | 1997-09-17 | 日本電気株式会社 | 排他ウエイト削減制御方法 |
US5999931A (en) * | 1997-10-17 | 1999-12-07 | Lucent Technologies Inc. | Concurrency control protocols for management of replicated data items in a distributed database system |
US6499036B1 (en) * | 1998-08-12 | 2002-12-24 | Bank Of America Corporation | Method and apparatus for data item movement between disparate sources and hierarchical, object-oriented representation |
US7716077B1 (en) * | 1999-11-22 | 2010-05-11 | Accenture Global Services Gmbh | Scheduling and planning maintenance and service in a network-based supply chain environment |
US7130807B1 (en) * | 1999-11-22 | 2006-10-31 | Accenture Llp | Technology sharing during demand and supply planning in a network-based supply chain environment |
US6856993B1 (en) * | 2000-03-30 | 2005-02-15 | Microsoft Corporation | Transactional file system |
US20020087366A1 (en) | 2000-12-30 | 2002-07-04 | Collier Timothy R. | Tentative-hold-based protocol for distributed transaction processing |
US6785696B2 (en) * | 2001-06-01 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | System and method for replication of distributed databases that span multiple primary nodes |
US7089253B2 (en) | 2002-09-13 | 2006-08-08 | Netezza Corporation | Computer method and system for concurrency control using dynamic serialization ordering |
JP4104586B2 (ja) * | 2004-09-30 | 2008-06-18 | 株式会社東芝 | ファイル管理機能を備えたファイルシステム及びファイル管理方法 |
US8055711B2 (en) * | 2004-10-29 | 2011-11-08 | Emc Corporation | Non-blocking commit protocol systems and methods |
US20090172014A1 (en) * | 2005-08-23 | 2009-07-02 | Raymond John Huetter | Stream-Oriented Database Machine and Method |
JP2008176687A (ja) * | 2007-01-22 | 2008-07-31 | Tomohiro Iizuka | データベースのトランザクション処理 |
US20080222111A1 (en) * | 2007-03-07 | 2008-09-11 | Oracle International Corporation | Database system with dynamic database caching |
US9027030B2 (en) * | 2007-11-29 | 2015-05-05 | Red Hat, Inc. | Commit-one-phase distributed transactions with multiple starting participants |
US8219852B2 (en) * | 2008-05-01 | 2012-07-10 | Tibco Software Inc. | Java virtual machine having integrated transaction management system |
US7962458B2 (en) * | 2008-06-12 | 2011-06-14 | Gravic, Inc. | Method for replicating explicit locks in a data replication engine |
CN101706811B (zh) * | 2009-11-24 | 2012-01-25 | 中国科学院软件研究所 | 一种分布式数据库系统事务提交方法 |
US8356007B2 (en) * | 2010-10-20 | 2013-01-15 | Microsoft Corporation | Distributed transaction management for database systems with multiversioning |
US9251214B2 (en) * | 2010-04-08 | 2016-02-02 | Microsoft Technology Licensing, Llc | In-memory database system |
CN102103642B (zh) * | 2011-03-25 | 2016-08-03 | 北京世纪互联宽带数据中心有限公司 | 基于oltp的数据删除方法、系统及图形数据库服务器 |
CN102346460B (zh) * | 2011-05-27 | 2013-11-13 | 运软网络科技(上海)有限公司 | 一种基于事务的服务控制系统及其控制方法 |
CN102882900B (zh) * | 2011-07-11 | 2016-06-22 | 阿里巴巴集团控股有限公司 | 大规模服务器集群应用部署方法和大规模服务器集群 |
EP2740055A4 (en) * | 2011-08-01 | 2015-09-09 | Tagged Inc | SYSTEMS AND METHOD FOR ASYNCHRONOUS DISTRIBUTED DATABASE MANAGEMENT |
JP5772458B2 (ja) * | 2011-09-29 | 2015-09-02 | 富士通株式会社 | データ管理プログラム、ノード、および分散データベースシステム |
US8935205B2 (en) * | 2011-11-16 | 2015-01-13 | Sap Ag | System and method of performing snapshot isolation in distributed databases |
JP2014215914A (ja) * | 2013-04-26 | 2014-11-17 | 株式会社東芝 | 端末装置、情報処理方法及び情報処理プログラム |
US9760596B2 (en) * | 2013-05-13 | 2017-09-12 | Amazon Technologies, Inc. | Transaction ordering |
CN103577588A (zh) * | 2013-11-12 | 2014-02-12 | 西安雷迪维护系统设备有限公司 | 一种云数据库中分布式事务的实现方法 |
US9639437B2 (en) * | 2013-12-13 | 2017-05-02 | Netapp, Inc. | Techniques to manage non-disruptive SAN availability in a partitioned cluster |
CN108140028B (zh) | 2015-07-10 | 2022-04-29 | 起元技术有限责任公司 | 在具有分布式数据库系统的网络中提供数据库访问控制的方法和架构 |
-
2016
- 2016-07-05 CN CN201680052634.9A patent/CN108140028B/zh active Active
- 2016-07-05 US US15/201,849 patent/US10489362B2/en active Active
- 2016-07-05 CA CA2991131A patent/CA2991131C/en active Active
- 2016-07-05 JP JP2018500658A patent/JP6563111B2/ja active Active
- 2016-07-05 KR KR1020187004245A patent/KR102074087B1/ko active IP Right Grant
- 2016-07-05 CN CN201680052502.6A patent/CN108027829B/zh active Active
- 2016-07-05 WO PCT/US2016/040949 patent/WO2017011219A1/en active Application Filing
- 2016-07-05 AU AU2016292783A patent/AU2016292783B2/en active Active
- 2016-07-05 KR KR1020187004250A patent/KR102136941B1/ko active IP Right Grant
- 2016-07-05 EP EP16739373.5A patent/EP3320453B1/en active Active
- 2016-07-05 JP JP2018500733A patent/JP6498352B2/ja active Active
- 2016-07-05 EP EP16739372.7A patent/EP3320452B1/en active Active
- 2016-07-05 CA CA2991128A patent/CA2991128C/en active Active
- 2016-07-05 US US15/201,931 patent/US10671576B2/en active Active
- 2016-07-05 WO PCT/US2016/040953 patent/WO2017011220A1/en active Application Filing
- 2016-07-05 EP EP21169145.6A patent/EP3882767B1/en active Active
- 2016-07-05 AU AU2016292786A patent/AU2016292786B2/en active Active
-
2018
- 2018-10-16 HK HK18113244.7A patent/HK1254285A1/zh unknown
- 2018-11-26 HK HK18115108.7A patent/HK1256051A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000200253A (ja) * | 1999-01-05 | 2000-07-18 | Hitachi Ltd | デ―タベ―ス負荷分散処理方法及びその実施装置 |
US20110041006A1 (en) * | 2009-08-12 | 2011-02-17 | New Technology/Enterprise Limited | Distributed transaction processing |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102074087B1 (ko) | 분산 데이터베이스 시스템을 갖는 네트워크에서 데이터베이스 접근 제어를 제공하기 위한 방법 및 아키텍처 | |
JP6724039B2 (ja) | 分散型コンピューティングシステムにおけるデータベーストランザクションの処理 | |
CN104793988B (zh) | 跨数据库分布式事务的实现方法和装置 | |
WO2018001135A1 (zh) | 处理数据库事务的方法、客户端和服务器 | |
US20220197896A1 (en) | Transactional database layer above a distributed key/value store | |
US9760597B2 (en) | System and method for highly scalable decentralized and low contention transactional processing X | |
US8615769B2 (en) | Data processing system, data processing method, and data processing program | |
Eldeeb et al. | Transactions for Distributed Actors in the Cloud | |
JPH0827752B2 (ja) | 資源ステータス保持装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |