KR102285920B1 - 실시간의 트랜잭션적으로 일관된 변화 통지들 - Google Patents

실시간의 트랜잭션적으로 일관된 변화 통지들 Download PDF

Info

Publication number
KR102285920B1
KR102285920B1 KR1020207010641A KR20207010641A KR102285920B1 KR 102285920 B1 KR102285920 B1 KR 102285920B1 KR 1020207010641 A KR1020207010641 A KR 1020207010641A KR 20207010641 A KR20207010641 A KR 20207010641A KR 102285920 B1 KR102285920 B1 KR 102285920B1
Authority
KR
South Korea
Prior art keywords
data
event
transaction
change log
processing hardware
Prior art date
Application number
KR1020207010641A
Other languages
English (en)
Other versions
KR20200040938A (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 KR20200040938A publication Critical patent/KR20200040938A/ko
Application granted granted Critical
Publication of KR102285920B1 publication Critical patent/KR102285920B1/ko

Links

Images

Classifications

    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • 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/465Distributed object oriented systems

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)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

방법은, 분산형 시스템(200)에 대한 변경 로그 프로세스(500)의 초기 인스턴스(310)를 실행하는 단계를 포함하며, 변경 로그 프로세스의 각각의 인스턴스는, 분산형 시스템 상에서 실행되는 트랜잭션들(204, 214)의 트랜잭션 이력(132)을 저장하도록 구성된다. 방법은 또한, 대응하는 트랜잭션들을 실행하기 위한 트랜잭션 요청들(138)을 수신하는 단계, 및 수신된 트랜잭션 요청들(322)에 기반하여 변경 로그 로드를 결정하는 단계를 포함한다. 방법은, 변경 로그 로드가 임계 로드를 충족하는 경우 변경 로그 프로세스의 적어도 하나의 후속 인스턴스를 실행하는 단계를 포함한다. 변경 로그 프로세스의 다수의 인스턴스들이 실행되고 있는 경우, 방법은, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 실행을 중단시키는 단계, 및 변경 로그 프로세스의 초기 인스턴스의 트랜잭션 이력과 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 트랜잭션 이력을 병합하는 단계를 포함한다.

Description

실시간의 트랜잭션적으로 일관된 변화 통지들{REAL-TIME TRANSACTIONALLY CONSISTENT CHANGE NOTIFICATIONS}
[0001] 본 개시내용은 분산형 시스템 내에서 시청자(watcher)들이 구독하는 데이터에 대한 일관된 변경 통지들을 하나 또는 그 초과의 시청자들에게 제공하는 것에 관한 것이다.
[0002] 분산형 저장 시스템들은 하나 또는 그 초과의 메모리 위치들을 오버레이(overlay)하는 메모리 하드웨어 상의 데이터저장소 내에 데이터를 저장한다. 시청자들은, 분산형 시스템 상에 저장된 데이터의 특정 부분들을 구독하고, 구독중인 데이터가 변형을 경험할 때에는 변경 통지들을 수신하도록 고정적인 질의(standing query)들을 발행할 수 있다. 예컨대, 기입기는 분산형 시스템 상에서 저장된 데이터의 특정 부분들을 수정/변형시키기 위해 기입 트랜잭션들을 실행할 수 있고, 데이터를 구독하는 시청자들은 데이터가 수정될 때를 통지받는다. 그러나, 다수의 변경들/기입들이 동시에 발생하는 경우 분산형 시스템 상에서의 수요의 증가는, 분산형 시스템이 오버런(overrun)되어 변경 통지들을 실시간으로 스트리밍할 수 없는 것을 초래한다. 높은 수요의 기간들 동안 분산형 시스템 상의 로드를 완화시키기 위해 구독들을 완전히 드롭시키는 것이 알려져 있다. 이러한 이유 때문에, 몇몇 시스템들은 순차형 전달의 보장들 없이 설계되며, 종종 순서화는 클라이언트에게 맡겨진다. 그러나, 이것은 구독중인 시청자들이 분산형 데이터의 비일관된 스냅샷(snapshot)들을 수신하는 것을 초래한다. 또한, 분산형 시스템 상에 저장된 데이터에 각각의 트랜잭션을 기록하도록 변경 로그를 사용하는 것이 알려져 있다. 이들 변경 로그들은 데이터저장소에 행해진 모든 각각의 변경을 기록하며, 판독 트랜잭션이 데이터저장소 상에서 발생하는 경우, 변경 로그는 주어진 스냅샷에 대한 모든 데이터에 대한 온/오프(on/off) 체크 포인트로서 기능한다.
미국 등록 특허 제8,676,851호(2014.3.18)
[0003] 분산형 시스템들 상에서 지속가능한 변경 로그들을 이용하는 것은 일반적으로, 변경 로그들이 종종 단일 머신 상으로 절단(truncate)되는 것을 요구하며, 그에 의해, 트랜잭션들이 실행 대기하는 동안 병목을 초래한다. 따라서, 지속가능한 변경 로그들은 분산형 시스템 상의 높은 수요의 기간들 동안 그들의 고유한 범위성(scalability) 제한들로 인해 분산형 시스템에 의해 제공된 분산 기능을 무효화시킨다. 본 개시내용의 일 양상은 트랜잭션적으로 일관된 변경 통지들을 생성하기 위한 방법을 제공한다. 방법은, 데이터 프로세싱 하드웨어에 의해, 분산형 시스템에 대한 변경 로그 프로세스의 초기 인스턴스를 실행하는 단계; 데이터 프로세싱 하드웨어에서, 분산형 시스템 상에서 대응하는 트랜잭션들을 실행하기 위한 트랜잭션 요청들을 수신하는 단계; 및 데이터 프로세싱 하드웨어에 의해, 수신된 트랜잭션 요청들에 기반하여 변경 로그 로드를 결정하는 단계를 포함한다. 변경 로그 프로세스의 각각의 인스턴스는, 분산형 시스템 상에서 실행되는 트랜잭션들의 트랜잭션 이력을, 데이터 프로세싱 하드웨어와 통신하는 메모리 하드웨어 상에 저장하도록 구성된다. 변경 로그 로드가 임계 로드를 충족하는 경우, 방법은, 데이터 프로세싱 하드웨어에 의해 변경 로그 프로세스의 적어도 하나의 후속 인스턴스를 실행하는 단계를 포함한다. 방법은 데이터 프로세싱 하드웨어에 의해, 변경 로그 프로세스의 다수의 인스턴스들이 실행되고 있는지 여부를 결정하는 단계를 더 포함한다. 변경 로그 프로세스의 다수의 인스턴스들이 실행되고 있는 경우, 방법은 데이터 프로세싱 하드웨어에 의해, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 실행을 중단시키는 단계, 및 데이터 프로세싱 하드웨어에 의해, 변경 로그 프로세스의 초기 인스턴스의 트랜잭션 이력과 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 트랜잭션 이력을 병합하는 단계를 포함한다.
[0004] 본 개시내용의 구현들은 다음의 선택적인 특성들 중 하나 또는 그 초과를 포함할 수 있다. 몇몇 구현들에서, 방법은 메모리 하드웨어의 변경 로그 캐시에 각각의 트랜잭션 이력을 저장하는 단계를 포함한다. 각각의 트랜잭션 이력을 저장하는 단계는, 데이터 프로세싱 하드웨어에 의해, 트랜잭션 이력을 데이터 스트라이프들로 샤딩(shard)하는 단계; 각각의 데이터 스트라이프를 복제하는 단계; 및 메모리 하드웨어의 다수의 저장 위치들에 데이터 스트라이프들 및 복제된 데이터 스트라이프들을 저장하는 단계를 포함할 수 있다. 변경 로그 프로세스의 적어도 하나의 후속 인스턴스를 실행한 이후 변경 로그 로드가 임계 로드를 충족하지 않는 경우, 방법은 데이터 프로세싱 하드웨어에 의해, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 실행을 중단시키는 단계, 및 데이터 프로세싱 하드웨어에 의해, 변경 로그 프로세스의 초기 인스턴스의 트랜잭션 이력과 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 트랜잭션 이력을 병합하는 단계를 포함할 수 있다.
[0005] 각각의 트랜잭션 요청을 수신하는 것에 대한 응답으로, 방법은, 데이터 프로세싱 하드웨어에 의해 실제 시간(true time)을 획득하는 단계; 데이터 프로세싱 하드웨어에 의해, 실제 시간에 기반하여 최대 커밋 시간(commit time)을 결정하는 단계; 및 데이터 프로세싱 하드웨어로부터 메모리 하드웨어의 적어도 하나의 변경 로그 캐시로 최대 커밋 시간을 통신하는 단계를 포함할 수 있다. 최대 커밋 시간은 분산형 시스템 상에서의 대응하는 트랜잭션의 실행을 완료하기 위한 최대 시간을 특정할 수 있다.
[0006] 몇몇 예들에서, 적어도 하나의 변경 로그 캐시는 최대 커밋 시간까지 실제 시간으로부터 통지 잠금(lock)을 셋팅한다. 통지 잠금은 대응하는 변경 로그 캐시가 최대 커밋 시간보다 이른 대응하는 커밋 시간들을 갖는 완료된 트랜잭션들에 대해 하나 또는 그 초과의 구독 시청자들에게 통지하는 것을 방지할 수 있다. 적어도 하나의 변경 로그 캐시는 최대 커밋 시간의 종료 시에 통지 잠금을 제거할 수 있다. 제거된 통지 잠금은 대응하는 로그 캐시가 최대 커밋 시간보다 이른 대응하는 커밋 시간을 갖는 각각의 완료된 트랜잭션에 대해 하나 또는 그 초과의 구독 시청자들에게 통지하도록 허용할 수 있다. 최대 커밋 시간을 통신한 이후, 방법은, 데이터 프로세싱 하드웨어에 의해, 분산형 시스템 상에서의 대응하는 트랜잭션의 실행을 커밋하는 단계를 포함할 수 있다. 여기서, 트랜잭션은 최대 커밋 시간을 포함한다. 이후, 방법은 또한, 데이터 프로세싱 하드웨어에 의해, 대응하는 트랜잭션이 최대 커밋 시간에 또는 그 전에 각각의 커밋 시간을 포함하는 경우 분산형 시스템 상에서의 대응하는 트랜잭션의 실행이 수용된다는 것을 표시하는 트랜잭션 결과를 획득하는 단계, 및 데이터 프로세싱 하드웨어로부터 적어도 하나의 변경 로그 캐시로 트랜잭션 결과를 통신하는 단계를 포함할 수 있다.
[0007] 몇몇 예들에서, 수신된 트랜잭션 결과는 적어도 하나의 변경 로그 캐시로 하여금 대응하는 트랜잭션과 연관된 적어도 하나의 변형을 기록하게 한다. 적어도 하나의 변경 로그 캐시는 데이터 프로세싱 하드웨어 상에서 실행되는 하나 또는 그 초과의 시청자 프록시들에 기록된 변형을 통신할 수 있다. 각각의 시청자 프록시는 대응하는 트랜잭션의 각각의 구독 시청자에게 통지를 제공하도록 구성될 수 있다. 통지는 기록된 변형을 포함하고, 선택적으로는 트랜잭션 이력의 일관된 스냅샷을 포함할 수 있다. 여기서, 통지의 일관된 스냅샷은 대응하는 트랜잭션, 및 대응하는 트랜잭션의 커밋 시간보다 이른 대응하는 커밋 시간들을 갖는 임의의 완료된 트랜잭션들을 포함한다.
[0008] 몇몇 구현들에서, 최대 커밋 시간을 통신한 이후, 방법은, 데이터 프로세싱 하드웨어에 의해, 분산형 시스템 상에서의 대응하는 트랜잭션의 실행을 커밋하는 단계를 포함한다. 여기서, 트랜잭션은 최대 커밋 시간을 포함한다. 이후, 방법은, 데이터 프로세싱 하드웨어에 의해, 대응하는 트랜잭션이 최대 커밋 시간에 또는 그 전에 커밋하기를 실패하는 경우 분산형 시스템 상에서의 대응하는 트랜잭션의 실행이 거부된다는 것을 표시하는 트랜잭션 결과를 획득하는 단계, 및 데이터 프로세싱 하드웨어로부터 적어도 하나의 변경 로그 캐시로 트랜잭션 결과를 통신하는 단계를 포함할 수 있다. 몇몇 예들에서, 수신된 트랜잭션 결과는 적어도 하나의 변경 로그 캐시로 하여금, 트랜잭션 프로세스가 최대 커밋 시간을 적어도 하나의 변경 로그 캐시에 통신했던 실제 시간과 최대 커밋 시간 사이에 트랜잭션 이력에서 갭을 생성하게 한다.
[0009] 몇몇 예들에서, 적어도 하나의 변경 로그 캐시는 데이터 프로세싱 하드웨어 상에서 실행되는 하나 또는 그 초과의 시청자 프록시들에 트랜잭션 이력의 갭을 통신한다. 각각의 시청자 프록시는, 최대 커밋 시간의 종료 시에 대응하는 트랜잭션의 각각의 구독 시청자에게 통지를 제공하도록 구성될 수 있으며, 통지는 트랜잭션 이력의 갭 동안의 캐시 미스(miss)를 포함한다.
[0010] 방법은 또한, 데이터 프로세싱 하드웨어에 의해, 오프-라인 이벤트 이후 변경 로그 프로세스의 재시작을 결정하는 단계, 및 데이터 프로세싱 하드웨어 상에서 실행되는 변경 로그 프로세스에서 실제 시간을 획득하는 단계를 포함할 수 있다. 방법은 또한, 데이터 프로세싱 하드웨어에 의해, 변경 로그 프로세스가 재시작될 경우 실제 시간에 기반하여 현재 시퀀스 넘버를 결정하는 단계, 및 데이터 프로세싱 하드웨어에 의해, 분산형 시스템 상에서 실행되는 임의의 트랜잭션들에 대한 트랜잭션 이력을 업데이트하기 전에 현재의 시퀀스 넘버로부터 글로벌 최대 커밋 시간 지연을 대기하는 단계를 포함할 수 있다. 변경 로그 프로세스의 재시작 이전에 분산형 시스템 상에서 실행되는 트랜잭션들은 글로벌 최대 커밋 시간 지연 내에서 완료될 수 있다. 방법은 또한, 병합된 트랜잭션 이력을 하나 또는 그 초과의 가입 시청자들에게 송신하는 단계를 포함할 수 있다. 각각의 가입 시청자는 메모리 하드웨어 상에 저장된 데이터에 대한 변경들에 관한 고정적인 질의를 가질 수 있다.
[0011] 본 개시내용의 다른 양상은 트랜잭션적으로 일관된 변경 통지들을 생성하기 위한 시스템을 제공한다. 시스템은, 분산형 시스템의 데이터 프로세싱 하드웨어 및 데이터 프로세싱 하드웨어와 통신하는 메모리 하드웨어를 포함한다. 메모리 하드웨어는, 데이터 프로세싱 하드웨어 상에서 실행될 경우 데이터 프로세싱 하드웨어로 하여금 동작들을 수행하게 하는 명령들을 저장한다. 동작들은, 분산형 시스템에 대한 변경 로그 프로세스의 초기 인스턴스를 실행하는 것; 분산형 시스템 상에서 대응하는 트랜잭션들을 실행하기 위한 트랜잭션 요청들을 수신하는 것; 및 수신된 트랜잭션 요청들에 기반하여 변경 로그 로드를 결정하는 것을 포함한다. 변경 로그 프로세스의 각각의 인스턴스는, 분산형 시스템 상에서 실행되는 트랜잭션들의 트랜잭션 이력을 메모리 하드웨어 상에 저장하도록 구성된다. 변경 로그 로드가 임계 로드를 충족하는 경우, 시스템은, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스를 실행하는 것 및 변경 로그 프로세스의 다수의 인스턴스들이 실행되고 있는지 여부를 결정하는 것을 포함한다. 변경 로그 프로세스의 다수의 인스턴스들이 실행되고 있는 경우, 시스템은, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 실행을 중단시키는 것, 및 변경 로그 프로세스의 초기 인스턴스의 트랜잭션 이력과 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 트랜잭션 이력을 병합하는 것을 포함한다.
[0012] 이러한 양상은 다음의 선택적인 특성들 중 하나 또는 그 초과를 포함할 수 있다. 몇몇 구현들에서, 동작들은 메모리 하드웨어의 변경 로그 캐시에 각각의 트랜잭션 이력을 저장하는 것을 더 포함한다. 각각의 트랜잭션 이력을 저장하는 것은, 트랜잭션 이력을 데이터 스트라이프들로 샤딩하는 것; 각각의 데이터 스트라이프를 복제하는 것; 및 메모리 하드웨어의 다수의 저장 위치들에 데이터 스트라이프들 및 복제된 데이터 스트라이프들을 저장하는 것을 포함할 수 있다. 동작들은, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스를 실행한 이후 변경 로그 로드가 임계 로드를 충족하지 않는 경우, 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 실행을 중단시키는 것, 및 변경 로그 프로세스의 초기 인스턴스의 트랜잭션 이력과 변경 로그 프로세스의 적어도 하나의 후속 인스턴스의 트랜잭션 이력을 병합하는 것을 더 포함할 수 있다. 각각의 트랜잭션 요청을 수신하는 것에 대한 응답으로, 동작들은, 실제 시간을 획득하는 것; 실제 시간에 기반하여 최대 커밋 시간을 결정하는 것; 및 메모리 하드웨어의 적어도 하나의 변경 로그 캐시로 최대 커밋 시간을 통신하는 것을 포함할 수 있다. 최대 커밋 시간은 분산형 시스템 상에서의 대응하는 트랜잭션의 실행을 완료하기 위한 최대 시간을 특정할 수 있다.
[0013] 적어도 하나의 변경 로그 캐시는 최대 커밋 시간까지 실제 시간으로부터 통지 잠금을 셋팅할 수 있다. 통지 잠금은 대응하는 변경 로그 캐시가 최대 커밋 시간보다 이른 대응하는 커밋 시간들을 갖는 완료된 트랜잭션들에 대해 하나 또는 그 초과의 구독 시청자들에게 통지하는 것을 방지할 수 있다. 적어도 하나의 변경 로그 캐시는 최대 커밋 시간의 종료 시에 통지 잠금을 제거할 수 있다. 제거된 통지 잠금은 대응하는 변경 로그 캐시가 최대 커밋 시간보다 이른 대응하는 커밋 시간을 갖는 각각의 완료된 트랜잭션에 대해 하나 또는 그 초과의 구독 시청자들에게 통지하도록 허용할 수 있다.
[0014] 몇몇 예들에서, 동작들은, 최대 커밋 시간을 통신한 이후, 분산형 시스템 상에서의 대응하는 트랜잭션의 실행을 커밋하는 것을 포함한다. 트랜잭션은 대응하는 커밋 시간을 포함한다. 이후, 동작들은, 대응하는 트랜잭션이 최대 커밋 시간에 또는 그 전에 각각의 커밋 시간을 포함하는 경우 분산형 시스템 상에서의 대응하는 트랜잭션의 실행이 수용된다는 것을 표시하는 트랜잭션 결과를 획득하는 것, 및 적어도 하나의 변경 로그 캐시로 트랜잭션 결과를 통신하는 것을 포함한다. 수신된 트랜잭션 결과는 적어도 하나의 변경 로그 캐시로 하여금 대응하는 트랜잭션과 연관된 적어도 하나의 변형을 기록하게 할 수 있다. 적어도 하나의 변경 로그 캐시는 데이터 프로세싱 하드웨어 상에서 실행되는 하나 또는 그 초과의 시청자 프록시들에 기록된 변형을 통신할 수 있다. 각각의 시청자 프록시는 대응하는 트랜잭션의 각각의 구독 시청자에게 통지를 제공하도록 구성될 수 있으며, 통지는 기록된 변형을 포함한다. 통지는 트랜잭션 이력의 일관된 스냅샷을 더 포함할 수 있다. 일관된 스냅샷은 대응하는 트랜잭션, 및 대응하는 트랜잭션의 커밋 시간보다 이른 대응하는 커밋 시간들을 갖는 임의의 완료된 트랜잭션들을 포함할 수 있다.
[0015] 몇몇 구현들에서, 동작들은, 최대 커밋 시간을 통신한 이후, 분산형 시스템 상에서의 대응하는 트랜잭션의 실행을 커밋하는 것을 포함한다. 여기서, 트랜잭션은 최대 커밋 시간을 포함한다. 이후, 동작들은 또한, 대응하는 트랜잭션이 최대 커밋 시간에 또는 그 전에 커밋하기를 실패하는 경우 분산형 시스템 상에서의 대응하는 트랜잭션의 실행이 거부된다는 것을 표시하는 트랜잭션 결과를 획득하는 것, 및 적어도 하나의 변경 로그 캐시로 트랜잭션 결과를 통신하는 것을 포함할 수 있다. 수신된 트랜잭션 결과는 적어도 하나의 변경 로그 캐시로 하여금, 트랜잭션 프로세스가 최대 커밋 시간을 적어도 하나의 변경 로그 캐시에 통신했던 실제 시간과 최대 커밋 시간 사이에 트랜잭션 이력에서 갭을 생성하게 할 수 있다. 적어도 하나의 변경 로그 캐시는 데이터 프로세싱 하드웨어 상에서 실행되는 하나 또는 그 초과의 시청자 프록시들에 트랜잭션 이력의 갭을 통신할 수 있다. 각각의 시청자 프록시는, 최대 커밋 시간의 종료 시에 대응하는 트랜잭션의 각각의 구독 시청자에게 통지를 제공하도록 구성될 수 있으며, 통지는 트랜잭션 이력의 갭 동안의 캐시 미스(miss)를 포함한다.
[0016] 몇몇 예들에서, 동작들은, 오프-라인 이벤트 이후 변경 로그 프로세스의 재시작을 결정하는 것; 실제 시간을 획득하는 것; 변경 로그 프로세스가 재시작될 경우 실제 시간에 기반하여 현재 시퀀스 넘버를 결정하는 것; 및 분산형 시스템 상에서 실행되는 임의의 트랜잭션들에 대한 트랜잭션 이력을 업데이트하기 전에 현재의 시퀀스 넘버로부터 글로벌 최대 커밋 시간 지연을 대기하는 것을 더 포함한다. 변경 로그 프로세스의 재시작 이전에 분산형 시스템 상에서 실행되는 트랜잭션들은 글로벌 최대 커밋 시간 지연 내에서 완료될 수 있다. 동작들은 또한, 병합된 트랜잭션 이력을 하나 또는 그 초과의 가입 시청자들에게 송신하는 것을 포함할 수 있으며, 각각의 가입 시청자는 메모리 하드웨어 상에 저장된 데이터에 대한 변경들에 관한 고정적인 질의를 갖는다.
[0017] 본 개시내용의 하나 또는 그 초과의 구현들의 세부사항들은 첨부한 도면들 및 아래의 설명에서 기재된다. 다른 양상들, 특성들, 및 이점들은 설명 및 도면들, 그리고 청구항들로부터 명백할 것이다.
[0018] 도 1은 분산형 시스템의 비-일시적인 데이터 저장소에 대한 사용자 디바이스 액세스를 제공하기 위한 예시적인 시스템의 개략도이다.
[0019] 도 2는 분산형 저장 시스템의 비-일시적인 데이터 저장소에 대한 하나 또는 그 초과의 사용자 디바이스들의 액세스를 제공하기 위한 예시적인 시스템의 개략도이다.
[0020] 도 3은 고정적인 질의들에 대한 거의 실시간의 통지들을 제공하기 위한 통지 시스템의 예시적인 컴포넌트들의 개략도이다.
[0021] 도 4a 및 도 4b는 도 3의 통지 시스템의 후단 및 적어도 하나의 변경 로그 캐시에 의해 수행되는 예시적인 동작들의 개략도들을 도시한다.
[0022] 도 5는 예시적인 변경 로그 프로세스의 개략도이다.
[0023] 도 6은 분산형 시스템 상에서 실행되는 변경 로그 프로세스에 의해 셋팅된 커밋 시간 윈도우들의 도면을 도시한다.
[0024] 도 7은 메모리 하드웨어와 통신하는 예시적인 컴퓨팅 디바이스의 개략도이다.
[0025] 다양한 도면들에서 유사한 참조 부호들은 유사한 엘리먼트들을 표시한다.
[0026] 메모리-내 변경 로그 또는 변경 로그 캐시를 갖는 분산형 시스템은, 시청(watch) 구독들을 더 빠르게 프로세싱하고, 그에 의해, 트랜잭션들이 실행될 경우 거의 "실시간" 업데이트들을 제공하기 위해, 분산형 시스템 상에서 실행되는 트랜잭션들의 트랜잭션 이력을 저장한다. 따라서, 단일 변경 로그 캐시가 분산형 시스템의 많은(예컨대, 천개의) 머신들에 걸쳐 실행되는 트랜잭션들에 대한 트랜잭션 이력들을 저장하는 것으로 인해, 메모리 상의 캐싱은 증가된 범위성을 제공한다. 일반적으로, 분산형 시스템 상의 주어진 데이터저장소는 초당 더 많은 수의 트랜잭션들을 프로세싱할 수 있고, 그 후, 변경 로그 캐시가 초당 실행할 수 있는 다수의 태스크들을 프로세싱할 수 있다. 팬-인(fan-in) 포인트에서 데이터저장소로 발행된 모든 트랜잭션 요청들을 핸들링하도록 변경 로그 캐시에 대한 스루풋의 감소들을 완화시키기 위해, 구현들은 수요가 높을 경우, 변경 로그 캐시를 상이한 컴퓨팅 리소스들 상에서 실행되는 다수의 변경 로그 캐시들(예컨대, 변경 로그 프로세스의 다수의 인스턴스들)로 동적으로 분할하는 것을 포함한다. 이후, 다수의 변경 로그 캐시들 및 그들의 연관된 트랜잭션 이력들은 팬-아웃(fan-out) 포인트에서 하나 또는 그 초과의 구독 시청자들에 대한 트랜잭션 이력의 보장들 또는 일관성들을 유지하기 위해 기회주의적으로 함께 병합될 수 있다.
[0027] 도 1 및 도 2를 참조하면, 몇몇 구현들에서, 시스템(100)은 사용자(102)와 연관된 하나 또는 그 초과의 사용자 디바이스들(120a-n)을 포함한다. 사용자 디바이스(120)는 스케일러블(scalable)/탄력적인 비-일시적인 데이터저장소(150)를 갖는 분산형 저장 시스템(200)과 네트워크(132)를 통해 통신한다. 몇몇 구현들에서, 분산형 저장 시스템(200)은 데이터저장소(150)에 대한 액세스를 관리하는 컴퓨팅 디바이스(112)를 실행한다. 사용자 디바이스(120)는, 컴퓨팅 디바이스(112)가 기입 트랜잭션들(204)을 실행하는 경우 데이터(202)를 데이터저장소(150)로 기입하고, 컴퓨팅 디바이스(112)가 판독 트랜잭션들(214)을 실행하는 경우 데이터저장소(150)로부터의 데이터(202)를 시청 또는 판독한다. 몇몇 예들에서, 컴퓨팅 디바이스(112)가 네트워크(132)를 통해 사용자 디바이스(120)로부터 기입 액세스 요청(128)을 수신하는 경우, 컴퓨팅 디바이스(112)는 기입 트랜잭션들(204)을 실행한다. 유사하게, 컴퓨팅 디바이스(112)가 네트워크(132)를 통해 사용자 디바이스(120)로부터 판독 액세스 요청(130)을 수신하는 경우, 컴퓨팅 디바이스(112)는 판독 트랜잭션들(214)을 실행한다. 몇몇 예들에서, 판독 액세스 요청(130)은, 분산형 시스템(200)을 통해 1회 발행되고, 사용자 디바이스(120)가 새로운 판독 액세스 요청들(130)을 반복적으로 발생할 필요 없이, 데이터저장소(150)로부터의 데이터(202)를 일관되게 시청 또는 판독하게 허용하는 고정적인 질의에 대응한다.
[0028] 몇몇 구현들에서, 분산형 저장 시스템(200)은 분산형 시스템(200) 상에서 실행되는 트랜잭션들(204)의 트랜잭션 이력(312)(도 3)을 비-지속가능한 변경 로그 캐시(CLC)(310)에 저장하기 위해 변경 로그 프로세스(500)를 실행한다. 몇몇 시나리오들에서, 분산형 저장 시스템(200)은, 높은 수요의 기간들 동안, 이를테면, 분산형 시스템(200)이 수신하는 기입 액세스 요청들(128)의 수가 증가하고, 그에 의해, 분산형 시스템(200) 상의 변경 로그 로드가 또한 증가하게 하는 경우의 기간들 동안 변경 로그 프로세스(500)의 다수의 인스턴스들을 실행한다. 몇몇 구현들에서, 분산형 시스템(200) 상에서 실행되는 후단(304)은 비-지속가능한 상태의 다수의 비-지속가능한 CLC들(310) 사이에, 대응하는 트랜잭션(204)으로부터의 변형된 데이터(202)의 다수의 슬라이스(slice)들을 팬-인 또는 분산시킬 수 있고, 그 후, 분산형 시스템(200) 상에서 실행되는 슬라이스 관리자(318)는 대응하는 트랜잭션들에 관심있는 하나 또는 그 초과의 사용자 디바이스들(120)에게 데이터저장소(150)의 일관된 스냅샷을 제공하도록 다수의 CLC들(310)로부터의 변형된 데이터(202)의 슬라이스들을 팬-아웃 또는 병합할 수 있다.
[0029] 사용자 디바이스들(120)은 네트워크(132)를 통해 컴퓨팅 디바이스(112)와 통신할 수 있는 임의의 컴퓨팅 디바이스들일 수 있다. 사용자 디바이스들(120)은 데스크톱 컴퓨팅 디바이스들 및 모바일 컴퓨팅 디바이스들, 이를테면 랩톱들, 태블릿들, 스마트 폰들, 및 웨어러블 컴퓨팅 디바이스들(예컨대, 헤드셋들 및/또는 워치들)을 포함하지만 이에 제한되지는 않는다. 사용자 디바이스들(120)은 데이터(202)를 데이터저장소(150)에 기입하고 그리고/또는 분산형 저장 시스템(200)의 데이터저장소(150)로부터 데이터(202)를 판독하기 위해 디스플레이(122) 상에서 그래픽 사용자 인터페이스(GUI)(222)를 추가로 실행할 수 있다. 사용자 디바이스들(120)은, 데이터저장소(150)에 저장된 데이터(202)를 업데이트/변경/변형시키기 위해 기입 액세스 요청들(128)을 송신하는 기입기들(320)(도 3) 및 또한, 데이터(202)에 대한 변경 또는 변형이 발생하는 임의의 시간에 데이터(202)를 얻기 위해 판독 액세스 요청들(130)(예컨대, 고정적인 질의)을 송신하는 판독기들(322)(도 3) 둘 모두를 포함할 수 있다.
[0030] 네트워크(132)는 다양한 타입들의 네트워크들, 이를테면 로컬 영역 네트워크(LAN), 광역 네트워크(WAN), 및/또는 인터넷을 포함할 수 있다. 네트워크(132)가 장거리 네트워크(예컨대, 인터넷 또는 WAN)를 표현할 수 있지만, 몇몇 구현들에서, 네트워크(132)는 더 짧은 범위의 네트워크, 이를테면 로컬 영역 네트워크(LAN)를 포함한다. 몇몇 구현들에서, 네트워크(132)는 표준 통신 기술들 및/또는 프로토콜들을 사용한다. 따라서, 네트워크(132)는, 이더넷, WiFi(Wireless Fidelity)(예컨대, 802.11), WiMAX(worldwide interoperability for microwave access), 3G, 롱텀 에볼루션(LTE), DSL(digital subscriber line), ATM(asynchronous transfer mode), 인피니밴드(InfiniBand), PCI 익스프레스 진보된 스위칭(PCI Express Advanced Switching), 블루투스, BLE(Bluetooth Low Energy) 등과 같은 기술들을 사용하는 링크들을 포함할 수 있다. 유사하게, 네트워크(132) 상에서 사용되는 네트워킹 프로토콜들은 MPLS(multiprotocol label switching), TCP/IP(transmission control protocol/Internet protocol), UDP(User Datagram Protocol), HTTP(hypertext transport protocol), SMTP(simple mail transfer protocol), FTP(file transfer protocol) 등을 포함할 수 있다. 네트워크(132)를 통해 교환되는 데이터는 HTML(hypertext markup language), XML(extensible markup language) 등을 포함하는 기술들 및/또는 포맷들을 사용하여 표현될 수 있다. 부가적으로, 링크들 중 일부 또는 전부는 종래의 암호화 기술들, 이를테면 SSL(secure sockets layer), TLS(transport layer security), VPN(virtual private network)들, IPsec(Internet Protocol security) 등을 사용하여 암호화될 수 있다. 다른 예들에서, 네트워크(132)는 위에서 설명된 기술들 대신 또는 그에 부가하여, 맞춤화 및/또는 전용 데이터 통신 기술들을 사용한다.
[0031] 도 2를 참조하면, 몇몇 구현들에서, 분산형 저장 시스템(200)은 느슨하게 커플링된 메모리 호스트들(110, 110a-n)(예컨대, 컴퓨터들 또는 서버들)을 포함하며, 이들 각각은 데이터를 캐싱하기 위해 사용될 수 있는 저장 리소스들(114)(예컨대, 메모리 하드웨어, 메모리 하드웨어, 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 위상 변화 메모리(PCM), 및/또는 디스크들)과 통신하는 컴퓨팅 리소스(112)(예컨대, 하나 또는 그 초과의 프로세서들 또는 중앙 프로세싱 유닛(CPU)들)를 갖는다. 저장 리소스들(114) 상에 오버레이된 데이터저장소(150)(예컨대, 저장소 추상화)는 하나 또는 그 초과의 사용자 디바이스들(120, 120a-n)에 의한 저장 리소스들(114)의 스케일러블 사용을 허용한다. 사용자 디바이스들(120)은 네트워크(132)를 통해 (예컨대, RPC(remote procedure calls)를 통해) 메모리 호스트들(110)과 통신할 수 있다.
[0032] 몇몇 구현들에서, 분산형 저장 시스템(200)은 "싱글-사이디드(single-sided)"여서, 사용자 디바이스들(120)의 대응하는 메모리 호스트들(110) 상에서, 기입 트랜잭션(204)을 실행할 경우 데이터(202)를 기입하고 판독 트랜잭션(214)을 실행할 경우 데이터(202)를 기입하기 위해 그 사용자 디바이스들(120)로부터의 RPC에 응답하기 위한 임의의 서버 작업들에 대한 필요성을 제거하며, 대신, 원격 기입 및 판독 액세스 요청들(128, 130)을 각각 프로세싱하기 위한 특수화된 하드웨어에 의존할 수 있다. "싱글-사이디드"는 메모리 호스트들(110) 상에서의 요청 프로세싱의 대부분이 메모리 호스트들(110)의 CPU들(112) 상에서 실행되는 소프트웨어에 의한 것보다는 하드웨어에서 수행되게 할 수 있는 방법을 지칭한다. 메모리 호스트(110)(예컨대, 서버)의 프로세서(112)가 사용자 디바이스들(120) 상에서 실행되는 사용자 프로세스들(126)로 대응하는 저장 리소스(114)(예컨대, 비-일시적인 메모리)의 액세스를 내보내는 서버 프로세스(118)를 실행하게 하기보다는, 사용자 디바이스들(120)은 메모리 호스트(110)의 네트워크 인터페이스 제어기(NIC)(116)를 통해 저장 리소스(114)에 직접 액세스할 수 있다. 싱글-사이디드 분산형 캐싱 시스템에 관련된 부가적인 개념들 및 특성들은 미국 특허 제 9,164,702호에서 발견될 수 있으며, 그 특허는 이로써 그 전체가 인용에 의해 포함된다.
[0033] 분산형 저장 시스템(200)은 원격 메모리 호스트들(110)(예컨대, 데이터저장소(150))의 메모리 하드웨어(114)에 데이터(202)를 넣고, RPC들을 통해 또는 원격 직접 메모리 액세스(RDMA)-가능한 네트워크 인터페이스 제어기들(NIC)(116)을 통해 원격 메모리 호스트들(110)로부터 데이터(202)를 얻을 수 있다. 네트워크 인터페이스 제어기(116)(또한, 네트워크 인터페이스 카드, 네트워크 어댑터, 또는 LAN 어댑터로 알려짐)는 컴퓨팅 디바이스/리소스(112)를 네트워크(132)에 연결시키는 컴퓨터 하드웨어 컴포넌트일 수 있다. 메모리 호스트들(110a-n) 및 사용자 디바이스(120) 둘 모두는 네트워크 통신들을 위한 네트워크 인터페이스 제어기(116)를 각각 가질 수 있다. 메모리 호스트(110)의 컴퓨팅 프로세서(112) 상에서 실행되는 호스트 프로세스(118)는 업데이트된 데이터(202)를 기입하기 위해 기입 트랜잭션(204)을 실행할 경우 메모리 위치(250a-n)를 할당할 수 있다.
[0034] 몇몇 구현들에서, 하나 또는 그 초과의 사용자 디바이스들(120)(예컨대, 시청자(들)(322))은 데이터(202)의 특정 부분을 구독하도록 고정적인 질의와 연관된 판독 액세스 요청들(130)을 분산형 시스템(200)을 통해 1회 발행한다. 고정적인 질의(예컨대, 판독 액세스 요청(130))는 대응하는 사용자 디바이스(120)(예컨대, 구독 시청자(322))가 새로운 판독 액세스 요청들(130)을 반복적으로 발행할 필요 없이 데이터저장소(150)로부터 데이터(202)를 일관되게 시청 또는 판독하게 허용한다. 따라서, 분산형 시스템(200)이 데이터저장소(150)에서 데이터(202)를 수정하기 위해 분산형 시스템(200) 상에서 기입 트랜잭션(204)을 실행하기 위한 기입 액세스 요청(138)을 수신할 때마다, 분산형 시스템(200)은 데이터(202)를 구독한 하나 또는 그 초과의 시청자들(322)에게 수정된/변형된 데이터(202)를 스트리밍한다.
[0035] 몇몇 구현들에서, 분산형 시스템(200)은, 하나 또는 그 초과의 가입 시청자들(322)로 업데이트된 데이터(202)를 실시간으로 스트리밍하며, 분산형 시스템(200)이 주어진 시점에서 현재 수신하고 있는 트랜잭션 요청들(138 및 140)의 수에 기반하여 스케일러블된다. 예컨대, 분산형 시스템(200)은, 분산형 시스템(200)이 높은 부하를 받는, 즉 분산형 시스템(200)이 많은 수의 기입 요청들(138)을 수신하고 있는 시간들에서 데이터저장소(150) 내의 데이터(202)에 대한 다수의 변형들을 붕괴시키는 일관된 스냅샷(예컨대, 트랜잭션 이력(312))을 주어실제 시간 인스턴스에서 제공할 수 있다. 이러한 범위성은 분산형 시스템(200)이 가능한 실시간에 가깝게 그리고 분산형 시스템(200)의 오버로딩으로 인해 데이터(202)를 시청자들(322)로 스트리밍하는 것을 드롭할 필요 없이, 업데이트된 데이터(202)를 구독 시청자들(322)로 스트리밍하게 허용한다. 따라서, 기입 트랜잭션(204)의 실행이 성공적으로 완료되는 경우, 시청자들(322)에 의한 판독 트랜잭션들(214)은 데이터저장소(150)의 현재의 일관된 상태를 반영하므로, 시청자들(322)은 기입 트랜잭션(204)에 의해 수정된 데이터(202)의 가장 최신 카피를 수신한다. 시청자들(322)은 마지막 스냅샷 이후로 발생했던 모든 각각의 변경을 반영하지 않을 수 있는 데이터의 단일의 일관된 스냅샷을 주어실제 시간 인스턴스에서 수신한다.
[0036] 도 3은 데이터저장소(150)에 저장된 데이터(202)를 구독하는 하나 또는 그 초과의 시청자들(322)로 통지들(350)을 송신하기 위한 통지 시스템(300)의 컴포넌트들의 예시적인 구현의 블록 다이어그램이다. 본 명세서에서 사용되는 바와 같이, 데이터저장소(150) 내의 특정 데이터(202)에 대한 변경들이 통지들(350)로서 거의 실시간으로 시청자들(322)로 스트리밍되도록 고정적인 질의(예컨대, 판독 액세스 요청(130))를 발행함으로써 시청자(322)는 특정 데이터(202)를 구독할 수 있다. 통지 시스템(300)은 하나 또는 그 초과의 원격 기입기들(320, 320a-n) 및 하나 또는 그 초과의 원격 시청자들(322, 322a-n)과 연관된 원격 사용자 디바이스들(120)과 네트워크(132)를 통해 통신하는 분산형 시스템(200)을 포함한다. 분산형 시스템(200)은 메모리 하드웨어(114)의 컴퓨팅 디바이스(112) 및 데이터저장소(150) 상에서 실행되는 데이터저장소 후단(304) 및 슬라이스 관리자(318)를 포함한다.
[0037] 몇몇 구현들에서, 컴퓨팅 디바이스(112)는 변경 로그 프로세스(500)에 대한 명령들을 실행하며, 이는, 비-지속가능한 상태로 분산형 시스템(200) 상에서 실행되는 트랜잭션들(204)의 트랜잭션 이력(312)의 일부들을 저장하기 위해 메모리(114) 내에서 비-지속가능한 변경 로그 캐시(CLC)(310)를 제공한다. 데이터저장소(150) 내의 데이터(202)에 대해 행해진 모든 각각의 변경을 기록하는 지속가능한 변경 로그들을 사용하는 것과는 대조적으로, CLC(310)는 컴퓨팅 디바이스(112)가, 2개 또는 그 초과의 CLC들(310a-n)을 제공하도록 변경 로그 프로세스의 부가적인 인스턴스들을 실행함으로써 CLC(310)를 스케일링 업 또는 스케일링 다운하게 허용하기 위해 메모리(114) 내에서 샤드가능하다(shardable). 이러한 방식으로, 변경 로그 프로세스(500)는 또한, 주어실제 시간의 분산형 시스템(200) 상의 현재의 로드에 의존하여 하나 또는 그 초과의 인스턴스들의 실행을 중단할 수 있다. 비-지속가능한 CLC(들)(310)에 의해 제공된 범위성이 없다면, 더 많은 수의 기입 요청들(128)은, 각각의 기입 트랜잭션(204)이 데이터저장소(150) 내의 대응하는 위치에서 실행하기를 대기하는 동안 병목을 초래할 것이다. 일반적으로, 단일 데이터저장소(150)는 그 데이터저장소(150)에 대한 변경들을 기록하기 위해 각각의 CLC(310)를 할당받는다. 그러나, 다수의 데이터저장소들(150)은 동일한 CLC(310)에 할당될 수 있다. 예컨대, 통지 시스템(300)은 백만개의 데이터저장소들(150) 및 백개의 CLC들(310)을 포함할 수 있으므로, 각각의 CLC(310)가 천개의 데이터저장소들(150)에 대한 변경들을 기록할 것이다. 몇몇 예들에서, 부가적인 데이터저장소들(150)이 분산형 시스템(200) 상의 로드의 증가들을 핸들링하기 위해 부가될 경우, 더 많은 CLC들(310)을 스케일링 업하는 것이 필요하다.
[0038] 몇몇 예들에서, 컴퓨팅 디바이스(112)(예컨대, 데이터 프로세싱 하드웨어)는, 시청자들(322)의 개별적인 구독들을 모니터링하기 위한 상태 머신을 각각 포함하는 하나 또는 그 초과의 시청자 프록시들(314, 314a-n)을 실행한다. 예컨대, 각각의 시청자(322)는 각각의 시청자 프록시(314)와의 일-대-일 연결을 갖는다. 따라서, 각각의 시청자 프록시(314)는 변형들 또는 캐시 미스들을 대응하는 시청자 프록시(314)로 제공하는 하나 또는 그 초과의 CLC들(310)과 각각의 시청자(322) 사이에서 멀티플렉싱한다. 캐시 미스가 발생하는 시나리오들에서, 시청자 프록시(314)는 데이터저장소(202)로부터 데이터(202)를 리트리브하도록/얻도록 후단(700)에게 질의할 수 있다(352).
[0039] 몇몇 구현들에서, 후단(304)은, 새로운 기입 트랜잭션(204)이 데이터저장소(150) 내의 데이터(202)를 업데이트하도록 커밋할 때마다 CLC(들)(310)에 저장된 트랜잭션 이력(312)을 업데이트하기 위해 트랜잭션 프로세스를 실행한다. 트랜잭션 프로세스는 순서화된 변경 로그(예컨대, 트랜잭션 이력(312))의 캐시를 유지하기 위해 팬-인 스테이지(301) 동안 CLC(310)를 이용할 수 있다. 몇몇 예들에서, 트랜잭션 프로세스는 CLC(310)에 의해 유지되는 순서화된 변경 로그의 캐시를 데이터(202)의 스트라이프들로 샤딩하고, 데이터(202)의 각각의 스트라이프를 복제하며, 메모리 하드웨어(114) 상의 다수의 저장 위치들(250)에 데이터 스트라이프들 및 복제된 데이터 스트라이프들을 저장한다. 후단(304)은 실제 시간 클록(316)으로부터 실제 시간(TT)을 획득하며, 후단(310)이 원격 기입기(320)로부터 기입 액세스 요청(128)을 수신하는 경우 TT에 기반하여 최대 커밋 시간 TDMax를 결정할 수 있다. TDMax는 분산형 시스템(200) 상에서의 대응하는 기입 트랜잭션(204)의 실행을 커밋하기 위한 최대 시간을 특정한다. 예컨대, TDMax는 대응하는 트랜잭션(204)을 커밋하도록 분산형 시스템(200)에 대한 상한의 시간 제한을 시행하며, 그에 의해, 분산형 시스템(200)이 TDMax까지 트랜잭션(204)을 커밋할 수 없다면, 분산형 시스템(200)은 대응하는 트랜잭션(204)을 중단한다.
[0040] 몇몇 예들에서, 팬-인 스테이지(301) 동안, 후단(304)은 데이터저장소(150) 내의 데이터(202)를 수정/변형/변경하기 위해 기입 트랜잭션(204)(예컨대, 기입 커밋)을 실행하기 전에 잠금 준비 메시지(330)를 CLC(310)에 전송한다. 잠금 준비 메시지(330)는 대응하는 계류중인 트랜잭션(204)에 대한 TDMax를 포함하고, CLC(310)로 하여금 커밋 시간 윈도우(610)(도 6) 동안 통지 잠금을 셋팅하게 한다. 여기서, 커밋 시간 윈도우(610)는, CLC(310)가 잠금 준비 메시지(330)를 수신하는 TT로부터 TDMax까지의 시간의 윈도우에 대응한다. 통지 잠금은, CLC(310)가 TDMax보다 이르고 계류중인 트랜잭션의 시작보다는 이후인 대응하는 커밋 시간들을 갖는 임의의 완료된 트랜잭션들(204)에 대해 커밋 시간 윈도우(610) 동안 하나 또는 그 초과의 시청자들(322)에게 통지하는 것을 방지한다. 본 명세서에서 사용되는 바와 같이, 용어 "커밋 시간"은 대응하는 기입 트랜잭션(204)의 실행이 완료되는 시간을 지칭한다. 잠금 준비 메시지(330)를 CLC(310)에 전송한 이후, 후단(304)은 데이터저장소(150) 내의 데이터(202)를 업데이트하기 위해 기입 트랜잭션(204)의 실행을 커밋한다.
[0041] 몇몇 구현들에서, 후단(304)은 대응하는 트랜잭션(204)이 커밋한 이후 트랜잭션 결과(332)를 획득하고, 트랜잭션 결과(332)를 CLC(310)에 제공한다. 몇몇 예들에서, 트랜잭션 결과(332)는, 대응하는 트랜잭션(204)이 TDMax의 또는 그 전의 커밋 시간을 포함하는 경우 대응하는 트랜잭션(204)의 실행이 수용된다는 것을 표시한다. 이들 예들에서, 트랜잭션 결과(332)는 또한, 대응하는 트랜잭션(204)으로부터 초래되는 데이터(202)의 적어도 하나의 변형을 포함할 수 있다. 다른 예들에서, 트랜잭션 결과(332)는, 대응하는 트랜잭션(204)이 실패하거나 또는 그렇지 않으면 데이터저장소(150)가 TDMax까지 대응하는 트랜잭션을 완료/커밋할 수 없는 경우 대응하는 트랜잭션(204)의 실행이 거부된다는 것을 표시한다. 따라서, 본 명세서에서 사용되는 바와 같이, 트랜잭션(204)이 "거부"된다는 것을 표시하는 트랜잭션 결과(332)는, TDMax 전에 공식적으로 중단되고 따라서 결과가 알려진 트랜잭션(204)을 지칭할 수 있거나, 또는 트랜잭션(204)이 TDMax까지 커밋되지 않았으므로, 트랜잭션(204)이 완료되었는지 여부의 결과가 알려지지 않은 트랜잭션(204)을 지칭할 수 있다.
[0042] 후단(304)은 기입 트랜잭션(204)을 커밋한 이후 잠금 해제 메시지(334)를 CLC(310)에 제공할 수 있다. 잠금 해제 메시지(334)는 대응하는 트랜잭션(204)에 대한 트랜잭션 결과(332)를 포함하며, CLC(310)로 하여금 통지 잠금을 해제/제거하게 한다. 예컨대, CLC(310)는 잠금 해제 메시지(334)를 수신할 시에 즉시 통지 잠금을 제거할 수 있다. 트랜잭션 결과(332)가 대응하는 트랜잭션이 수용된다는 것을 표시하는 구현들에서, 잠금 해제 메시지(334)는 CLC(310)로 하여금 대응하는 트랜잭션(204)과 연관된 데이터(202)의 적어도 하나의 변형을 기록하게 한다. 대조적으로, 잠금 해제 메시지(334)는 CLC(310)로 하여금, 대응하는 트랜잭션(204)에 대한 커밋 시간 윈도우(610) 동안 트랜잭션 이력(312)에서 갭을 생성하게 한다. CLC(310)에 의해 생성된 갭은, 트랜잭션(204)이 갭 동안 계류중이었지만, 트랜잭션(204)이 완전히 커밋되었는지 여부의 결과가 알려지지 않았다는 것을 표시한다.
[0043] 몇몇 구현들에서, 하나 또는 그 초과의 시청자 프록시들(314)은 CLC(310)로부터 트랜잭션 이력(312)을 수신하기 위해 트랜잭션 프로세스의 팬-아웃 스테이지(302) 동안 실행된다. 트랜잭션 이력(312)은, 대응하는 트랜잭션(204)에 대한 가장 오래된 잠금 준비 메시지보다 이른 대응하는 커밋 시간들을 갖고 분산형 시스템(200) 상에서 실행되는 임의의 트랜잭션들(204)을 포함한다. 몇몇 예들에서, CLC(310)는, 트랜잭션 이력(312)에 데이터(202)의 변형을 기록하고 트랜잭션 이력(312)을 시청자 프록시들(314)에 제공함으로써 대응하는 트랜잭션(204)이 수용되는 경우 데이터(202)의 적어도 하나의 변형을 통신한다. 이들 예들에서, 각각의 시청자 프록시(314)는 통지(350)에 데이터(202)의 변형을 포함시키고, 통지(350)를 각각의 구독 시청자(322)에 제공한다. 다른 예들에서, CLC(310)는, 대응하는 트랜잭션(204)이 거부되는 경우, 갭을 갖는 트랜잭션 이력(312)을 시청자 프록시들(314)에 제공하며, 그에 의해 각각의 시청자 프록시(314)로 하여금 통지(350)에서 캐시 미스를 푸시(push)하게 하고 통지(350)를 각각의 구독 시청자(322)에 제공하게 한다. 여기서, 캐시 미스는 트랜잭션 이력(312) 내의 갭 동안 계류중인 트랜잭션(204)의 알려지지 않은 결과를 반영한다. 몇몇 예들에서, 시청자 프록시들(314)은, 계류중인 트랜잭션(204)의 결과를 결정하고 그 결과를 각각의 구독 시청자(322)에게 제공하도록 트랜잭션 이력(312) 내의 갭 동안 데이터저장소(150)의 스냅샷을 획득하기 위해 후단(304)에게 질의한다(352). 대조적으로, 대응하는 트랜잭션(204)이 TDMax 이전에 공식적으로 중단되는 것으로 인해 거부되는 경우, 그 후, 대응하는 트랜잭션(204)은 트랜잭션 이력(312)으로부터 간단히 누락된다. 또한, 새로운 시청자(322)가 분산형 시스템(200)에 연결되는 경우, 대응하는 시청자 프록시(314)는 시청자(322)와 연관된 고정적인 질의(130)에 영향을 주는 데이터저장소(150)의 모든 변경들을 통합하여, 시청자(322)가 데이터저장소(150)의 일관된 스냅샷을 수신할 수 있게 한다.
[0044] 데이터저장소(150)로 커밋되는 트랜잭션들(204)의 수가 증가하는 경우에 단일 CLC(310)가 모든 변형들을 기록할 만큼 충분한 스루풋을 갖지 않는 상황들에서, 데이터(204)의 변형들은 다수의 CLC들(310) 사이에서 슬라이스들로 분할될 수 있다. 몇몇 구현들에서, 슬라이스 관리자(318)는, 하나 또는 그 초과의 시청자들(322)로부터의 주어진 고정적인 질의(예컨대, 판독 액세스 요청(130))를 충족시키기 위해, 변형된 데이터(204)의 하나 또는 그 초과의 각각의 슬라이스들을 각각 포함하는 다수의 CLC들(310)로부터의 트랜잭션 이력들(312)을 병합한다.
[0045] 도 4a 및 도 4b는 분산형 시스템(200)의 후단(304) 및 적어도 하나의 변경 로그 캐시(310)에 의해 수행되는 예시적인 동작들을 예시한 다이어그램들(400a, 400b)을 제공한다. 다이어그램들(400a, 400b)은 도 3의 통지 시스템(300)을 참조하여 설명될 수 있다. 수직의 y-축은 최상부로부터 최하부로 증가하는 시간을 표시한다. 시간 1에서, 후단(304)은 원격 기입기(320)로부터 트랜잭션 요청(예컨대, 기입 액세스 요청(128))을 수신한다. 원격 기입기(320)는 메모리 하드웨어(114) 상의 데이터저장소(150)에 저장된 데이터(202)를 변형시키도록 기입 트랜잭션(204)을 실행하기 위해 트랜잭션 요청(138)을 송신할 수 있다. 시간 2에서, 후단(304)은 대응하는 트랜잭션(204)을 계류중인 것으로서 할당한다. 여기서, 후단(304)은 실제 시간 클록(316)으로부터 TT를 획득하고, 대응하는 트랜잭션(204)에 대한 TDMax를 결정한다. 후단(304)은 TDMax를 포함하는 잠금 준비 메시지(330)를 생성할 수 있다.
[0046] 시간 3에서, 후단(304)은 잠금 준비 메시지(330)를 CLC(310)에 전송하고, 시간 4에서, CLC(310)는 잠금 준비 메시지(330)를 수신하는 것에 대한 응답으로 실제 시간 클록(316)으로부터 TT를 리트리브한다. 시간 5에서, CLC(310)는, 잠금 준비 메시지(330)가 콜(call)되는 시간(예컨대, 시간 3)의 TT와 대응하는 트랜잭션(204)에 대한 TDMax 사이에서 커밋 시간 윈도우(610) 동안 통지 잠금을 셋팅한다. 통지 잠금은 CLC(310)가 커밋 시간 윈도우(610) 내에 있는 대응하는 커밋 시간을 갖는 임의의 완료된 트랜잭션들(204)에 대해 하나 또는 그 초과의 시청자들(322)에게 통지하는 것을 방지한다. 후속하여, 시간 6에서, 후단(304)은 데이터저장소(150) 내의 데이터(202)를 변경(예컨대, 변형)하기 위한 대응하는 트랜잭션(204)의 실행을 커밋한다.
[0047] 시간 7에서, 데이터저장소(150)는 커밋 시간을 후단(304)으로 리턴하고, 후단(304)은 리턴된 커밋 시간에 기반하여 트랜잭션 결과(332)를 획득한다. 도 4a는 시간 7에서 리턴된 커밋 시간이, 대응하는 트랜잭션(204)이 수용된다는 것을 표시하는 트랜잭션 결과(332)를 제공하기 위해 TDMax에서 또는 그 전에 발생한다는 것을 도시한다. 이러한 시나리오에서, 시간 8에서, 후단(304)은 트랜잭션(204)이 수용됨을 기입기(320)에게 통지하고, 시간 9에서, 대응하는 트랜잭션(204)으로부터 초래된 데이터(202)의 적어도 하나의 변형을 CLC(310)에 제공한다. 시간 10에서, CLC는 통지 잠금을 해제/제거하고, 데이터(202)의 적어도 하나의 변형을 기록한다. 시간 8에서 트랜잭션(204)이 수용됨을 기입기(320)에게 통지함으로써, 기입기(320)는 기입기(320)가 구독 시청자(322)로서 트랜잭션(204)의 결과를 볼 수 있기 전에 성공적인 기입 트랜잭션(204)에 대해 통지받는다. 그러나, 다른 시나리오들에서, 후단(304)은, CLC가 시간 10에서 데이터(202)의 적어도 하나의 변형을 기록하는 경우 시간 10에서 트랜잭션이 수용됨을 기입기(320)에게 통지할 수 있다. 이들 시나리오들에서, 데이터(202)의 적어도 하나의 변형은 기입기(320)의 콜이 리턴되기 전에 기록되도록 보장된다.
[0048] 한편, 도 4b는, 대응하는 트랜잭션(204)이 TDMax까지 완료/커밋하기를 실패하거나 또는 트랜잭션(204)이 TDMax 전에 공식적으로 중단되는 것으로 인해 대응하는 트랜잭션(204)이 거부되는 시나리오를 도시한다. 예컨대, 시간 7에서, 데이터저장소(150)는, TDMax까지 커밋하기를 실패해서 트랜잭션(204)이 거부되었다는 것을 표시하거나 또는 TDMax 전에 공식적으로 중단되어서 트랜잭션(204)이 거부되었다는 것을 표시하는 트랜잭션 결과(332)를 후단(304)으로 리턴할 수 있다. 시간 8에서, 후단(304)은 트랜잭션(204)이 거부됨을 원격 기입기(320)에게 통지하고, 시간 9에서, 후단(304)은 잠금 해제 메시지(334)를 CLC(314)에 전송한다. 여기서, 잠금 해제 메시지(334)는 대응하는 트랜잭션(204)이 거부되었다는 것을 표시하는 트랜잭션 결과(332)를 포함하며, 통지 잠금을 해제하도록 CLC(310)에게 통지한다. 시간 10에서, CLC(310)는 커밋 시간 윈도우(610) 동안 이전에 셋팅된 통지 잠금을 해제하고, 거부되었던 대응하는 트랜잭션(204)과 연관된 갭을 생성한다. 더 구체적으로, CLC(310)는 커밋 시간 윈도우(610) 동안, 즉 잠금 준비 메시지(330)가 콜되는 시간(예컨대, 시간 3)의 TT와 대응하는 트랜잭션(204)에 대한 TDMax 사이에서 트랜잭션 이력(312)에 갭을 생성할 수 있다. 따라서, CLC(310)에 의해 생성된 갭은, 트랜잭션(204)이 갭 동안 계류중이었지만, 트랜잭션(204)이 완료되었는지 여부의 결과가 알려지지 않았다는 것을 표시한다.
[0049] 도 5는 분산형 시스템(200) 상의 현재의 변경 로그 로드(예컨대, 수요)에 기반하여 범위성을 제공하기 위해 분산형 시스템(200) 상에서 실행되는 예시적인 변경 로그 프로세스(500)를 제공한다. 변경 로그 프로세스(500)는 도 3의 통지 시스템(300)을 참조하여 설명될 수 있다. 데이터 프로세싱 하드웨어(예컨대, 컴퓨팅 디바이스(112))는, 분산형 시스템(200) 상에서 실행되는 트랜잭션들(예컨대, 기입 트랜잭션들(204))의 트랜잭션 이력(312)을, 데이터 프로세싱 하드웨어와 통신하는 메모리 하드웨어(114) 상에 저장하도록 구성된 초기의 비-지속가능한 CLC(310a)를 제공하기 위해 변경 로그 프로세스(500)의 초기 인스턴스를 실행한다. 따라서, 각각의 CLC(310)(예컨대, 변경 로그 프로세스(500)의 각각의 인스턴스)는 순서화된 변경 로그의 캐시를 유지하는 것을 담당한다.
[0050] 팬-인 스테이지(301) 동안, 후단(304)은 대응하는 트랜잭션(204)을 실행하기 위해 원격 기입기(320)로부터 트랜잭션 요청(128)(예컨대, 기입 액세스 요청)을 수신하는 것에 대한 응답으로 잠금 준비 메시지(330)를 CLC(310a)에 전송한다. 여기서, CLC(310a)는, TDMax까지 커밋되도록 보장되는 트랜잭션 이력(312)(예컨대, 변경 로그)에서 이윽고 커밋될 대응하는 트랜잭션(204)에 대한 입력을 기록함으로써 각각의 잠금 준비 메시지(330)를 프로세싱한다. 후단(304)이 다수의 트랜잭션 요청들(128)을 수신하는 경우, CLC(310a) 상의 변경 로그 로드는 CLC(310a)가 다수의 잠금 준비 메시지들(330)을 프로세싱해야 하는 것으로 인해 증가된다. 몇몇 예들에서, 데이터저장소(150)는, 각각의 CLC(310)가 스루풋의 손실을 경험하기 전에 동시에 프로세싱할 수 있는 잠금 준비 메시지(330)의 수보다 초당 더 많은 커밋들을 프로세싱할 수 있다. 예컨대, CLC(310a)는 캐싱 성능 저하하기 전에 초당 10,000개의 유입 잠금 준비 메시지들(330)을 프로세싱하는 것이 가능할 수 있는 반면, 데이터저장소(150)는 초당 300,000개의 커밋들을 프로세싱할 수 있다. 따라서, CLC(310a)는, 변경 로그 로드가 임계 로드를 충족(예컨대, 초과)할 경우 유입 잠금 준비 메시지(330)의 프로세싱을 핸들링하기 위한 스루풋이 부족할 수 있다. 결과적으로, 유입 잠금 준비 메시지들(330)은 대응하는 CLC(310)에서 프로세싱을 대기하는 동안 병목될 수 있다. 여기서, 임계 로드는, 캐싱 성능의 저하를 경험하지 않으면서 CLC(310a)가 프로세싱할 수 있는 초당 잠금 준비 메시지들(330)의 최대 수에 대응한다. 데이터 프로세싱 하드웨어는 주어실제 시간에서의 수신된 트랜잭션 요청들(예컨대, 기입 액세스 요청들(128))의 수에 기반하여 변경 로그 로드를 결정할 수 있다.
[0051] 동작(502)에서, 후단(304)은, 대응하는 트랜잭션들(204)이 성공적으로 실행되는 경우, 변형된 데이터(202)를 포함하는 트랜잭션 결과들(332)을 데이터저장소(150)로부터 획득한다. 위에 기재된 바와 같이, CLC(310a)는 변경 로그 로드가 임계 로드를 충족하는 경우 데이터저장소(150)에서 발생하는 모든 변경들을 기록하는 것이 가능하지 않을 수 있다. 변경 로그 로드가 임계 로드를 충족하는 경우 메모리 하드웨어(114)에서 트랜잭션 이력(312)의 캐싱을 위한 범위성을 제공하기 위해, 데이터 프로세싱 하드웨어는 동작(504)에서, 트랜잭션 결과들(332)로부터의 변형된 데이터(202)를 다수의 슬라이스들(202a-d)로 분할하고, 변경 로그 프로세스(500)의 적어도 하나의 후속 인스턴스를 실행하며, 이는 변형된 데이터(202)의 슬라이스들(202a-d)을 저장하기 위한 적어도 하나의 후속 비-지속가능한 CLC(310b-d)를 제공한다. 초기 CLC(310a)와 마찬가지로, 각각의 후속 CLC(310a-d)는 분산형 시스템(200) 상에서 실행되는 트랜잭션들의 대응하는 트랜잭션 이력(312)을 저장하도록 구성된다. 예컨대, 도 5는, 데이터 프로세싱 하드웨어가 다수의 CLC들(310a, 310b, 310c, 310d)을 제공하기 위해 동작(504)에서 변경 로그 프로세스(500)의 3개의 후속 인스턴스들을 실행한다는 것을 도시한다. 데이터 프로세싱 하드웨어는, 변경 로그 로드를 모니터링하고, 오버로딩으로 인해, 변형된 데이터(202)를 다수의 슬라이스들(202a-d)로 분할하기로 결정하기 위한 "슬라이서" 컴포넌트를 구현할 수 있다.
[0052] 팬-아웃 스테이지(302) 동안, 각각의 CLC(310a-d), 예컨대 분산형 시스템(200) 상에서 실행되는 변경 로그 프로세스(500)의 각각의 인스턴스는 분산형 시스템(200) 상에서 실행되는 슬라이스 관리자(318)에 대응하는 트랜잭션 이력(312a, 312b, 312c, 312d)을 제공할 수 있다. 여기서, 각각의 트랜잭션 이력(312a-d)은 수용되었던 대응하는 트랜잭션(204)에 대한 변형된 데이터(202)의 하나 또는 그 초과의 슬라이스들(202a-d)을 표시한다.
[0053] 동작(506)에서, 변경 로그 프로세스의 다수의 인스턴스들(예컨대, 다수의 CLC들(310a-d))이 실행되고 있는 경우, 슬라이스 관리자(318)는 변경 로그 프로세스(500)의 적어도 하나의 후속 인스턴스의 실행을 중단시키고, 변경 로그 프로세스(500)의 초기 인스턴스(예컨대, CLC(310a))의 트랜잭션 이력(312) 및 변경 로그 프로세스(500)의 적어도 하나의 후속 인스턴스(예컨대, CLC들(310b-d))의 트랜잭션 이력(312)에 포함된 변형된 데이터(202)의 슬라이스들(202a-d)을 병합한다. 위에 기재된 바와 같이, 데이터 프로세싱 하드웨어는, 변경 로그 로드의 오버로딩으로 인해, 변형된 데이터(202)의 슬라이스들(202a-d)을 병합하기로 결정하기 위한 "슬라이서" 컴포넌트를 구현할 수 있다. 예컨대, 도 5는, 주어실제 시간 인스턴스에서 트랜잭션 이력(312)의 일관된 스냅샷을 구독 시청자들(322)에게 제공하기 위해 다수의 CLC들(310a-d)의 트랜잭션 이력들(312)로부터의 데이터 슬라이스들(202a-d)을 병합하는 슬라이스 관리자(318)로 팬 아웃된 다수의 CLC들(310a-d)로부터의 트랜잭션 이력들(312a-d)을 도시한다. 여기서, 트랜잭션 이력(312)의 일관된 스냅샷은, 수용된 대응하는 트랜잭션들(204)에 대한 변형된 데이터(202)의 하나 또는 그 초과의 배치(batch)들 및/또는 거부된 대응하는 트랜잭션들(204)에 대한 트랜잭션 이력(312) 내의 갭들의 하나 또는 그 초과의 배치들을 제공할 수 있다. 동작(508)에서, 하나 또는 그 초과의 시청자 프록시들(314)은, 주어실제 시간 인스턴스에서 트랜잭션 이력(312)의 일관된 스냅샷을 포함하는 통지(350)를 각각의 구독 시청자(322)에게 송신한다. 트랜잭션 이력 내의 갭의 경우, 시청자 프록시들(314)은 캐시 미스를 대응하는 원격 시청자들(322)에게 제공한다. 시청자 프록시들(314)은 변경 로그 프로세스(500)의 다수의 인스턴스들이 팬-아웃 스테이지(302) 동안 실행되고 있는지 여부를 결정할 수 있다.
[0054] 몇몇 구현들에서, 하나 또는 그 초과의 시청자 프록시들(314)은, 주어실제 시간 인스턴스에서 트랜잭션 이력(312)의 일관된 스냅샷에 포함되는 변형된 데이터(202)의 모든 각각의 배치와 함께 시청자들(322)에게 재개 토큰들을 제공한다. 재개 토큰들은 모든 태스크들 중에서 글로벌적으로 유효하고 수명이 길어서, 재개 토큰들은 미래에도 사용될 수 있다. 재개 토큰들은 클라이언트로 전송된 변경들의 현재 상태를 표현하는 범위들 및 연관된 타임스탬프들을 포함할 수 있다. 따라서, 재개 토큰들의 사용은, 시청자들(322)이 분산형 시스템으로부터 일시적으로 연결해제하고, 재연결할 시에, 분산형 시스템(200)이 일시적으로 접속해제되었던 시청자들(322)의 모든 상태를 손실했더라도, 시청자 프록시들(314)로부터 통지들(350)을 효율적으로 수신하기 위한 능력을 제공할 수 있다.
[0055] 도 6은 새로운 기입 트랜잭션(204)이 데이터저장소(150) 내의 데이터(202)를 업데이트하도록 커밋할 때마다 적어도 하나의 CLC(310)에 저장되는 트랜잭션 이력(312)을 업데이트하기 위해 분산형 시스템(200) 상에서 데이터 프로세싱 하드웨어(예컨대, 컴퓨팅 디바이스(112))에 의해 실행되는 변경 로그 프로세스(500)의 도면(600)을 도시한다. 수평의 x-축은 분산형 시스템(200)의 실제 시간을, 좌측으로부터 우측으로 증가하는 실제 시간에 대한 글로벌 시퀀스 넘버들과 함께 도시한다. 수직 파선들(601-607)은 실제 시간 동안의 각각의 글로벌 시퀀스 넘버들을 표시한다.
[0056] 제1 커밋 시간 윈도우(610a)는 분산형 시스템(200) 상에서의 대응하는 제1 트랜잭션(204a)의 실행을 위해 수직 파선들(601 및 603) 사이에서 대응하는 CLC(310)에 의해 셋팅된다. 여기서, 제1 커밋 시간 윈도우(610a)는, 제1 트랜잭션(204a)이 제1 최대 커밋 시간 TCMax_1 이후 커밋되지 않을 것임을 보장하는 TCMax_1와 연관된다. 도 6은, 실제 시간이 수직 파선(603)에서 13과 동일할 경우 TCMax_1가 제1 커밋 윈도우(610a)의 경계를 나타내고, 실제 시간이 수직 파선(601)에서 4와 동일할 경우 데이터 프로세싱 하드웨어가 제1 트랜잭션(204a)을 커밋한다는 것을 도시한다.
[0057] 유사하게, 제2 커밋 시간 윈도우(610b)는 분산형 시스템(200) 상에서의 대응하는 제2 트랜잭션(204b)의 실행을 위해 수직 파선들(602 및 604) 사이에서 대응하는 CLC(310)에 의해 셋팅된다. 여기서, 제2 커밋 시간 윈도우(610b)는, 제2 트랜잭션(204b)이 제2 최대 커밋 시간 TCMax_2 이후 커밋되지 않을 것임을 보장하는 TCMax_2와 연관된다. 도 6은, 실제 시간이 수직 파선(604)에서 21과 동일할 경우 TCMax_2가 제2 커밋 시간 윈도우(610b)의 경계를 나타내고, 실제 시간이 수직 파선(602)에서 12와 동일할 경우 데이터 프로세싱 하드웨어가 제2 트랜잭션(204b)을 커밋한다는 것을 도시한다. 제1 및 제2 커밋 시간 윈도우들(610a, 610b)과 연관된 CLC들(310)은 동일하거나 상이할 수 있다.
[0058] 제1 트랜잭션(204a)의 실행은 제1 TCMax_1보다 이른 커밋 시간에 완료된다. 예컨대, 도 6은, 제1 트랜잭션(204a)에 대한 커밋 시간이 9와 동일한 반면, 제1 TCMax_1이 13과 동일하다는 것을 도시한다. 제1 트랜잭션(204a)이 더 이른 잠금 준비 시간을 갖는 다른 계류중인 트랜잭션(204)에 의해 잠금되지 않으므로, 데이터 프로세싱 하드웨어는, 실제 시간이 9와 동일할 경우 커밋 시간을 수신할 시에 트랜잭션 이력(312)의 제1 일관된 스냅샷을 즉시 취할 수 있다. 제2 트랜잭션(204b)이 트랜잭션 이력(312)의 제1 일관된 스냅샷 이전에 수직 파선(602)에서 실행하는 것을 커밋하는 반면, 제2 트랜잭션(204b)은 제1 일관된 스냅샷 이후까지 완전히 완료되지 않는다. 예컨대, 제2 트랜잭션(204b)은 18과 동일한 커밋 시간을 포함한다. 따라서, 제1 일관된 스냅샷은 제2 트랜잭션(204b)이 아니라 제1 트랜잭션(204a)와 연관된 임의의 변형들을 포함한다.
[0059] 제2 트랜잭션(204b)이 제2 TCMax_2보다 이른 대응하는 커밋 시간을 포함한다는 것을 도 6이 또한 도시하므로, 제2 트랜잭션(204b)이 더 이른 잠금 준비 시간을 갖는 다른 계류중인 트랜잭션(204)에 의해 잠금되지 않기 때문에, 데이터 프로세싱 하드웨어는 18과 동일한 대응하는 커밋 시간에서 트랜잭션 이력(312)의 제2 일관된 스냅샷을 취한다. 여기서, 제2 일관된 스냅샷은 제1 및 제2 트랜잭션들(204a, 204b) 둘 모두와 연관된 변형들을 포함시키도록 커밋 시간 윈도우들(610a, 610b) 둘 모두와 연관된 트랜잭션 이력들을 병합한다. 데이터 프로세싱 하드웨어는, 제2 일관된 스냅샷 내의 트랜잭션 이력들의 병합을 제공하기 위해 적어도 하나의 시청자 프록시(314)를 실행할 수 있다.
[0060] 몇몇 구현들에서, 데이터 프로세싱 하드웨어는 오프라인 이벤트(650) 이후 변경 로그 프로세스(500)의 재시작을 결정한다. 예컨대, 도 6은, 실제 시간이 30과 동일할 경우 변경 로그 프로세스(500)가 수직 파선(606)에서 후속하여 재시작할 때까지 오프-라인 이벤트(650)가 수직 파선(605)에서 발생한다는 것을 도시한다. 변경 로그 캐시들이 지속가능한 상태를 갖지 않으므로, 오프라인 이벤트(650) 전에 변경 로그 캐시들에 의해 이전에 보유된 임의의 상태들은 변경 로그 프로세스(500)가 재시작하는 시간쯤에 사라진다. 몇몇 예들에서, 데이터 프로세싱 하드웨어는, 변경 로그 프로세스(500)의 재시작 이후의 트랜잭션 이력(312)의 모든 후속 스냅샷들이 일관되도록, 분산형 시스템(200) 상에서 실행되는 모든 트랜잭션들(204)이 완료된다는 것을 보장하기 위해 글로벌 최대 커밋 시간 지연 TCDMax에 의존한다. 달리 말하면, TCDMax는 변경 로그 프로세스(500)의 재시작 이전에 커밋하는 임의의 트랜잭션들(204)이 TCDMax의 종료까지 완료될 것임을 보장하는 시간 기간이다. 데이터 프로세싱 하드웨어는 변경 로그 프로세스가 재시작할 경우 실제 시간에 기반하여 현재의 시퀀스 넘버를 결정한다. 예컨대, 변경 로그 프로세스(500)가 재시작할 경우, 현재의 시퀀스 넘버는 수직 파선(606)에서 30과 동일하다. 이후, 데이터 프로세싱 하드웨어는, 분산형 시스템 상에서 실행되는 트랜잭션들(204)의 트랜잭션 이력(312)을 업데이트하기 전에 현재의 시퀀스 넘버(예컨대, 수직 파선(606))로부터 TCDMax를 대기한다. 본 명세서에서 사용되는 바와 같이, 실제 시간(TT)은, 주어진 시스템 상의 실제 시간의 측정이 실제 시간에 대응하도록 시간을 효과적으로 이산화한다. 따라서, TT는, 현재 시간이 TT의 하한(TTnow_lowerbound)과 TT의 상한(TTnow_upperbound) 사이의 간격 내에 확률적으로 존재한다는 것을 표시하는 간격을 정의한다. 결과적으로, TT의 값들은 직접적으로 준비될 수 없으며, 제2 실제 시간(TT2)의 이벤트가 제1 실제 시간(TT1) 이후 발생했던 조건은 TT2_lowerbound이 TT1_upperbound보다 크다는 것이다. 도 6은, TCDMax가 20과 동일하고 수직 파선들(606 및 607) 사이에서 발생한다는 것을 도시한다. 따라서, TCDMax가 20과 동일할 경우, 데이터 프로세싱 하드웨어는, 실제 시간이 50과 동일할 경우 수직 파선(607)까지 트랜잭션 이력(312)을 업데이트하지 않는다.
[0061] 몇몇 예들에서, 제3 커밋 시간 윈도우(610c)는 실제 시간이 25와 동일할 경우 대응하는 CLC(310)에 의해 셋팅되고, 오프라인 이벤트(650)는 제3 커밋 시간 윈도우(610c) 동안 발생한다. 제3 커밋 시간 윈도우(610c)가 오프라인 이벤트(650)의 발생 이전에 알려진 제3 TCMax_3에서 만료하는 경우, 수직 파선들(605 및 606) 사이의 오프라인 이벤트(650)의 결과로서, 대응하는 CLC(310)는 제3 커밋 시간 윈도우(610c)와 연관된 대응하는 트랜잭션(204)의 상태를 손실한다. 따라서, 변경 로그 프로세스(500) 동안, 시청자 프록시(314)는 제3 커밋 시간 윈도우(610c)와 연관된 대응하는 트랜잭션(204)을 포함하는 트랜잭션 이력(312)의 일관된 스냅샷을 제공하기 위해 TCDMax를 대기한다. 트랜잭션 이력(312) 내의 갭들의 경우, 시청자 프록시(314)는 갭의 시간 범위 동안 데이터저장소로부터 일관된 상태를 리트리브한다.
[0062] 몇몇 구현들에서, 제4 커밋 시간 윈도우(610d)는 재시작 이벤트 이후 대응하는 CLC(310)에 의해 셋팅되며, TCDMax의 종료 전에 발생하는 제4 TCMax_4를 포함한다. 제4 커밋 시간 윈도우(610d)와 연관된 대응하는 트랜잭션이 제4 TCMax_4에 의해 성공적으로 커밋된다고 가정하면, TCDMax의 종료 시의 트랜잭션 이력(312)의 일관된 스냅샷은 커밋 시간 윈도우들(610c, 610d) 둘 모두와 연관된 트랜잭션 이력들을 병합하여, 그들의 대응하는 트랜잭션들(204)과 연관된 변형들을 포함시킨다. 그와 대조적으로, TCDMax 동안 개시하지만 TCDMax 이후 만료하는 제5 커밋 시간 윈도우(610e)와 연관된 대응하는 트랜잭션(204)은, 제5 커밋 시간 윈도우(610d)와 연관된 제5 TCMax_5가 TCDMax 이후 발생하기 때문에, TCDMax의 종료 시에 일관된 스냅샷에 포함되지 않을 것이다.
[0063] 도 7은 컴퓨팅 리소스(112) 및 데이터저장소(150)와 같이, 본 명세서에 설명된 시스템들 및 방법들을 구현하는 데 사용될 수 있는 예시적인 컴퓨팅 디바이스(700)의 개략도이다. 컴퓨팅 디바이스(700)는, 랩톱들, 데스크톱들, 워크스테이션들, 개인 휴대 정보 단말들, 서버들, 블레이드(blade) 서버들, 메인프레임들, 및 다른 적절한 컴퓨터들과 같은 다양한 형태들의 디지털 컴퓨터들을 표현하도록 의도된다. 본 명세서에 도시된 컴포넌트들, 그들의 연결들 및 관계들, 및 그들의 기능들은 단지 예시적인 것으로만 의도되며, 본 명세서에 설명되고 그리고/또는 청구되는 본 발명들의 구현들을 제한하도록 의도되지 않는다.
[0064] 컴퓨팅 디바이스(700)는 프로세서(710)(즉, 데이터 프로세싱 하드웨어), 메모리(720), 저장 디바이스(730), 메모리(720) 및 고속 확장 포트들(750)에 연결된 고속 인터페이스/제어기(740), 및 저속 버스(770) 및 저장 디바이스(730)에 연결된 저속 인터페이스/제어기(660)를 포함한다. 컴포넌트들(710, 720, 730, 740, 750, 및 760) 각각은, 다양한 버스들을 사용하여 상호연결되며, 공통 마더보드 상에 또는 다른 방식들로 적절하게 장착될 수 있다. 프로세서(710)는, 고속 인터페이스(740)에 커플링된 디스플레이(780)과 같은 외부 입력/출력 디바이스 상에 GUI를 위한 그래픽 정보를 디스플레이하기 위해 메모리(720)에 또는 저장 디바이스(730) 상에 저장된 명령들을 포함하는, 컴퓨팅 디바이스(700) 내에서의 실행을 위한 명령들을 프로세싱할 수 있다. 다른 구현들에서, 다수의 프로세서들 및/또는 다수의 버스들이 다수의 메모리들 및 다수의 타입들의 메모리와 함께 적절하게 사용될 수 있다. 또한, 다수의 컴퓨팅 디바이스들(700)이 연결될 수 있으며, 각각의 디바이스는 필요한 동작들의 부분들을 (예컨대, 서버 뱅크, 블레이드 서버들의 그룹, 또는 멀티-프로세서 시스템으로서) 제공한다.
[0065] 메모리(720)는 컴퓨팅 디바이스(700) 내에 정보를 비-일시적으로 저장한다. 메모리(720)는, 컴퓨터-판독가능 매체, 휘발성 메모리 유닛(들), 또는 비-휘발성 메모리 유닛(들)일 수 있다. 비-일시적인 메모리(720)는 컴퓨팅 디바이스(700)에 의한 사용을 위해 일시적으로 또는 영구적으로 프로그램들(예컨대, 명령들의 시퀀스들) 또는 데이터(예컨대, 프로그램 상태 정보)를 저장하는 데 사용되는 물리 디바이스들일 수 있다. 비-휘발성 메모리의 예들은, 플래시 메모리 및 판독-전용 메모리(ROM)/프로그래밍가능 판독-전용 메모리(PROM)/소거가능한 프로그래밍가능 판독-전용 메모리(EPROM)/전자적으로 소거가능한 프로그래밍가능 판독-전용 메모리(EEPROM)(예컨대, 통상적으로는 부트 프로그램들과 같은 펌웨어에 대해 사용됨) 뿐만 아니라 디스크들 또는 테이프들을 포함하지만 이에 제한되지는 않는다. 휘발성 메모리의 예들은 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 위상 변화 메모리(PCM)를 포함하지만 이에 제한되지는 않는다.
[0066] 저장 디바이스(730)는, 컴퓨팅 디바이스(700)에 대한 대용량 저장을 제공할 수 있다. 몇몇 구현들에서, 저장 디바이스(730)는 컴퓨터-판독가능 매체이다. 다양한 상이한 구현들에서, 저장 디바이스(630)는, 저장 영역 네트워크 또는 다른 구성들 내의 디바이스들을 포함하여, 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 또는 테이프 디바이스, 플래시 메모리 또는 다른 유사한 고체 상태 메모리 디바이스, 또는 디바이스들의 어레이일 수 있다. 부가적인 구현들에서, 컴퓨터 프로그램 물건은 정보 캐리어에서 유형적으로 구현된다. 컴퓨터 프로그램 물건은, 실행될 경우 위에서 설명된 방법들과 같은 하나 또는 그 초과의 방법들을 수행하는 명령들을 포함한다. 정보 캐리어는, 메모리(720), 저장 디바이스(730), 또는 프로세서(710) 상의 메모리와 같은 컴퓨터- 또는 머신-판독가능 매체이다.
[0067] 고속 제어기(740)는, 컴퓨팅 디바이스(700)에 대한 대역폭-집약적인 동작들을 관리하는 반면, 저속 제어기(760)는 더 낮은 대역폭-집약적인 동작들을 관리한다. 직무들의 그러한 할당은 단지 예시적일 뿐이다. 몇몇 구현들에서, 고속 제어기(740)는, 메모리(720), (예컨대, 그래픽 프로세서 또는 가속기를 통해) 디스플레이(780), 그리고 다양한 확장 카드들(미도시)을 수용할 수 있는 고속 확장 포트들(750)에 커플링된다. 몇몇 구현들에서, 저속 제어기(760)는 저장 디바이스(730) 및 저속 확장 포트(670)에 커플링된다. 다양한 통신 포트들(예컨대, USB, 블루투스, 이더넷, 무선 이더넷)을 포함할 수 있는 저속 확장 포트(770)는, 예컨대, 네트워크 어댑터를 통해 키보드, 포인팅 디바이스, 스캐너, 또는 (스위치 또는 라우터와 같은) 네트워킹 디바이스와 같은 하나 또는 그 초과의 입력/출력 디바이스들에 커플링될 수 있다.
[0068] 컴퓨팅 디바이스(700)는 도면에 도시된 바와 같이, 다수의 상이한 형태들로 구현될 수 있다. 예컨대, 그것은 표준 서버(700a) 또는 그러한 서버들(700a)의 그룹에서 다수의 횟수들로서, 랩톱 컴퓨터(700b)로서, 또는 래크(rack) 서버 시스템(700c)으로서 구현될 수 있다.
[0069] 몇몇 구현들에서, 컴퓨팅 리소스(들)(112)를 구현하는 컴퓨팅 디바이스(700)는 (예컨대, 메모리(720) 내의) 데이터저장소(150)와 통신한다. (데이터 프로세싱 하드웨어(710) 상에서 실행되는) 컴퓨팅 리소스(112)는 분산형 시스템(200)에 대한 변경 로그 프로세스(500)의 초기 인스턴스(310)를 실행하며, 변경 로그 프로세스(500)의 각각의 인스턴스(310)는, 분산형 시스템(200) 상에서 실행되는 트랜잭션들(204)(예컨대, 기입 트랜잭션들)의 트랜잭션 이력(312)을, 컴퓨팅 리소스(112)와 통신하는 메모리 하드웨어(720) 상에 저장하도록 구성된다. 컴퓨팅 리소스(112)는 트랜잭션 요청들(138)을 수신하고, 수신된 트랜잭션 요청들(138)에 기반하여 변경 로그 로드를 결정할 수 있다. 몇몇 예들에서, 컴퓨팅 리소스(112)는, 변경 로그 로드가 임계 로드를 충족했던 경우 변경 로그 프로세스(500)의 적어도 하나의 후속 인스턴스(310)를 실행하고, 변경 로그 프로세스(500)의 다수의 인스턴스들이 실행되고 있는지 여부를 결정한다. 변경 로그 프로세스(500)의 다수의 인스턴스들이 실행되고 있는 경우, 컴퓨팅 리소스(112)는, 변경 로그 프로세스(500)의 적어도 하나의 후속 인스턴스의 실행을 중단시키고, 변경 로그 프로세스(500)의 초기 인스턴스(310)의 트랜잭션 이력과 변경 로그 프로세스(500)의 적어도 하나의 후속 인스턴스(310)의 트랜잭션 이력을 병합할 수 있다. 몇몇 예들에서, 컴퓨팅 리소스(112)는 병합된 트랜잭션 이력들을 반영하는 일관된 스냅샷을 변형된 데이터의 모든 구독 시청자들(322)에게 제공한다.
[0070] 소프트웨어 애플리케이션(즉, 소프트웨어 리소스(110s))은 컴퓨팅 디바이스로 하여금 태스크를 수행하게 하는 컴퓨터 소프트웨어를 지칭할 수 있다. 몇몇 예들에서, 소프트웨어 애플리케이션은 "애플리케이션", "앱" 또는 "프로그램"으로 지칭될 수 있다. 예시적인 애플리케이션들은 시스템 진단 애플리케이션들, 시스템 관리 애플리케이션들, 시스템 유지보수 애플리케이션들, 워드 프로세싱 애플리케이션들, 스프레드시트 애플리케이션들, 메시징 애플리케이션들, 미디어 스트리밍 애플리케이션들, 소셜 네트워킹 애플리케이션들, 및 게이밍 애플리케이션들을 포함하지만 이에 제한되지는 않는다.
[0071] 비-일시적인 메모리(110hm)는 컴퓨팅 디바이스(110hc)에 의한 사용을 위해 일시적으로 또는 영구적으로 프로그램들(예컨대, 명령들의 시퀀스들) 또는 데이터(예컨대, 프로그램 상태 정보)를 저장하는 데 사용되는 물리 디바이스들일 수 있다. 비-일시적인 메모리(110hm)는 휘발성 및/또는 비-휘발성 어드레싱가능 반도체 메모리일 수 있다. 비-휘발성 메모리의 예들은, 플래시 메모리 및 판독-전용 메모리(ROM)/프로그래밍가능 판독-전용 메모리(PROM)/소거가능한 프로그래밍가능 판독-전용 메모리(EPROM)/전자적으로 소거가능한 프로그래밍가능 판독-전용 메모리(EEPROM)(예컨대, 통상적으로는 부트 프로그램들과 같은 펌웨어에 대해 사용됨)를 포함하지만 이에 제한되지는 않는다. 휘발성 메모리의 예들은 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 위상 변화 메모리(PCM) 뿐만 아니라 디스크들 또는 테이프들을 포함하지만 이에 제한되지는 않는다.
[0072] 본 명세서에 설명된 시스템들 및 기법들의 다양한 구현들은, 디지털 전자 및/또는 광학 회로, 집적 회로, 특수하게 설계된 ASIC(주문형 집적 회로)들, 컴퓨터 하드웨어, 펌웨어, 소프트웨어, 및/또는 이들의 조합들로 실현될 수 있다. 이들 다양한 구현들은, 저장 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스로부터 데이터 및 명령들을 수신하고 그들로 데이터 및 명령들을 송신하도록 커플링된 특수 목적 또는 범용 목적일 수 있는 적어도 하나의 프로그래밍가능 프로세서를 포함하는 프로그래밍가능 시스템 상에서 실행가능하고 그리고/또는 해석가능한 하나 또는 그 초과의 컴퓨터 프로그램들에서의 구현을 포함할 수 있다.
[0073] 이들 컴퓨터 프로그램들(프로그램들, 소프트웨어, 소프트웨어 애플리케이션들 또는 코드로 또한 알려짐)은, 프로그래밍가능 프로세서에 대한 머신 명령들을 포함하며, 고레벨의 절차적인 및/또는 오브젝트-지향적인 프로그래밍 언어 및/또는 어셈블리/머신 언어로 구현될 수 있다. 본 명세서에서 사용된 바와 같이, 용어들 "머신-판독가능 매체" 및 "컴퓨터-판독가능 매체"는, 머신-판독가능 신호로서 머신 명령들을 수신하는 머신-판독가능 매체를 포함하여, 임의의 컴퓨터 프로그램 제품, 비-일시적인 컴퓨터-판독가능 매체, 머신 명령들 및/또는 데이터를 프로그래밍가능 프로세서에 제공하기 위해 사용되는 장치 및/또는 디바이스(예컨대, 자기 디스크들, 광학 디스크들, 메모리, 프로그래밍가능 로직 디바이스(PLD)들)를 지칭한다. 용어 "머신-판독가능 신호"는, 머신 명령들 및/또는 데이터를 프로그래밍가능 프로세서에 제공하기 위해 사용되는 임의의 신호를 지칭한다.
[0074] 본 명세서에서 설명된 청구대상 및 기능 동작들의 구현들은, 디지털 전자 회로에서, 또는 본 명세서에 개시된 구조들 및 그들의 구조적 등가물들을 포함하는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어에서, 또는 그들 중 하나 또는 그 초과의 조합들에서 구현될 수 있다. 또한, 본 명세서에 설명된 청구대상은, 데이터 프로세싱 장치에 의한 실행을 위해, 또는 데이터 프로세싱 장치의 동작을 제어하기 위해 컴퓨터 저장 매체 상에서 인코딩된 하나 또는 그 초과의 컴퓨터 프로그램 제품들, 즉 컴퓨터 프로그램 명령들의 하나 또는 그 초과의 모듈들로서 구현될 수 있다. 컴퓨터 판독가능 매체는 머신-판독가능 저장 디바이스, 머신-판독가능 저장 기판, 메모리 디바이스, 머신-판독가능 전파 신호를 초래하는 재료의 합성, 또는 그들 중 하나 또는 그 초과의 조합일 수 있다. 용어들 "데이터 프로세싱 장치", "컴퓨팅 디바이스" 및 "컴퓨팅 프로세서"는 프로그래밍가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 예로서 포함하는, 데이터를 프로세싱하기 위한 모든 장치, 디바이스들, 및 머신들을 포함한다. 장치는 하드웨어에 부가하여, 해당 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예컨대 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 시스템, 또는 이들 중 하나 또는 그 초과의 조합을 구성하는 코드를 포함할 수 있다. 전파 신호는 적합한 수신기 장치로의 송신을 위해 정보를 인코딩하도록 생성되는 인위적으로 생성된 신호, 예컨대 머신-생성된 전기, 광학, 또는 전자기 신호이다.
[0075] 컴퓨터 프로그램(또한, 애플리케이션, 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드로 알려짐)은, 컴파일된 또는 해석된 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 기입될 수 있으며, 그것은 독립형 프로그램 또는 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에서의 사용에 적합한 다른 유닛으로서의 형태를 포함하여 임의의 형태로 배치될 수 있다. 컴퓨터 프로그램은 반드시 파일 시스템의 파일에 대응할 필요는 없다. 프로그램은, 다른 프로그램들 또는 데이터를 보유하는 파일의 일부분(예컨대, 마크업 언어 문서에 저장된 하나 또는 그 초과의 스크립트들), 해당 프로그램에 전용된 단일 파일, 또는 다수의 조정된 파일들(예컨대, 하나 또는 그 초과의 모듈들, 서브 프로그램들, 또는 코드의 일부분들을 저장한 파일들)에 저장될 수 있다. 컴퓨터 프로그램은, 하나의 컴퓨터 상에서 또는 하나의 사이트에 로케이팅되거나 또는 다수의 사이트들에 걸쳐 분산되어 통신 네트워크에 의해 상호연결되는 다수의 컴퓨터들 상에서 실행되도록 배치될 수 있다.
[0076] 본 명세서에 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하고 출력을 생성함으로써 기능들을 수행하도록 하나 또는 그 초과의 컴퓨터 프로그램들을 실행하는 하나 또는 그 초과의 프로그래밍가능 프로세서들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한, 특수 목적 로직 회로, 예컨대, FPGA(필드 프로그래밍가능 게이트 어레이) 또는 ASIC(주문형 집적 회로)에 의해 수행될 수 있거나, 장치는 또한 그들로서 구현될 수 있다.
[0077] 컴퓨터 프로그램의 실행에 적합한 프로세서들은, 범용 마이크로프로세서 및 특수 목적 마이크로프로세서 둘 모두, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 또는 그 초과의 프로세서들을 예로서 포함한다. 일반적으로, 프로세서는 판독-전용 메모리 또는 랜덤 액세스 메모리 또는 그 둘 모두로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 본질적인 엘리먼트들은 명령들을 수행하기 위한 프로세서, 및 명령들 및 데이터를 저장하기 위한 하나 또는 그 초과의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 또는 그 초과의 대용량 저장 디바이스들, 예컨대 자기, 자기 광학 디스크들, 또는 광학 디스크들을 포함하거나, 또는 그들로부터 데이터를 수신하거나 그들로 데이터를 전달하도록, 또는 그 둘 모두를 위해 동작가능하게 커플링될 것이다. 그러나, 컴퓨터는 그러한 디바이스들을 가질 필요는 없다. 또한, 컴퓨터는 다른 디바이스, 예컨대 단지 몇몇 예를 들자면 모바일 텔레폰, 개인 휴대 정보 단말(PDA), 모바일 오디오 플레이어, 글로벌 포지셔닝 시스템(GPS) 수신기에 임베딩될 수 있다. 컴퓨터 프로그램 명령들 및 데이터를 저장하는 데 적합한 컴퓨터 판독가능 매체들은 반도체 메모리 디바이스들, 예컨대 EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대 내부 하드 디스크들 또는 착탈형 디스크들; 자기 광학 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 예로서 포함하는 비-휘발성 메모리, 매체들 및 메모리 디바이스들의 모든 형태들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나 그에 통합될 수 있다.
[0078] 사용자와의 상호작용을 제공하기 위해, 본 개시내용의 하나 또는 그 초과의 양상들은 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예컨대, CRT(음극선 관), LCD(액정 디스플레이) 모니터, 또는 터치 스크린 및 선택적으로는, 사용자가 입력을 컴퓨터에 제공할 수 있게 하는 키보드 및 포인팅 디바이스, 예컨대, 마우스 또는 트랙볼을 갖는 컴퓨터 상에서 구현될 수 있다. 다른 종류들의 디바이스들은 또한, 사용자와의 상호작용을 제공하기 위해 사용될 수 있으며, 예컨대, 사용자에게 제공된 피드백은 임의의 형태의 감지 피드백, 예컨대, 시각적인 피드백, 가청적인 피드백, 또는 촉각적인 피드백일 수 있고; 사용자로부터의 입력은 음향, 스피치, 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다. 부가적으로, 컴퓨터는 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 그 디바이스로부터 문서들을 수신함으로써; 예컨대, 웹 브라우저로부터 수신된 요청들에 대한 응답으로 사용자의 클라이언트 디바이스 상의 웹 브라우저에 웹 페이지들을 전송함으로써 사용자와 상호작용할 수 있다.
[0079] 본 개시내용의 하나 또는 그 초과의 양상들은, 후단 컴포넌트를, 예컨대, 데이터 서버로서 포함하거나, 또는 미들웨어 컴포넌트, 예컨대, 애플리케이션 서버를 포함하거나, 또는 전단 컴포넌트, 예컨대, 사용자가 본 명세서에 설명된 청구대상의 구현과 상호작용할 수 있게 하는 그래픽 사용자 인터페이스 또는 웹 브라우저를 갖는 클라이언트 컴퓨터를 포함하거나, 또는 하나 또는 그 초과의 그러한 후단, 미들웨어, 또는 전단 컴포넌트들의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은, 임의의 형태 또는 매체의 디지털 데이터 통신, 예컨대 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 로컬 영역 네트워크("LAN") 및 광역 네트워크("WAN"), 인터-네트워크(예컨대, 인터넷), 및 피어-투-피어 네트워크들(예컨대, 애드 혹 피어-투-피어 네트워크들)을 포함한다.
[0080] 컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 원격이며, 통상적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터들 상에서 구동되고 서로에 대해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의해 발생한다. 몇몇 구현들에서, 서버는 (예컨대, 클라이언트 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고 그 사용자로부터 사용자 입력을 수신하려는 목적들을 위해) 데이터(예컨대, HTML 페이지)를 클라이언트 디바이스에 송신한다. 클라이언트 디바이스에서 생성된 데이터(예컨대, 사용자 상호작용의 결과)는 클라이언트 디바이스로부터 서버에서 수신될 수 있다.
[0081] 본 명세서가 많은 특정한 것들을 포함하지만, 이들은 본 개시내용 또는 청구될 수 있는 것의 범위에 대한 제한들로서 해석되는 것이 아니라 오히려, 본 개시내용의 특정 구현들에 특정한 특성들의 설명들로서 해석되어야 한다. 별도의 구현들의 맥락에서 본 명세서에 설명된 특정한 특성들은 또한, 단일 구현의 조합으로 구현될 수 있다. 대조적으로, 단일 구현의 맥락에서 설명된 다양한 특성들은 또한, 다수의 구현들에서 별개로 또는 임의의 적절한 서브-조합으로 구현될 수 있다. 또한, 특성들이 특정한 조합들로 동작하는 것으로 위에서 설명되고 심지어 초기에는 그와 같이 청구될 수 있지만, 청구된 조합으로부터의 하나 또는 그 초과의 특성들은 몇몇 경우들에서, 그 조합으로부터 삭제될 수 있으며, 청구된 조합은 서브-조합 또는 서브-조합의 변경으로 안내될 수 있다.
[0082] 유사하게, 동작들이 특정한 순서로 도면들에 도시되지만, 이것은, 바람직한 결과들을 달성하기 위해, 그러한 동작들이 도시된 특정한 순서 또는 순차적인 순서로 수행되거나, 모든 도시된 동작들이 수행된다는 것을 요구하는 것으로서 이해되지는 않아야 한다. 특정한 환경들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 또한, 위에서 설명된 실시예들에서의 다양한 시스템 컴포넌트들의 분리는 모든 실시예들에서 그러한 분리를 요구하는 것으로서 이해되지는 않아야 하며, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로, 단일 소프트웨어 제품에 함께 통합되거나 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
[0083] 다수의 구현들이 설명되었다. 그럼에도, 본 개시내용의 사상 및 범위를 벗어나지 않으면서 다양한 수정들이 행해질 수 있다는 것이 이해될 것이다. 따라서, 다른 구현들은 다음의 청구항들의 범위 내에 존재한다. 예컨대, 청구항들에서 인용된 동작들은, 상이한 순서로 수행될 수 있으며, 여전히 바람직한 결과들을 달성할 수 있다.

Claims (20)

  1. 데이터 프로세싱 하드웨어에서, 분산형 저장 시스템 내의 데이터에 대한 데이터 이벤트들을 모니터링하기 위한 요청을 사용자로부터 수신하는 단계;
    상기 데이터 프로세싱 하드웨어에 의해, 상기 요청이 상기 분산형 저장 시스템에서 발생하는 각각의 데이터 이벤트에 대한 통지를 수신하는 것을 요구한다는 것을 식별하는 단계;
    상기 분산형 저장 시스템 상의 변경 로그 로드가 저하(degradation) 임계를 충족하는 시간에 기반하여, 상기 데이터 프로세싱 하드웨어에 의해, 기존의 이벤트 로그 파일에 상기 각각의 데이터 이벤트의 기록을 저장하는 대신에, 상기 각각의 데이터 이벤트의 기록을 저장하기 위한 복수의 새로운 이벤트 로그 파일들을 생성하는 단계;
    상기 데이터 프로세싱 하드웨어에 의해, 상기 복수의 새로운 이벤트 로그 파일들 사이에 상기 각각의 데이터 이벤트를 분산시키고, 상기 각각의 데이터 이벤트를 상기 복수의 새로운 이벤트 로그 파일들에 기록하는 단계;
    상기 데이터 프로세싱 하드웨어에 의해, 통합된 이벤트 이력을 형성하기 위해 상기 복수의 새로운 이벤트 로그 파일들 중 적어도 하나의 새로운 이벤트 로그 파일 및 상기 기존의 이벤트 로그 파일을 통합하는 단계; 및
    상기 데이터 프로세싱 하드웨어에 의해, 상기 통합된 이벤트 이력에 기반하여 상기 사용자에게 통지를 통신하는 단계를 포함하고,
    상기 저하 임계는 상기 변경 로그 로드가 캐싱 성능을 저하시키는 상태를 나타내는,
    방법.
  2. 제1항에 있어서,
    상기 데이터 이벤트는 손실된(missed) 이벤트를 포함하는,
    방법.
  3. 제2항에 있어서,
    상기 데이터 프로세싱 하드웨어에 의해, 사용자 데이터에 대한 스냅샷(snapshot)을 생성하는 단계 ― 상기 스냅샷은 상기 사용자 데이터의 상태를 캡쳐함 ―; 및
    상기 데이터 프로세싱 하드웨어에 의해, 상기 스냅샷에 기반하여 상기 손실된 이벤트의 결과를 결정하는 단계를 더 포함하는,
    방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 변경 로그 로드는 상기 저하 임계를 초과하는,
    방법.
  6. 제1항에 있어서,
    상기 통지를 통신하는 단계는 상기 분산형 저장 시스템의 복수의 사용자들로 통지를 통신하는 단계를 포함하고,
    상기 복수의 사용자들은 상기 사용자를 포함하며, 그리고
    상기 복수의 사용자들은 상기 분산형 저장 시스템에 저장된 상기 데이터에 대한 변경들에 관한 각각의 통지를 수신하는 것을 요청하는 구독 시청자들에 대응하는,
    방법.
  7. 제1항에 있어서,
    상기 통지는 상기 통합된 이벤트 이력을 포함하는,
    방법.
  8. 제1항에 있어서,
    각각의 이벤트 로그 파일은 비-지속가능한(non-durable) 파일 포맷을 포함하는,
    방법.
  9. 제1항에 있어서,
    상기 데이터 이벤트는 상기 데이터에 대한 기입 트랜잭션을 포함하는,
    방법.
  10. 제1항에 있어서,
    상기 통지를 통신하는 단계는 상기 각각의 데이터 이벤트와 거의 실시간(near real-time)으로 발생하는,
    방법.
  11. 분산형 시스템의 데이터 프로세싱 하드웨어; 및
    상기 데이터 프로세싱 하드웨어와 통신하는 메모리 하드웨어를 포함하며,
    상기 메모리 하드웨어는, 상기 데이터 프로세싱 하드웨어 상에서 실행될 때, 상기 데이터 프로세싱 하드웨어로 하여금 동작들을 수행하게 하는 명령들을 저장하고, 상기 동작들은,
    분산형 저장 시스템 내의 데이터에 대한 데이터 이벤트들을 모니터링하기 위한 요청을 사용자로부터 수신하는 동작;
    상기 요청이 상기 분산형 저장 시스템에서 일어나는 각각의 데이터 이벤트에 대한 통지를 수신하는 것을 요구한다는 것을 식별하는 동작;
    상기 분산형 저장 시스템 상의 변경 로그 로드가 저하 임계를 충족하는 시간에 기반하여, 기존의 이벤트 로그 파일에 상기 각각의 데이터 이벤트의 기록을 저장하는 대신에, 상기 각각의 데이터 이벤트의 기록을 저장하기 위한 복수의 새로운 이벤트 로그 파일들을 생성하는 동작;
    상기 복수의 새로운 이벤트 로그 파일들 사이에 상기 각각의 데이터 이벤트를 분산시키고, 상기 각각의 데이터 이벤트를 상기 복수의 새로운 이벤트 로그 파일들에 기록하는 동작;
    통합된 이벤트 이력을 형성하기 위해 상기 복수의 새로운 이벤트 로그 파일들 중 적어도 하나의 새로운 이벤트 로그 파일 및 상기 기존의 이벤트 로그 파일을 통합하는 동작; 및
    상기 통합된 이벤트 이력에 기반하여 상기 사용자에게 통지를 통신하는 동작을 포함하고,
    상기 저하 임계는 상기 변경 로그 로드가 캐싱 성능을 저하시키는 상태를 나타내는,
    시스템.
  12. 제11항에 있어서,
    상기 데이터 이벤트는 손실된 이벤트를 포함하는,
    시스템.
  13. 제12항에 있어서, 상기 동작들은,
    상기 데이터 프로세싱 하드웨어에 의해, 사용자 데이터에 대한 스냅샷을 생성하는 동작 ― 상기 스냅샷은 상기 사용자 데이터의 상태를 캡쳐함 ―; 및
    상기 데이터 프로세싱 하드웨어에 의해, 상기 스냅샷에 기반하여 상기 손실된 이벤트의 결과를 결정하는 동작을 더 포함하는,
    시스템.
  14. 삭제
  15. 제11항에 있어서,
    상기 변경 로그 로드는 상기 저하 임계를 초과하는,
    시스템.
  16. 제11항에 있어서,
    상기 통지를 통신하는 동작은 상기 분산형 저장 시스템의 복수의 사용자들로 통지를 통신하는 동작을 포함하고,
    상기 복수의 사용자들은 상기 사용자를 포함하며, 그리고
    상기 복수의 사용자들은 상기 분산형 저장 시스템에 저장된 상기 데이터에 대한 변경들에 관한 각각의 통지를 수신하는 것을 요청하는 구독 시청자들에 대응하는,
    시스템.
  17. 제11항에 있어서,
    상기 통지는 상기 통합된 이벤트 이력을 포함하는,
    시스템.
  18. 제11항에 있어서,
    각각의 이벤트 로그 파일은 비-지속가능한 파일 포맷을 포함하는,
    시스템.
  19. 제11항에 있어서,
    상기 데이터 이벤트는 상기 데이터에 대한 기입 트랜잭션을 포함하는,
    시스템.
  20. 제11항에 있어서,
    상기 통지를 통신하는 동작은 상기 각각의 데이터 이벤트와 거의 실시간으로 발생하는,
    시스템.
KR1020207010641A 2016-05-25 2017-04-27 실시간의 트랜잭션적으로 일관된 변화 통지들 KR102285920B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US15/163,832 2016-05-25
US15/163,832 US10509778B2 (en) 2016-05-25 2016-05-25 Real-time transactionally consistent change notifications
KR1020187023518A KR102102269B1 (ko) 2016-05-25 2017-04-27 실시간의 트랜잭션적으로 일관된 변화 통지들
PCT/US2017/029888 WO2017204988A1 (en) 2016-05-25 2017-04-27 Real-time transactionally consistent change notifications

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020187023518A Division KR102102269B1 (ko) 2016-05-25 2017-04-27 실시간의 트랜잭션적으로 일관된 변화 통지들

Publications (2)

Publication Number Publication Date
KR20200040938A KR20200040938A (ko) 2020-04-20
KR102285920B1 true KR102285920B1 (ko) 2021-08-03

Family

ID=58699284

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020207010641A KR102285920B1 (ko) 2016-05-25 2017-04-27 실시간의 트랜잭션적으로 일관된 변화 통지들
KR1020187023518A KR102102269B1 (ko) 2016-05-25 2017-04-27 실시간의 트랜잭션적으로 일관된 변화 통지들

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020187023518A KR102102269B1 (ko) 2016-05-25 2017-04-27 실시간의 트랜잭션적으로 일관된 변화 통지들

Country Status (7)

Country Link
US (3) US10509778B2 (ko)
EP (2) EP3465433A1 (ko)
JP (1) JP6581315B2 (ko)
KR (2) KR102285920B1 (ko)
CN (2) CN108701051B (ko)
AU (1) AU2017269114B2 (ko)
WO (1) WO2017204988A1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10951706B2 (en) * 2016-12-09 2021-03-16 Google Llc High-throughput algorithm for multiversion concurrency control with globally synchronized time
US10686883B2 (en) * 2017-07-07 2020-06-16 Hewlett Packard Enterprise Development Lp Bluetooth low energy devices
CN107609129B (zh) * 2017-09-18 2021-03-23 北京奇虎科技有限公司 日志实时处理系统
US11089133B1 (en) 2017-11-22 2021-08-10 Amazon Technologies, Inc. Synchronizing data with delayed subscriptions
US11126610B1 (en) 2017-11-22 2021-09-21 Amazon Technologies, Inc. Conflict resolution in a data proxy
US10891282B1 (en) * 2017-11-22 2021-01-12 Amazon Technologies, Inc. Mutations with immediate feedback
US11159634B1 (en) * 2017-11-22 2021-10-26 Amazon Technologies, Inc. Subscription fan out
CN109640033B (zh) * 2018-11-05 2021-03-23 视联动力信息技术股份有限公司 信息同步方法和装置
CN110866036B (zh) * 2019-11-15 2023-02-10 腾讯科技(深圳)有限公司 数据处理方法、系统、装置、终端及可读存储介质
CN111190912B (zh) * 2019-12-27 2023-06-20 山大地纬软件股份有限公司 一种基于行变更的面向大事务的分片执行方法和装置
CN113342525A (zh) * 2020-07-24 2021-09-03 北京一流科技有限公司 分布式数据处理系统及其方法
CN112559475B (zh) * 2020-12-11 2023-01-10 上海哔哩哔哩科技有限公司 数据实时捕获和传输方法及系统
CN113268471B (zh) * 2021-06-24 2023-09-22 京东科技控股股份有限公司 处理分布式事务的方法、代理连接池、系统、设备及介质
US20230385264A1 (en) * 2022-05-31 2023-11-30 Arista Networks, Inc. Managing subscriptions to data queries that react and update to change notifications
CN115658805B (zh) * 2022-09-15 2023-10-17 星环信息科技(上海)股份有限公司 一种事务一致性管理引擎及方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090100113A1 (en) 2007-10-15 2009-04-16 International Business Machines Corporation Transaction log management
US20110251997A1 (en) 2010-04-12 2011-10-13 Microsoft Corporation Logical replication in clustered database system with adaptive cloning
US20120109895A1 (en) 2010-10-28 2012-05-03 Microsoft Corporation Versatile in-memory database recovery
US8676851B1 (en) * 2012-08-30 2014-03-18 Google Inc. Executing transactions in distributed storage systems
US9164702B1 (en) * 2012-09-07 2015-10-20 Google Inc. Single-sided distributed cache system
WO2015200686A1 (en) * 2014-06-26 2015-12-30 Amazon Technologies, Inc. Multi-database log with multi-item transaction support

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6925476B1 (en) * 2000-08-17 2005-08-02 Fusionone, Inc. Updating application data including adding first change log to aggreagate change log comprising summary of changes
US8479258B2 (en) * 2011-01-06 2013-07-02 Martin Herman Weik, III Garage management system
US20040220945A1 (en) * 2003-05-01 2004-11-04 International Business Machines Corporation Method, system and program product for selectively centralizing log entries in a computing environment
US7457914B2 (en) * 2005-03-25 2008-11-25 Emc Corporation Asynchronous event notification
US7822759B2 (en) * 2005-12-13 2010-10-26 Microsoft Corporation Query-driven sharing and syndication
US7437359B2 (en) * 2006-04-05 2008-10-14 Arcsight, Inc. Merging multiple log entries in accordance with merge properties and mapping properties
US8086650B1 (en) * 2007-06-15 2011-12-27 Ipswitch, Inc. Method for transforming and consolidating fields in log records from logs generated on different operating systems
JP2009075655A (ja) * 2007-09-18 2009-04-09 Hitachi Ltd ファイル管理システム、ファイル管理方法、およびファイル管理プログラム
US8336053B2 (en) * 2007-10-15 2012-12-18 International Business Machines Corporation Transaction management
US8650155B2 (en) * 2008-02-26 2014-02-11 Oracle International Corporation Apparatus and method for log based replication of distributed transactions using globally acknowledged commits
US20090320047A1 (en) * 2008-06-23 2009-12-24 Ingboo Inc. Event Bundling
US8149090B2 (en) * 2008-08-18 2012-04-03 Sensormatic Electronics, LLC Mobile wireless network for asset tracking and supply chain monitoring
KR101065410B1 (ko) * 2009-07-28 2011-09-16 삼성모바일디스플레이주식회사 유기 발광 표시 장치
US9021304B2 (en) * 2010-03-11 2015-04-28 Nec Corporation Fault analysis rule extraction device, fault analysis rule extraction method and storage medium
US8965860B2 (en) * 2010-04-01 2015-02-24 Salesforce.Com, Inc. Methods and systems for bulk uploading of data in an on-demand service environment
JP5447668B2 (ja) * 2010-06-30 2014-03-19 富士通株式会社 証跡ログ解析システム、証跡ログ解析プログラム、および証跡ログ解析方法
US20120005152A1 (en) * 2010-07-01 2012-01-05 Peter Westen Merged Event Logs
US8713581B2 (en) * 2011-10-27 2014-04-29 International Business Machines Corporation Selected alert delivery in a distributed processing system
US8924375B1 (en) * 2012-05-31 2014-12-30 Symantec Corporation Item attention tracking system and method
JP5747877B2 (ja) * 2012-07-20 2015-07-15 コニカミノルタ株式会社 画像処理連携システム、画像処理連携方法、携帯情報装置、画像処理装置及び連携プログラム
US8924771B2 (en) * 2012-12-06 2014-12-30 Lsi Corporation Master-slave expander logging
US20140189526A1 (en) * 2013-01-02 2014-07-03 International Business Machines Corporation Changing log file content generation
CN106063191B (zh) * 2013-11-12 2019-09-17 皮沃塔尔软件公司 流事件数据收集
US20150347212A1 (en) * 2014-05-28 2015-12-03 International Business Machines Corporation Error classification in a computing system
KR20190044145A (ko) * 2014-06-24 2019-04-29 구글 엘엘씨 원격 데이터베이스에 대한 변경사항들의 처리
US9661010B2 (en) * 2014-11-21 2017-05-23 Honeywell International Inc. Security log mining devices, methods, and systems
US9736243B2 (en) * 2014-12-12 2017-08-15 Microsoft Technology Licensing, Llc Multiple transaction logs in a distributed storage system
US20170034083A1 (en) * 2015-07-27 2017-02-02 Breadcrumbs Labs, LLC Geolocation- and time-based alerts that identify client devices in geographic areas
CN105426410B (zh) * 2015-11-02 2018-11-09 东软集团股份有限公司 数据采集系统和用于数据采集系统的分析方法
CN105574217B (zh) * 2016-03-16 2019-04-30 中国联合网络通信集团有限公司 分布式关系型数据库的数据同步方法和装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090100113A1 (en) 2007-10-15 2009-04-16 International Business Machines Corporation Transaction log management
US20110251997A1 (en) 2010-04-12 2011-10-13 Microsoft Corporation Logical replication in clustered database system with adaptive cloning
US20120109895A1 (en) 2010-10-28 2012-05-03 Microsoft Corporation Versatile in-memory database recovery
US8676851B1 (en) * 2012-08-30 2014-03-18 Google Inc. Executing transactions in distributed storage systems
US9164702B1 (en) * 2012-09-07 2015-10-20 Google Inc. Single-sided distributed cache system
WO2015200686A1 (en) * 2014-06-26 2015-12-30 Amazon Technologies, Inc. Multi-database log with multi-item transaction support

Also Published As

Publication number Publication date
CN108701051A (zh) 2018-10-23
JP6581315B2 (ja) 2019-09-25
EP3465433A1 (en) 2019-04-10
EP4131000A1 (en) 2023-02-08
CN108701051B (zh) 2022-03-04
AU2017269114B2 (en) 2019-09-26
US11354296B2 (en) 2022-06-07
KR20180104006A (ko) 2018-09-19
KR102102269B1 (ko) 2020-04-20
KR20200040938A (ko) 2020-04-20
US20200081880A1 (en) 2020-03-12
WO2017204988A1 (en) 2017-11-30
US10509778B2 (en) 2019-12-17
CN114691306A (zh) 2022-07-01
US20170344596A1 (en) 2017-11-30
JP2019511770A (ja) 2019-04-25
AU2017269114A1 (en) 2018-08-30
US20220276992A1 (en) 2022-09-01

Similar Documents

Publication Publication Date Title
KR102285920B1 (ko) 실시간의 트랜잭션적으로 일관된 변화 통지들
EP3198419B1 (en) Managing change events for devices in an enterprise system
US20180336346A1 (en) Isolated virtual environments for untrusted applications
US10027728B2 (en) Systems and methods of streaming data
CN110971655B (zh) 离线客户端重放和同步
US8745635B2 (en) Managing business process messaging
EP3365785A1 (en) Event batching, output sequencing, and log based state storage in continuous query processing
CA3109311C (en) Aggregated service status reporter
CN102523109A (zh) 资源状态更新方法、管理客户端及服务器
US10067862B2 (en) Tracking asynchronous entry points for an application
CN110837423A (zh) 一种自动导引运输车数据采集的方法和装置
US11412056B2 (en) Techniques for proxying network requests using service workers
CN117642724A (zh) 使用无服务器计算系统的流式分析
US11388250B1 (en) Reduction of data transmissions based on end-user content
US11005948B1 (en) Web content transfer utilizing messages of messaging protocol of cellular voice network

Legal Events

Date Code Title Description
A107 Divisional application of patent
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