KR20080018212A - 메시지 큐의 관리 방법 및 시스템 - Google Patents

메시지 큐의 관리 방법 및 시스템 Download PDF

Info

Publication number
KR20080018212A
KR20080018212A KR1020077030364A KR20077030364A KR20080018212A KR 20080018212 A KR20080018212 A KR 20080018212A KR 1020077030364 A KR1020077030364 A KR 1020077030364A KR 20077030364 A KR20077030364 A KR 20077030364A KR 20080018212 A KR20080018212 A KR 20080018212A
Authority
KR
South Korea
Prior art keywords
queue
data
writing
queues
message
Prior art date
Application number
KR1020077030364A
Other languages
English (en)
Other versions
KR101372978B1 (ko
Inventor
스피로 마이키로브
산지브 배너지
크레이그 더블유. 스탠필
Original Assignee
아브 이니티오 소프트웨어 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아브 이니티오 소프트웨어 코포레이션 filed Critical 아브 이니티오 소프트웨어 코포레이션
Publication of KR20080018212A publication Critical patent/KR20080018212A/ko
Application granted granted Critical
Publication of KR101372978B1 publication Critical patent/KR101372978B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5016Session
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Abstract

데이터의 각각의 일부분이 복수의 큐 중 대응하는 큐에 기입되도록 하는 방식으로 복수의 큐에 데이터를 기입하는 방법, 소프트웨어, 및 시스템이 개시된다. 상기 방법은, 하나 이상의 큐를 동시에 로킹(locking)할 필요없이, 각각의 큐 내에 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하는 단계와, 이용 가능한 공간이 있는 경우에는 큐 내의 공간을 예약하는 단계를 포함한다. 상기 방법은, 또한 데이터의 각각의 일부분을 복수의 큐의 대응하는 큐에 기입하는 단계를 포함한다.
큐잉 시스템, 코미트 레코드, 저널 레코드, 휘발성 메모리, 비휘발성 메모리

Description

메시지 큐의 관리 방법 및 시스템{MANAGING MESSAGE QUEUES}
본 발명은 메시지 큐의 관리 방법 및 시스템에 관한 것이다.
메시지 큐는 액세스 엔티티(예컨대, 서버, 운영 시스템, 소프트웨어 모듈 등)로 하여금 메시지를 교환할 수 있도록 하는 비동기식 통신 프로토콜을 제공하기 위해 사용될 수 있다. 메시지 큐 상에 위치된 메시지는 수신인(메시지 큐의 서브스크라이버)이 메시지를 복원할 때까지 큐 데이터 구조에 기억된다.
메시지 큐 시스템은 시스템 장애 시에 메시지가 분실되지 않도록 하는(또는 어떠한 분실된 메시지를 복구할 수 있도록 하는) 지속성(durability)을 제공할 것이다. 지속성을 달성하기 위한 한 가지 방식은, 휘발성 메모리에 저장된 메시지를 예컨대 소정수의 유입 메시지 또는 소정 바이트의 데이터가 수신된 후에 비휘발성 메모리와 동기시키는 것이다.
전반적인 양태에서, 본 발명은, 데이터의 각각의 일부분이 복수의 큐 중 대응하는 큐에 기입되도록 하는 방식으로 복수의 큐에 데이터를 기입하는 방법, 소프트웨어, 및 시스템을 특징으로 한다. 상기 방법은, 하나 이상의 큐를 동시에 로킹(locking)할 필요없이, 각각의 큐 내에 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하는 단계와, 이용 가능한 공간이 있는 경우에는 큐 내의 공간을 예약하는 단계를 포함한다. 상기 방법은, 또한 데이터의 각각의 일부분을 복수의 큐의 대응하는 큐에 기입하는 단계를 포함한다.
이러한 양태는 다음 특징 중의 하나 이상을 포함할 수 있다.
데이터의 각각의 일부분을 대응하는 큐에 기입하는 단계는, 큐 내의 공간의 전부를 예약한 후에 발생한다.
상기 방법은, 데이터의 일부분을 대응하는 큐에 기입한 후, 그 큐에 기입된 데이터의 일부분에 대한 공간의 예약을 해제하는 단계를 더 포함한다.
각각의 큐에 공간이 이용 가능한지를 판정하고, 이용 가능한 경우에 그 공간을 예약하는 단계는, 복수의 큐의 각각에 대해, 큐를 로킹하는 단계, 큐 내에 이용 가능한 공간이 있는지를 판정하는 단계, 이용 가능한 공간이 있는 경우에 그 공간을 예약하는 단계, 및 큐를 언로킹(unlocking)하는 단계를 포함한다.
대응하는 큐에 기입된 데이터의 각각의 일부분은 레코드(record)를 포함한다.
상기 방법은, 레코드를 기입하기 전에 어떠한 큐에 저널 레코드(journal record)를 기입하는 단계를 더 포함한다.
상기 방법은, 저널 레코드를 기입하기 전에 각각의 큐를 비휘발성 메모리에 동기시키는 단계를 포함한다.
상기 방법은, 상기 레코드들 중의 하나의 레코드 이외의 다른 데이터를 복수의 상기 큐 중의 제1 큐에 기입하기 전에, 상기 제1 큐 내에서 공간이 예약되어 있는 경우에는, 상기 다른 데이터를 상기 제1 큐에 기입하기 전에, 상기 제1 큐 내에 상기 다른 데이터를 위한 추가의 이용 가능한 공간이 있는지를 판정하는 동안에는, 상기 제1 큐를 로킹하는 단계를 더 포함한다.
상기 방법은, 상기 레코드들 중의 하나의 레코드 이외의 다른 데이터를 복수의 상기 큐 중의 제1 큐에 기입하기 전에, 상기 제1 큐 내에서 공간이 아직 예약되어 있지 않은 경우에는, 상기 제1 큐를 반드시 로킹할 필요없이 상기 데이터를 상기 제1 큐에 기입하는 단계를 더 포함한다.
각각의 상기 큐 내에 상기 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하는 단계는, 각각의 큐 내의 충분한 공간이, 큐와의 어떠한 아웃스탠딩 트랜잭션(outstanding transaction)을 위한 코미트 레코드(commit record)를 기입하는 데 이용 가능하도록 하는 단계를 포함한다.
상기 방법은, 큐와의 어떠한 아웃스탠딩 트랜잭션을 위한 코미트 레코드를 기입하기 위한 충분한 공간이 적어도 하나의 큐에 예약되지 않을 수도 있는 것으로 판단한 후에는, 복수의 큐의 각각의 큐에 대응하는 코미트 레코드(corresponding commit record)를 기입하는 것을 중지(abort)하는 단계를 더 포함한다.
큐 내의 공간을 예약하는 단계는, 각각의 큐에 대한 대응하는 카운터를 증가시키는 단계를 포함한다.
또 다른 전반적인 양태에서, 본 발명은, 큐에 대한 복수의 메시지를 그 큐에 대한 제2 데이터 구조와는 구분되는 제1 데이터 구조에 저장하는 단계와, 그 메시지와 관련된 트랜잭션을 코미트하는 단계와, 상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하는 단계를 포함하는, 방법, 소프트웨어 및 시스템을 특징으로 한다.
이러한 양태는, 다음의 특징 중 하나 이상을 포함한다.
상기 방법은, 제1 데이터 구조에 대한 포인터를 제2 데이터 구조에 저장하는 단계를 더 포함한다.
인접한 메모리 지점으로부터 메시지의 적어도 일부를 판독하는 상기 단계는, 제1 데이터 구조로부터 메시지의 적어도 일부를 판독하는 단계를 포함한다.
트랜잭션을 코미트하는 상기 단계는, 메시지를 제1 데이터 구조에서 제2 데이터 구조로 이동시키는 단계를 포함한다.
인접한 메모리 지점으로부터 메시지의 적어도 일부를 판독하는 상기 단계는, 제2 데이터 구조로부터 메시지의 적어도 일부를 판독하는 단계를 포함한다.
상기 제1 데이터 구조는 휘발성 메모리에 저장되며, 상기 제2 데이터 구조는 비휘발성 메모리에 저장된다.
상기 방법은, 상기 메시지를 제1 데이터 구조에서 제3 데이터 구조로 이동시키는 단계와, 상기 제3 데이터 구조에 대한 포인터를 상기 제2 데이터 구조에 저장하는 단계를 더 포함한다.
인접한 메모리 지점으로부터 상기 메시지의 적어도 일부를 판독하는 단계는, 상기 제3 데이터 구조로부터 상기 메시지의 적어도 일부를 판독하는 단계를 포함한다.
본 발명의 양태는, 다음의 장점 중 하나 이상을 포함할 수 있다.
복합 코미트 연산(compound commit operation)은 하나 이상의 큐를 동시 로킹할 필요없이 복수의 큐의 각각에 레코드를 성공적으로 기입할 수 있도록 하여, 연산 자원의 활용을 증가시킨다. 대형 기입 트랜잭션에서의 메시지를 별도의 데이터 구조에 기입하는 것은, 다른 메시지의 판독 시에 대형 기입 트랜잭션의 레코드를 넘어서 스캔해야만 하는 것을 방지한다. 기입 트랜잭션에서의 메시지를 별도의 데이터 구조에 기입하거나 또는 이들 메시지를 큐에 추가하기 전에 기입 버퍼에 기입하는 것은, 기입 트랜잭션에서의 메시지와 인터리브되는 다수의 다른 메시지를 감소시키고, 입력/출력(I/O) 효율을 증가시킨다.
도 1a는 큐잉 시스템(queueing system)에 대한 다이아그램이다.
도 1b는 큐 데이터 구조의 다이아그램이다.
도 2a 내지 도 2e는 기입 버퍼 및 큐 데이터 구조의 다이아그램이다.
도 3a 및 도 3b는 기입 버퍼 및 2개의 큐 데이터 구조의 다이아그램이다.
도 4는 큐 데이터 구조 및 대응하는 판독 데이터 구조의 다이아그램이다.
도 5는 큐 데이터 구조 및 대형 트랜잭션 데이터 구조의 다이아그램이다.
도 6은 복합 코미트 연산의 일부인 큐 데이터 구조의 다이아그램이다.
도 7은 복합 코미트 연산에 대한 흐름도이다.
도 8a는 오픈 연산(open operation)에 대한 흐름도이다.
도 8b 및 도 8c는 각각 복합 코미트 연산과 관련 기입 연산에 대한 흐름도이다.
도 9a 및 도 9b는 각각 복합 코미트 연산과 관련 기입 연산에 대한 흐름도이다.
1. 개론
도 1a는, 트러스티드 액세스 엔티티(trusted access entities)(102A∼102M) 세트의 각각이 큐 매니저(106)와 직접 대화하기 위한 큐 트랜잭션 모듈(104)을 포함하고 있는 큐잉 시스템(queueing system)(100)을 도시하고 있다. 큐잉 시스템(100)은 또한 원격 프로시져 콜(RPC : Remote Procedure Call) 매니저(112)를 통해 큐 매니저(106)과 대화하기 위한 원격 큐 트랜잭션 모듈(110)을 각각 포함하는 언트러스티드 액세스 엔티티(untrusted access entities)(108A∼108N)의 세트를 포함한다.
큐잉 시스템(100)은 하나 이상의 메시지 큐를 통해 액세스 엔티티 간에 메시지를 보내기 위한 방식을 제공한다. 액세스 엔티티는 큐잉 시스템(100)과 대화하기 위해 모듈에 대한 인터페이스를 제공한다. 예컨대, 분산 연산 시스템에서의 "퍼블리셔(publisher)" 연산 모듈은 처리된 데이터 요소를 포함하는 메시지를 하나 이상의 "서브스크라이버(subscriber)" 연산 모듈에 보낼 수 있다.
큐 매니저(106)는, 데이터 판독 및 기입에 대해 비교적 고속의 액세스를 제공하는 임시 작업 기억장치인 휘발성 메모리 스토어(118)(반도체 랜덤 액세스 메모리(RAM) 등) 내의 저장 공간(예컨대, 디스크 페이지의 세트)이 각각 할당되는 대응하는 큐 데이터 구조(QUEUE_A∼QUEUE_P)로, 메시지 큐의 세트에 대한 메모리 기억 장치를 관리하는 입력/출력(I/O) 매니저(114)와 대화한다. I/O 매니저(114)는, 또한, 상대적으로 더 큰 데이터 영속성을 제공하고, 휘발성 메모리 스토어보다 상대적으로 느린 판독 및 기입 액세스를 제공하는 비휘발성 메모리 스토어(116)(자기 디스크 시스템 등)를 관리한다. 옵션으로는, 모든 큐에 대한 I/O를 처리하는 단일 I/O 매니저가 존재하거나, 또는 큐의 서브세트에 대한 I/O를 각각 처리하는 병렬로 실행되는 다수의 I/O 매니저가 존재한다.
큐 데이터 구조는, 분산되는 메시지 데이터를 포함하는 "메시지 레코드"(또한 단순히 "메시지"로도 지칭됨)와, 큐를 관리하기 위해 큐잉 시스템(100)에 의해 사용된 정보를 포함하는 "제어 레코드"를 포함한 레코드를 저장한다. 도 1b는, 각각 메시지 헤더(130) 및 메시지 데이터(132)를 포함하는 일련의 메시지 레코드를 갖고 있는 일례의 큐 데이터 구조(QUEUE_M)를 도시하고 있다. 큐는 옵션으로 메시지 헤더(130)와 함께 메시지 데이터를 저장하거나, 이와 달리 메시지 헤더(130)와 함께 포인터(134)를 저장하여 외부에 저장된 메시지 데이터(136)의 어드레스를 명확히 나타내줄 수도 있다. 하술되는 "대형 트랜잭션 인다이렉션 기술(large transaction indirection technique)"에서, 레코드는 메시지의 시퀀스를 저장하는 대형 트랜잭션 데이터 구조(122)에 대한 포인터(138)를 옵션으로 포함할 수 있다.
큐잉 시스템(100)은 퍼블리시-서브스크라이브 데이터 분포 모델(publish-subscribe data distribution model)을 포함한 다양한 데이터 분포 모델을 지원한다. 큐에 대해 "퍼블리셔"로서 작용하는 액세스 엔티티(트러스티드 액세스 엔티티 또는 언트러스티드 액세스 엔티티)는 "기입 트랜잭션"에서 하나 이상의 메시지를 큐(또한, "토픽(topic)"으로도 지칭됨)에 추가할 수 있다. 큐에 대해 "서브스크라이버"로서 작용하는 액세스 엔티티(트러스티드 액세스 엔티티 또는 언트러스티드 액세스 엔티티)는 "판독 트랜잭션"에서 큐로부터 하나 이상의 메시지를 판독할 수 있다. 다수의 퍼블리셔가 동일한 큐에 메시지를 추가할 수 있으며, 다수의 서브스크라이버가 동일한 큐로부터 동일한 메시지를 판독할 수 있다. 큐 매니저(106)는 큐에 대한 모든 서브스크라이버가 메시지를 판독한 후에 큐로부터 메시지를 제거한다. 이와 달리, 점대점(point-to-point) 데이터 분포 모델에서, 다수의 액세스 엔티티는 큐에 대해 메시지를 추가할 수 있지만, 각각의 메시지는 하나의 액세스 엔티티에 의해 큐로부터 판독된다. "복합 트랜잭션"은 보다 구체적으로 후술되는 바와 같이 하나 이상의 큐와의 대화를 포함한다.
본 명세서에서 설명되는 기입 트랜잭션, 판독 트랜잭션, 및 복합 트랜잭션은 "ACID" 특성, 즉 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 및 지속성(Durability) 중 하나 이상의 특성과 일치하는 방식으로 수행될 수 있다.
기입 트랜잭션을 개시하기 위해, 퍼블리셔는 큐 매니저(106)로부터 트랜잭션 식별자(ID)를 획득하고, 기입 트랜잭션에서 큐에 추가될 메시지를 큐 매니저(106)에 보낸다. 추가된 메시지는 이들 메시지가 큐에 추가되는 기입 트랜잭션의 트랜잭션 ID에 관련된다. 큐 매니저(106)는 휘발성 메모리 스토어(118) 및 실제적으로는 비휘발성 메모리 스토어(116)에 기입하기 위해 메시지를 I/O 매니저(114)에 보낸다. 큐 매니저(106) 및 I/O 매니저(114)에 의해 수행되는 기능을 상이하게 분할하는 것도 가능하다.
퍼블리셔가 기입 트랜잭션에서 추가될 모든 메시지를 큐 매니저(106)에 공급한 후, 퍼블리셔는 큐 매니저(106)가 기입 트랜잭션을 "코미트" 또는 "롤백(roll back)"하도록 요청한다. 기입 트랜잭션을 코미트하기 위해, 큐 매니저(106)는 비휘발성 메모리 내의 대응하는 큐 데이터 구조에 "코미트 레코드"를 추가한다. 코미트 레코드는 코미트된 기입 트랜잭션의 메시지("코미티드 메시지")가 서브스크라이버에게 보내질 수 있다는 것을 나타낸다. 기입 트랜잭션이 코미트되기 전에, 관련 메시지는, 이들 메시지가 휘발성 메모리에 동기되던 것을 비휘발성 메모리에 동기되도록 함으로써 지속 가능하게 된다(이들 메시지가 아직 동기화되지 않은 경우).
큐 매니저(106)는 롤백되는 기입 트랜잭션에서의 메시지가 비휘발성 메모리에 동기되지 않았다면 이들 메시지를 폐기한다. 메시지가 비휘발성 메모리에 동기되지 않았다면, 적합한 큐 데이터 구조에 "롤백 레코드"가 기입되어, 그 트랜잭션에서의 메시지가 코미트되지 않을 것이고, 그 메시지가 실제로는 폐기될 수 있다는 것을 나타내준다. 일부 구현예에서, 기입 트랜잭션이 코미트되지 않거나, 소정량의 시간(예컨대, 한 시간) 후에 롤백되지 않는다면, 옵션으로서, 큐 매니저(106)는 예컨대 이들 트랜잭션의 구축이 저장 공간을 낭비하지 않도록 트랜잭션을 자동적으로 롤백할 수도 있을 것이다.
판독 트랜잭션을 개시하기 위해, 서브스크라이버는 트랜잭션 ID를 획득하고, 큐 매니저(106)로부터 다음 번의 판독되지 않은 메시지를 수신한다. I/O 매니저(114)는 적합한 큐 데이터 구조로부터 메시지를 검색하는 것을 처리하고, 큐 매 니저(106)는 이들을 서브스크라이버에게 보낸다. 메시지는, 코미트된 메시지만이 서브스크라이버에게 보내지고, 코미트된 메시지가 아직 코미트되지 않은 메시지와 인터리브될 수도 있기 때문에, 이들이 큐 데이터 구조에 기입되는 것과 동일한 순서로 되돌려 보내질 수도 있고 고, 되돌려 보내지지 않을 수도 있다. 큐 매니저(106)는, 보다 구체적으로 후술되는 바와 같은 "판독 데이터 구조"를 구축함으로써, 큐 내의 어느 메시지를 서브스크라이버에게 보낼지를 결정한다.
"복합 트랜잭션"에서, 액세스 엔티티는 동일한 트랜잭션 ID와 관련되는 모든 메시지로, 하나 이상의 큐에의 기입 및/또는 하나 이상의 큐로부터의 판독이 가능하다. 복합 트랜잭션은 또한 코미트될 수도 있고, 롤백될 수도 있다. 복합 트랜잭션이 "복합 코미트" 연산에서 코미트될 때, 코미트 레코드는 복합 트랜잭션에서 메시지가 기입되는 각각의 큐에 추가된다. 이들 "큐 코미트 레코드"는 대응하는 코미티드 메시지가 서브스크라이버에게 보내질 수 있다는 것을 신호해주기 위해 이용된다.
이들 " 큐 코미트 레코드"를 기입하기 전에, "저널 코미트 레코드"는 코미티드되는 복합 트랜잭션의 트랜잭션 ID를 포함하는 저널 데이터 구조(124)에 기입된다. 옵션으로, 저널 코미트 레코드는 복합 트랜잭션에 참여하는 액세스 엔티티 및 및 수반되는 큐 데이터 구조 등의 기타 정보를 포함할 수도 있다. 복합 코미트 연산은, 트랜잭션에서 기입되는 모든 메시지가 지속 가능하게 저장되는 경우, 또는 그들 메시지의 어느 것도 지속 가능하게 저장되지 않을 경우(예컨대, 추가된 메시지의 전부가 장애 시에 롤백될 것이다) 중의 한 경우를 보장하는 아토믹 연 산(atomic operation)으로서 수행된다. 저널 코미트 레코드의 기입은 복합 코미트 연산을 완료하는 아토믹 액션(atomic action)이다. 저널 코미트 레코드가 기입된 후 그러나 큐 코미트 레코드의 전부가 기입되기 전에, 장애가 발생하면, 큐잉 시스템(100)은 지속 가능하게 저장된 저널 코미트 레코드를 기초로 복원되어, 나머지의 큐 코미트 레코드를 기입할 수 있다.
I/O 효율을 증가시키기 위해, 큐 매니저(106)는, 옵션으로, 큐 데이터 구조와는 구분되는 데이터 구조에 큐에 대한 새로운 메시지를 저장함으로써 상이한 트랜잭션으로부터의 메시지를 인터리빙(interleaving)하는 것을 감소시키는 기술을 사용한다. 예컨대, 큐잉 시스템(100)은 이러한 종류의 메시지 인터리빙을 감소시키기 위해 2개의 상이한 기술, 즉 하술되는 "기입 버퍼링 기술" 및 "대형 트랜잭션 인다이렉션 기술"을 포함한다.
기입 버퍼링 기술에서, I/O 매니저(114)는 먼저 휘발성 메모리 스토어(118) 내의 기입 버퍼(120)에 큐에 대한 언코미티드 메시지를 임시로 저장한다. 메시지와 관련된 기입 트랜잭션이 코미트될 때, 메시지는 기입 버퍼(120)로부터 적합한 큐 데이터 구조로 이동된다. 메시지는 또한, 예컨대 기입 버퍼(120)가 풀(full) 상태인 경우에는 기입 트랜잭션이 코미트되기 전에 또는 소정량의 시간이 경과한 후에, 기입 버퍼(120)로부터 적합한 큐 데이터 구조로 이동될 수도 있다. 이와 달리, 기입 버퍼(120)는 비휘발성 메모리 스토어(116)에 저장될 수도 있으며, 여전히 동일한 기능성(예컨대, 상이한 트랜잭션으로부터의 메시지의 인터리빙을 감소시킴)의 일부를 제공한다.
대형 트랜잭션 인다이렉션 기술에서, 많은 수의 메시지(예컨대, 연산 환경의 특징에 따라서는 10,000 이상, 100,000, 1,000,000 등)를 포함하는 기입 트랜잭션이 퍼블리셔에 의해 "대형 트랜잭션(large transaction)"으로서 식별된다. 큐 매니저(106)는 대형 트랜잭션의 메시지를 대형 트랜잭션 데이터 구조(LTDS)(122)에 저장하고, LTDS(122)에 대한 포인터를 큐 데이터 구조에 저장한다. 큐 매니저(106)는 옵션으로, 기입 트랜잭션에서 소정수의 메시지를 검출한 후, 기입 트랜잭션을 즉각적으로 대형 트랜잭션으로 자동으로 변환할 수도 있다. 기입 버퍼링 기술 및 대형 트랜잭션 인다이렉션 기술 모두는 메시지 데이터가 인접한 메모리 지점에 저장되는 가능성을 증가시키고, 이로써 I/O 효율을 증가시킬 수 있다.
2. 메시지 추가 및 판독
I/O 매니저(114)는, 메시지를 비휘발성 메모리(118) 내의 순서가 정해진 큐 데이터 구조(ordered queue data structure)에 저장할 때, 큐 매니저(106)에 제공되었던 순서로 임의의 특정 기입 트랜잭션을 위한 메시지를 보유한다. 큐 데이터 구조에 저장된 메시지의 순서는 예컨대 현재 큐 데이터 구조의 일부인 디스크 페이지의 링크된 리스트에 의해 결정된다. 상이한 기입 트랜잭션에 대한 메시지는 큐 데이터 구조에서 인터리브될 수도 있다. 이전에 개시된 기입 트랜잭션이 코미트된 후에 새로운 기입 트랜잭션이 개시된다면, 이전의 기입 트랜잭션에서의 메시지의 전부가 큐 데이터 구조에 저장된 후에, 새로운 기입 트랜잭션에 관련된 모든 메시지가 발생한다.
서브스크라이버는 큐로부터 하나 이상의 메시지를 요청하는 판독 트랜잭션을 개시할 수 있다. 서브스크라이버에 의해 수신된 메시지는 하나의 기입 트랜잭션으로부터 발생하거나, 기입 트랜잭션의 서브세트로부터 발생하거나, 또는 하나 이상의 기입 트랜잭션으로부터 발생할 수도 있다. 보다 상세하게 후술되는 바와 같이, 큐 매니저(106)는 메시지를 코미티드 기입 트랜잭션으로부터 서브스크라이버에게 보낸다. 동일한 기입 트랜잭션에서 기입되었던 메시지는, 기입 트랜잭션의 순서대로 서브스크라이버에게 제공된다. 상이한 기입 트랜잭션으로부터의 메시지는 기입 트랜잭션이 코미트되었던 순서로 서브스크라이버에게 제공된다. 큐의 상이한 서브스크라이버에 의해 판독된 동일한 메시지는, 이들 서브스크라이버에 의해 동일한 순서로 보여지게 된다.
판독 트랜잭션의 I/O 효율은, 상이한 기입 트랜잭션으로부터의 메시지가 큐 데이터 구조 내에서 인터리브되는 정도까지 감소될 수도 있다. 예컨대, 큐 매니저(106)는, 메시지가 코미트된 것으로 판정될 때까지는 서브스크라이버에게 메시지를 보내지 않는다. 메시지와 그 메시지에 대응하는 코미트 레코드를 구분하는 데이터가 더 많을수록, 더 많은 관리 자원(예컨대, 더 많은 메모리 또는 더 많은 판독 동작)이 사용된다. 메시지가 추가되는 시점과 관련 기입 트랜잭션이 코미트되는 시점 간에 상당한 양의 시간차가 있으면, 기입 트랜잭션과 관련된 메시지(구체적으로는 기입 트랜잭션에서의 최초의 메시지)는 그 기입 트랜잭션을 위한 코미트 레코드와 광범위하게 구분될 것이다. 그 시간 동안, 메시지는 다른 메시지(예컨대, 다른 기입 트랜잭션과 관련된 메시지)와 인터리브된 큐 데이터 구조 내에 저장될 수도 있다. 또한, 그 기입 트랜잭션에서의 메시지는 광범위하게 구분된 디스크 페이지 상에 있을 수도 있다. 판독 트랜잭션에서, 큐 매니저(106)는 코미트 레코드에 대해 큐 데이터 구조를 스캔해야 할 수도 있으며, 그 기입 트랜잭션에 대한 메시지가 저장된 페이지로 되돌아가서 그 페이지의 전부를 스왑(swap)한다.
2.1 기입 버퍼링
도 2a 내지 도 2e는 전술한 기입 버퍼링 기술의 일례의 실행 동안의 기입 버퍼(120) 및 큐 데이터 구조(QUEUE_A)의 상태를 예시하고 있다. 기입 버퍼(120)는 큐 레코드(예컨대, 메시지 레코드 및 기입 트랜잭션의 개시점을을 나타내는 "오픈" 레코드)를 위한 임시 기억장치이다. 기입 버퍼(120)는, 대응하는 트랜잭션이 코미트될 때까지 또는 기입 버퍼(120)가 "풀(full)" 상태가 될 때까지 레코드를 보유한다. 큐 매니저(106)는, 최대량의 데이터, 최대 개수의 메시지, 또는 데이터의 양과 메시지의 개수의 조합에 기초하여 기입 버퍼(120)가 풀 상태로 되는 때를 판정할 수도 있다. 이 예에서는, 기입 버퍼(120)가 최대 3개의 메시지를 보유하는 것으로 예시되어 있다. 기입 버퍼(120)는 메시지가 추가되는 순서를 보존하는 순서가 정해진 데이터 구조(an ordered data structure)(예컨대, 링크된 리스트)로 실시된다. 기입 버퍼(120) 및 큐 데이터 구조(QUEUE_A)는 리스트의 바닥(bottom)에서의 "헤드"에 메시지가 추가되는 리스트로서 예시되어 있다.
도 2a를 참조하면, 큐 데이터 구조(QUEUE_A)는 기입 트랜잭션(T1)의 개시를 나타내는 "OPEN T1" 레코드 및 트랜잭션(T2)의 개시를 나타내는 "OPEN T2" 레코드를 보유한다. 기입 버퍼(120)는 헤더 "T1: ADD M1", "T2: ADD M1" 및 "T1: ADD M2"를 갖는 메시지를 보유한다. 각각의 메시지에 대한 메시지 데이터 또한 해당 메시지 헤더와 함께 기입 버퍼(120)에 저장된다. 이 예에서, 기입 트랜잭션 T1과 관련된 2개의 메시지는, 예컨대 T1 및 T2가 상이한 퍼블리셔에 의해 동시에 기입되었기 때문에, 기입 트랜잭션 T2에 관련된 메시지와 인터리브된다.
도 2b를 참조하면, 큐 매니저(106)는 트랜잭션 T1에 대한 메시지(M1, M2)(메시지 헤더 및 관련 메시지 데이터를 포함)를 QUEUE_A로 이동시키고, 메시지가 비휘발성 기억장치에 동기되도록 한 후에, 기입 트랜잭션 T1에 대한 코미트 연산을 수행한다. 코미트 레코드 "COMMIT T1"는 코미트 연산을 완료하기 위한 메시지 다음에 QUEUE_A에 기입된다. T1 메시지가 QUEUE_A에 이동된 후, 하나의 T2 메시지가 기입 버퍼에 잔류된다(T2가 아직 코미트되지 않았기 때문에).
도 2c를 참조하면, 퍼블리셔는 새로운 기입 트랜잭션 T3를 오프시키고, 헤더 "T3: ADD M1" 및 "T3: ADD M2"를 갖는 2개의 메시지를 큐에 추가하며, 이들 메시지 모두는 2개의 빈 슬롯을 갖는 기입 버퍼(120)에 저장된다. 그 후, 큐 매니저(106)는, 헤더 "T2: ADD M1"를 갖는 유일한 T2 메시지(M1)를 마지막 남은 기입 버퍼(120) 슬롯 내의 QUEUE_A에 이동시킨 후, 기입 트랜잭션 T2에 대한 코미트 연산을 수행한다. 그 후, 퍼블리셔는 새로운 기입 트랜잭션 T4를 오픈시키고, 헤더 "T4: ADD M1"를 갖는 메시지를 마지막 남은 기입 버퍼(120) 슬롯 내의 큐에 추가한다. 기입 트랜잭션(T1, T2)과 관련된 메시지가 먼저 인터리브 되었지만, 이들은 디인터리브되어, 기입 버퍼(120)에서 QUEUE_A로의 전달의 일부로서의 큐 데이터 구조 QUEUE_A에 연속적으로 저장된다.
도 2d를 참조하면, 퍼블리셔가 T4에 대한 메시지를 추가할 때, 기입 버 퍼(120)가 풀 상태이므로, 큐 매니저(106)는 T3에 관련된 메시지를 기입 버퍼(120)에서 QUEUE_A로 전달한다. 이러한 전달은 제2의 T4 메시지를 위한 기입 버퍼(120) 내의 공간을 개방시킨다. 그러므로, 기입 트랜잭션에서의 메시지는 코미트되기 전에 기입 버퍼(120)로부터 전달될 것이다.
도 2e를 참조하면, 큐 매니저(106)는 기입 트랜잭션 T4에 대한 코미트 연산을 수행하고, 새로운 T3 메시지를 수신하며, 기입 트랜잭션 T3에 대한 코미트 연산을 수행한다. 이 예는, 기입 버퍼링이 메시지의 인터리빙(또는 "임시 프래그멘테이션(temporal fragmentation)")을 감소시키지만, 기입 버퍼(120)의 채워짐으로 인해 기입 버퍼링을 이용하여 일부의 임시 프래그멘테이션이 여전히 발생할 수도 있다. 이와 달리, 기입 버퍼(120)가 채워질 때, 하나 이상의 기입 트랜잭션이 대형 트랜잭션으로 변환될 수 있으며, 이로써 큐 데이터 구조에서의 임시 프래그멘테이션을 초래하지 않고서도 기입 버퍼(120) 내의 공간을 프리 상태로 할 수 있다.
일부 구현예에서, 각각의 큐는 자신의 기입 버퍼를 갖는다. 이와 달리, 기입 버퍼(120)는 하나 이상의 큐에 대한 메시지를 수용할 수도 있다. 일례에서, 3개의 기입 트랜잭션(T1∼T4)에 대한 메시지가 2개의 큐에 추가된다. 도 3a는 기입 버퍼(120)가 풀 상태(이 예에서는 기입 버퍼(120)가 10개의 메시지를 보유함)일 때의 기입 버퍼(120) 및 큐 데이터 구조(QUEUE_A, QUEUE_B)의 상태를 나타내고 있다. 가장 오래된 트랜잭션 T1에 관련된 메시지가 QUEUE_A에 전달되어, 새로운 메시지를 위한 기입 버퍼(120) 내의 공간을 프리 상태로 한다.
2.2 판독 데이터 구조
큐 매니저(106)는, 큐 내의 메시지 레코드를 순차적으로 스캐닝하여, 각각의 메시지가 어느 트랜잭션과 관련되는지를 판단하기 위해 메시지 헤더만을 판독함으로써, 판독 데이터 구조를 구축한다. 큐 매니저(106)는 복수 개일 수도 있는 기입 트랜잭션의 트랙을 유지하기 위해 판독 데이터 구조를 이용한다. 각각의 큐에 대해, 큐 매니저(106)는 각각의 서브스크라이버에 대한 판독 데이터 구조를 그 큐에 저장한다.
도 4는 QUEUE_A에 대응하는 일례의 판독 데이터 구조(400)를 나타내고 있다. 이 예에서, 판독 데이터 구조(400)는 선입선출(FIFO) 서브-리스트(401∼404) 중의 가장 오래된 리스트를 포함한다. 큐 매니저(106)가 새로운 기입 트랜잭션에 대응하는 메시지를 만나게 될 때마다, 새로운 FIFO 서브-리스트가 그 기입 트랜잭션에 대한 트랜잭션 ID에 의해 식별된 판독 데이터 구조(400)에 추가된다. 큐 매니저(106)는, 해당 기입 트랜잭션에 관련된 각각의 메시지에 대한 포인터를, 이들 메시지가 스캐닝되는 순서로(즉, 이들이 큐에 추가되는 순서로), 각각의 FIFO 서브-리스트에 추가한다.
도 4에 도시된 큐 데이터 구조 QUEUE_A를 스캐닝함에 있어서, 큐 매니저(106)는, 메시지(M1, M2)에 대한 포인터를 가지고, 기입 트랜잭션 T1에 대한 제1 FIFO 리스트(401)를 생성한다. 큐 매니저(106)는, 메시지가 코미트되었다는 것을 확인할 때까지(즉, 관련 트랜잭션에 대한 코미트 레코드의 스캐닝이 완료될 때까지), 해당 서브스크라이버에게 메시지를 되돌려보내는 것(판독 트랜잭션에 응답하여)을 개시하지 못한다. T1에 대한 코미트 레코드에 도달한 후, FIFO 서브-리스 트(401)가 완성되고, 큐 매니저(106)는 판독 데이터 구조(400)를 구축하는 것을 중지하고, FIFO 서브-리스트(401) 내의 포인트에 기초하여 다음 메시지를 검색하며, 서브스크라이버가 새로운 메시지를 요청할 때 서브스크라이버에게 그 메시지를 보내준다. 완성된 FIFO 서브-리스트(401) 내의 메시지 전부가 서브스크라이버에게 보내진 후, 큐 매니저(106)는, 다음 FIFO 서브-리스트(402)가 완성될 때까지 판독 데이터 구조(400)를 구축하는 것을 지속하기 위해 다시 QUEUE_A의 스캐닝을 개시한다. 큐 매니저는, 완성된 FIFO 서브-리스트로부터의 서브스크라이버에 대한 메시지를 처리하는 것과, 판독 데이터 구조를 구축하기 위해 큐 데이터 구조를 스캐닝하는 것을, 교번적으로 행한다. 이 예에서, T4에 대한 메시지(M1, M2)는, T4에 대한 코미트 레코드가 T3에 대한 코미트 레코드 이전에 발생하기 때문에, T3에 대한 메시지(M1∼M3) 이전에 서브스크라이버에게 보내진다. 다른 구현예에서, 큐 매니저는, 완성된 FIFO 서브-리스트 내의 메시지의 전부가 서브스크라이버에게 보내지기 전에 판독 데이터 구조를 구축하기 위해, 서브스크라이버에 대한 메시지를 처리하는 것을 바꿀 수 있다.
해당 서브스크라이버가 그 FIFO 서브-리스트 내의 메시지 전부를 수신한 후까지, 또는 큐 매니저(106)가 해당 기입 트랜잭션이 코미트되지 않을 것으로 판단할 때까지(예컨대, 롤백 레코드를 판독한 후), 각각의 FIFO 서브-리스트는 유지된다. 판독 트랜잭션이 코미트된 후, 코미트 레코드는, 어느 메시지가 서브스크라이버에 의해 판독되었는지를 나타내는 저널 데이터 구조(124)에 기입된다. 큐 매니저(106)가 판독 데이터 구조(400)의 구축을 완료한 후, 판독 데이터 구조(400)는 동일한 서브스크라이버에 대한 동일한 큐로부터의 다음 판독 트랜잭션을 위해 유지된다.
2.3 대형 트랜잭션 인다이렉션
도 5를 참조하여, 큐 매니저(106)가 대형 트랜잭션 T2를 오픈할 때, 큐 매니저(106)는 비휘발성 메모리 스토어(116) 내에 대형 트랜잭션 데이터 구조(LTDS)(122)를 할당한다. 대형 트랜잭션을 위해 메시지가 도착할 때, 이들 메시지는 메시지의 연속 리스트로서 LTDS(122)에 직접 기입된다. 대형 트랜잭션이 코미트될 때, 큐 매니저(106)는 LTDS(122)를 폐쇄시키고, 큐 데이터 구조(QUEUE_P) 내의 인다이렉트 메시지(indirect message)(500)에 LTDS(122)에 대한 포인터를 저장한다. 인다이렉트 메시지(500)는 또한 대형 트랜잭션 T2에 대한 트랜잭션 ID를 포함한다.
큐 매니저(106)가 QUEUE_P에 대한 판독 데이터 구조를 구축할 때, T1 메시지는, 판독 데이터 구조의 FIFO 서브-리스트에 포인터를 기입할 때 한 번, 그리고 서브스크라이버에게 되돌려 보내기 위해 메시지를 판독할 때 한 번, 총 2회 스캐닝된다. 이러한 더블 스캐닝은, 대형 트랜잭션 T2에서의 다수의 메시지가 QUEUE_P에 저장된다면 불충분할 것이다. 그 대신, 큐 매니저(106)가 QUEUE_P에 대한 판독 데이터 구조를 구축하고, 하나의 인다이렉트 메시지(500)를 스캔할 때, 큐 매니저(106)는 T2에 대한 FIFO 서브-리스트를 반드시 필요로 하지 않고서도 메시지를 LTDS(122)로부터 직접 서브스크라이버에게 보낸다. 대형 트랜잭션이 코미트된 것으로서 자동적으로 나타내지기 때문에, 대형 트랜잭션 메시지를 서브스크라이버에 게 되돌려 보내기 전에, 이들 대규모 트랜잭션 메시지의 어느 것도 스캐닝될 필요가 없다. 또한, 상이한 트랜잭션으로부터의 메시지를 "인터리빙"하는, 스캐닝의 또 다른 기능도 필요하지 않게 된다. 큐 매니저(106)는, 대형 트랜잭션 T2에서의 메시지의 전부를 되돌려 보낸 후, 큐 데이터 구조로 복귀한다.
대형 트랜잭션은 퍼블리셔에 의해 선택되거나 또는 큐에 의해 즉각적으로 추론되는 옵션일 수도 있다.
3. 복합 코미트( compound commit )
복합 코미트 연산에서, 큐 매니저(106)는 다수의 큐에 기입할 복합 트랜잭션의 추가된 메시지의 전부가 지속 가능하게 저장되도록 한다. 복합 코미트 연산의 일부는, 이들 큐에 대한 기입 코미트 레코드를 포함한다. 복합 코미트 연산이 수행되고 있는 동안, 액세스 엔티티가 복합 코미트 연산과 간섭하도록 하지 않고, 하나 이상의 액세스 엔티티로 하여금 큐를 동시에 액세스하도록 하는 방식을 제공하는 것이 유용하다.
큐 매니저(106)는, 저널 코미트 레코드를 저널 데이터 구조(124)에 기입함으로써 복합 트랜잭션의 메시지가 지속 가능하게 저장되었다는(즉, 비휘발성 메모리에 동기되었다는) 것을 나타내준다. 후속하여, 큐 매니저(106)는 복합 트랜잭션에서 메시지가 기입되고 있는(예컨대, 판독 데이터 구조를 구축하기 위해 코미트 레코드에 대해 큐가 스캐닝되도록) 큐의 각각에 큐 코미트 레코드를 기입한다. 큐 데이터 구조가 제한된 저장 공간을 갖고 있기 때문에, 큐의 일부가 복합 코미트 연산에 대한 일시중지 기간(timeout period)(예컨대, 5초) 내에 코미트 레코드를 기 입하기 위해 남겨진 공간이 충분하지 않을 수도 있다. 큐 데이터 구조가 복합 코미트 연산의 개시 시에 이용 가능한 공간을 갖고 있는 경우에도, 동시에 발생하는 기입 연산은 큐 코미트 레코드가 기입되기 전에 그 공간을 전부 다 사용할 수 있다. 코미트 레코드를 위한 큐 내의 공간의 부족은, 저널 데이터 구조(124)가, 메시지가 코미트되었지만 서브스크라이버로 하여금 그 메시지를 수신할 수 있도록 하기 위한 대응하는 코미트 레코드가 큐 내에 없을 것이라는 것을, 나타낼 것이기 때문에, 잠재적인 문제가 된다.
복합 코미트 연산을 위한 큐 코미트 레코드를 관리하는 한 가지 방안에서, 큐 매니저(106)는, 코미트 레코드를 기록하는 동안 각각의 큐를 동시에 로킹함으로써 코미트 연산 동안 공간이 전부 사용되지 않도록 하여, 코미트 레코드를 위한 충분한 공간이 각각의 큐 내에서 이용 가능하도록 한다. 제2 및 제3 방안에서, 복합 코미트 연산을 더욱 효율적으로 수행하기 위해, 큐 매니저(106)는 하나 이상의 큐의 동시 로킹을 요구하지 않고, 다수의 큐의 각각에 대해 코미트 레코드의 성공적인 기입을 보장하는 방법을 이용한다. 이러한 3가지 방안의 각각은 더욱 구체적으로 후술된다.
도 6을 참조하여, 큐 데이터 구조(QUEUE_A, QUEUE_D)는 T1, T2 및 T3의 트랜잭션 ID를 갖는 복합 트랜잭션 및 T4의 트랜잭션 ID를 갖는 기입 트랜잭션에 대한 메시지를 포함한다. 복합 트랜잭션 T1이 코미트되며, T1에 대한 코미트 레코드가 QUEUE_A 및 QUEUE_D에 기입된다. 트랜잭션 T2, T3 및 T4는 아직 코미트되지 않는다. 이하에서는, 복합 트랜잭션 T2에 대한 복합 코미트 연산과 관련된 QUEUE_A 및 QUEUE_D에 관한 연산을 3가지 예의 방안의 각각에 대하여 설명한다.
3.1 제1 방안
도 7은 코미트 레코드 기입 연산(700)에 대한 흐름도를 도시하고 있다. 큐 매니저(106)는 복합 트랜잭션에서 포함되는 큐의 각각을 로킹한다(702). 도 6의 예에서, 큐 매니저(106)는 QUEUE_A 및 QUEUE_D를 로킹한다(예컨대, 로크 플래그(lock flag)를 설정함으로써). 이러한 로킹은 어떠한 다른 프로세스가 큐 데이터 구조 내의 이용 가능한 공간을 점유하는 것을 방지한다.
각각의 큐를 로킹(702)한 후, 큐 매니저(106)는 각각이 큐 내의 이용 가능한 저장 공간을 체크한다(704). 도 6의 예에서, 큐 데이터 구조 QUEUE_A는 이용 가능한 기억장치의 블록(600)을 가지며, 큐 데이터 구조 QUEUE_B는 이용 가능한 기억장치의 블록(602)을 갖는다. 큐 매니저(106)는 각각의 큐 내의 이용 가능한 공간의 양과 코미트되고 있는 복합 트랜잭션을 위한 기입 레코드를 기입하기 위해 사용될 공간의 양을 비교한다. 어떠한 큐가 코미트 레코드를 위해 예약된 충분한 이용 가능한 공간을 갖지 못한다면, 큐 매니저(106)는 복합 코미트 연산을 중지한다(706). 큐 매니저(106)는 추후에 복합 코미트 연산을 시도하거나 및/또는 하나 이상의 큐를 위해 더 많은 저장 공간을 획득하도록 시도할 것이다.
큐가 코미트 레코드를 위해 예약된 충분한 저장 공간을 갖지 못한다면, 큐 매니저(106)는, 휘발성 메모리에 저장된 어떠한 메시지가 비휘발성 메모리에 이동되도록 하기 위해 각각의 큐를 동기시킨다(708). 각각의 큐가 동기화된 후, 큐 매니저(106)는 저널 데이터 구조(126)에 코미트 레코드를 기입한다(710). 저널 코미 트 레코드를 기입한 후, 큐 매니저(106)는 각각의 큐에 코미트 레코드를 기입한다(712). 큐에 코미트 레코드를 기입한 후, 큐 매니저(106)는 그 큐를 언로킹한다(714).
저널 코미트 레코드의 기입은, 복합 코미트 연산을 복구할 수 있는 지점을 정하는 자동 동작이다. 큐 매니저(106)가 저널 코미트 레코드를 기입하기 전의 복합 코미트 연산 동안 큐잉 시스템(100)에 장애가 발생하면, 모든 큐에 대해 코미트 연산이 중지된다(일부 큐가 비휘발성 기억장치에 동기되지 않을 수도 있고, 코미트 레코드 큐 중의 어떠한 큐에 대해 기입되지 않기 때문에). 큐 매니저(106)가 저널 코미트 레코드를 기입(710)한 후의 복합 코미트 연산 동안 큐잉 시스템(100)에 장애가 발생하면, 큐의 전부에 대해 코미트 연산이 완료된다(각각의 큐가 비휘발성 기억장치에 동기되고, 코미트 레코드가 저널 코미트 레코드로부터 복구될 수 있기 때문에).
3.2 제2 방안
제2 방안에서, 큐 매니저(106)는, 각각의 큐 내의 이용 가능한 공간의 양과, 코미트되고 있는 복합 기입 트랜잭션 및 어떠한 아웃스탠딩 트랜잭션(본 명세서에서 사용된 바와 같이, "아웃스탠딩 트랜잭션"은 복합 트랜잭션 및 기입 트랜잭션 양자를 포함함)을 위한 코미트 레코드를 기입하는 데 사용될 공간의 양을 비교한다. 큐 데이터 구조 QUEUE_A는 T2 및 아웃스탠딩 트랜잭션 T3를 위한 기입 코미트 레코드에 대해 예약된 기억장치의 블록(604)을 포함한다. 큐 데이터 구조 QUEUE_B는 T2 및 아웃스탠딩 트랜잭션 T3, T4에 대한 기입 코미트 레코드에 대해 예약된 기억장치의 블록(606)을 포함한다.
도 8a는 기입 트랜잭션의 개시 시에 수행된 "오픈 연산"(800)에 대한 흐름도를 도시하고 있다. 각각의 큐 queue _i에 대해, 큐 매니저(106)는 코미트 레코드가 아직 기입되지 않은 아웃스탠딩 트랜잭션 Ti의 번호의 트랙을 유지한다. queue_i 상의 새로운 트랜잭션을 오픈하고 Ti를 증가시키기 전에, 큐 매니저(106)는 "오픈 레코드" 및 코미트 레코드를 위한 공간이 존재하도록 하기 위해 큐(단순한 기입 트랜잭션을 위한 하나의 큐, 또는 복합 트랜잭션에서 메시지가 추가되는 각각의 큐)를 로킹하고(802), 체크한다(804). 큐 매니저(106)는 현재 이용 가능한 공간을 다음에 의해 주어지는 D 0 와 비교한다:
D 0 = size_of(1 오픈 레코드) + size_of(1 코미트 레코드) × (Ti+1)
이용 가능한 공간이 D 0 보다 더 크거나 동일하다면, 큐 매니저(106)는 queue_i를 언로킹(806)하고, "오픈 레코드"를 기입하며(808), 아웃스탠딩 트랜잭션 의 번호를 증가시킨다(810). 한편, 이용 가능한 공간이 D 0 보다 작다면, 큐 매니저(106)는 queue _i를 언로킹하고(812), 오픈 연산(800)을 중지한다(814).
도 8b 및 도 8c는 각각 코미트 레코드 기입 연산(840) 및 관련 기입 연산(850)에 대한 흐름도를 도시하고 있다. 큐 매니저(106)(또는 I/O 매니저(114))는 코미트 연산을 위해 코미트 레코드 기입 연산(840)을 이용하고, 큐에 대한 코미트 레코드 이외의 어떠한 데이터를 기입하기 위해(가능하게는 동시에 기입하기 위해) 기입 연산(850)을 이용한다. 이 방안에서, 코미트 레코드 기입 연산(840)은 큐 내의 이용 가능한 공간을 체크할 필요가 없는데, 그 이유는 기입 연산(850)이 큐 데이터 구조에 어떠한 데이터를 기록하기 전에 이 체크를 포함하기 때문이다. 큐 매니저(106)는, 구체적으로 하술되는 바와 같이, 각각의 큐 queue _i가 그 큐를 위한 Ti 아웃스탠딩 트랜잭션의 각각에 대한 코미트 레코드를 위해 충분한 공간을 예약하도록 한다. 따라서, 큐 매니저(106)는 코미트 레코드 기입 연산(840)을 수행할 때에 각각의 코미트 레코드를 위해 공간이 예약되어 있는 것으로 안전하게 추정할 수 있다.
도 8b를 참조하여, 코미트 레코드 기입 연산(840)에서, 큐 매니저(106)는 각각의 큐를 먼저 동기화한다(842). 각각의 큐를 동기화한 후, 큐 매니저(106)는 저널 코미트 레코드를 기입한다(844). 저널 코미트 레코드를 기입한 후, 큐 매니저(106)는 각각의 큐에 코미트 레코드를 기입한다(846).
도 8c를 참조하여, 큐 매니저(106)는 큐 데이터 구조에 대해 기입될 데이터를 위한 기입 연산(850)을 사용한다. 큐 매니저(106)는 먼저 기입될 데이터가 코미트 레코드인지를 판단한다(852). 기입될 데이터가 코미트 레코드인 경우, 큐 매니저(106)는 코미트 레코드를 기입하고(854), 아웃스탠딩 트랜잭션 의 수를 감소시킨다(856). 기입될 데이터가 코미트 레코드가 아닌 경우, 큐 매니저(106)는 큐를 로킹하고(858), 큐 내의 이용 가능한 저장 공간을 체크한다(860). 큐 매니저(16)는 현재 이용 가능한 공간과 다음에 의해 주어진 Dw를 비교한다:
Dw = size_of(기입될 데이터) + size_of(코미트 레코드)×Ti
여기서, size_of(data)는 data의 크기를 적합한 단위(예컨대, 바이트)로 변 환한다. 이용 가능한 공간이 Dw 보다 크거나 또는 동일한 경우, 큐 매니저(106)는 데이터를 기입하고(862), 큐를 언로킹한다(864). 한편, 이용 가능한 공간이 Dw 보다 작은 경우, 큐 매니저(106)는 큐를 언로킹(866)하고, 기입 연산(850)을 중지한다(868). 이 방안에서, 데이터가 기입되고 있는 하나의 큐만이 저장 공간이 체크되고 있는 동안 로킹된다.
3.3 제3 방안
도 9a 및 도 9b는 코미트 레코드 기입 연산(900) 및 관련된 기입 연산(950)에 대한 흐름도를 도시한다. 이 방안에서, 큐 매니저(106)는 기입 트랜잭션의 개시 시에 도 8a에 도시된 "기입 연산"(800)을 이용한다. 코미트 레코드 기입 연산(900) 및 기입 연산(950) 양자는 큐 내의 이용 가능한 공간에 대해 체크한다. 또한, 이 방안에서는 하나의 큐만이 동시에 로킹된다. 각각의 queue _i에 대해, 큐 매니저(106)는 아웃스탠딩 트랜잭션 Ti의 번호의 트랙을 유지한다(오픈 연산(800)을 이용하여 Ti를 증가시킨다). 큐 매니저(106)는 각각의 큐 데이터 구조가 Ti 아웃스탠딩 연산의 각각에 대한 코미트 레코드를 위해 충분한 공간을 예약하고 있도록 한다. 그러나, 이 방안에서, 큐 매니저(106)만이, 큐가 "예약 모드"에 있는 동안 큐에 데이터를 기입하기 전에 공간에 대해 체크하기 위해 큐를 로킹한다. 예약 모드는 코미트 연산이 모든 참여 큐를 동시에 로킹하지 않고 점차적으로 로킹되도록 신호를 보내는 방법을 제공한다.
도 9a를 참조하면, 코미트 레코드 기입 연산(900)에서, 큐 매니저(106)는 먼저 코미트 레코드 기입 연산(900)에 포함된 각각의 queue _i에 대해 한 번씩 루 프(902)(또는 등가의 제어 구조)를 실행한다(즉, 여기서 i는 1 부터 코미트 레코드 기입 연산(900)에서의 큐의 개수까지). 루프(902)는, 동시에 수행되는 다수의 복합 코미트 연산의 가능성을 고려할 수 있는 방식으로 queue _i에 대해 예약 모드를 개시시킨다. 이 예에서, 루프(902)는 queue _i에 대한 예약 모드 카운터 Ri를 증가시킨다(904). 예약 모드 카운터는 예컨대 Ri=0의 초기 값으로 개시하며, 이 값에서는 queue _i가 예약 모드에 있지 않는다. 이로써, 큐의 예약 모드 상태가 큐가 예약 모드로 되는 횟수에 응답하게 되도록 한다.
예약 모트 카운터를 증가시킨 후, 루프(902)에서, 큐 매니저(106)는 queue _i를 로킹하고(906), queue _i에서 이용 가능한 저장 공간을 체크한다(908). 큐 매니저(106)는 현재의 이용 가능한 공간과 다음에 의해 주어지는 Dc를 비교한다:
Dc = size_of(1 코미트 레코드) × Ti
이용 가능한 공간이 Dc 보다 크거나 동일한 경우, 큐 매니저(106)는 queue _i를 언로킹하고(910), 이를 지속한다. 한편, 이용 가능한 공간이 Dc 보다 작은 경우, 큐 매니저(106)는 queue _i를 언로킹하고(912), 코미트 레코드 기입 연산(900)을 중지한다(914).
루프(902) 후, 큐 매니저(106)는 각각의 큐를 동기시킨다(916). 각각의 큐를 동기시킨 후, 큐 매니저(106)는 저널 코미트 레코드를 기입한다(918). 저널 코미트 레코드를 기입한 후, 큐 매니저(106)는 각각의 큐에 코미트 레코드를 기입한다(920). 큐에 대한 코미트 레코드를 기입한 후, 큐 매니저(106)는 그 큐를 위한 예약 모드 카운터를 감소시킨다(922).
도 9b를 참조하면, 큐 매니저(106)는 큐 데이터 구조에 대해 기입될 데이터를 위해 기입 연산(950)을 이용한다. 큐 매니저(106)는 먼저, 기입될 데이터가 코미트 레코드인지를 판단한다(952). 기입될 데이터가 코미트 레코드인 경우, 큐 매니저(106)는 코미트 레코드를 기입하고(954), 아웃스탠딩 트랜잭션 Ti의 번호를 감소시킨다(956). 기입될 데이터가 코미트 레코드가 아닌 경우, 큐 매니저(106)는 큐가 예약 모드에 있는지를 판단한다(958)(예컨대, Ri>0인지를 판단함으로써). 큐가 예약 모드에 있지 않은 경우, 큐 매니저(106)는 데이터를 기입한다(960). 큐가 예약 모드에 있는 경우, 큐 매니저(106)는 큐를 로킹하고(962), 큐 내의 이용 가능한 저장 공간을 체크한다(964). 큐 매니저(106)는 현재의 이용 가능한 공간을 제2 방안에서 전술한 바와 같은 Dw와 비교한다. 이용 가능한 공간이 Dw 보다 크거나 동일한 경우, 큐 매니저(106)는 데이터를 기입하고(966), 큐를 언로킹한다(968). 한편, 이용 가능한 공간이 Dw 보다 작은 경우, 큐 매니저(106)는 큐를 언로킹하고(970), 기입 연산(950)을 중지한다.
3.4 다른 방안
하나 이상의 큐를 동시에 로킹할 필요없이 다수의 큐의 각각에 대한 코미트 레코드의 성공적인 기입을 보장하는 코미트 연산을 관리하기 위한 다른 방안도 가능하다. 예컨대, 제3 방안의 변형에서, 모든 아웃스탠딩 트랜잭션 Ti의 카운트를 이용하는 대신, 큐 매니저(106)는 Dc 및/또는 Dw의 계산을 위해 예약 모드 Ri에서 큐의 개수를 사용한다. 일부 방안에서, 코미트 연산은 저널 코미트 레코드가 기입되기 전에 큐 코미트 레코드를 위한 공간의 부족으로 인해 실패하도록 된다.
4. 구현예
본 명세서에서 설명된 큐 관리 기능은 컴퓨터 상의 실행을 위한 소프트웨어를 이용하여 실시될 수 있다. 예컨대, 소프트웨어는, 하나 이상의 프로세서, 하나 이상의 데이터 기억 시스템(휘발성 메모리, 비휘발성 메모리, 및/또는 기억 소자), 하나 이상의 입력 장치 또는 포트, 및 하나 이상의 출력 장치 또는 포트를 각각 포함하는 하나 이상의 프로그래밍되 컴퓨터 시스템 또는 하나 이상의 프로그래밍 가능한 컴퓨터 시스템(분산형, 클라이언트/서버, 또는 그리드(grid) 등의 다양한 아키텍쳐로 이루어질 수 있는) 상에서 실행하는 하나 이상의 컴퓨터 프로그램 내의 프로시져를 형성한다. 소프트웨어는, 예컨대 계산 그래프의 설계 및 구성에 관련된 다른 서비스를 제공하는 대형 프로그램의 하나 이상의 모듈을 형성할 수도 있다. 본 명세서에 설명된 데이터 구조는, 컴퓨터 판독 가능한 매체에 저장된 데이터 구조 또는 데이터 보관 장치에 기억된 데이터 모델을 따르는 다른 조직화된 데이터로서 실시된다.
소프트웨어는 범용 또는 특수 용도의 프로그래밍 가능한 컴퓨터에 의해 판독 가능한 CD-ROM 등의 매체 상에 설치되거나, 또는 네트워크를 통해 소프트웨어를 실행할 컴퓨터에 전송(전파 신호로 인코딩됨)될 수도 있다. 모든 기능이 특수 용도의 컴퓨터 상에서 실행되거나, 또는 코프로세서 등의 특수 용도의 하드웨어를 이용하여 수행될 것이다. 소프트웨어는, 소프트웨어에 의해 특정되는 계산의 상이한 파트가 상이한 컴퓨터에 의해 수행되는 분산형 방식으로 실시될 수도 있다. 각각의 이러한 컴퓨터 프로그램은, 범용 또는 특수 용도의 프로그래밍 가능한 컴퓨터에 의해 판독 가능한 기억 매체 또는 장치(예컨대, 솔리드 스테이트 메모리 또는 매체, 또는 자기 또는 광학 매체) 상에 저장되거나 다운로드되어, 그 프로그램 내에 기술되어 있는 프로시져를 수행하기 위해 저장 매체 또는 장치가 컴퓨터 시스템에 의해 판독될 때에 컴퓨터를 구성 및 작동하는 것이 바람직하다. 본 발명의 시스템은, 컴퓨터 프로그램으로 구성된 컴퓨터 판독 가능한 기억 매체로서 실시되도록 고려되어, 이와 같이 구성된 기억 매체가 컴퓨터 시스템을 특정의 사전에 정해진 방식으로 작동하도록 함으로써 그 프로그램 내에 기술된 기능을 수행하도록 할 수도 있다.
전술한 설명은 본 발명의 사상을 예시하기 위한 것으로 본 발명의 사상을 제한하려는 의도는 아니며, 본 발명의 사상은 첨부된 청구범위에 의해 정해진다. 예컨대, 전술한 다수의 기능 상의 단계는 전체 프로세스에 실질적으로 영향을 주지 않고서도 상이한 순서로 수행될 수 있다. 또한, 본 발명의 다른 실시예는 다음의 청구범위에 의해 한정되는 사상 내에 포함되는 것임은 자명하다.

Claims (24)

  1. 데이터의 각각의 일부분을 복수의 큐 중 대응하는 큐에 기입하는 형태로, 복수의 큐에 데이터를 기입하는 방법에 있어서,
    하나 이상의 상기 큐를 동시에 로킹(locking)할 필요없이, 각각의 상기 큐 내에 상기 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하고(902), 이용 가능한 공간이 있는 경우에는, 상기 큐 내의 상기 공간을 예약하는 단계; 및
    상기 데이터의 각각의 일부분을 상기 큐의 대응하는 큐에 기입하는 단계(920)
    를 포함하는 데이터 기입 방법.
  2. 제1항에 있어서,
    상기 데이터의 각각의 일부분을 상기 큐의 대응하는 큐에 기입하는 단계는, 상기 큐 내의 상기 공간의 전부를 예약한 후에 발생하는, 데이터 기입 방법.
  3. 제1항에 있어서,
    상기 데이터의 일부분을 대응하는 상기 큐에 기입한 후, 그 큐에 기입된 상기 데이터의 일부분에 대한 공간의 예약을 해제하는 단계를 더 포함하는, 데이터 기입 방법.
  4. 제1항에 있어서,
    상기 각각의 상기 큐 내에 상기 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하고(902), 이용 가능한 공간이 있는 경우에는, 상기 큐 내의 상기 공간을 예약하는 단계는, 복수의 상기 큐의 각각에 대해,
    상기 큐를 로킹하는 단계;
    상기 큐 내에 이용 가능한 공간이 있는지를 판정하는 단계;
    이용 가능한 공간이 있는 경우에 그 공간을 예약하는 단계; 및
    상기 큐를 언로킹(unlocking)하는 단계
    를 포함하는, 데이터 기입 방법.
  5. 제1항에 있어서,
    복수의 상기 큐의 대응하는 큐에 기입된 상기 데이터의 각각의 일부분은, 레코드(record)를 포함하는, 데이터 기입 방법.
  6. 제5항에 있어서,
    상기 레코드를 기입하기 전에 저널 레코드(journal record)를 상기 큐 중의 임의의 큐에 기입하는 단계를 더 포함하는, 데이터 기입 방법.
  7. 제6항에 있어서,
    상기 저널 레코드를 기입하기 전에, 각각의 상기 큐를 비휘발성 메모리에 동기시키는 단계를 더 포함하는, 데이터 기입 방법.
  8. 제5항에 있어서,
    상기 레코드들 중의 하나의 레코드 이외의 다른 데이터를 복수의 상기 큐 중의 최초의 큐에 기입하기 전에, 상기 최초의 큐 내에서 공간이 예약되어 있는 경우에는, 상기 다른 데이터를 상기 최초의 큐에 기입하기 전에, 상기 최초의 큐 내에 상기 다른 데이터를 위한 추가의 이용 가능한 공간이 있는지를 판정하는 동안, 상기 최초의 큐를 로킹하는 단계를 더 포함하는, 데이터 기입 방법.
  9. 제5항에 있어서,
    상기 레코드들 중의 하나의 레코드 이외의 다른 데이터를 복수의 상기 큐 중의 최초의 큐에 기입하기 전에, 상기 최초의 큐 내에서 공간이 아직 예약되어 있지 않은 경우에는, 상기 최초의 큐를 반드시 로킹할 필요없이 상기 데이터를 상기 최초의 큐에 기입하는 단계를 더 포함하는, 데이터 기입 방법.
  10. 제1항에 있어서,
    상기 각각의 상기 큐 내에 상기 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하는 단계는, 각각의 큐 내의 충분한 공간이, 상기 큐와의 어떠한 아웃스탠딩 트랜잭션(outstanding transaction)을 위한 코미트 레코드(commit record)를 기입하는 데 이용 가능하도록 하는 단계를 포함하는, 데이터 기입 방법.
  11. 제10항에 있어서,
    상기 큐와의 어떠한 아웃스탠딩 트랜잭션을 위한 코미트 레코드를 기입하기 위한 충분한 공간이 적어도 하나의 상기 큐에 예약되지 않을 수도 있는 것으로 판단한 후에는, 복수의 상기 큐의 각각의 큐에, 대응하는 코미트 레코드를 기입하는 것을 중지(abort)하는 단계를 더 포함하는, 데이터 기입 방법.
  12. 제1항에 있어서,
    상기 큐 내의 상기 공간을 예약하는 상기 단계는, 각각의 상기 큐에 대한 대응하는 카운터를 증가시키는 단계를 포함하는, 데이터 기입 방법.
  13. 컴퓨터 판독 가능한 매체 상에 기억되며, 데이터의 각각의 일부분을 복수의 큐 중 대응하는 큐에 기입하는 형태로, 복수의 큐에 데이터를 기입하는 소프트웨어로서,
    상기 소프트웨어는, 컴퓨터 시스템으로 하여금,
    하나 이상의 상기 큐를 동시에 로킹(locking)할 필요없이, 각각의 상기 큐 내에 상기 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하고(902), 이용 가능한 공간이 있는 경우에는, 상기 큐 내의 상기 공간을 예약하도록 하며,
    상기 데이터의 각각의 일부분을 상기 큐의 대응하는 큐에 기입하도록 하는(920),
    명령어를 포함하는,
    소프트웨어.
  14. 데이터의 각각의 일부분을 복수의 큐 중 대응하는 큐에 기입하는 형태로, 복수의 큐에 데이터를 기입하는 시스템에 있어서,
    하나 이상의 상기 큐를 동시에 로킹(locking)할 필요없이, 각각의 상기 큐 내에 상기 데이터의 대응하는 일부분을 기입하기 위한 이용 가능한 공간이 있는지를 판단하고(902), 이용 가능한 공간이 있는 경우에는, 상기 큐 내의 상기 공간을 예약하는 수단; 및
    상기 데이터의 각각의 일부분을 상기 큐의 대응하는 큐에 기입하는 수단(920)
    을 포함하는 데이터 기입 시스템.
  15. 큐에 대한 복수의 메시지를, 그 큐에 대한 제2 데이터 구조와는 구분되는 제1 데이터 구조(122)에 저장하는 단계;
    상기 메시지와 관련된 트랜잭션을 코미트(commit)하는 단계; 및
    상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하는 단계
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 제1 데이터 구조에 대한 포인터를 상기 제2 데이터 구조에 저장하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서,
    상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하는 단계는, 상기 제1 데이터 구조로부터 상기 메시지의 적어도 일부를 판독하는 단계를 포함하는, 방법.
  18. 제15항에 있어서,
    상기 트랜잭션을 코미트하는 단계는, 상기 메시지를 제1 데이터 구조로부터 제2 데이터 구조로 이동시키는 단계를 포함하는, 방법.
  19. 제18항에 있어서,
    상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하는 단계는, 상기 제2 데이터 구조로부터 상기 메시지의 적어도 일부를 판독하는 단계를 포함하는, 방법.
  20. 제18항에 있어서,
    상기 제1 데이터 구조는 휘발성 메모리에 저장되며, 상기 제2 데이터 구조는 비휘발성 메모리에 저장되는, 방법.
  21. 제15항에 있어서,
    상기 메시지를 상기 제1 데이터 구조로부터 제3 데이터 구조로 이동시키는 단계; 및
    상기 제3 데이터 구조에 대한 포인터를 상기 제2 데이터 구조에 저장하는 단계
    를 더 포함하는 방법.
  22. 제21항에 있어서,
    상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하는 단계는, 상기 메시지의 적어도 일부를 상기 제3 데이터 구조로부터 판독하는 단계를 포함하는, 방법.
  23. 컴퓨터 판독 가능한 매체 상에 저장되는 소프트웨어로서,
    상기 소프트웨어는, 컴퓨터 시스템으로 하여금,
    큐에 대한 복수의 메시지를, 그 큐에 대한 제2 데이터 구조와는 구분되는 제1 데이터 구조(122)에 저장하도록 하고,
    상기 메시지와 관련된 트랜잭션을 코미트(commit)하도록 하며,
    상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하도록 하는,
    명령어를 포함하는, 소프트웨어.
  24. 큐에 대한 복수의 메시지를, 그 큐에 대한 제2 데이터 구조와는 구분되는 제1 데이터 구조(122)에 저장하는 수단;
    상기 메시지와 관련된 트랜잭션을 코미트(commit)하는 수단; 및
    상기 메시지의 적어도 일부를 인접한 메모리 지점으로부터 판독하는 수단
    을 포함하는 시스템.
KR1020077030364A 2005-06-27 2006-06-22 메시지 큐의 관리 방법 및 시스템 KR101372978B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/169,074 US7865684B2 (en) 2005-06-27 2005-06-27 Managing message queues
US11/169,074 2005-06-27
PCT/US2006/024233 WO2007002245A2 (en) 2005-06-27 2006-06-22 Managing message queues

Publications (2)

Publication Number Publication Date
KR20080018212A true KR20080018212A (ko) 2008-02-27
KR101372978B1 KR101372978B1 (ko) 2014-03-13

Family

ID=37568981

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077030364A KR101372978B1 (ko) 2005-06-27 2006-06-22 메시지 큐의 관리 방법 및 시스템

Country Status (8)

Country Link
US (2) US7865684B2 (ko)
EP (1) EP1913481A4 (ko)
JP (3) JP5762669B2 (ko)
KR (1) KR101372978B1 (ko)
CN (3) CN105404592B (ko)
AU (1) AU2006262163B2 (ko)
CA (2) CA2834146C (ko)
WO (1) WO2007002245A2 (ko)

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2549343C (en) * 2002-12-17 2008-08-19 Breathablebaby, Llc Crib shield system and other breathable apparatus
US8688634B2 (en) * 2004-02-27 2014-04-01 International Business Machines Corporation Asynchronous peer-to-peer data replication
US7490083B2 (en) * 2004-02-27 2009-02-10 International Business Machines Corporation Parallel apply processing in data replication with preservation of transaction integrity and source ordering of dependent updates
GB0519033D0 (en) * 2005-09-17 2005-10-26 Ibm Optimistic processing of messages in a messaging system
US8554846B2 (en) * 2005-09-27 2013-10-08 Oracle International Corporation System and method for providing a messaging kernel
US20070180150A1 (en) 2005-12-01 2007-08-02 Firestar Software, Inc. System and method for exchanging information among exchange applications
US9898517B2 (en) * 2006-04-21 2018-02-20 Adobe Systems Incorporated Declarative synchronization of shared data
EP2038822A4 (en) * 2006-05-08 2011-07-27 Firestar Software Inc SYSTEM AND METHOD FOR THE EXCHANGE OF TRANSACTION INFORMATION USING IMAGES
US7996849B2 (en) * 2007-02-14 2011-08-09 International Business Machines Corporation Method, apparatus and software for managing a transactional message queue
JP5669338B2 (ja) * 2007-04-26 2015-02-12 株式会社日立製作所 半導体装置
US9021503B2 (en) * 2007-11-16 2015-04-28 Microsoft Technology Licensing, Llc Coordinating application state and communication medium state
US8505030B2 (en) * 2007-11-16 2013-08-06 Microsoft Corporation Coordinating resources using a volatile network intermediary
US8719841B2 (en) * 2007-11-16 2014-05-06 Microsoft Corporation Dispatch mechanism for coordinating application and communication medium state
US8037024B1 (en) * 2008-06-04 2011-10-11 Google Inc. Data propagation in a multi-shard database system
TW201032535A (en) * 2008-10-14 2010-09-01 Ibm A method of handling a message
US8572627B2 (en) * 2008-10-22 2013-10-29 Microsoft Corporation Providing supplemental semantics to a transactional queue manager
US8301706B2 (en) 2009-06-15 2012-10-30 Microsoft Corporation Routing of pooled messages via an intermediary
JP5610773B2 (ja) * 2010-01-06 2014-10-22 キヤノン株式会社 メッセージ処理装置およびメッセージ処理方法
US8549538B2 (en) 2010-03-18 2013-10-01 Microsoft Corporation Coordinating communication medium state for subtasks
US8250234B2 (en) 2010-04-26 2012-08-21 Microsoft Corporation Hierarchically disassembling messages
US20110320530A1 (en) 2010-06-29 2011-12-29 International Business Machines Corporation Method for processing a unit of work
US8516032B2 (en) * 2010-09-28 2013-08-20 Microsoft Corporation Performing computations in a distributed infrastructure
US8724645B2 (en) 2010-09-28 2014-05-13 Microsoft Corporation Performing computations in a distributed infrastructure
US8341134B2 (en) 2010-12-10 2012-12-25 International Business Machines Corporation Asynchronous deletion of a range of messages processed by a parallel database replication apply process
EP2683251B1 (en) 2011-03-11 2021-08-25 Intercontinental Great Brands LLC Method of forming multilayer confectionery
US9015303B2 (en) 2011-09-12 2015-04-21 Microsoft Corporation Message queue behavior optimizations
US9116761B2 (en) 2011-09-29 2015-08-25 Oracle International Corporation System and method for preventing single-point bottleneck in a transactional middleware machine environment
US8832217B2 (en) * 2011-09-29 2014-09-09 Oracle International Corporation System and method for supporting different message queues in a transactional middleware machine environment
US9690638B2 (en) * 2011-09-29 2017-06-27 Oracle International Corporation System and method for supporting a complex message header in a transactional middleware machine environment
CN103136139A (zh) * 2011-11-30 2013-06-05 英业达科技有限公司 现场可更换单元信息的读取方法及写入方法
US8965861B1 (en) * 2012-06-28 2015-02-24 Amazon Technologies, Inc. Concurrency control in database transactions
US10180901B2 (en) * 2012-10-19 2019-01-15 Oracle International Corporation Apparatus, system and method for managing space in a storage device
JP2014085896A (ja) * 2012-10-25 2014-05-12 International Business Maschines Corporation トランザクション処理方法、プログラム及びシステム
US9245053B2 (en) 2013-03-12 2016-01-26 International Business Machines Corporation Efficiently searching and modifying a variable length queue
US9928104B2 (en) * 2013-06-19 2018-03-27 Nvidia Corporation System, method, and computer program product for a two-phase queue
US20150032961A1 (en) * 2013-07-23 2015-01-29 Lexmark International Technologies S.A. System and Methods of Data Migration Between Storage Devices
SG11201603105VA (en) 2013-10-21 2016-05-30 Ab Initio Technology Llc Checkpointing a collection of data units
US9727625B2 (en) 2014-01-16 2017-08-08 International Business Machines Corporation Parallel transaction messages for database replication
WO2015159154A2 (en) * 2014-04-16 2015-10-22 Societe Bic Systems and methods for displaying free-form drawing on a contact sensitive display
US9542239B2 (en) * 2014-04-30 2017-01-10 International Business Machines Corporation Resolving write request conflicts in a dispersed storage network
US9577961B2 (en) * 2014-06-27 2017-02-21 Amazon Technologies, Inc. Input/output management in a distributed strict queue
US9575820B2 (en) * 2014-06-27 2017-02-21 Amazon Technologies, Inc. Client control in a distributed strict queue
US9577878B2 (en) * 2014-06-27 2017-02-21 Amazon Technologies, Inc. Geographic awareness in a distributed strict queue
US9584593B2 (en) * 2014-06-27 2017-02-28 Amazon Technologies, Inc. Failure management in a distributed strict queue
US9571414B2 (en) * 2014-06-27 2017-02-14 Amazon Technologies, Inc. Multi-tiered processing using a distributed strict queue
US9591101B2 (en) * 2014-06-27 2017-03-07 Amazon Technologies, Inc. Message batching in a distributed strict queue
US9577972B1 (en) * 2014-09-09 2017-02-21 Amazon Technologies, Inc. Message inspection in a distributed strict queue
CN104536916B (zh) * 2014-12-18 2018-04-10 华为技术有限公司 一种多核系统的仲裁方法及多核系统
US9634962B2 (en) 2015-04-14 2017-04-25 International Business Machines Corporation Pre-staging messages at a remote location
US11102313B2 (en) * 2015-08-10 2021-08-24 Oracle International Corporation Transactional autosave with local and remote lifecycles
US10582001B2 (en) 2015-08-11 2020-03-03 Oracle International Corporation Asynchronous pre-caching of synchronously loaded resources
US10419514B2 (en) 2015-08-14 2019-09-17 Oracle International Corporation Discovery of federated logins
US10452497B2 (en) 2015-08-14 2019-10-22 Oracle International Corporation Restoration of UI state in transactional systems
US10582012B2 (en) 2015-10-16 2020-03-03 Oracle International Corporation Adaptive data transfer optimization
US9984142B2 (en) * 2015-11-05 2018-05-29 Oracle International Corporation Single unit of work
US11226852B2 (en) * 2016-11-25 2022-01-18 Genetec Inc. System for inter-process communication
CN109144742B (zh) * 2017-06-15 2020-02-07 北京忆芯科技有限公司 通过队列交换信息的方法和处理队列的系统
US10606604B2 (en) 2017-08-22 2020-03-31 Bank Of America Corporation Predictive queue control and allocation
CN108021448B (zh) * 2017-11-30 2021-06-15 北京东土科技股份有限公司 一种内核空间的优化方法及装置
US10541953B2 (en) * 2017-12-13 2020-01-21 Chicago Mercantile Exchange Inc. Streaming platform reader
TWI678087B (zh) * 2018-11-22 2019-11-21 財團法人工業技術研究院 訊息佇列發佈與訂閱之同步方法及其系統
US10990459B2 (en) 2019-08-30 2021-04-27 Chicago Mercantile Exchange Inc. Distributed threaded streaming platform reader
US11178091B1 (en) * 2020-11-12 2021-11-16 Chicago Mercantile Exchange Inc. Message ordering buffer

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5958552A (ja) * 1982-09-28 1984-04-04 Fujitsu Ltd スロ−ダウン制御方式
US4482956A (en) * 1982-11-04 1984-11-13 International Business Machines Corporation Parallel queueing method
US5319773A (en) 1990-05-16 1994-06-07 International Business Machines Corporation Asynchronous resynchronization of a commit procedure
JP2667039B2 (ja) * 1990-05-18 1997-10-22 株式会社東芝 データ管理システムおよびデータ管理方法
US5426747A (en) * 1991-03-22 1995-06-20 Object Design, Inc. Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system
US5715447A (en) * 1991-08-06 1998-02-03 Fujitsu Limited Method of and an apparatus for shortening a lock period of a shared buffer
US5504899A (en) * 1991-10-17 1996-04-02 Digital Equipment Corporation Guaranteeing global serializability by applying commitment ordering selectively to global transactions
US5371850A (en) * 1992-04-20 1994-12-06 Storage Technology Corporation Interprocess message queue
US5530848A (en) * 1992-10-15 1996-06-25 The Dow Chemical Company System and method for implementing an interface between an external process and transaction processing system
US5455944A (en) * 1993-03-16 1995-10-03 International Business Machines Corporation Method for managing logging and locking of page free space information in a transaction processing system
JPH07105120A (ja) * 1993-10-06 1995-04-21 Oki Electric Ind Co Ltd 入出力制御装置
US5586312A (en) * 1994-10-11 1996-12-17 Unisys Corporation Method and apparatus for using an independent transaction processing application as a service routine
US5797005A (en) * 1994-12-30 1998-08-18 International Business Machines Corporation Shared queue structure for data integrity
US5906658A (en) * 1996-03-19 1999-05-25 Emc Corporation Message queuing on a data storage system utilizing message queuing in intended recipient's queue
US5909658A (en) * 1996-06-18 1999-06-01 International Business Machines Corporation High speed electron beam lithography pattern processing system
US5857204A (en) * 1996-07-02 1999-01-05 Ab Initio Software Corporation Restoring the state of a set of files
US5881316A (en) * 1996-11-12 1999-03-09 Hewlett-Packard Company Dynamic allocation of queue space using counters
US6353834B1 (en) * 1996-11-14 2002-03-05 Mitsubishi Electric Research Laboratories, Inc. Log based data architecture for a transactional message queuing system
US7200623B2 (en) * 1998-11-24 2007-04-03 Oracle International Corp. Methods to perform disk writes in a distributed shared disk system needing consistency across failures
US6240479B1 (en) * 1998-07-31 2001-05-29 Motorola, Inc. Method and apparatus for transferring data on a split bus in a data processing system
US6173373B1 (en) * 1998-10-15 2001-01-09 Compaq Computer Corporation Method and apparatus for implementing stable priority queues using concurrent non-blocking queuing techniques
US6557056B1 (en) * 1998-12-30 2003-04-29 Nortel Networks Limited Method and apparatus for exchanging data between transactional and non-transactional input/output systems in a multi-processing, shared memory environment
WO2000057276A1 (en) * 1999-03-25 2000-09-28 Excelon Corporation Method and apparatus for pointer relocation optimization for virtual memory mapping and transaction management in a database system
US6601089B1 (en) * 1999-06-21 2003-07-29 Sun Microsystems, Inc. System and method for allocating buffers for message passing in a shared-memory computer system
US7228549B2 (en) * 1999-12-02 2007-06-05 Ants Software, Inc. Method and system for enhanced concurrency in a computing environment
US6898650B1 (en) * 2000-08-10 2005-05-24 Novell, Inc. Queueing method supporting multiple client accesses simultaneously
US6694388B1 (en) * 2000-05-31 2004-02-17 3Com Corporation Dynamic queuing system incorporating multiple queues sharing a single memory
US6862595B1 (en) * 2000-10-02 2005-03-01 International Business Machines Corporation Method and apparatus for implementing a shared message queue using a list structure
US7068604B2 (en) * 2001-08-23 2006-06-27 International Business Machines Corporation Managing memory resident queues to control resources of the systems using the queues
US20030182464A1 (en) 2002-02-15 2003-09-25 Hamilton Thomas E. Management of message queues
US20040006633A1 (en) * 2002-07-03 2004-01-08 Intel Corporation High-speed multi-processor, multi-thread queue implementation
GB0215808D0 (en) 2002-07-09 2002-08-14 Ibm A system and method for managing transactions in a messaging system
US7185033B2 (en) * 2002-08-01 2007-02-27 Oracle International Corporation Buffered message queue architecture for database management systems with unlimited buffered message queue with limited shared memory
JP4291060B2 (ja) * 2003-07-01 2009-07-08 富士通株式会社 トランザクション処理方法,トランザクション制御装置およびトランザクション制御プログラム
US7644118B2 (en) 2003-09-11 2010-01-05 International Business Machines Corporation Methods, systems, and media to enhance persistence of a message

Also Published As

Publication number Publication date
US20060294333A1 (en) 2006-12-28
WO2007002245A2 (en) 2007-01-04
JP5657599B2 (ja) 2015-01-21
JP6046760B2 (ja) 2016-12-21
CN101996098B (zh) 2014-03-26
EP1913481A4 (en) 2009-12-09
KR101372978B1 (ko) 2014-03-13
US8078820B2 (en) 2011-12-13
CN101208671A (zh) 2008-06-25
JP2008547130A (ja) 2008-12-25
CN101996098A (zh) 2011-03-30
AU2006262163A2 (en) 2007-01-04
AU2006262163A1 (en) 2007-01-04
CA2834146C (en) 2017-08-29
CN105404592B (zh) 2019-06-04
CN105404592A (zh) 2016-03-16
CA2613496A1 (en) 2007-01-04
CA2834146A1 (en) 2007-01-04
JP2015127981A (ja) 2015-07-09
WO2007002245A3 (en) 2007-04-26
JP2012155740A (ja) 2012-08-16
AU2006262163B2 (en) 2012-11-15
US7865684B2 (en) 2011-01-04
JP5762669B2 (ja) 2015-08-12
CN101208671B (zh) 2015-11-25
EP1913481A2 (en) 2008-04-23
CA2613496C (en) 2016-02-02
US20110078214A1 (en) 2011-03-31

Similar Documents

Publication Publication Date Title
KR101372978B1 (ko) 메시지 큐의 관리 방법 및 시스템
US9996403B2 (en) System and method for providing message queues for multinode applications in a middleware machine environment
CN110113420B (zh) 基于nvm的分布式消息队列管理系统
US7549151B2 (en) Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment
CN110691062B (zh) 一种数据写入方法、装置及其设备
US20060212456A1 (en) System and method for updating objects in a multi-threaded computing environment
US20090132868A1 (en) Message state maintenance at a message log
JP6682668B2 (ja) コンカレントプライオリティキューにおいてシーケンサを用いるためのシステムおよび方法
WO1995027248A1 (en) Object oriented message passing system and method

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170228

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180226

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200225

Year of fee payment: 7