KR20170010844A - 원격 데이터베이스에 대한 뮤테이션들의 프로세싱 - Google Patents

원격 데이터베이스에 대한 뮤테이션들의 프로세싱 Download PDF

Info

Publication number
KR20170010844A
KR20170010844A KR1020167036226A KR20167036226A KR20170010844A KR 20170010844 A KR20170010844 A KR 20170010844A KR 1020167036226 A KR1020167036226 A KR 1020167036226A KR 20167036226 A KR20167036226 A KR 20167036226A KR 20170010844 A KR20170010844 A KR 20170010844A
Authority
KR
South Korea
Prior art keywords
database
entity
version
mutations
client
Prior art date
Application number
KR1020167036226A
Other languages
English (en)
Other versions
KR102096249B1 (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 KR20170010844A publication Critical patent/KR20170010844A/ko
Application granted granted Critical
Publication of KR102096249B1 publication Critical patent/KR102096249B1/ko

Links

Images

Classifications

    • 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/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning
    • G06F17/30371
    • 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/2365Ensuring data consistency and integrity
    • 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/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • G06F16/2329Optimistic concurrency control using versioning
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2474Sequence data queries, e.g. querying versioned data
    • 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
    • G06F17/30356
    • G06F17/30368
    • G06F17/30548
    • G06F17/30575

Abstract

원격 데이터베이스에 대한 뮤테이션들을 프로세싱하기 위한 방법들, 시스템들, 및 장치가 설명된다. 일 양상에서, 방법은, 클라이언트 디바이스로부터 데이터베이스 뮤테이션들의 로그를 수신하는 단계 ―데이터베이스 뮤테이션들의 로그는 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은 데이터베이스에 포함된 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정함―; 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 단계; 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 단계; 및 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계를 포함한다.

Description

원격 데이터베이스에 대한 뮤테이션들의 프로세싱{PROCESSING MUTATIONS FOR A REMOTE DATABASE}
우선권 청구
[0001] 본 출원은 35 USC §119(e) 하에서 2014년 6월 24일자로 출원된 U.S. 특허 출원 일련 번호 제 62/016,457호에 대한 우선권을 주장하며, 그 전체 내용들은 이로써 인용에 의해 통합된다.
[0002] 본 명세서는 원격 데이터베이스에 대한 뮤테이션(mutation)들을 프로세싱하는 것에 관한 것이다.
[0003] 데이터베이스들은 그 안에 포함된 데이터를 프로세싱하는 것을 지원하는 방식으로 통상적으로 조직화되는 데이터의 모음들이다. 데이터베이스들은 종종 데이터베이스 서버들에 의해 관리되며, 이 데이터베이스 서버들은 데이터베이스 관리자 및/또는 로컬 영역 네트워크 또는 광역 네트워크를 통해 데이터베이스 서버에 연결된 디바이스들의 사용자들에 의한, 데이터베이스들에 포함된 데이터로의 액세스 및 이 데이터의 조작을 용이하게 한다.
[0004] 일반적으로, 본 명세서에 설명된 발명의 요지의 일 혁신적 양상은, 클라이언트 디바이스로부터 데이터베이스 뮤테이션들의 로그를 수신하는 액션 ―데이터베이스 뮤테이션들의 로그는 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은 데이터베이스에 포함된 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정함―; 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 액션; 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 액션; 및 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 액션을 포함하는 방법들로 구현될 수 있다. 이 양상의 다른 실시예들은 컴퓨터 저장 디바이스들 상에 인코딩된 방법들의 액션들을 수행하도록 구성된 대응하는 시스템들, 장치, 및 컴퓨터 프로그램들을 포함한다.
[0005] 이들 및 다른 실시예들 각각은 하기의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 것은, 충돌 해소 정책에 기반하여 원격 데이터베이스에 적용될, 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션들을 식별하는 것을 포함할 수 있다.
[0006] 2 이상의 데이터베이스 뮤테이션들을 콜랩싱하는 것은, 제1 데이터베이스 뮤테이션과, 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션에 후속하여 발생하는 각각의 다른 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것을 포함할 수 있다.
[0007] 제1 데이터베이스 뮤테이션과 각각의 다른 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것은, 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것을 포함할 수 있다.
[0008] 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들 각각은 충돌 해소 정책을 특정할 수 있다. 충돌 해소 정책은 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책일 수 있다.
[0009] 동작들은, 단일 데이터베이스 뮤테이션에 대해 그리고 로그에 포함된 각각의 다른 데이터베이스 뮤테이션에 대해, 뮤테이션에 의해 특정된 엔티티에 대한 베이스 버전 넘버를 식별하기 위해 데이터베이스의 원격 버전에 질의하는 동작; 엔티티에 대한 클라이언트 버전 넘버가 엔티티에 대한 베이스 버전 넘버에 매칭하는지 여부를 결정하는 동작; 클라이언트 버전 넘버가 베이스 버전 넘버에 매칭한다고 결정하는 것에 대한 응답으로, 데이터베이스의 원격 버전에 대해, 뮤테이션에 의해 특정된 동작을 수행하는 동작; 클라이언트 디바이스에 대한 응답 데이터를 생성하는 동작 ―응답 데이터는 엔티티에 대한 업데이팅된 베이스 버전 넘버를 포함함―; 및 클라이언트 버전 넘버가 베이스 버전 넘버에 매칭하지 않는다고 결정하는 것에 대한 응답으로, 충돌 해소 정책에 기반하여, 뮤테이션에 의해 특정된 동작이 수행될 것인지 여부를 결정하는 동작; 데이터베이스의 원격 버전에 대해, 뮤테이션에 의해 특정된 동작이 수행될 것임이 결정되는 경우에만, 뮤테이션에 의해 특정된 동작을 수행하는 동작; 및 클라이언트 디바이스에 대한 충돌 응답 데이터를 생성하는 동작을 더 포함할 수 있고, 충돌 응답 데이터는 뮤테이션에 의해 특정된 동작이 수행되었는지 여부를 특정한다.
[0010] 클라이언트 디바이스에 대한 충돌 응답 데이터는 뮤테이션에 의해 특정된 엔티티에 대해, 데이터베이스의 원격 버전에 저장된 엔티티에 대한 현재 버전을 포함할 수 있다.
[0011] 일반적으로, 본 명세서에 설명된 발명의 요지의 다른 양상은, 클라이언트 디바이스 상에 저장된 데이터베이스 뮤테이션들의 로그에 액세싱하는 액션 ―데이터베이스 뮤테이션들의 로그는 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은 데이터베이스에 포함된 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정함―; 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 액션; 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 액션; 및 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 액션을 포함하는 방법들로 구현될 수 있다. 이 양상의 다른 실시예들은 컴퓨터 저장 디바이스들 상에 인코딩된 방법들의 액션들을 수행하도록 구성된 대응하는 시스템들, 장치, 및 컴퓨터 프로그램들을 포함한다.
[0012] 이들 및 다른 실시예들 각각은 하기의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 것은, 2 이상의 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과가 데이터베이스의 원격 버전 상의 대응하는 데이터베이스 엔티티들에 대해 저장된 값들에 독립적임을 결정하는 것을 포함할 수 있다.
[0013] 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것은, 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것을 포함할 수 있다.
[0014] 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들 각각은 충돌 해소 정책을 특정할 수 있다. 충돌 해소 정책은 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책일 수 있다.
[0015] 동작들은, 데이터베이스 뮤테이션들의 콜랩스드 로그(collapsed log)를 데이터베이스 서버에 제공하는 동작을 더 포함할 수 있고, 데이터베이스 뮤테이션들의 콜랩스드 로그는 데이터베이스 뮤테이션들의 로그에 있는 콜랩싱되지 않은 각각의 뮤테이션 및 단일 데이터베이스 뮤테이션을 포함한다.
[0016] 일반적으로, 본 명세서에 설명된 발명의 요지의 다른 양상은, 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 요청을 클라이언트 디바이스로부터 수신하는 액션 ―요청은 i) 데이터베이스의 클라이언트 버전에 대한 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 데이터베이스의 클라이언트 버전에 포함된 특정 데이터베이스 엔티티를 특정하는 제1 커서를 포함함―; 클라이언트 디바이스로부터 원격인 데이터베이스의 원격 버전에 액세싱하는 액션 ―데이터베이스의 원격 버전은 복수의 데이터베이스 엔티티들을 포함하며, 각각의 데이터베이스 엔티티는 데이터베이스에 대한 복수의 데이터베이스 엔티티들에 걸쳐 단조롭게 증가하는 방식으로 할당된 원격 엔티티 버전을 가짐―; 특정 데이터베이스 엔티티에 매칭하는 데이터베이스 엔티티로 시작하는, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 복수의 데이터베이스 엔티티들 각각에 대해, 데이터베이스 엔티티의 원격 엔티티 버전 넘버와 클라이언트 데이터베이스 버전 넘버의 비교에 기반하여, 데이터베이스 엔티티가 업데이팅되었는지 여부를 결정하는 액션; 및 업데이팅된 각각의 데이터베이스 엔티티에 대해, 엔티티 업데이트를 클라이언트 디바이스에 제공하는 액션; 및 적어도 하나의 엔티티 업데이트를 이용하여 원격 데이터베이스 버전 넘버를 클라이언트 디바이스에 제공하는 액션을 포함하는 방법들로 구현될 수 있고, 원격 데이터베이스 버전 넘버는 데이터베이스의 원격 버전에서 가장 높은 원격 엔티티 버전 넘버이다. 이 양상의 다른 실시예들은 컴퓨터 저장 디바이스들 상에 인코딩된 방법들의 액션들을 수행하도록 구성된 대응하는 시스템들, 장치, 및 컴퓨터 프로그램들을 포함한다.
[0017] 이들 및 다른 실시예들 각각은 하기의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 데이터베이스 엔티티들의 서브세트는 데이터베이스의 원격 버전의 모든 각각의 데이터베이스 엔티티를 포함하는 것은 아닐 수 있다. 데이터베이스 엔티티들의 서브세트는 하나 이상의 시스템 제약들이 충족되는 것에 기반하여 동적으로 결정될 수 있다.
[0018] 하나 이상의 시스템 제약들은 업데이트들을 위한 요청에 대해 허용되는 최대 프로세싱 시간; 또는 업데이트들을 위한 요청에 대해 허용되는 최대 업데이트 사이즈를 포함할 수 있다.
[0019] 동작들은, 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 제2 요청을 클라이언트 디바이스로부터 수신하는 동작을 더 포함할 수 있고, 제2 요청은 i) 엔티티 업데이트를 이용하여 클라이언트 디바이스에 제공된 원격 데이터베이스 버전 넘버에 매칭하는 제2 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 데이터베이스의 클라이언트 버전에 포함되며, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 마지막 데이터베이스 엔티티에 후속하여 순서화되는 제2 데이터베이스 엔티티를 특정하는 제2 커서를 포함한다.
[0020] 동작들은, 데이터베이스의 원격 버전에 대한 삼차원 테이블을 업데이팅하는 동작을 더 포함할 수 있고, 삼차원 테이블은 현재 시간 이전의 미리결정된 시간 기간 내에 발생한, 데이터베이스의 원격 버전에 대한 모든 각각의 업데이트를 특정한다.
[0021] 일반적으로, 본 명세서에 설명된 발명의 요지의 다른 양상은, 특정된 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 카운트를 서버 디바이스로부터 수신하는 액션; 데이터베이스 엔티티들의 카운트가, 특정된 버전 넘버로서 데이터베이스의 클라이언트 버전에 포함된 엔티티들의 개수를 특정하는 클라이언트 엔티티 카운트 미만임을 결정하는 액션; 데이터베이스 엔티티들의 카운트가 클라이언트 엔티티 카운트 미만임을 결정하는 것에 대한 응답으로, 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들에 대한 키들의 목록에 대한 요청을 서버 디바이스에 전송하는 액션; 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 적절한 서브세트에 대한 키들의 적절한 제1 서브세트를 서버 디바이스로부터 수신하는 액션; 및 데이터베이스의 클라이언트 버전에 포함된 데이터베이스 엔티티들의 대응하는 적절한 서브세트 내에 있으며, 키들의 적절한 제1 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 데이터베이스의 클라이언트 버전으로부터 제거하는 액션을 포함하는 방법들로 구현될 수 있다. 이 양상의 다른 실시예들은 컴퓨터 저장 디바이스들 상에 인코딩된 방법들의 액션들을 수행하도록 구성된 대응하는 시스템들, 장치, 및 컴퓨터 프로그램들을 포함한다.
[0022] 이들 및 다른 실시예들 각각은 하기의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 동작들은, 데이터베이스 엔티티들의 제1 서브세트와 상이한 데이터베이스 엔티티들의 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트에 대한 제2 요청을 서버 디바이스에 전송하는 동작 ―제2 요청은 데이터베이스의 제2 버전 넘버를 특정함―; 제2 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 대응하는 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트를 서버 디바이스로부터 수신하는 동작; 데이터베이스 엔티티들의 제2 카운트가, 제2 버전 넘버로서 데이터베이스의 데이터베이스 엔티티들 클라이언트 버전의 제2 서브세트에 포함된 엔티티들의 제2 개수를 특정하는 제2 클라이언트 엔티티 카운트 미만임을 결정하는 동작; 제2 서브세트에 포함된 데이터베이스 엔티티들에 대한 키들의 제2 목록에 대한 제2 요청을 서버 디바이스에 전송하는 동작; 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 제3 서브세트에 대한 키들의 제3 서브세트를 서버 디바이스로부터 수신하는 동작; 및 제3 서브세트에 대응하는, 데이터베이스의 클라이언트 버전에 포함된 데이터베이스 엔티티들의 서브세트 내에 있으며, 키들의 제3 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 데이터베이스의 클라이언트 버전으로부터 제거하는 동작을 더 포함할 수 있다.
[0023] 본 명세서에 설명된 발명의 요지의 특정 실시예들은, 하기의 장점들 중 하나 이상을 구현하기 위하여 구현될 수 있다. 클라이언트 디바이스들이 데이터베이스들의 로컬 복사본들을 저장하는 것은, 클라이언트 디바이스들 및 데이터베이스 서버들 둘 모두에 대해 오버헤드를 감소시키면서 오류들 및 거짓 충돌들의 위험을 또한 감소시키도록 설계된 방식으로, 그리고 클라이언트 디바이스들과 데이터베이스 서버들 사이의 네트워크 통신들이 빈번히 인터럽팅될 수 있는 상황들에서, 로컬 복사본들을 업데이팅된 채로 유지시키고, 데이터베이스들의 원격 버전들에 대한 변경들을 커밋할 수 있다. 데이터베이스 서버들 및 클라이언트 디바이스들은 데이터베이스들에 대한 변경 로그들 또는 삭제 마커들을 저장할 필요가 없으며, 이는 변경 로그들 및 삭제 마커들을 사용하는 다른 데이터베이스 관리 방법들에 비해 요구되는 시스템 자원들을 감소시킨다.
[0024] 본 명세서에 설명된 발명의 요지의 하나 이상의 실시예들의 세부사항들은 첨부된 도면들 및 아래의 설명에서 제시된다. 본 발명의 요지의 다른 특징들, 양상들, 및 장점들은 설명, 도면들, 및 청구항들에서 명백해질 것이다.
[0025] 도 1은 원격 데이터베이스 뮤테이션들이 프로세싱되는 예시적 환경의 블록 다이어그램이다.
[0026] 도 2는 원격 데이터베이스 뮤테이션들을 처리하기 위한 예시적 프로세스의 데이터 흐름이다.
[0027] 도 3a는 원격 데이터베이스 뮤테이션들을 처리하기 위한 예시적 프로세스의 흐름 다이어그램이다.
[0028] 도 3b는 원격 데이터베이스 뮤테이션들을 제공하기 위한 예시적 프로세스의 흐름 다이어그램이다.
[0029] 도 4는 데이터베이스들을 동기화하기 위한 예시적 프로세스의 데이터 흐름이다.
[0030] 도 5는 데이터베이스들을 동기화하기 위한 예시적 프로세스의 흐름 다이어그램이다.
[0031] 도 6은 삭제된 데이터베이스 엔티티들을 검출 및 처리하기 위한 예시적 프로세스의 데이터 흐름이다.
[0032] 도 7은 삭제된 데이터베이스 엔티티들을 검출 및 처리하기 위한 예시적 프로세스의 흐름 다이어그램이다.
[0033] 도 8은 예시적 데이터 프로세싱 장치의 블록 다이어그램이다.
[0034] 다양한 도면들의 동일한 참조 넘버들 및 표기들은 동일한 엘리먼트들을 표시한다.
[0035] 개요
[0036] 다수의 클라이언트 디바이스들이 데이터베이스에 저장된 데이터에 액세싱할 필요가 있을 때, 데이터의 동일한 세트로의 액세스를 각각의 클라이언트 디바이스에 제공하기 위해 원격 데이터베이스가 사용될 수 있다. 원격 데이터베이스에 저장된 데이터로의 액세스를 빈번히 필요로 하는 클라이언트 디바이스들은 데이터베이스의 로컬 복사본을 클라이언트 디바이스 상에 저장할 수 있으며, 이 데이터베이스의 로컬 복사본은 원격 데이터베이스를 호스팅하는 디바이스와 통신할 필요 없이 액세싱될 수 있다. 예컨대, 사람의 전화 및 이메일 연락들을 저장하기 위해 원격 데이터베이스가 사용될 수 있다. 사용자는 랩톱 컴퓨터, 태블릿 컴퓨터, 및 스마트폰을 사용할 수 있고, 이들 전부는 사용자의 연락들을 포함하는 원격 데이터베이스로의 액세스를 가지며, 사용자의 디바이스들 각각은 사용자의 연락들의 로컬 복사본을 또한 저장할 수 있다. 데이터베이스의 로컬 복사본은, 예컨대, 사용자 디바이스에 의한 신속한 액세스를 위해, 그리고/또는 원격 데이터베이스와의 네트워크 통신이 이용가능하지 않을 때 사용자의 연락들로의 액세스를 위해 사용될 수 있다. 사용자가 변경을 할 때, 예컨대, 로컬 데이터베이스의 연락을 추가, 편집, 또는 삭제할 때, 변경이 발생하는 클라이언트 디바이스는 원격 데이터베이스도 또한 업데이팅할 수 있으며, 따라서 데이터베이스에 대한 변경은, 원격 데이터베이스를 사용하여 사용자의 다른 디바이스들 상의 로컬 데이터베이스들에 전파될 수 있다.
[0037] 다른 예로서, 다양한 음식들에 대한 영양물 정보를 저장하기 위해 원격 데이터베이스가 사용될 수 있다. 사용자는 클라이언트 디바이스, 이를테면, 스마트폰 상에 포함된 애플리케이션을 사용하여, 데이터베이스에 포함된 정보에 액세싱, 예컨대, 사용자의 매일의 영양 섭취를 추적할 수 있다. 예컨대, 네트워크 연결이 느리거나 또는 이용가능하지 않을 때 데이터베이스로의 액세스를 갖기 위해, 원격 데이터베이스의 로컬 복사본이 유용할 수 있다. 사용자는 또한, 예컨대, 새로운 음식들을 추가하고 로컬 데이터베이스의 기존 음식들에 대한 영양물 정보를 업데이팅함으로써 로컬 데이터베이스를 업데이팅할 수 있다. 로컬 데이터베이스에 변경들이 이루어졌을 때, 클라이언트 디바이스 및 데이터베이스 서버는, 예컨대, 사용자가 로컬로 했던 변경들로 원격 데이터베이스를 업데이팅하고 다른 사용자들이 원격 데이터베이스에 제공한 변경들로 로컬 데이터베이스를 업데이팅함으로써 데이터베이스들을 동기화시키기 위해 함께 동작할 수 있다.
[0038] 클라이언트 디바이스들 및 데이터베이스 서버는 원격 데이터베이스와 클라이언트 디바이스들 상에 저장된 데이터베이스의 로컬 복사본들 사이의 데이터베이스 동기화를 용이하게 한다. 클라이언트 디바이스에 의해 로컬 데이터베이스에 적용된 데이터베이스 뮤테이션들은, 원격 데이터베이스에 커밋되거나 또는 적용되도록 뮤테이션들을 데이터베이스 서버에 제공하기 이전에, 클라이언트 디바이스에 의해 콜랩싱되거나 또는 합쳐질 수 있다. 뮤테이션들을 콜랩싱하는 것은 일반적으로, 클라이언트의 의도를 지키는 방식으로 뮤테이션들을 결합하거나 또는 합침으로써 뮤테이션들의 개수를 감소시키는 것을 수반한다. 클라이언트 디바이스에 의해 데이터베이스 서버에 제공된 데이터베이스 뮤테이션들은 원격 데이터베이스에 커밋되기 이전에 추가로 콜랩싱될 수 있으며, 이는 클라이언트의 의도를 지키고 멱등성을 보장하면서, 시간 및 컴퓨터 자원들을 절약한다. 시스템 자원들을 지키고 요청들 및 응답들에 요구되는 네트워크 통신 부하를 감소시키기 위해, 로컬 데이터베이스에 대해 클라이언트 디바이스에 의해 요청되는 업데이트들에 대한 응답들은 다수의 요청들 및 응답들로 분할될 수 있다. 원격 데이터베이스 상에서 삭제된 데이터베이스 엔티티들은, 변경 로그들 또는 삭제 마커들에 대한 필요 없이, 로컬 데이터베이스와 동기화될 수 있다.
[0039] 예컨대, 클라이언트 디바이스는 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 적용된 데이터베이스 뮤테이션들의 로그에 액세싱할 수 있다. 각각의 데이터베이스 뮤테이션은 데이터베이스 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정한다. 데이터베이스 엔티티는 또한, 데이터베이스에 포함된 행 또는 레코드로 지칭될 수 있다. 클라이언트 디바이스는 동일한 버전 넘버를 갖는 데이터베이스 엔티티들에 대한 뮤테이션들을 식별하며, 충돌 해소 정책에 기반하여, 뮤테이션들이 콜랩싱될 수 있는지 여부를 결정한다. 예컨대, 뮤테이션의 결과가 데이터베이스의 원격 버전에 저장된 값에 따라 좌우된다면, 동일한 버전 넘버를 갖는 데이터베이스 엔티티들을 식별하는 일부 뮤테이션들은 콜랩싱될 수 없다. 적격의 뮤테이션들을 콜랩싱한 이후에, 클라이언트 디바이스는 데이터베이스 뮤테이션들의 콜랩스드 로그를 데이터베이스의 원격 버전으로의 적용을 위해 데이터베이스 서버에 제공한다.
[0040] 데이터베이스 서버는 클라이언트 디바이스로부터 데이터베이스 뮤테이션들의 로그를 수신하며, 적용가능하다면, 클라이언트 디바이스에 의해 콜랩싱되지 않은 동일한 클라이언트 버전 넘버를 특정하는 데이터베이스 뮤테이션들을 콜랩싱한다. 클라이언트 디바이스에 대해서와 같이, 데이터베이스 서버는 동일한 버전 넘버를 갖는 데이터베이스 엔티티들에 대한 뮤테이션들을 식별하며, 충돌 해소 정책에 기반하여, 뮤테이션들이 콜랩싱될 수 있는지 여부를 결정한다. 데이터베이스 서버는, 필요하다면, 예컨대, 데이터베이스의 원격 버전에 저장된 값에 따라 좌우되는 데이터베이스 뮤테이션들에 대해, 원격 데이터베이스를 체크할 수 있다. 위에서 주목된 바와 같이, 데이터베이스 뮤테이션들을 콜랩싱하는 것은, 데이터베이스 뮤테이션들의 로그를 프로세싱하는데 필요한 시간 및 시스템 자원들을 감소시킬 수 있다.
[0041] 또한, 뮤테이션들에 대해, 그리고 일부 구현들에서 클라이언트 디바이스들과 데이터베이스 서버들 사이의 다른 통신들에 대해, 명시적 확인응답들에 대한 필요 없이, 멱등성이 유지될 수 있다. 예컨대, 데이터베이스 서버로부터 클라이언트 디바이스로 전송된 가장 최근의 응답이 저장될 수 있으며, 저장된 응답에 매칭하는 식별자를 갖는 요청의 수신시, 매칭하는 식별자를 포함한 요청을 프로세싱하려고 시도하지 않고, 저장된 응답이 제공될 수 있다.
[0042] 데이터베이스들을 동기화하기 위해, 클라이언트 디바이스는 업데이트들에 대한 요청을 데이터베이스 서버에 전송할 수 있다. 요청은 클라이언트 데이터베이스 버전 넘버, 및 일부 구현들에서 업데이트들이 청해지고 있는 엔티티들을 표시하는 커서를 포함할 수 있다. 데이터베이스 서버는 클라이언트의 요청으로 제공된 클라이언트 데이터베이스 버전 넘버 이후로 업데이팅된 임의의 엔티티들에 대한 업데이트들을 클라이언트 디바이스에 제공한다. 낮은 클라이언트 디바이스 대역폭 및 다른 잠재적 네트워크 이슈들을 고려하기 위해, 데이터베이스 서버는 데이터베이스 업데이트들을 엔티티들의 범위들로 분할할 수 있으며, 이는 범위들에 있는 업데이트들을 클라이언트 디바이스에 제공한다.
[0043] 일부 구현들에서, 원격 데이터베이스는 변경 로그를 유지하지 않거나, 또는 삭제된 데이터베이스 엔티티들에 대한 삭제 마커들을 사용하지 않는다. 삭제들을 동기화하기 위해, 클라이언트 디바이스는 먼저, 원격 데이터베이스에 저장된 엔티티들의 카운트를 데이터베이스 엔티티들의 로컬 카운트와 비교한다. 데이터베이스의 로컬 버전에 더 많은 데이터베이스 엔티티들이 있다면, 클라이언트 디바이스는 원격 데이터베이스에 현재 있는 엔티티들에 대한 키들의 목록을 요청한다. 각각의 키는 엔티티를 고유하게 식별하며, 클라이언트 디바이스는 원격 데이터베이스로부터 삭제된 엔티티 또는 엔티티들을 찾기 위해 키들의 목록을 로컬 데이터베이스에 저장된 키들과 비교한다. 동기화 요청들에 대해서와 같이, 데이터베이스 서버는 엔티티 키들의 부분 목록을 제공할 수 있으며, 이는 범위들에 있는 삭제들을 동기화한다.
[0044] 이들 특징들 및 추가적인 특징들은 아래에서 더욱 상세히 설명된다.
[0045] 예시적 동작 환경
[0046] 도 1은 원격 데이터베이스 뮤테이션들이 프로세싱되는 예시적 환경(100)의 블록 다이어그램이다. 컴퓨터 네트워크(102), 이를테면, 로컬 영역 네트워크(LAN;local area network), 광역 네트워크(WAN;wide area network), 인터넷, 또는 이들의 결합은 하나 이상의 클라이언트 디바이스들(104)을, 하나 이상의 데이터베이스 저장 디바이스(들)(108)와 통신하는 하나 이상의 데이터베이스 서버들(106)에 연결한다. 일부 구현들에서, 데이터베이스 서버(들)(106)는 분산 프로세싱 시스템으로 구현될 수 있으며, 이 분산 프로세싱 시스템은 직접적으로 및/또는 간접적으로 이 분산 프로세싱 시스템에 연결된 데이터베이스 저장 디바이스들에 저장된 데이터베이스들을 관리하기 위해 사용될 수 있는 많은 데이터 프로세서들을 포함한다. 클라이언트 디바이스들과 데이터베이스 서버들 사이의 통신을 용이하게 하기 위해 다른 시스템 및 네트워크 구성들이 또한 사용될 수 있다.
[0047] 데이터베이스 서버(106)는 예컨대 데이터베이스 저장 디바이스들(108)로의 데이터의 저장을 관리할 수 있는 전자 디바이스이다. 예시적 데이터베이스 서버들은 퍼스널 컴퓨터들, 서버 컴퓨터들, 및 네트워크(102)를 통해 데이터를 전송 및 수신할 수 있는 다른 디바이스들을 포함한다. 데이터베이스 서버(106)는 통상적으로, 데이터베이스들에 저장된 데이터를 관리하고 작업들, 이를테면, 데이터 분석, 저장, 및 조작을 수행하기 위해 사용되는 데이터베이스 애플리케이션을 포함한다. 또한, 클라이언트 디바이스들(104)과의 통신 및 네트워크 통신들의 관리를 용이하게 하기 위한 다른 컴포넌트들, 이를테면, 부하 밸런서 또는 애플리케이션 서버가 데이터베이스 서버(106)에 포함되거나 또는 이 데이터베이스 서버(106)와 통신할 수 있다.
[0048] 클라이언트 디바이스(104)는 데이터베이스 뮤테이션들을 전송하는 것을 비롯해 네트워크(102)를 통해 데이터를 요청 및 수신할 수 있는 전자 디바이스이다. 예시적 클라이언트 디바이스들(104)은 퍼스널 컴퓨터들, 모바일 통신 디바이스들, 및 네트워크(102)를 통해 데이터를 전송 및 수신할 수 있는 다른 디바이스들을 포함한다. 클라이언트 디바이스(104)는 통상적으로, 네트워크(102)를 통한 데이터의 전송 및 수신을 용이하게 하는 하나 이상의 애플리케이션들을 포함한다. 예컨대, 애플리케이션 데이터를 원격으로, 예컨대, 데이터베이스 저장 디바이스(108)에 저장하는 애플리케이션은 예컨대 클라이언트 디바이스 상에 저장된, 애플리케이션에 대한 데이터베이스의 클라이언트 버전, 뿐만 아니라 데이터베이스 서버를 사용하여 액세싱가능한 데이터베이스의 원격 버전을 가질 수 있다.
[0049] 데이터베이스 저장 디바이스(들)(108)는 데이터베이스 서버(들)(106)가 액세싱가능한 데이터베이스 데이터 및 메타데이터를 저장한다. 데이터베이스 서버(들)(106)와 데이터베이스 저장 디바이스(들)(108) 사이의 통신은, 예컨대, 직접 통신들, 내부 네트워크 통신들, 및/또는 네트워크(102)에 걸친 통신의 임의의 결합일 수 있다. 단일 데이터베이스가 하나의 데이터베이스 저장 디바이스 상에 또는 다수의 데이터베이스 저장 디바이스들에 걸쳐 저장될 수 있으며, 단일 데이터베이스 저장 디바이스가 다수의 데이터베이스들을 저장할 수 있다.
[0050] 원격 데이터베이스들, 예컨대, 클라이언트 디바이스들(104)로부터 원격으로 데이터베이스 저장 디바이스들(108)에 저장된 데이터베이스들은 데이터베이스 서버들(106)에 의해 주기적으로 업데이팅될 수 있다. 데이터베이스 서버들(106)은, 데이터베이스 서버들(106) 상에서 실행되는 데이터베이스 애플리케이션들에 의해 특정된 바와 같이 그리고/또는 클라이언트 디바이스들(104)로부터 데이터베이스 뮤테이션들을 수신하는 것에 대한 응답으로, 데이터베이스들을 업데이팅할 수 있다. 예컨대, 클라이언트 디바이스는 클라이언트 디바이스가 데이터베이스의 클라이언트 로컬 복사본에 했던 변경들에 기반하여 데이터베이스 뮤테이션들의 로그 또는 큐를 데이터베이스 서버에 제공할 수 있다. 데이터베이스 서버는 데이터베이스 뮤테이션들의 로그를 사용하여, 데이터베이스 저장 디바이스 상에 저장된 데이터베이스의 원격 버전에 데이터베이스 뮤테이션들을 적용할 수 있다.
[0051] 데이터베이스의 원격 버전은 많은 클라이언트 디바이스들에 의해 액세싱 및 업데이팅될 수 있으며, 이 많은 클라이언트 디바이스들 각각은 데이터베이스의 그들만의 클라이언트 버전을 갖는다. 예컨대, 애플리케이션은, 이 애플리케이션을 사용하는 각각의 클라이언트 디바이스가 동일한 정보를 아는 것을 보장하기 위해, 원격 데이터베이스를 사용할 수 있다. 하나의 클라이언트 디바이스가 원격 데이터베이스를 업데이팅할 때, 제2 클라이언트 디바이스는 이 제2 클라이언트 디바이스가 원격 데이터베이스에 나중에 액세싱할 때 업데이트들을 알 것이다. 다수의 클라이언트 디바이스들이 데이터베이스의 데이터의 동일한 피스를 업데이팅하려고 시도할 때 도입되는 충돌들을 관리하기 위해, 아래에 추가로 상세히 설명된 다양한 충돌 해소 기술들이 사용된다.
[0052] 일부 구현들에서, 데이터베이스를 업데이팅할 때 잠재적 충돌들의 해소를 돕기 위해 버저닝(versioning)이 사용될 수 있다. 데이터베이스에 저장된 각각의 엔티티는 연관된 버전 넘버를 가질 수 있으며, 각각의 데이터베이스는 또한, 연관된 버전 넘버를 가질 수 있다. 엔티티 버전 넘버들은 데이터베이스 내에서 단조롭게 증가하는 식으로 할당될 수 있는데, 이는 각각의 데이터베이스 엔티티가 고유한 버전 넘버를 가지며, 각각의 데이터베이스 엔티티에 적용되는 각각의 후속 뮤테이션이 뮤테이팅된 데이터베이스 엔티티가 증가된 버전 넘버를 할당받게 하는 것을 의미한다. 일부 구현들에서, 데이터베이스 엔티티 버전 넘버들은 엔티티들의 삽입, 업데이딩 등이 이루어질 때에만 데이터베이스 서버들에 의해 증가된다. 데이터베이스 버전 넘버는 디바이스, 클라이언트 또는 서버에 특정할 수 있으며, 일부 구현들에서, 개개의 클라이언트 또는 서버 데이터베이스에서의 가장 높은 데이터베이스 엔티티 버전 넘버와 동일할 수 있다.
[0053] 데이터베이스의 클라이언트 버전과 데이터베이스의 원격 버전 사이의 잠재적 충돌들을 해소하고 그 사이의 불일치들을 막기 위해, 데이터베이스 버전들, 데이터베이스 엔티티 버전들, 및 충돌 해소 정책들이 사용될 수 있다. 클라이언트 데이터베이스들과 그들의 개개의 원격 데이터베이스들 사이의 충돌들 및 불일치들은, 다수의 상이한 데이터베이스 동작들, 이를테면, 클라이언트 데이터베이스를 동기화하는 데이터베이스 뮤테이션들의 적용 동안에 그리고 삭제된 데이터베이스 엔티티들을 식별할 때, 발생 및 해소될 수 있다. 이들 데이터베이스 동작들 각각 동안의 충돌 및 불일치 해소가 아래에서 추가로 상세히 설명된다.
[0054] 데이터베이스 뮤테이션들의 프로세싱
[0055] 도 2는 원격 데이터베이스 뮤테이션들을 처리하기 위한 예시적 프로세스(200)의 데이터 흐름이다. 클라이언트 디바이스(202)는 데이터베이스(206)의 클라이언트 버전을 로컬 저장 디바이스(204)에 저장한다. 클라이언트 디바이스(202)는 데이터베이스 뮤테이션들을 클라이언트 데이터베이스(206)에 주기적으로 적용할 수 있다. 데이터베이스 뮤테이션들은 데이터베이스에 저장된 엔티티들에 대한 변경들이다. 예컨대, 데이터베이스에 포함된 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정하는 데이터베이스 뮤테이션을 사용하여, 데이터베이스 엔티티들을 추가, 제거, 또는 업데이팅하는 것의 각각이 수행된다.
[0056] 데이터베이스 뮤테이션들의 예시적 로그(208)는 클라이언트 디바이스(202)가 클라이언트 데이터베이스(206)에 했던 뮤테이션들의 목록을 묘사한다. 로그(208)에서 묘사된 각각의 예시적 뮤테이션은 엔티티에 대한 키, 엔티티에 대한 동작, 클라이언트 버전 넘버, 및 충돌 해소 정책을 특정한다. 예컨대, 엔티티 A는 값(x)을 가지며, 클라이언트 디바이스는 먼저 이 값(x)을 5로 변경했다. 이후에, 로그(208)에서, 클라이언트 디바이스(202)는 동일한 엔티티 A에 대해 값(x)을 2로, 이후 다시 4로 변경했다. 엔티티 A의 각각의 뮤테이션에 대해, 충돌의 발생시 x에 대한 최소 값이 이길 것임을 표시하는 "MIN(x)"와 같은 충돌 해소 정책이 열거된다.
[0057] 예시적 프로세스(200)에서, 데이터베이스 서버(210)는 데이터베이스의 엔티티들의 버전 넘버들을 제어하며, 클라이언트 디바이스(202) 상에서 발생하는 데이터베이스 뮤테이션들은 데이터베이스 엔티티들에 대한 버전 넘버들에 대한 변경들을 야기하지 않는데, 예컨대, 엔티티 A가 클라이언트 데이터베이스(206)에서 그것에 적용된 세 개의 뮤테이션들을 가졌지만, 버전 넘버는 동일하게 유지된다(클라이언트 버전 10). 클라이언트 디바이스(202)는 로그(208)의 어느 뮤테이션들이 콜랩싱되거나 또는 합쳐질 수 있는지를, 그들을 데이터베이스 서버(210)에 제공하기 이전에 결정한다.
[0058] 어느 뮤테이션들이 콜랩싱될 수 있는지를 결정하기 위해, 클라이언트 디바이스(202)는 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 뮤테이션들을 로그(208)에서 식별한다. 예컨대, 제 1, 제 5, 및 제6 뮤테이션들은 전부 엔티티 A의 클라이언트 버전 10에 대한 것이다. 충돌 해소 정책, 이를테면, 로그(208)에 특정된 정책을 사용하여, 클라이언트 디바이스(202)는 식별된 뮤테이션들이 콜랩싱될 수 있는지 여부를 결정한다. 일부 구현들에서, 디폴트 충돌 해소 정책이 사용될 수 있다. 디폴트 해소 정책은, 예컨대, 데이터베이스 서버(210)에 저장된 모든 데이터베이스들에 대한 디폴트 정책, 또는 특정 데이터베이스에 특정하며 이 특정 데이터베이스와 함께 저장된 디폴트 정책일 수 있다.
[0059] 충돌은 예컨대 엔티티에 대한 클라이언트 버전 넘버가 원격 데이터베이스(214)의 엔티티에 대한 베이스 버전 넘버에 매칭하지 않을 때 생길 수 있다. 충돌이 존재할 때, 데이터베이스 서버(210)는 충돌 해소 정책을 사용하여, 충돌 데이터베이스 뮤테이션이 적용되어야 하는지 또는 아닌지 여부를 결정한다. 예시적 충돌 해소 정책들은, 원격 ―원격 데이터베이스를 지지하여 충돌이 해소될 것임―, 클라이언트 ―클라이언트 디바이스의 뮤테이션을 지지하여 충돌이 해소될 것임―, MIN ―엔티티에 대해 최저 값을 야기할 값을 선택함으로써 충돌이 해소될 것임―, 및 MAX ―엔티티에 대해 최고 값을 야기할 값을 선택함으로써 충돌이 해소될 것임― 을 포함한다. 상기 정책들 및 정책들의 이름들은 예들이며, 다른 정책들, 또는 동일한 정책들에 대한 다른 이름들이 사용될 수 있다.
[0060] 클라이언트 디바이스(202)는 충돌 해소 정책을 사용하여, 데이터베이스 뮤테이션들이 콜랩싱되기에 적격인지 여부를 결정할 수 있다. 일부 구현들에서, 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과가 원격 데이터베이스(214) 상의 대응하는 데이터베이스 엔티티들에 대해 저장된 값들에 독립적이라면, 데이터베이스 뮤테이션들은 콜랩싱하기에 적격이다. 예컨대, "원격" 또는 "클라이언트"의 충돌 해소 정책을 갖는 데이터베이스 뮤테이션들이 콜랩싱될 수 있는데, 그 이유는 그러한 정책들을 사용하는 충돌 해소는 원격 데이터베이스(214)에 저장된 임의의 값에 따라 좌우되지 않기 때문이다. 다시 말해, 충돌 해소 정책이 "원격"이면, 원격 데이터베이스(214)의 값에 관계없이, 항상 원격 데이터베이스의 값을 지지하여 충돌이 해소될 것이며, "클라이언트"의 충돌 해소 정책은 원격 데이터베이스(214)에 저장된 값에 관계없이 항상 클라이언트의 뮤테이션들을 지지하여 충돌들이 해소되게 할 것이다.
[0061] 일부 상황들에서, 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과는 원격 데이터베이스(214)에 저장된 값에 따라 좌우된다. 예컨대, 로그(208)의 제5 및 제6 뮤테이션들은 엔티티 A에 대한 두 개의 뮤테이션들: x = 2 및 x = 4, 그리고 MIN(x)의 충돌 해소 정책을 특정한다. 클라이언트 디바이스(202)에 의해 제공된 데이터베이스 뮤테이션들은 서로 충돌하지 않고, 통상적으로 순서대로 적용될 것이며, 이는 x가 2로, 이후 4로 변경되는 것을 야기한다. 그러나, 원격 데이터베이스가 2와 4 사이의 값을 저장할 수 있기 때문에, 이들 두 개의 뮤테이션들은 단일 데이터베이스 뮤테이션, 예컨대, x = 4의 가장 최근의 데이터베이스 뮤테이션으로 콜랩싱될 수 없다.
[0062] 예로서, 원격 데이터베이스의 x에 대한 값이 3이고, x = 2 및 x = 4를 x = 4로 콜랩싱하면, 충돌이 x = 3을 야기할 것인데, 그 이유는 MIN (4, 3) = 3이기 때문이다. 뮤테이션들이 콜랩싱되지 않았다면, 최종 결과는 x = 4일 것인데, 그 이유는 뮤테이션 x = 2와의 충돌이 MIN (2, 3) = 2를 야기할 것이기 때문이며, 동일한 로그로부터의 다수의 뮤테이션들이 충돌하지 않기 때문에, 마지막 뮤테이션 x = 4는 충돌하지 않을 것이며, 이는 x가 2로부터 4로 변경되는 것을 야기한다.
[0063] 충돌 해소 정책들은 클라이언트의 의도를 지키는 방식으로 결정된다. 아래의 테이블은 일부 예시적 해소 정책들이 주어진 경우 콜랩싱될 수 있는 뮤테이션들을 열거한다. 각각의 뮤테이션은 동일한 데이터베이스 엔티티 및 버전 넘버에 대한 것이다. 테이블의 각각의 제1 뮤테이션은 동작 A 및 충돌 해소 정책을 포함한다. 테이블의 각각의 제2 뮤테이션은 또한, 동작 B 및 제1 뮤테이션과 콜랩싱될 수 있는 충돌 해소 정책을 포함한다. 결과적인 콜랩싱된 뮤테이션은 테이블의 제3 열에서 도시된다.
제1 뮤테이션 제2 뮤테이션 콜랩싱된 뮤테이션
클라이언트(A) <임의의 정책>(B) 클라이언트(B)
<임의의 정책>(A) 클라이언트(B) 클라이언트(B)
원격(A) <임의의 정책>(B) <임의의 정책>(B)
MIN(A) MIN(B) MIN(A, B) = B이면 MIN(B)
MAX(A) MAX(B) MAX (A, B) = B이면 MAX(B)
[0064] 예컨대, 제1 뮤테이션 "클라이언트(A)"가 주어지면, 클라이언트를 지지하여 임의의 충돌이 해소될 것이거나 또는 어떠한 충돌도 없을 것이다. 클라이언트를 지지하여 뮤테이션이 해소된 이후에, 후속 뮤테이션들은 충돌할 수 없으며, 따라서 어느 정책이 제2 뮤테이션에 의해 특정되든, 동작 B는 수행될 것이다. 각각의 뮤테이션의 의도를 지키는 콜랩싱된 결과는 "클라이언트(B)"이다. 유사하게, 제2 뮤테이션이 "클라이언트(B)"인 상황에서, 제1 동작 또는 정책이 무엇인지는 어떠한 차이도 만들지 않는데, 그 이유는 클라이언트 및 동작 B를 지지하여 제2 뮤테이션과의 임의의 충돌이 해소될 것이거나 또는 제2 뮤테이션과의 어떠한 충돌도 없을 것이기 때문이다.
[0065] 예시적 프로세스(200)에서, 클라이언트 디바이스(202)는 로그(208)에 포함된 뮤테이션들 중 일부를 콜랩싱했으며, 이는 데이터베이스 뮤테이션들의 콜랩스드 로그(209)를 야기한다. 예컨대, 클라이언트 디바이스(202)는 엔티티 A에 대한 뮤테이션들인 제1 및 제5 뮤테이션들이 x = 2로 콜랩싱되기에 적격임을 결정하는데, 그 이유는 MIN(x) 정책과 함께 x = 5 및 그 뒤에 x = 2는 원격 데이터베이스에 저장된 x의 값에 따라 좌우되지 않기 때문이다(예컨대, MIN (5, 2) = 2). 위에서 주목된 바와 같이, 엔티티 A에 대한 x = 4인 제6 뮤테이션은 합쳐질 수 없으며, 콜랩스드 로그(209)에서 별개의 뮤테이션으로 남아 있다.
[0066] 로그(208)에 포함된 제2 및 제3 뮤테이션들은 엔티티 B, 클라이언트 버전 7에 대한 것이다. 클라이언트 디바이스(202)는 "디폴트" 충돌 해소 정책에 기반하여 이들 뮤테이션들이 x = 4로 콜랩싱되기에 적격임을 결정하며, 이 "디폴트" 충돌 해소 정책은 클라이언트 디바이스(202), 클라이언트 데이터베이스(206), 데이터베이스 서버(210) 또는 원격 데이터베이스(214) 중 하나 이상에 저장될 수 있다. 예컨대, "원격"의 디폴트 해소 정책은 동일한 엔티티의 동일한 버전에 대한 다수의 뮤테이션들이 마지막 뮤테이션으로 콜랩싱되도록 할 것이며, 이 마지막 뮤테이션은 본 예에서 x = 4이다. 엔티티 C에 대한 제4 뮤테이션은 콜랩싱되지 않았는데, 그 이유는 엔티티 C에 대한 단 한 개의 뮤테이션이 로그(208)에 있기 때문이다.
[0067] 상이한 타입들의 뮤테이션들은 상이한 방식들로 콜랩싱될 수 있다. 예컨대, 아래의 테이블은 콜랩싱된 뮤테이션들, 예컨대, 동일한 엔티티에 대해 수행된 INSERT, UPDATE, UPSERT, 및 DELETE 데이터베이스 동작들을 열거한다. INSERT는 새로운 엔티티를 삽입하거나 또는 실패할 것이고, UPDATE는 기존 엔티티를 업데이팅하거나 또는 실패할 것이고, UPSERT는 새로운 엔티티를 삽입하거나 또는 기존 엔티티를 업데이팅할 것이며, DELETE은 엔티티가 존재한다면 이 엔티티를 삭제할 것이다. 예들의 테이블에서 표시된 바와 같이, 제1 INSERT의 결과로서 엔티티가 이미 존재한다면, 제2 INSERT는 실패할 것이며, 이는 콜랩싱된 뮤테이션으로서 "<불량 요청>"을 유도한다. INSERT(A)의 제1 뮤테이션 및 그 뒤에 UPDATE(B)는 단일 INSERT(B) 뮤테이션으로 콜랩싱될 수 있다.
제1 뮤테이션 제2 뮤테이션 콜랩싱된 뮤테이션
INSERT(A) INSERT(B) <불량 요청>
INSERT(A) UPDATE(B) INSERT(B)
INSERT(A) UPSERT(B) INSERT(B)
INSERT(A) DELETE() --
UPDATE(A) INSERT(B) <불량 요청>
UPDATE(A) UPDATE(B) UPDATE(B)
UPDATE(A) UPSERT(B) UPDATE(B)
UPDATE(A) DELETE() --
UPSERT(A) INSERT(B) <불량 요청>
UPSERT(A) UPDATE(B) UPSERT(B)
UPSERT(A) UPSERT(B) UPSERT(B)
UPSERT(A) DELETE() DELETE()
DELETE() INSERT(B) UPSERT(B)
DELETE() UPDATE(B) <불량 요청>
DELETE() UPSERT(B) UPSERT(B)
DELETE() DELETE() DELETE()
[0068] 예시적 프로세스(200)에서, 데이터베이스 서버(210)는 데이터베이스 뮤테이션들의 콜랩스드 로그(209)를 수신한다. 데이터베이스 서버(210)는 콜랩스드 로그(209)를 수신할 필요가 없으며, 일부 구현들에서, 콜랩싱되지 않은 로그, 예컨대, 로그(208)가 데이터베이스 서버(210)에 의한 프로세싱을 위해 수신될 수 있다.
[0069] 데이터베이스 서버(210)는 동일한 클라이언트 버전 넘버를 특정하는 데이터베이스 뮤테이션들을 콜랩스드 로그(209)에서 식별하며, 그러한 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정한다. 일부 구현들에서, 심지어 콜랩스드 로그(209)에서 엔티티에 대한 다수의 뮤테이션들이 존재하더라도, 엔티티에 대한 단 한 개의 뮤테이션이 원격 데이터베이스(214)에 커밋되도록, 데이터베이스 서버(210)는 다수의 뮤테이션들을 콜랩싱할 것이다.
[0070] 일부 구현들에서, 충돌 해소 정책에 기반하여 원격 데이터베이스(214)에 적용될 하나의 뮤테이션을 식별함으로써, 데이터베이스 서버(210)는 동일한 엔티티의 동일한 클라이언트 버전에 대한 다수의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정한다. 데이터베이스 뮤테이션은, i) 이 데이터베이스 뮤테이션이 충돌을 유발하지 않았거나 또는 ⅱ) 데이터베이스 뮤테이션을 지지하여 충돌이 해소되었다면, 원격 데이터베이스(214)에 적용될 것이다. 위에서 주목된 바와 같이, 클라이언트 디바이스(202)로부터 수신된 데이터베이스 뮤테이션이 원격 데이터베이스(214)의 엔티티에 대한 베이스 버전 넘버에 매칭하지 않는 엔티티에 대한 클라이언트 버전 넘버를 특정할 때, 충돌이 생길 수 있다. 데이터베이스 서버(210)는, 엔티티에 대한 뮤테이션이 원격 데이터베이스(214)에 적용될 때마다 엔티티의 베이스 버전 넘버를 업데이팅한다. 엔티티에 대한 베이스 버전이 클라이언트 버전 넘버에 매칭하는 상황들에서는, 충돌이 존재하지 않는다. 다른 한편으로, 엔티티의 베이스 버전이 클라이언트 버전 넘버에 매칭하지 않으면, 충돌이 존재할 것인데, 그 이유는 콜랩스드 로그(209)에 포함된 데이터베이스 뮤테이션들의 적용 이전에 예컨대 다른 클라이언트 디바이스로부터의 뮤테이션이 원격 데이터베이스(214)에 적용되었기 때문이다.
[0071] 원격 데이터베이스(214)에 적용될 뮤테이션을 식별한 이후에, 그 엔티티에 대한, 콜랩스드 로그(209)의 모든 데이터베이스 뮤테이션들은 단일 데이터베이스 뮤테이션으로 콜랩싱될 수 있다. 예컨대, 뮤테이션들 중 적어도 하나가 적용될 때, 엔티티에 대한 데이터베이스 뮤테이션들 전부는 그 엔티티에 대한 가장 최근의 데이터베이스 뮤테이션으로 콜랩싱될 수 있는데, 그 이유는 일단 클라이언트 제공 뮤테이션을 지지하여 동작 또는 충돌이 해소되면, 클라이언트 디바이스에 의해 제공된 다른 뮤테이션들이 서로 충돌할 수 없고 대응하는 엔티티에 대해 클라이언트에 의해 제공된 마지막 뮤테이션으로 콜랩싱될 수 있기 때문이다.
[0072] 예시적 프로세스(200)에서, 콜랩스드 로그(209)의 제3 및 제4 뮤테이션들은 엔티티 A의 클라이언트 버전 10을 특정한다. 데이터베이스 서버(210)가 x = 2인 제3 동작이 적용될 것임을 결정하는 상황들에서, 그 뮤테이션은 x = 4인 제4 뮤테이션으로 콜랩싱될 수 있는데, 그 이유는 제4 뮤테이션이 제3 뮤테이션에 후속하였고 제3 뮤테이션과 충돌할 수 없기 때문이다. 예로서, 콜랩스드 로그(209)의 엔티티 A에 대한 클라이언트 버전 넘버는 10이다. 원격 데이터베이스(214)의 엔티티 A에 대한 베이스 버전은 13이다. 충돌이 생기는데, 그 이유는 예컨대 엔티티 A가 데이터베이스 서버(210)에 의해 이전에 업데이팅된 결과로서 버전 넘버들이 매칭하지 않기 때문이다. MIN(x)의 충돌 해소 정책은 x = 2인 제3 뮤테이션을 지지하여 충돌히 해소되게 하는데, 그 이유는 2가 원격 데이터베이스에 저장된 x에 대한 값, 즉, 3 미만이기 때문이다. 제3 뮤테이션이 원격 데이터베이스(214)에 적용될 것이기 때문에, 임의의 후속 뮤테이션들이 또한 적용될 것이며, 이는 데이터베이스 서버(210)가 엔티티 A에 대한 뮤테이션들 전부를 단일 뮤테이션으로 콜랩싱하도록 한다.
[0073] 엔티티에 대한 어떠한 뮤테이션들도 적용되지 않을 상황들에서, 예컨대, 항상 원격 데이터베이스 값을 지지하여 해소되는 충돌을 유발하는, 엔티티에 대한 다수의 뮤테이션들의 경우, 데이터베이스 서버(210)는 위에서 설명된 것과 유사한 방식으로 엔티티에 대한 모든 데이터베이스 뮤테이션들을 단일 뮤테이션으로 콜랩싱할 수 있다. 일부 구현들에서, 적용되지 않을 뮤테이션들은 데이터베이스 동작들의 목록으로부터 제거될 수 있으며, 데이터베이스 서버(210)는 이들을 원격 데이터베이스(214)에 커밋하려고 시도하지 않을 것이다.
[0074] 예시적 프로세스(200)에서, 제2 콜랩스드 로그(216)는 뮤테이션들이 데이터베이스 서버(210)에 의해 콜랩싱된 이후의 그들을 묘사한다. 각각, 엔티티들 B 및 C에 대한 제1 및 제2 뮤테이션들에 대해 어떠한 추가적인 콜랩싱도 필요하지 않은데, 그 이유는 이들이 콜랩스드 로그(209)에 포함되었던 그러한 엔티티들에 대한 유일한 뮤테이션들이기 때문이다.
[0075] 뮤테이션들을 원격 데이터베이스(214)에 커밋할 때, 데이터베이스 서버(210)는 원격 데이터베이스(214)의 대응하는 엔티티들에 대한 베이스 버전과 비교하여 데이터베이스 뮤테이션들의 클라이언트 버전 넘버들 또는 적용가능하다면 콜랩싱된 뮤테이션들을 체크한다. 데이터베이스 뮤테이션에 의해 특정된 클라이언트 버전 넘버가 베이스 버전 넘버에 매칭하는 상황들에서, 충돌은 없으며, 데이터베이스 뮤테이션은 원격 데이터베이스(214)에 적용될 수 있다. 예컨대, 콜랩스드 로그(216)의 엔티티 C에 대한 뮤테이션은 4의 클라이언트 버전 넘버, 및 x = 7인 동작을 특정한다. 데이터베이스 서버는 클라이언트 버전 넘버(4)를 원격 데이터베이스(214)에 저장된 베이스 버전 넘버(4)와 비교하고, 매치를 찾으면, x = 7인 동작이 적용될 수 있음을 결정하며, 이는 원격 데이터베이스에서 x의 값을 2로부터 7로 변경한다.
[0076] 콜랩스드 로그(216)에서 엔티티 B를 특정하는 뮤테이션은 7의 클라이언트 버전을 가지며, 이 7의 클라이언트 버전은, 원격 데이터베이스(214)에 저장된 베이스 엔티티 버전(12)과 비교할 때, 충돌을 야기한다. 이 뮤테이션은 충돌 해소 정책을 특정하지 않으며, 충돌의 해소는 데이터베이스 서버(210) 디폴트에 따라, 또는 그것이 정의된 상황들에서는 원격 데이터베이스(214) 디폴트에 따라 수행될 것이다. 예컨대, "원격"의 디폴트 해소 정책에 대해, 충돌 뮤테이션이 적용되지 않을 것인 반면에, "클라이언트"의 디폴트 해소 정책은 데이터베이스 서버(210)가 충돌 뮤테이션을 적용하는 것을 야기할 것이다.
[0077] 콜랩스드 로그(216)의 제3 뮤테이션은 엔티티 A의 클라이언트 버전 10, 및 x = 4인 동작을 특정한다. 데이터베이스 서버(210)는 이 콜랩싱된 뮤테이션이 원격 데이터베이스(214)에 적용될 것임을 이전에 결정했으며, 따라서 동작 x = 2는 원격 데이터베이스(214)에 적용된다.
[0078] 데이터베이스 서버(210)가 뮤테이션을 원격 데이터베이스(214)에 적용할 때, 영향받는 엔티티에 대한 베이스 엔티티 버전이 또한 원격 데이터베이스(214)에서 업데이팅될 수 있다. 예컨대, 엔티티들 A 및 C가 위의 예에서 업데이팅되었으며, 버전 넘버들을 단조롭게 증가하는 방식으로 할당할 때, 엔티티 C의 베이스 버전은 4로부터 14로 업데이팅될 수 있고, 엔티티 A의 베이스 버전은 13으로부터 15로 업데이팅될 수 있다. 상기 예가 베이스 버전 넘버를 1만큼 증가시키지만, 베이스 버전 넘버를 증가시키기 위해, 엔티티들이 업데이팅되는 순서를 또한 지키는 다른 양(amount)들이 사용될 수 있다. 다른 예로서, 버전 넘버들이 항상 증가하고 있음을 보장하기 위해 타임스탬프가 사용될 수 있다.
[0079] 데이터베이스 서버(210)는 데이터베이스 뮤테이션들을 프로세싱한 이후에 응답 데이터(218)를 클라이언트 디바이스(202)에 제공한다. 응답 데이터(218)는 데이터베이스 뮤테이션들의 결과들에 관련된 정보를 포함할 수 있다. 예컨대, 응답 데이터(218)는, 업데이팅된 엔티티들에 대해, 원격 데이터베이스(214)의 베이스 버전 넘버에 매칭하는, 엔티티에 대한 새로운 버전 넘버를 포함할 수 있다. 응답 데이터(218)는 또한 성공 또는 실패의 표시를 포함할 수 있으며, 성공은 뮤테이션들이 수신 및 프로세싱되었음(그러나, 반드시 원격 데이터베이스에 적용되는 것은 아님)을 표시하고, 실패는 뮤테이션들이 데이터베이스 서버(210)에 의해 수신되지 않았거나 또는 프로세싱되지 않았음을 표시한다. 예시적 프로세스(200)에서, 응답 데이터(218)는, 데이터베이스 서버(210)에 전송된 콜랩스드 로그(209)에 포함된 각각의 데이터 데이터베이스 뮤테이션에 대해, 뮤테이션의 프로세싱시 성공 또는 실패의 표시, 뮤테이션의 시도된 적용의 결과, 및 대응하는 엔티티의 베이스 버전 넘버를 표시한다. 일부 구현들에서, 현재 값이 또한 제공될 수 있는데, 예컨대, 결과들(218)은 엔티티 B가 원격 데이터베이스(214)에서 7의 값을 가짐을 표시할 수 있다. 일부 구현들에서, 값들은 결과들(218)과 함께 제공되지 않으며, 클라이언트 디바이스(202)는 별개의 질의 또는 업데이트 요청을 통해 업데이트들을 획득한다.
[0080] 클라이언트 디바이스(202)는 응답 데이터(218)를 사용하여, 로그(208)에서 제공된 뮤테이션들이 성공적으로 수신, 프로세싱, 및 적용되었는지 또는 아닌지 여부를 결정할 수 있다. 성공적이라면, 클라이언트 디바이스(202)는 응답 데이터에서 제공된 새로운 베이스 버전을 반영하기 위해 클라이언트 데이터베이스(206)의 대응하는 엔티티의 버전 넘버를 업데이팅할 수 있다. 성공적이지 않다면, 클라이언트 디바이스(202)는 새로운 뮤테이션을 전송하거나, 또는 원격 데이터베이스(214)로부터의 대응하는 엔티티에 대한 현재 데이터를 예컨대 업데이트 요청으로 요청할 수 있다.
[0081] 일부 구현들에서, 데이터베이스 서버 및 클라이언트 디바이스는 데이터베이스 뮤테이션들의 멱등성, 그리고 일부 구현들에서 데이터베이스 서버에 의해 수신된 다른 통신들 또는 명령들을 보장하도록 설계된 방식으로 동작할 수 있다. 예컨대, 데이터베이스 서버에 전송된 명령들은 클라이언트 디바이스에 의해 제공된 요청 식별자를 가질 수 있다. 데이터베이스 서버가 클라이언트 디바이스로부터의 요청에 응답할 때, 데이터베이스 서버는 응답을 저장하고, 이 응답을 요청 식별자와 연관시킬 수 있다. 클라이언트 디바이스가 응답을 수신하는 상황들에서, 임의의 후속 요청에는 새로운 요청 식별자가 할당될 것이다. 데이터베이스 서버가 새로운 식별자를 갖는 요청을 수신할 때, 새로운 식별자는 이전에 제공된 응답이 클라이언트 디바이스에 의해 수신되었다는 확인응답으로서 데이터베이스 서버에 대해 동작한다. 클라이언트 디바이스가 응답을 수신하지 않는 상황들에서, 클라이언트 디바이스는 동일한 요청 식별자를 사용하여 요청을 재시도할 수 있다. 심지어 클라이언트 디바이스가 요청을 변경하는 상황들에서도, 동일한 요청 식별자가 사용된다. 데이터베이스 서버가 가장 최근에 제공된 응답에 매칭하는 요청 식별자를 갖는 요청을 수신할 때, 데이터베이스 서버는 새로운 요청에 대한 어떠한 액션도 취하지 않으며, 대신에 이전의 응답을 클라이언트 디바이스에 제공한다. 응답 데이터는, 클라이언트 디바이스에 의해 수신될 때, 어느 요청이 실제로 성공했는지를 클라이언트 디바이스에게 표시한다.
[0082] 예시적 프로세스(200)의 일부 부분들이 클라이언트 디바이스(202)에 의해 수행될 수 있는 반면에, 예시적 프로세스(200)의 다른 부분들은 데이터베이스 서버(210)에 의해 수행될 수 있다. 도 3a 및 도 3b 각각은 상이한 관점에서 예시적 프로세스를 설명한다. 도 3a에 설명된 예시적 프로세스가 서버 디바이스에 의해 수행될 수 있는 반면에, 도 3b에 설명된 예시적 프로세스는 클라이언트 디바이스에 의해 수행될 수 있다.
[0083] 이제 도 3a를 참조하면, 도 3a는 원격 데이터베이스 뮤테이션들을 처리하기 위한 예시적 프로세스(300)의 흐름 다이어그램이다. 프로세스(300)는 데이터 프로세싱 장치, 이를테면, 위에서 설명된 데이터베이스 서버에 의해 수행될 수 있다.
[0084] 데이터베이스 뮤테이션들의 로그가 클라이언트 디바이스로부터 수신된다(302). 데이터베이스 뮤테이션들의 로그는 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시한다. 각각의 데이터베이스 뮤테이션은 데이터베이스에 포함된 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정한다. 뮤테이션들의 로그는 임의의 개수의 엔티티들에 대한 임의의 개수의 뮤테이션들을 포함할 수 있다.
[0085] 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들이 식별된다(304). 예컨대, 데이터베이스 뮤테이션들의 로그는 단일 엔티티에 대한 다섯 개의 상이한 뮤테이션들을 포함할 수 있고, 이 다섯 개의 뮤테이션들 각각은 그 엔티티에 대해 동일한 클라이언트 버전 넘버를 특정한다.
[0086] 프로세스(300)는, 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정한다(306). 일부 구현들에서, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 것은, 충돌 해소 정책에 기반하여 원격 데이터베이스에 적용될, 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션을 식별하는 것을 포함한다. 예컨대, 동일한 엔티티에 대한 다섯 개의 상이한 데이터베이스 뮤테이션들이 있다면, 데이터베이스 서버는, 데이터베이스 뮤테이션들 중 하나가 원격 데이터베이스에 적용될 것인 한 이들이 콜랩싱하기에 적격이라고 결정할 수 있다. 데이터베이스 뮤테이션이 원격 데이터베이스에 적용될 것인지 여부를 결정하기 위해, 데이터베이스 서버는 예컨대, 먼저 충돌에 대해 체크할 수 있고, 충돌이 없으면, 뮤테이션이 적용될 것이며, 충돌이 있다면, 데이터베이스 뮤테이션 또는 현재 원격 데이터베이스 값을 지지하여 충돌이 해소될 것인지를 알기 위해 체크할 수 있다.
[0087] 일부 구현들에서, 데이터베이스 뮤테이션들 중 아무것도 원격 데이터베이스에 적용되지 않을 것이라면, 2 이상의 데이터베이스 뮤테이션들은 콜랩싱하기에 적격이다. 예컨대, 충돌을 수반하고 충돌 해소 정책이 원격 데이터베이스의 값을 지지하는 상황에서, 데이터베이스 뮤테이션들은 콜랩싱하기에 적격임이 결정될 수 있다. 일부 구현들에서, 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들 각각은 충돌 해소 정책을 특정한다. 일부 구현들에서, 충돌 해소 정책은 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책이다.
[0088] 2 이상의 데이터베이스 뮤테이션들은 단일 뮤테이션으로 콜랩싱된다(308). 일부 구현들에서, 2 이상의 데이터베이스 뮤테이션들을 콜랩싱하는 것은, 제1 데이터베이스 뮤테이션과, 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션에 후속하여 발생하는 각각의 다른 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것을 포함한다. 예컨대, 콜랩싱하기에 적격인 다섯 개의 데이터베이스 뮤테이션들을 갖는 상황에서, 모든 다섯 개의 데이터베이스 뮤테이션들은 단일 데이터베이스 뮤테이션으로 콜랩싱될 수 있다. 일부 구현들에서, 단일 데이터베이스 뮤테이션은, 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션이다.
[0089] 일부 구현들에서, 프로세스(300)는, 단일 데이터베이스 뮤테이션 및 로그에 포함된 각각의 다른 데이터베이스 뮤테이션에 대해, 뮤테이션에 의해 특정된 엔티티에 대한 베이스 버전 넘버를 식별하기 위해 데이터베이스의 원격 버전에 질의하는 것을 포함한다. 예컨대, 엔티티에 대한 베이스 버전 넘버는 원격 데이터베이스의 엔티티에 대한 가장 최근의 업데이트의 날짜 및 시간을 특정하는 데이터베이스 서버 공급 타임스탬프일 수 있다. 이후, 데이터베이스 서버는 엔티티에 대한 클라이언트 버전 넘버가 엔티티에 대한 베이스 버전 넘버에 매칭하는지 여부를 결정할 수 있다.
[0090] 클라이언트 버전 넘버가 베이스 버전 넘버에 매칭한다고 결정하는 것에 대한 응답으로, 데이터베이스 서버는 데이터베이스의 원격 버전에 대해 뮤테이션에 의해 특정된 동작을 수행하고, 엔티티에 대한 업데이팅된 베이스 버전 넘버를 포함하는 응답 데이터를 클라이언트 디바이스에 대해 생성할 수 있다. 예컨대, 콜랩싱되었든 또는 그렇지 않든 데이터베이스 뮤테이션이 원격 데이터베이스에 저장된 엔티티의 베이스 버전에 매칭하는 클라이언트 데이터베이스 버전 넘버를 가지면, 이 뮤테이션은 적용될 수 있는데, 그 이유는 충돌이 없기 때문이다(예컨대, 클라이언트 디바이스가 엔티티에 대한 업데이트를 마지막으로 수신했거나 또는 제공한 이후로 엔티티는 업데이팅되지 않았다).
[0091] 클라이언트 버전 넘버가 베이스 버전 넘버에 매칭하지 않는다고 결정하는 것에 대한 응답으로, 데이터베이스 서버는 뮤테이션에 의해 특정된 동작이 수행될 것인지 여부를 충돌 해소 정책에 기반하여 결정할 수 있으며, 동작이 수행될 것이라고 결정되는 경우에만, 동작을 수행하고, 뮤테이션에 의해 특정된 동작이 수행되었는지 여부를 특정하는 충돌 응답 데이터를 클라이언트 디바이스에 대해 생성할 수 있다. 충돌 해소 정책들은, 예컨대, 충돌들이 항상 클라이언트를 지지하여 해소될 것이라는 정책, 항상 원격 데이터베이스 값을 지지하여 해소될 것이라는 정책, 특정 결과를 지지하여 해소될 것이라는 정책 등을 포함한다.
[0092] 일부 구현들에서, 충돌 응답 데이터는, 뮤테이션에 의해 특정된 엔티티에 대해, 데이터베이스의 원격 버전에 저장된 엔티티에 대한 현재 버전을 포함한다. 예컨대, 데이터베이스 뮤테이션이 충돌했고 원격 데이터베이스 값을 지지하여 충돌이 해소되었다면, 원격 데이터베이스 값 및 버전 넘버가 클라이언트 디바이스에 제공될 수 있다.
[0093] 도 3b는 원격 데이터베이스 뮤테이션들을 제공하기 위한 예시적 프로세스(350)의 흐름 다이어그램이다. 위에서 주목된 바와 같이, 프로세스(350)는 데이터 프로세싱 장치, 이를테면, 위에서 설명된 클라이언트 디바이스에 의해 수행될 수 있다.
[0094] 클라이언트 디바이스 상에 저장된 데이터베이스 뮤테이션들의 로그는 예컨대 클라이언트 디바이스에 의해 액세싱된다(352). 데이터베이스 뮤테이션들의 로그는 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시한다. 각각의 데이터베이스 뮤테이션은 데이터베이스에 포함된 엔티티, 엔티티에 대한 동작, 및 엔티티에 대한 클라이언트 버전 넘버를 특정한다. 뮤테이션들의 로그는 임의의 개수의 엔티티들에 대한 임의의 개수의 뮤테이션들을 포함할 수 있다.
[0095] 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들이 식별된다(354). 예컨대, 데이터베이스 뮤테이션들의 로그는 단일 엔티티에 대한 다섯 개의 상이한 뮤테이션들을 포함할 수 있고, 이 다섯 개의 뮤테이션들 각각은 그 엔티티에 대해 동일한 클라이언트 버전 넘버를 특정한다.
[0096] 프로세스(350)는, 충돌 해소 정책에 기반하여, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정한다(356). 일부 구현들에서, 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 것은, 2 이상의 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과가 데이터베이스의 원격 버전 상의 대응하는 데이터베이스 엔티티들에 대해 저장된 값들에 독립적임을 결정하는 것을 포함한다. 예컨대, 클라이언트를 지지하여 충돌들이 해소될 것임을 특정하는 충돌 해소 정책은 그 엔티티에 대해 원격 데이터베이스에 어떤 값이 저장되어 있는지에 따라 좌우되지 않으며, 이는 대응하는 뮤테이션들이 콜랩싱하기에 적격임을 의미한다. 유사하게, 원격 데이터베이스를 지지하여 충돌들이 해소될 것임을 특정하는 충돌 해소 정책은 또한 그 엔티티에 대해 원격 데이터베이스에 저장된 값에 따라 좌우되지 않는데, 그 이유는 그것이 무엇이든지 원격 값이 동일하게 유지될 것이기 때문이다.
[0097] 일부 구현들에서, 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들 각각은 충돌 해소 정책을 특정한다. 일부 구현들에서, 충돌 해소 정책은 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책이다.
[0098] 2 이상의 데이터베이스 뮤테이션들은 단일 뮤테이션으로 콜랩싱된다(308). 일부 구현들에서, 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것은, 콜랩싱하기에 적격인 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 것을 포함한다. 예컨대, 콜랩싱하기에 적격인 5개의 데이터베이스 뮤테이션들을 갖는 상황에서, 모든 다섯 개의 데이터베이스 뮤테이션들은 단일의 가장 최근의 데이터베이스 뮤테이션으로 콜랩싱될 수 있다.
[0099] 일부 구현들에서, 프로세스(350)는, 데이터베이스 뮤테이션들의 콜랩스드 로그를 데이터베이스 서버에 제공하는 것을 더 포함하고, 데이터베이스 뮤테이션들의 콜랩스드 로그는 데이터베이스 뮤테이션들의 로그에 있는 콜랩싱되지 않은 각각의 뮤테이션 및 단일 데이터베이스 뮤테이션을 포함한다. 일부 구현들에서, 콜랩스드 로그는 단일 뮤테이션들로 콜랩싱되지 않은 다수의 뮤테이션들을 포함할 수 있다.
[00100] 원격 및 로컬 데이터베이스들의 동기화
[00101] 도 4는 데이터베이스들을 동기화하기 위한 예시적 프로세스(400)의 데이터 흐름이다. 예시적 프로세스에서, 클라이언트 디바이스(402)는 클라이언트 데이터베이스(406)를 로컬 저장 디바이스(404)에 저장한다. 클라이언트 데이터베이스(406)는 데이터베이스 서버(410)가 액세싱가능한 데이터베이스 저장 디바이스(412)에 저장된 원격 데이터베이스(414)의 로컬 복사본이다. 다른 클라이언트 디바이스들이 원격 데이터베이스(414)에 대한 변경들을 하는 상황들에서, 예컨대, 클라이언트 디바이스(402)가 턴 오프되거나 또는 그렇지 않으면 데이터베이스 서버(410)로의 액세스를 갖지 않으면, 이들 변경들은 클라이언트 디바이스(402)에 자동으로 제공되지 않을 수 있다.
[00102] 클라이언트 디바이스(402)는 업데이트들에 대한 요청들 또는 동기화 요청들을 데이터베이스 서버(410)에 주기적으로 전송할 수 있다. 각각의 요청, 예컨대, 408a 및 408b는 클라이언트 데이터베이스 버전 넘버를 포함하며, 데이터베이스에 대한 커서를 또한 포함할 수 있다. 일부 구현들에서, 클라이언트 데이터베이스 버전 넘버는 클라이언트 데이터베이스(406)의 가장 높은 엔티티 버전 넘버와 동일하다. 예시적 데이터 흐름(400)에서, 가장 높은 엔티티 버전 넘버는 10이며, 이는 제1 요청(408a)에서 데이터베이스 서버(410)에 전송된다. 커서는, 업데이트들을 수신하기 위한 시작점으로서의 역할을 할 특정 데이터베이스 엔티티를 표시하는 논리 포지션이다. 예시적 데이터 흐름(400)에서, 제1 요청(408a)에 의해 특정된 커서는 클라이언트 데이터베이스의 제1 데이터베이스 엔티티, 즉, 엔티티 A를 특정한다. 일부 구현들에서, 커서가 요청에서 특정되지 않으며, 이 경우, 데이터베이스 서버(410)는 제1 엔티티부터 업데이트들에 대한 체킹을 시작할 수 있다.
[00103] 데이터베이스 서버(410)는 원격 데이터베이스(414)에 액세싱함으로써 업데이트 요청(408a)을 프로세싱하며, 커서에 대응하는 엔티티로 시작해, 엔티티가 업데이팅되었는지를 알기 위해 체킹한다. 데이터베이스 엔티티 버전 넘버들이 단조롭게 증가하는 방식으로 할당되는 상황들에서, 요청(408a)에서 제공된 클라이언트 데이터베이스 버전 넘버보다 더 높은 버전 넘버를 갖는 임의의 데이터베이스 엔티티가 업데이팅된 반면에, 클라이언트 데이터베이스 버전 넘버와 동일하거나 또는 그 미만의 버전 넘버를 갖는 임의의 데이터베이스 엔티티는 업데이팅되지 않았다. 예시적 데이터 흐름(400)에서, 키들 1, 2, 5, 7, 및 9에 대응하는 엔티티들은 전부 업데이팅되었다.
[00104] 업데이팅된 각각의 데이터베이스 엔티티에 대해, 데이터베이스 서버(410)는 업데이팅된 엔티티, 업데이팅된 값(들), 및 원격 데이터베이스(414)의 엔티티의 버전 넘버를 특정하는 데이터를 클라이언트 디바이스(402)에 제공한다. 예컨대, 예시적 프로세스(400)에 포함된 업데이트들(416) 중 하나, 즉, 제1 업데이트(422)는 엔티티 A에 대한 업데이트를 포함한다. 업데이트(422)는 엔티티에 대한 원격 데이터베이스 버전 넘버 12, 및 업데이팅된 값 a2을 특정한다.
[00105] 일부 구현들에서, 데이터베이스 서버(410)는 전체 원격 데이터베이스(414)의 업데이트들을 체크 및 제공하는 것이 아니라, 대신에 데이터베이스 엔티티들의 서브세트 또는 적절한 서브세트에 대한 업데이트들을 체크 및 제공한다. 업데이트들이 제공되는 데이터베이스 엔티티들의 서브세트는, 예컨대, 원격 데이터베이스(414) 및/또는 데이터베이스 서버(410)에 의해 특정된 특정 시스템 제약에 따라 좌우될 수 있다. 예시적 시스템 제약들은 최대 프로세싱 시간, 및/또는 최대 업데이트 사이즈 등을 포함한다. 클라이언트 디바이스들(402)이 신속한 및/또는 신뢰성 있는 네트워크 액세스를 갖지 않는 상황들에서, 요청을 프로세싱하기 위한 시간의 양 및 업데이트에 포함된 데이터의 양을 제한하는 것은 데이터의 손실 및/또는 불일치들을 막는 것을 도울 수 있다. 부가하여, 큰 부피의 데이터를 포함하는 데이터베이스들은 업데이트들을 체킹하는데 오랜 시간 기간이 걸릴 수 있으며, 그 시간 동안에, 데이터베이스 뮤테이션들의 백로그가 누적될 수 있다. 데이터베이스 엔티티들의 서브세트들에 대해 요청들을 프로세싱하고 업데이트들을 제공하기 위한 시스템 제약들을 사용하여, 다른 문제점들, 이를테면, 업데이트들에 대한 체킹 이후에 변경되었지만 업데이트 응답이 클라이언트 디바이스(402)에 전송되기 이전의 엔티티들에 의해 초래되는 충돌들이 발생할 가능성이 감소될 수 있다.
[00106] 예시적 프로세스(400)에서, 데이터베이스 서버가 업데이트들에 대해 체킹한 엔티티들의 제1 서브세트(420)는 키들 A-D에 의해 특정된 엔티티들을 포함한다. 예컨대, 데이터베이스 서버(410)는, 시간 제한치에 도달하기 이전에, 업데이트들에 대해 데이터베이스 레코드들 중 네 개를 체킹했을 수 있다. 데이터베이스 서버(410)에 의해 제공된 제1 데이터베이스 업데이트(422)는 업데이팅된 두 개의 엔티티들, 엔티티들에 대한 원격 데이터베이스 버전 넘버, 및 엔티티들에 대한 업데이팅된 값들을 표시한다. 부가하여, 제1 업데이트(422)는 원격 데이터베이스 버전 넘버 20, 및 커서 D를 특정한다. 원격 데이터베이스 버전 넘버 및 커서는, 제1 업데이트(422)에 포함된 엔티티들의 제1 서브세트(420)가 엔티티 D로 끝나며, 제1 서브세트(420)에 포함된 엔티티들의 각각은 지금까지 원격 데이터베이스 버전 넘버 20으로서 있음을 클라이언트 디바이스(402)에게 표시한다. 제1 업데이트(422)를 클라이언트 데이터베이스(406)에 적용할 때, 클라이언트 디바이스(402)는 또한, 심지어 데이터베이스에 대한 클라이언트 버전 넘버가 10이더라도, 키들 A-D에 의해 특정된 엔티티들이 지금까지 데이터베이스 버전 20으로서 있음을 표시하는 데이터를 저장할 수 있다. 데이터베이스 엔트리들의 서브세트에 대해서만 업데이트들이 제공되었을 때, 다른 엔티티들, 예컨대, 키들 E-J에 의해 특정된 엔티티들이 여전히 단지 지금까지 데이터베이스 버전 10으로서 있기 때문에, 클라이언트 데이터베이스(406)에 대한 클라이언트 버전 넘버가 업데이팅되지 않음을 주목하라.
[00107] 제1 업데이트(422)를 수신 및 적용한 이후에, 클라이언트 디바이스는 제2 요청(408b)을 데이터베이스 서버(410)에 전송할 수 있다. 제2 요청(408b)은, 데이터베이스 서버(410)가 엔티티 D를 제외하고 엔티티 D부터 업데이트들을 제공해야 함을 표시하는 업데이팅된 커서를 포함한다. 제2 요청(408b)에서 특정된 클라이언트 데이터베이스 버전 넘버는 여전히 버전 10인데, 그 이유는 클라이언트 데이터베이스(406)의 키들 E-J과 연관된 엔티티들이 여전히 단지 지금까지 데이터베이스 버전 10으로서 있기 때문이다.
[00108] 데이터베이스 서버(410)는 엔티티 D 뒤의 엔티티로 시작하는 제2 서브세트(430)에 대한 업데이트들에 대한 체킹을 시작하며, 이 엔티티 D 뒤의 엔티티는 엔티티 E이다. 예시적 프로세스(400)에서, 데이터베이스 서버(410)는 조건이 충족되기 이전에 그것을 엔티티 G로 만들고, 데이터베이스 서버(410)는 엔티티들 E-G에 대한 업데이트들을 이용하여 제2 업데이트(432)를 클라이언트 디바이스(402)에 전송한다. 제1 업데이트(422)와 제2 업데이트(432) 사이에 원격 데이터베이스(414)에 대한 변경들이 이루어졌기 때문에, 원격 데이터베이스 버전 넘버는 제2 업데이트(432)의 송신시 버전 24로 증가되었다. 예컨대, 엔티티 G는 제1 업데이트(422)와 제2 업데이트(432) 사이에 버전 20으로부터 21로 업데이팅되었다.
[00109] 제2 업데이트(432)의 수신시, 클라이언트 디바이스(402)는 클라이언트 데이터베이스(406)의 제2 서브세트(430)에 포함된 엔티티들을 업데이팅한다. 제2 업데이트(432)를 클라이언트 데이터베이스(406)에 적용할 때, 클라이언트 디바이스(402)는 또한, 키들 E-G에 의해 특정된 엔티티들이 지금까지 데이터베이스 버전 24로서 있음을 표시하는 데이터를 저장할 수 있다. 이 지점에서, 엔티티들 A-D는 여전히 단지 지금까지 데이터베이스 버전 20으로서 있으며, 엔티티들 H-J는 지금까지 데이터베이스 버전 10으로서 있다.
[00110] 제3 서브세트(440)가 업데이팅된 이후에, 프로세스(400)는 다시 제1 엔티티부터 계속될 수 있으며, 프로세스(400)는 다수 회 반복될 수 있다. 일부 구현들에서, 엔티티들의 서브세트들은 동적으로 조절될 수 있다. 다시 말해, 예시적 프로세스(400)에서의 후속 업데이트를 위해, 데이터베이스 서버(410)는 업데이트를 제공하기 이전에 엔티티들 A-C만을 통과(get through)할 수 있다. 일부 상황들에서, 데이터베이스 서버(410)는 단일 업데이트에서 모든 데이터베이스 엔티티들을 통과할 수 있다. 서브세트들은, 예컨대, 어떤 시스템 제약들이 임의의 특정 업데이트 요청을 허용하는지에 기반하여 동적으로 조절될 수 있다.
[00111] 일부 구현들에서, 서브세트들은 합쳐질 수 있다. 예컨대, 각각의 서브세트가 지금까지 동일한 원격 데이터베이스 버전 넘버로서 있다면, 클라이언트 디바이스(402)는 클라이언트 데이터베이스(406)의 2 이상의 서브세트들이 단일 서브세트로 합쳐질 수 있음을 결정할 수 있다. 2 이상의 서브세트들이 지금까지 상이한 원격 데이터베이스 버전 넘버들로서 있는 상황들에서, 더 낮은 원격 데이터베이스 버전 넘버가 사용되는 한, 이들은 합쳐질 수 있다.
[00112] 일부 구현들에서, 데이터베이스 서버(410)는 원격 데이터베이스(414)에 대한 변경 로그, 예컨대, 삼차원 테이블을 업데이팅한다. 변경 로그는 미리결정된 시간 기간에 대해 원격 데이터베이스(414)에 대한 각각의 업데이트를 저장한다. 변경 로그를 사용하는 것은, 현재 데이터베이스 버전 넘버에 대한 질의들만을 허용하는 것 대신에, 데이터베이스 서버(410)로 하여금, 특정 데이터베이스 버전 넘버로서 업데이트들에 대한 질의들을 처리하도록 허용한다. 이는, 예컨대, 지금까지 동일한 데이터베이스 버전 넘버로서 모든 엔티티들을 갖는 클라이언트 데이터베이스(406)를 생성하고 있는 클라이언트 디바이스(402)에 의해 사용될 수 있다.
[00113] 예시적 프로세스(400)에서, 원격 데이터베이스(414)는 삭제된 엔티티, 즉, 엔티티 F를 묘사하는 텅 빈 행을 갖는다. 일부 구현들에서, 삭제된 엔티티들은 업데이트 요청들 동안에 검출되거나 또는 고려되는 것이 아니라, 삭제된 엔티티들에 대한 별개의 요청들에서 처리된다. 일부 구현들에서, 업데이트들(416)은 전체 원격 데이터베이스 또는 데이터베이스의 서브세트에 대한 엔티티 카운트를 포함할 수 있다. 엔티티 카운트는, 엔티티들이 삭제되었는지를 결정하기 위해 사용될 수 있다. 삭제된 엔티티들의 검출 및 처리는 아래의 도 6 및 도 7에 대하여 추가로 상세히 설명된다.
[00114] 도 5는 데이터베이스들을 동기화하기 위한 예시적 프로세스(500)의 흐름 다이어그램이다. 프로세스(500)는 데이터 프로세싱 장치, 이를테면, 위에서 도 4를 참조하여 설명된 데이터베이스 서버에 의해 수행될 수 있다.
[00115] 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 요청이 클라이언트 디바이스로부터 수신된다(502). 요청은 i) 데이터베이스의 클라이언트 버전에 대한 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 데이터베이스의 클라이언트 버전에 포함된 특정 데이터베이스 엔티티를 특정하는 제1 커서를 포함한다. 클라이언트 데이터베이스 버전 넘버는, 예컨대, 데이터베이스의 클라이언트 버전의 엔티티에 할당된 가장 높은 엔티티 버전 넘버일 수 있다. 커서는, 예컨대, 데이터베이스의 제1 엔티티로 시작할 수 있으며, 클라이언트 디바이스가 업데이트들에 대한 요청들을 계속해서 전송하기 때문에, 업데이팅될 수 있다.
[00116] 클라이언트 디바이스로부터 원격인 데이터베이스의 원격 버전이 액세싱된다(504). 데이터베이스의 원격 버전은 데이터베이스 엔티티들을 포함하며, 각각의 데이터베이스 엔티티는 데이터베이스에 대한 데이터베이스 엔티티들에 걸쳐 단조롭게 증가하는 방식으로 할당된 원격 엔티티 버전 넘버를 갖는다. 예컨대, 데이터베이스의 원격 버전은 네트워크, 이를테면, 인터넷을 통해 수신되는 클라이언트 디바이스 요청들을 처리하기 위해 데이터베이스 서버들의 그룹에 의해 사용되는 많은 저장 디바이스들 중 하나일 수 있다. 단조롭게 증가하는 버전 넘버들은, 예컨대, 데이터베이스 서버 타임스탬프 또는 엔티티가 업데이팅될 때마다 계속해서 증가하는 정수 값을 사용하여 할당될 수 있다.
[00117] 프로세스(500)는 특정 데이터베이스 엔티티에 매칭하는 데이터베이스 엔티티로 시작하는, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 복수의 데이터베이스 엔티티들 각각에 대해, 데이터베이스 엔티티가 업데이팅되었는지 여부를 결정한다(506). 데이터베이스 엔티티의 원격 엔티티 버전 넘버와 클라이언트 데이터베이스 버전 넘버의 비교에 기반하여, 결정이 이루어진다. 예컨대, 데이터베이스 서버는, 커서에 의해 특정된 엔티티에서 시작해, 원격 데이터베이스 엔티티들을 순서대로 살펴볼 수 있고, 이는 이 원격 데이터베이스 엔티티들이 업데이팅되었는지 또는 아닌지 여부를 결정한다. 원격 엔티티 버전 넘버가 클라이언트 데이터베이스 버전 넘버보다 더 높은 상황들에서, 대응하는 원격 데이터베이스 엔티티는 업데이팅되었다. 원격 엔티티 버전 넘버가 클라이언트 데이터베이스 버전 넘버 미만이거나 또는 그에 매칭하는 상황들에서, 대응하는 원격 데이터베이스 엔티티는 업데이팅되지 않았다.
[00118] 일부 구현들에서, 데이터베이스 엔티티들의 서브세트는 데이터베이스의 원격 버전의 모든 각각의 데이터베이스 엔티티를 포함하는 것은 아니다. 예컨대, 서브세트는 단 한 개의 데이터베이스 엔티티, 데이터베이스 엔티티들의 절반, 또는 데이터베이스 엔티티들 중 하나를 제외하고 전부를 포함할 수 있다. 일부 구현들에서, 데이터베이스 엔티티들의 서브세트는 하나 이상의 시스템 제약들이 충족되는 것에 기반하여 동적으로 결정된다. 예컨대, 시스템 제약들은 업데이트들을 위한 요청에 대해 허용되는 최대 프로세싱 시간, 또는 업데이트들을 위한 요청에 대해 허용되는 최대 업데이트 사이즈를 포함할 수 있다. 각각의 서브세트가 동적으로 결정되기 때문에, 각각의 서브세트는 상이한 사이즈를 가질 수 있으며, 이들은 데이터베이스를 통한 반복된 패스들 동안에 리사이징될 수 있다.
[00119] 업데이팅된 각각의 데이터베이스 엔티티에 대해, 엔티티 업데이트가 클라이언트 디바이스에 제공된다(508). 예컨대, 데이터베이스 엔티티가 업데이팅되었다면, 데이터베이스 서버는 엔티티에 대한 업데이팅된 값 및 업데이팅된 버전 넘버를 클라이언트 디바이스에 제공할 수 있다.
[00120] 원격 데이터베이스 버전 넘버는, 적어도 하나의 엔티티 업데이트를 이용하여 클라이언트 디바이스에 제공된다(510). 예컨대, 데이터베이스 엔티티들의 서브세트에 대한 각각의 업데이트는 원격 데이터베이스 버전 넘버를 포함할 수 있고, 클라이언트 디바이스는 이 원격 데이터베이스 버전 넘버를 사용하여, 서브세트가 업데이팅되는 원격 데이터베이스 버전 넘버를 추적할 수 있다.
[00121] 일부 구현들에서, 프로세스(500)는, 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 제2 요청을 클라이언트 디바이스로부터 수신하는 것을 포함하고, 제2 요청은 i) 엔티티 업데이트를 이용하여 클라이언트 디바이스에 제공된 원격 데이터베이스 버전 넘버에 매칭하는 제2 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 데이터베이스의 클라이언트 버전에 포함되며, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 마지막 데이터베이스 엔티티에 후속하여 순서화되는 제2 데이터베이스 엔티티를 특정하는 제2 커서를 포함한다. 제2 커서는, 일부 구현들에서, 업데이트가 제공된 마지막 엔티티를 특정할 수 있다. 예컨대, 시작 포지션이 제1 데이터베이스 엔티티에서 시작하는 것이 아니라 커서에 의해 특정된다는 점을 제외하고, 데이터베이스 서버는 제1 업데이트 요청과 동일한 방식으로 제2 업데이트 요청을 프로세싱할 수 있다. 프로세스는 데이터베이스 엔티티들 전부를 통해 반복될 수 있으며, 데이터베이스 엔티티들 전부를 살펴본 이후에 다시 시작할 수 있다.
[00122] 일부 구현들에서, 프로세스(500)는, 데이터베이스의 원격 버전에 대한 삼차원 테이블을 업데이팅하는 것을 포함하고, 삼차원 테이블은 현재 시간 이전의 미리결정된 시간 기간 내에 발생한, 데이터베이스의 원격 버전에 대한 모든 각각의 업데이트를 특정한다. 예컨대, 삼차원 테이블 또는 변경 로그는, 과거 5분 내의 데이터베이스에 대한 변경들 전부를 저장할 수 있고, 이는 특정 원격 데이터베이스 버전 넘버"로서(as of)" 요청들이 데이터베이스 서버에 전송되도록 한다. 다시 말해, 클라이언트 디바이스는 연속적 업데이트 요청들에 대해 동일한 데이터베이스 버전 넘버를 특정할 수 있으며, 이는 모든 업데이트들이 데이터베이스 서버에 의해 제공되었을 때 데이터베이스가 그 데이터베이스 버전 넘버에 대해 일관될 것임을 보장한다.
[00123] 삭제된 데이터베이스 엔티티들의 처리
[00124] 도 6은 삭제된 데이터베이스 엔티티들을 검출 및 처리하기 위한 예시적 프로세스(600)의 데이터 흐름이다. 일부 구현들에서, 엔티티의 삭제를 표시하기 위해 데이터베이스 서버(610)에 의해 어떠한 삭제 마커들도 사용되지 않는다. 부가하여, 데이터베이스 서버(610)는 원격 데이터베이스들에 대한 변경 로그를 유지하지 않을 수 있다. 삭제된 엔티티들을 검출하기 위해, 클라이언트 디바이스(602)는 엔티티 카운트 요청(608)을 데이터베이스 서버(610)에 전송한다. 일부 구현들에서, 엔티티 카운트 요청(608)은 예컨대 업데이트 요청, 이를테면, 위에서 도 4를 참조하여 논의된 요청(408a)과 함께 다른 요청에 포함된다. 요청(608)은, 어느 데이터베이스 버전에 대해 엔티티들의 카운트가 요청되는지를 표시하는 데이터베이스 버전 넘버를 포함할 수 있다. 데이터베이스 서버(610)는 카운트 요청(608)을 수신하며, 데이터베이스 저장 디바이스(612) 상에 저장된 원격 데이터베이스(614)에 얼마나 많은 엔티티들이 포함되는지를 결정한다.
[00125] 데이터베이스 서버(610)는 원격 데이터베이스(614)의 엔티티들의 카운트(616)를 클라이언트 디바이스에 제공한다. 일부 구현들에서, 카운트는 예컨대 동기화 동작 동안에 클라이언트 디바이스(602)에 제공되는 업데이트, 이를테면, 위에서 도 4를 참조하여 논의된 업데이트(416)와 함께 다른 응답으로 제공될 수 있다. 예시적 프로세스(600)에서, 데이터베이스 서버(610)에 의해 제공된 카운트(616)는 9개 엔티티들이 원격 데이터베이스(614)에 저장되어 있음을 표시한다. 예시적 프로세스(600)에서는 카운트가 명시적으로 요청되지만, 클라이언트 디바이스(602)로부터 전송되는 엔티티 카운트에 대한 명시적 요청이 있을 필요는 없다. 예컨대, 엔티티 카운트는 데이터베이스 뮤테이션들에 대한 응답과 함께 및/또는 동기화 동작 동안에 전송되는 업데이트들과 함께 전송될 수 있다.
[00126] 클라이언트 디바이스(602)는 원격 데이터베이스(614)의 엔티티들의 카운트(616)를, 로컬 저장 디바이스(604) 상에 저장된 클라이언트 데이터베이스(606)에 저장된 엔티티들의 로컬 카운트와 비교한다. 원격 데이터베이스(614)의 엔티티들의 카운트(616)가 로컬 카운트에 매칭하는 상황들에서, 클라이언트 디바이스(602)는 삭제된 엔티티들에 대해 체킹할 필요가 없다. 카운트(616)가 클라이언트 데이터베이스(606)에서보다 원격 데이터베이스(614)에서 더 적은 개수의 엔티티들을 표시하는 상황들에서, 엔티티가 원격 데이터베이스(614)로부터 삭제되었고, 삭제는 클라이언트 데이터베이스(606)에 전파되지 않았다.
[00127] 일부 구현들에서, 카운트(616)와 함께 원격 데이터베이스 버전 넘버가 제공된다. 클라이언트 디바이스(602)는 카운트의 원격 데이터베이스 버전 넘버 및 클라이언트 데이터베이스 버전 넘버를 사용하여, 동일한 데이터베이스 버전 넘버에 대해 카운트들이 비교되고 있음을 확인해줄 수 있다. 데이터베이스 버전 넘버들이 매칭하지 않았다면, 데이터베이스 서버에 의해 제공된 카운트는 데이터베이스의 클라이언트 버전에 대해 정확하지 않을 수 있다. 일관성을 유지하기 위해, 동일한 데이터베이스 버전 넘버들에 대해 카운트들이 비교될 수 있다.
[00128] 카운트들이 매칭하지 않는다고 결정하는 것에 대한 응답으로, 클라이언트 디바이스(602)는 목록 요청(618)을 데이터베이스 서버(610)에 전송한다. 목록 요청(618)은 원격 데이터베이스(614)에 저장된 엔티티들에 대한 데이터베이스 키들 전부의 목록에 대한 요청이다. 예컨대, 클라이언트 디바이스(602)는 엔티티들 대신에 키들을 요청할 수 있는데, 그 이유는 키들이 엔티티들보다 더 작고, 각각의 키가 대응하는 엔티티를 고유하게 식별하므로 삭제들을 검출하기 위해 충분하기 때문이다. 일부 구현들에서, 데이터베이스 서버(610)는, 목록 요청(618)에 대한 응답으로, 원격 데이터베이스(614)에 포함된 엔티티들에 대한 모든 키들, 예컨대, 키들 A-E 및 G-J의 목록을 제공한다.
[00129] 클라이언트 디바이스(602)는, 원격 데이터베이스(614)로부터 삭제된 엔티티 또는 엔티티들을 찾기 위해, 목록에 포함된 키들을 클라이언트 데이터베이스(606)의 키들과 비교할 수 있다. 삭제된 엔티티를 검출하자마자, 예컨대, 클라이언트 데이터베이스(606)에는 포함되지만 키들의 목록에는 포함되지 않은 키를 식별하자마자, 클라이언트 디바이스(602)는 클라이언트 데이터베이스(606)로부터 엔티티를 삭제한다. 위에서 주목된 바와 같이, 엔티티 카운트 및 키들의 목록은 동일한 데이터베이스 버전 넘버에 대한 것일 수 있으며, 데이터베이스 버전 넘버가 클라이언트 데이터베이스 버전 넘버에 매칭하는 상황들에서, 이는 삭제들이 특정 데이터베이스 버전 넘버로서 적절하게 검출되는 것을 보장한다.
[00130] 일부 구현들에서, 데이터베이스 서버(610)에 의해 제공된 키들(620)의 목록은 원격 데이터베이스(614)에 포함된 키들의 적절한 서브세트를 포함한다. 위에서 도 4 및 도 5에 대하여 상세히 설명된 동기화 프로세스에 대해서와 같이, 목록 요청들(618) 및 응답으로 제공되는 키들의 대응하는 목록들은 예컨대 위에서 설명된 것들과 유사한 시스템 제약들에 기반하여 서브세트들로 처리될 수 있다. 예시적 프로세스(600)에서, 키들(632)의 제1 목록은 원격 데이터베이스(614)에 포함된 엔티티들의 제1 서브세트(630), 예컨대, 엔티티들 A-D에 대한 키들에 대한 것이다. 예시적 제1 응답(632)은 또한 원격 데이터베이스 버전 넘버, 및 제1 서브세트(630)의 마지막 엔티티의 논리 포지션을 표시하는 커서를 포함한다. 일부 구현들에서, 명시적 커서가 사용되지 않으며, 클라이언트 디바이스(602)는 커서로서 응답으로 제공되는 마지막 키에 의존할 수 있다.
[00131] 클라이언트 디바이스(602)가 제1 응답(632)을 수신할 때, 이 클라이언트 디바이스(602)는 제1 응답(632)에 포함된 키들이 클라이언트 데이터베이스(606)에 또한 포함되는지 여부를 결정할 수 있다. 검출된 임의의 삭제된 엔티티들은 클라이언트 데이터베이스(606)로부터 제거될 수 있다. 제1 응답(632)의 프로세싱 이후에, 클라이언트 디바이스는 원격 데이터베이스(614)에 포함된 키들의 나머지의 목록을 요청하는 제2 목록 요청(618)을 제출할 수 있다. 제2 요청은 예컨대 제2 요청이 엔티티 D(이 마지막 엔티티에 대한 키는 제1 응답(632)에서 제공되었음) 이후의 키들의 목록에 대한 것임을 특정하는 커서를 포함할 수 있다.
[00132] 예시적 프로세스(600)에서, 데이터베이스 서버(610)는 데이터베이스 엔티티들의 제2 서브세트(640)에 대한 제2 응답(642)을 제공한다. 제2 응답(642)은 키들 E 및 G를 열거하지만 F를 열거하지는 않는데, 그 이유는 F는 원격 데이터베이스(614)로부터 삭제된 엔티티이기 때문이다. 클라이언트 디바이스(602)는 제2 응답(642)을 사용하여 엔티티 F가 삭제되었음을 결정하는데, 그 이유는 엔티티 F가 제2 응답(642)에서 제공된 키들의 범위 내에 있지만, 엔티티 F에 대한 키가 제2 응답(642)에 포함되지 않으며, 엔티티 F가 클라이언트 데이터베이스(606)에 포함되어 있기 때문이다. 예시적 프로세스(600)는, 검출 및 처리될 삭제들이 남아 있는 한, 예컨대, 클라이언트 데이터베이스(606)와 원격 데이터베이스(614) 사이에서 엔티티 카운트들이 매칭되지 않는 한, 반복될 수 있다.
[00133] 키들의 다수의 범위들이 클라이언트 디바이스(602)에 제공되는 구현들에서, 각각의 범위에 대한 각각의 요청 및 응답은 동일한 데이터베이스 버전 넘버에 대한 것일 수 있다. 이는, 엔티티들의 특정 범위에 대해, 데이터베이스 서버(610)에 의해 제공된 카운트 및 키들이 클라이언트 데이터베이스 상의 엔티티들의 대응하는 범위와 동일한 데이터베이스 버전에 대한 것임을 보장할 수 있다. 예컨대, 키들 A-D의 범위는 데이터베이스 버전 20에 대한 것이고; 클라이언트 디바이스는 데이터베이스 버전 20으로서 나머지 엔티티들 E-J에 대한 키들의 목록을 요청할 수 있다. 이 상황에서, 원격 데이터베이스(614)가 데이터베이스 버전 20으로서 키들의 목록을 획득하도록 하기 위해, 데이터베이스 서버(610)는 단기 변경로그 또는 삼차원 테이블에 액세싱할 수 있다. 일부 구현들에서, 데이터베이스 버전 24를 특정하는 제2 응답(642)의 수신시, 클라이언트 디바이스는 클라이언트 데이터베이스 버전 넘버가 24임을 보장하거나 또는 키들 E-G의 범위가 데이터베이스 버전 24에 있음을 보장할 수 있다. 그렇지 않다면, 클라이언트 디바이스는 삭제들에 대해 체킹하기 이전에 데이터베이스 버전 24로서 엔티티들 E-G에 대한 업데이트들을 요청할 수 있다.
[00134] 도 7은 삭제된 데이터베이스 엔티티들을 검출 및 처리하기 위한 예시적 프로세스(700)의 흐름 다이어그램이다. 프로세스(700)는 데이터 프로세싱 장치, 이를테면, 위에서 도 6을 참조하여 설명된 클라이언트 디바이스 및/또는 데이터베이스 서버에 의해 수행될 수 있다.
[00135] 특정된 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 카운트가 서버 디바이스로부터 수신된다(702). 예컨대, 데이터베이스 엔티티들의 카운트는 데이터베이스 버전(300)으로서 데이터베이스의 원격 버전에 저장된 90개 데이터베이스 엔티티들이 있음을 특정할 수 있다.
[00136] 프로세스(700)는 데이터베이스 엔티티들의 카운트가, 특정된 버전 넘버로서 데이터베이스의 클라이언트 버전에 포함된 엔티티들의 개수를 특정하는 클라이언트 엔티티 카운트 미만임을 결정한다(704). 예컨대, 클라이언트 디바이스는 데이터베이스의 클라이언트 버전이 데이터베이스 버전(300)으로서 단지 85개 데이터베이스 엔티티들만을 포함한다고 결정할 수 있으며, 이는 데이터베이스의 원격 버전 상에서 5개 데이터베이스 엔티티들이 삭제되었음을 표시한다.
[00137] 데이터베이스 엔티티들의 카운트가 클라이언트 엔티티 카운트 미만임을 결정하는 것에 대한 응답으로, 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들에 대한 키들의 목록에 대한 요청이 서버 디바이스에 전송된다(706). 일부 구현들에서, 요청은, 클라이언트 디바이스가 엔티티들의 삭제에 관한 정보를 갖고 있는 마지막 데이터베이스 엔티티를 특정하는 커서를 포함할 수 있다. 커서를 포함하지 않는 요청은 예컨대 제1 데이터베이스 엔티티에서 시작할 수 있다.
[00138] 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 적절한 서브세트에 대한 키들의 적절한 제1 서브세트가 서버 디바이스로부터 수신된다(708). 예컨대, 서버 디바이스는 85개의 총 데이터베이스 엔티티들 중 첫 번째 30개 데이터베이스 엔티티들에 대한 키들의 목록을 제공했을 수 있다. 서브세트에 포함된 키들의 개수는 서버 제약들, 이를테면, 위에서 도 4 및 도 5를 참조하여 설명된 것들에 따라 좌우될 수 있다.
[00139] 데이터베이스의 클라이언트 버전에 포함된 데이터베이스 엔티티들의 대응하는 적절한 서브세트 내에 있으며, 키들의 적절한 제1 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들이 데이터베이스의 클라이언트 버전으로부터 제거된다(710). 예컨대, 데이터베이스의 클라이언트 버전이, 제1 서브세트에 의해 특정된 범위 내에 있지만 서버 디바이스에 의해 제공된 30개 데이터베이스 엔티티들에 대한 키들의 제1 서브세트 내에는 없는 키들을 갖는 두 개의 데이터베이스 엔티티들 포함하는 상황에서, 그러한 두 개의 데이터베이스 엔티티들은 데이터베이스의 클라이언트 버전으로부터 제거될 수 있는데, 예컨대, 삭제된 엔티티들로서 취급될 수 있는데, 그 이유는 이들이 더 이상 데이터베이스의 원격 버전 상에 존재하지 않기 때문이다.
[00140] 일부 구현들에서, 프로세스(700)는 데이터베이스 엔티티들의 제1 서브세트와 상이한 데이터베이스 엔티티들의 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트에 대한 제2 요청을 서버 디바이스에 전송하는 것을 더 포함하며, 제2 요청은 데이터베이스의 제2 버전 넘버를 특정한다. 제2 서브세트는, 예컨대, 제1 서브세트에 포함되지 않은 모든 엔티티들, 예컨대, 데이터베이스 엔티티들 31 내지 90일 수 있으며, 이들은 시작점으로서 30번째(30번째 제외) 또는 31번째(31번째 포함) 엔티티를 특정하는, 카운트 요청에서 전송된 커서에 의해 특정될 수 있다.
[00141] 일부 구현들에서, 프로세스(700)는, 제2 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 대응하는 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트를 서버 디바이스로부터 수신하는 것; 데이터베이스 엔티티들의 제2 카운트가, 제2 버전 넘버로서 데이터베이스의 데이터베이스 엔티티들 클라이언트 버전의 제2 서브세트에 포함된 엔티티들의 제2 개수를 특정하는 제2 클라이언트 엔티티 카운트 미만임을 결정하는 것; 및 제2 서브세트에 포함된 데이터베이스 엔티티들에 대한 키들의 제2 목록에 대한 제2 요청을 서버 디바이스에 전송하는 것을 포함할 수 있다. 제2 카운트는 필요하지 않을 수 있는데, 예컨대, 상기 예에서, 다섯 개의 엔티티들의 삭제는 제1 카운트에 기반하여 검출되었고, 삭제된 엔티티들 중 단 두 개만이 식별되었으며, 이는 세 개의 삭제된 엔티티들을 검출되도록 남겨 놓는다. 그러나, 데이터베이스 버전 넘버들이 요청들 사이에서 변경되는 상황들에서, 요청들 사이에서 제2 서브세트 내에서 발생했을 수 있는 임의의 새로운 삭제들을 발견하기 위해, 제2 서브세트에 대해 새로운 카운트가 요청될 필요가 있을 수 있다. 일부 구현들에서, 특정 데이터베이스 버전 넘버로서 전체 데이터베이스에 대한 삭제 검출을 처리하기 위해, 단기 변경들의 삼차원 테이블, 예컨대, 단기 변경 로그가 사용될 수 있다.
[00142] 일부 구현들에서, 프로세스(700)는 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 제3 서브세트에 대한 키들의 제3 서브세트를 서버 디바이스로부터 수신하는 것을 포함할 수 있다. 데이터베이스 서버가 일정한 시스템 제약들, 예컨대, 시간 또는 응답 사이즈 내에서 원격 데이터베이스의 모든 각각의 키를 판독할 수 없을 수 있기 때문에, 데이터베이스 서버에 의해 리턴되는 키들의 서브세트는 다시, 데이터베이스의 나머지 키들보다 적을 수 있는데, 예컨대, 목록은 31번째 내지 65번째 데이터베이스 엔티티들에 대한 키들을 포함할 수 있다.
[00143] 일부 구현들에서, 프로세스(700)는 제3 서브세트에 대응하는, 데이터베이스의 클라이언트 버전에 포함된 데이터베이스 엔티티들의 서브세트 내에 있으며, 키들의 제3 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 데이터베이스의 클라이언트 버전으로부터 제거하는 것을 포함할 수 있다. 예컨대, 대응하는 서브세트의 세 개의 엔티티들이 키들의 제3 서브세트에 포함되지 않은 키들을 갖는다면, 그러한 세 개의 엔티티들은 데이터베이스의 클라이언트 버전으로부터 삭제될 수 있다. 상기 예에서, 프로세스(700)는 예컨대 데이터베이스의 나머지에 대한 키들을 요청하지 않고 종료될 수 있는데, 그 이유는 모든 다섯 개의 삭제들이 식별되었기 때문이다.
[00144] 프로세스(700)의 부분들은 반복될 수 있다. 예컨대, 클라이언트 디바이스는, 데이터베이스 엔티티들의 다수의 범위들에 대해, 원격 데이터베이스 서버에 포함되는 데이터베이스 엔티티들의 목록들을 요청 및 수신할 수 있고; 삭제된 엔티티들을 데이터베이스의 클라이언트 버전으로부터 제거하기 위해 그러한 목록들이 사용될 수 있다. 프로세스(700)는, 일부 구현들에서, 예컨대, 클라이언트 데이터베이스 엔티티들의 카운트가 원격 데이터베이스 엔티티들의 카운트에 매칭할 때까지, 엔티티들의 목록들에 대한 요청들을 계속해서 전송할 수 있다. 데이터베이스를 처음 살펴본 이후에 카운트들이 여전히 매칭하지 않으면, 예컨대, 삭제들이 업데이팅되고 있는 동안에 다른 엔티티가 삭제되는 상황에서, 프로세스는 시작부터 계속될 수 있다.
[00145] 일부 구현들에서, 예컨대 도 3a, 도 3b, 도 5, 및 도 7에 대하여 위에서 별개로 설명된 프로세스들 각각은 전체로든 또는 부분으로든 다른 프로세스들과 결합될 수 있다. 예컨대, 업데이트들에 대한 요청은 업데이트들에 대한 요청과 함께 제공될 수 있고, 업데이트들에 대한 요청은 카운트 또는 엔티티들의 목록에 대한 요청을 포함할 수 있다. 업데이트 요청에 대한 응답은 응답에 포함된 엔티티들의 목록을 포함할 수 있으며(업데이팅된 것과 업데이팅되지 않은 것 둘 모두), 이는 별개의 요청 및 응답에 대한 필요 없이 클라이언트 디바이스로 하여금 삭제된 엔티티들에 대해 체킹하도록 한다. 위에서 설명된 프로세스들을 수행하기 위해 요청들 및 응답들의 다른 구성들이 사용될 수 있다.
[00146] 예시적 데이터 프로세싱 장치
[00147] 도 8은 예시적 데이터 프로세싱 장치(800)의 블록 다이어그램이다. 시스템(800)은 프로세서(810), 메모리(820), 저장 디바이스(830), 및 입력/출력 디바이스(840)를 포함한다. 컴포넌트들(810, 820, 830, 및 840) 각각은 예컨대 시스템 버스(850)를 사용하여 상호연결될 수 있다. 프로세서(810)는 시스템(800) 내에서의 실행을 위한 명령들을 프로세싱할 수 있다. 일 구현에서, 프로세서(810)는 단일-스레드 프로세서이다. 다른 구현에서, 프로세서(810)는 멀티-스레드 프로세서이다. 프로세서(810)는 메모리(820)에 또는 저장 디바이스(830) 상에 저장된 명령들을 프로세싱할 수 있다.
[00148] 메모리(820)는 시스템(800) 내에서 정보를 저장한다. 일 구현에서, 메모리(820)는 컴퓨터-판독가능 매체이다. 일 구현에서, 메모리(820)는 휘발성 메모리 유닛이다. 다른 구현에서, 메모리(820)는 비-휘발성 메모리 유닛이다.
[00149] 저장 디바이스(830)는 시스템(800)에 대한 대용량 스토리지를 제공할 수 있다. 일 구현에서, 저장 디바이스(830)는 컴퓨터-판독가능 매체이다. 다양한 상이한 구현들에서, 저장 디바이스(830)는 예컨대 하드 디스크 디바이스, 광학 디스크 디바이스, 또는 어떤 다른 대용량 저장 디바이스를 포함할 수 있다.
[00150] 입력/출력 디바이스(840)는 시스템(800)에 대한 입력/출력 동작들을 제공한다. 일 구현에서, 입력/출력 디바이스(840)는 하나 이상의 네트워크 인터페이스 디바이스들, 예컨대, 이더넷 카드, 직렬 통신 디바이스, 예컨대, RS-232 포트, 및/또는 무선 인터페이스 디바이스, 예컨대, 802.11 카드를 포함할 수 있다. 다른 구현에서, 입력/출력 디바이스는 다른 입력/출력 디바이스들, 예컨대, 키보드, 프린터 및 디스플레이 디바이스들(860)에 대해 입력 데이터를 수신하고 출력 데이터를 전송하도록 구성된 드라이버 디바이스들을 포함할 수 있다. 그러나, 다른 구현들, 이를테면, 모바일 컴퓨팅 디바이스들, 모바일 통신 디바이스들, 셋톱 박스 텔레비전 클라이언트 디바이스들 등이 또한 사용될 수 있다.
[00151] 본 명세서에 설명된 발명의 요지 및 동작들의 실시예들은, 디지털 전자 회로소자로, 또는 본 명세서에 개시된 구조들 및 그들의 구조적 등가물들을 비롯해 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로, 또는 이들 중 하나 이상의 결합들로 구현될 수 있다. 본 명세서에 설명된 발명의 요지의 실시예들은 하나 이상의 컴퓨터 프로그램들, 즉, 데이터 프로세싱 장치에 의한 또는 이 데이터 프로세싱 장치의 동작을 제어하기 위한 실행을 위해 컴퓨터 저장 매체 상에 인코딩된 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서 구현될 수 있다.
[00152] 컴퓨터 저장 매체는 컴퓨터-판독가능 저장 디바이스, 컴퓨터-판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 어레이 또는 디바이스, 또는 이들 중 하나 이상의 결합일 수 있거나 또는 이에 포함될 수 있다. 게다가, 컴퓨터 저장 매체는 전파 신호가 아니지만, 컴퓨터 저장 매체는 인공적으로 생성되는 전파 신호에 인코딩된 컴퓨터 프로그램 명령들의 소스 또는 목적지일 수 있다. 컴퓨터 저장 매체는 또한, 하나 이상의 별개의 물리적 컴포넌트들 또는 미디어(예컨대, 다수의 CD들, 디스크들, 또는 다른 저장 디바이스들)일 수 있거나 또는 이에 포함될 수 있다.
[00153] 본 명세서에 설명된 동작들은 하나 이상의 컴퓨터-판독가능 저장 디바이스들 상에 저장되거나 또는 다른 소스들로부터 수신된 데이터에 대해 데이터 프로세싱 장치에 의해 수행되는 동작들로서 구현될 수 있다.
[00154] "데이터 프로세싱 장치"란 용어는, 예로서 프로그래머블 프로세서, 컴퓨터, 시스템 온 어 칩(system on a chip), 또는 다수의 것들, 또는 이들의 결합들을 비롯해, 데이터를 프로세싱하기 위한 모든 종류들의 장치, 디바이스들, 및 머신들을 포함한다. 장치는 특수 목적 논리 회로소자, 예컨대, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)를 포함할 수 있다. 장치는 또한, 하드웨어 외에도, 문제의 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예컨대, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영체제, 크로스-플랫폼 런타임 환경, 가상 머신, 또는 이들 중 하나 이상의 결합을 구성하는 코드를 포함할 수 있다. 장치 및 실행 환경은 다양한 상이한 컴퓨팅 모델 인프라스트럭처들, 이를테면, 웹 서비스들, 분산 컴퓨팅 및 그리드 컴퓨팅 인프라스트럭처들을 구현할 수 있다.
[00155] 컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드로서 또한 알려짐)은 컴파일링 또는 인터프리팅되는 언어들, 선언적 또는 절차적 언어들을 비롯한 임의의 형태의 프로그래밍 언어로 쓰여질 수 있고, 이 컴퓨터 프로그램은 독립형 프로그램으로서 또는 모듈, 컴포넌트, 서브루틴, 오브젝트, 또는 컴퓨팅 환경에서 사용하기에 적절한 다른 유닛으로서를 비롯한 임의의 형태로 배치될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 대응할 수 있지만, 파일 시스템의 파일에 대응할 필요는 없다. 프로그램은 다른 프로그램들 또는 데이터(예컨대, 마크업 언어 문서에 저장된 하나 이상의 스크립트들)를 보유하는 파일의 부분에, 문제의 프로그램에 전용되는 단일 파일에, 또는 다수의 조정된 파일들(예컨대, 하나 이상의 모듈들, 서브 프로그램들, 또는 코드의 부분들을 저장하는 파일들)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서, 또는 하나의 사이트에 위치되거나 또는 다수의 사이트들에 걸쳐 분산되고 통신 네트워크에 의해 상호연결되는 다수의 컴퓨터들 상에서 실행되도록 배치될 수 있다.
[00156] 본 명세서에 설명된 프로세스들 및 논리 흐름들은, 입력 데이터에 대해 동작하고 출력을 생성함으로써 액션들을 수행하기 위해 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그래머블 프로세서들에 의해 수행될 수 있다. 프로세스들 및 논리 흐름들은 또한, 특수 목적 논리 회로소자, 예컨대, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)에 의해 수행될 수 있고, 장치가 또한 이들로서 구현될 수 있다.
[00157] 컴퓨터 프로그램의 실행에 적절한 프로세서들은, 예로서, 범용 및 특수 목적 마이크로프로세서들 둘 모두, 그리고 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서들을 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 본질적 엘리먼트들은 명령들에 따라 액션들을 수행하기 위한 프로세서, 그리고 명령들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스들, 예컨대, 자기, 마그네토 광학 디스크들 또는 광학 디스크들을 포함할 것이거나, 또는 이들로부터 데이터를 수신하거나 이들에 데이터를 전송하거나 또는 둘 모두를 위해 동작가능하게 커플링될 것이다. 그러나, 컴퓨터가 이러한 디바이스들을 가질 필요는 없다. 게다가, 컴퓨터는 다른 디바이스, 예컨대, 단지 몇 개만 말하자면, 모바일 텔레폰, PDA(personal digital assistant), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기, 또는 휴대용 저장 디바이스(예컨대, USB(universal serial bus) 플래시 드라이브)에 임베딩될 수 있다. 컴퓨터 프로그램 명령들 및 데이터를 저장하기에 적절한 디바이스들은, 예로서 반도체 메모리 디바이스들, 예컨대, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대, 내부 하드 디스크들 또는 탈착가능 디스크들; 마그네토 광학 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 비롯해 모든 형태들의 비 휘발성 메모리, 미디어 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 논리 회로소자에 의해 보충되거나 또는 이에 통합될 수 있다.
[00158] 사용자와의 상호작용을 제공하기 위해, 본 명세서에 설명된 발명의 요지의 실시예들은 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예컨대, CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터, 그리고 사용자가 입력을 컴퓨터에 제공할 수 있게 하는 키보드 및 포인팅 디바이스, 예컨대, 마우스 또는 트랙볼을 갖는 컴퓨터 상에 구현될 수 있다. 사용자와의 상호작용을 제공하기 위해 다른 종류들의 디바이스들도 또한 사용될 수 있으며; 예컨대, 사용자에게 제공되는 피드백은 임의의 형태의 센서 피드백, 예컨대, 시각 피드백, 청각 피드백, 또는 촉각 피드백일 수 있고; 사용자로부터의 입력은 음향, 스피치, 또는 촉각 입력을 비롯한 임의의 형태로 수신될 수 있다. 부가하여, 컴퓨터는 사용자에 의해 사용되는 디바이스에 문서들을 전송함으로써, 예컨대, 사용자의 사용자 디바이스 상의 웹 브라우저로부터 수신된 요청들에 대한 응답으로 웹 페이지들을 웹 브라우저에 전송함으로써 그리고 이 디바이스로부터 문서들을 수신함으로써 사용자와 상호작용할 수 있다.
[00159] 본 명세서에 설명된 발명의 요지의 실시예들은 컴퓨팅 시스템으로 구현될 수 있고, 이 컴퓨팅 시스템은 예컨대 데이터 서버로서 백 엔드 컴포넌트를 포함하거나, 또는 미들웨어 컴포넌트, 예컨대, 애플리케이션 서버를 포함하거나, 또는 프론트 엔드 컴포넌트, 예컨대, 사용자가 본 명세서에 설명된 발명의 요지의 구현과 상호작용할 수 있게 하는 그래픽 사용자 인터페이스 또는 웹 브라우저를 갖는 사용자 컴퓨터를 포함하거나, 또는 하나 이상의 이러한 백 엔드, 미들웨어, 또는 프론트 엔드 컴포넌트들의 임의의 결합을 포함한다. 시스템의 컴포넌트들은 임의의 형태 또는 디지털 데이터 통신 매체, 예컨대, 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 로컬 영역 네트워크(local area network)("LAN") 및 광역 네트워크(wide area network)("WAN"), 네트워크 간(예컨대, 인터넷), 및 피어-투-피어 네트워크들(예컨대, 애드 혹 피어-투-피어 네트워크들)을 포함한다.
[00160] 컴퓨팅 시스템은 사용자들 및 서버들을 포함할 수 있다. 사용자 및 서버는 일반적으로 서로 원격이며, 통상적으로 통신 네트워크를 통해 상호작용한다. 사용자와 서버의 관계는, 개개의 컴퓨터들 상에서 실행되고 서로 사용자-서버 관계를 갖는 컴퓨터 프로그램들 덕분에 생긴다. 일부 실시예들에서, (예컨대, 사용자 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고 이 사용자로부터 사용자 입력을 수신하는 목적들을 위해) 서버는 데이터(예컨대, HTML 페이지)를 사용자 디바이스에 송신한다. 사용자 디바이스에서 생성된 데이터(예컨대, 사용자 상호작용의 결과)는 사용자 디바이스로부터 서버에서 수신될 수 있다.
[00161] 본 명세서가 많은 특정 구현 세부사항들을 포함하지만, 이들은 임의의 발명들 또는 청구될 수 있는 무엇의 범위에 대한 제한들로서 해석되는 것이 아니라, 특정 발명들의 특정 실시예들에 특정한 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에 설명되는 일정한 특징들은 또한, 결합하여 단일 실시예로 구현될 수 있다. 역으로, 단일 실시예의 맥락에서 설명되는 다양한 특징들이 또한, 다수의 실시예들에서 별개로 또는 임의의 적절한 하위결합으로 구현될 수 있다. 게다가, 특징들이 일정한 결합들에서 작동하는 것으로서 위에서 설명되고 심지어 초기에 이와 같이 청구될 수 있지만, 청구되는 결합으로부터의 하나 이상의 특징들은 일부 경우들에서 이 결합으로부터 절제될 수 있고, 청구되는 결합은 하위결합 또는 하위결합의 변형으로 지향될 수 있다.
[00162] 유사하게, 동작들이 도면들에서 특정한 순서로 묘사되지만, 이것이, 바람직한 결과들을 달성하기 위해, 이러한 동작들이 도시된 특정한 순서로 또는 순차적인 순서로 수행되거나 또는 모든 예시된 동작들이 수행됨을 요구하는 것으로서 이해되지 않아야 한다. 일정한 상황들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 게다가, 위에서 설명된 실시예들의 다양한 시스템 컴포넌트들의 분리가 모든 실시예들에서 이러한 분리를 요구하는 것으로서 이해되지 않아야 하며, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 또는 다수의 소프트웨어 제품들로 패키징될 수 있음이 이해되어야 한다.
[00163] 따라서, 발명의 요지의 특정 실시예들이 설명되었다. 다른 실시예들이 하기의 청구항들의 범위 내에 있다. 일부 경우들에서, 청구항들에서 나열되는 액션들은 상이한 순서로 수행될 수 있고, 바람직한 결과들을 여전히 달성할 수 있다. 부가하여, 첨부된 도면들에서 묘사된 프로세스들이 바람직한 결과들을 달성하기 위해 반드시 도시된 특정한 순서, 또는 순차적 순서를 요구하는 것은 아니다. 일정한 구현들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다.

Claims (66)

  1. 하나 이상의 데이터 프로세싱 장치에 의해 구현되는 방법으로서,
    클라이언트 디바이스로부터 데이터베이스 뮤테이션(mutation)들의 로그를 수신하는 단계 ― 상기 데이터베이스 뮤테이션들의 로그는 상기 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은,
    상기 데이터베이스에 포함된 엔티티,
    상기 엔티티에 대한 동작, 및
    상기 엔티티에 대한 클라이언트 버전 넘버를 특정함 ―;
    상기 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 단계;
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱(collapsing)하기에 적격임을 결정하는 단계; 및
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계
    를 포함하는,
    방법.
  2. 제 1 항에 있어서,
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 단계는,
    상기 충돌 해소 정책에 기반하여 원격 데이터베이스에 적용될, 상기 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션들을 식별하는 단계
    를 포함하는,
    방법.
  3. 제 2 항에 있어서,
    상기 2 이상의 데이터베이스 뮤테이션들을 콜랩싱하는 단계는,
    상기 2 이상의 데이터베이스 뮤테이션들 중 상기 제1 데이터베이스 뮤테이션에 후속하여 발생하는 각각의 다른 데이터베이스 뮤테이션과 상기 제1 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계
    를 포함하는,
    방법.
  4. 제 3 항에 있어서,
    상기 각각의 다른 데이터베이스 뮤테이션과 상기 제1 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계는,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 상기 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계
    를 포함하는,
    방법.
  5. 제 1 항에 있어서,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들의 각각은 상기 충돌 해소 정책을 특정하는,
    방법.
  6. 제 1 항에 있어서,
    상기 단일 데이터베이스 뮤테이션에 대해 그리고 상기 로그에 포함된 각각의 다른 데이터베이스 뮤테이션에 대해,
    상기 뮤테이션에 의해 특정된 엔티티에 대한 베이스 버전 넘버를 식별하기 위해 상기 데이터베이스의 원격 버전에 질의하는 단계;
    상기 엔티티에 대한 상기 클라이언트 버전 넘버가 상기 엔티티에 대한 상기 베이스 버전 넘버에 매칭하는지 여부를 결정하는 단계;
    상기 클라이언트 버전 넘버가 상기 베이스 버전 넘버에 매칭한다고 결정하는 것에 대한 응답으로,
    상기 데이터베이스의 상기 원격 버전에 대해, 상기 뮤테이션에 의해 특정된 동작을 수행하는 단계;
    상기 클라이언트 디바이스에 대한 응답 데이터를 생성하는 단계 ― 상기 응답 데이터는 상기 엔티티에 대한 업데이팅된 베이스 버전 넘버를 포함함 ―; 및
    상기 클라이언트 버전 넘버가 상기 베이스 버전 넘버에 매칭하지 않는다고 결정하는 것에 대한 응답으로,
    충돌 해소 정책에 기반하여, 상기 뮤테이션에 의해 특정된 동작이 수행될 것인지 여부를 결정하는 단계;
    상기 데이터베이스의 상기 원격 버전에 대해, 상기 뮤테이션에 의해 특정된 동작이 수행될 것임이 결정되는 경우에만, 상기 뮤테이션에 의해 특정된 동작을 수행하는 단계; 및
    상기 클라이언트 디바이스에 대한 충돌 응답 데이터를 생성하는 단계
    를 더 포함하고,
    상기 충돌 응답 데이터는 상기 뮤테이션에 의해 특정된 동작이 수행되었는지 여부를 특정하는,
    방법.
  7. 제 6 항에 있어서,
    상기 클라이언트 디바이스에 대한 상기 충돌 응답 데이터는, 상기 뮤테이션에 의해 특정된 엔티티에 대해, 상기 데이터베이스의 상기 원격 버전에 저장된 상기 엔티티에 대한 현재 버전을 포함하는,
    방법.
  8. 시스템으로서,
    하나 이상의 데이터 프로세싱 장치; 및
    명령들을 저장하는 데이터 스토어
    를 포함하고,
    상기 명령들은, 상기 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    클라이언트 디바이스로부터 데이터베이스 뮤테이션들의 로그를 수신하는 동작 ― 상기 데이터베이스 뮤테이션들의 로그는 상기 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은,
    상기 데이터베이스에 포함된 엔티티,
    상기 엔티티에 대한 동작, 및
    상기 엔티티에 대한 클라이언트 버전 넘버를 특정함 ―;
    상기 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 동작;
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작; 및
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는 동작들을 수행하게 하는,
    시스템.
  9. 제 8 항에 있어서,
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작은,
    상기 충돌 해소 정책에 기반하여 원격 데이터베이스에 적용될, 상기 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션들을 식별하는 동작
    을 포함하는,
    시스템.
  10. 제 9 항에 있어서,
    상기 2 이상의 데이터베이스 뮤테이션들을 콜랩싱하는 동작은,
    상기 2 이상의 데이터베이스 뮤테이션들 중 상기 제1 데이터베이스 뮤테이션에 후속하여 발생하는 각각의 다른 데이터베이스 뮤테이션과 상기 제1 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는,
    시스템.
  11. 제 10 항에 있어서,
    상기 각각의 다른 데이터베이스 뮤테이션과 상기 제1 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작은,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 상기 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는,
    시스템.
  12. 제 8 항에 있어서,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들의 각각은 상기 충돌 해소 정책을 특정하는,
    시스템.
  13. 제 8 항에 있어서,
    상기 동작들은,
    상기 단일 데이터베이스 뮤테이션에 대해 그리고 상기 로그에 포함된 각각의 다른 데이터베이스 뮤테이션에 대해,
    상기 뮤테이션에 의해 특정된 엔티티에 대한 베이스 버전 넘버를 식별하기 위해 상기 데이터베이스의 원격 버전에 질의하는 동작;
    상기 엔티티에 대한 상기 클라이언트 버전 넘버가 상기 엔티티에 대한 상기 베이스 버전 넘버에 매칭하는지 여부를 결정하는 동작;
    상기 클라이언트 버전 넘버가 상기 베이스 버전 넘버에 매칭한다고 결정하는 것에 대한 응답으로,
    상기 데이터베이스의 상기 원격 버전에 대해, 상기 뮤테이션에 의해 특정된 동작을 수행하는 동작;
    상기 클라이언트 디바이스에 대한 응답 데이터를 생성하는 동작 ― 상기 응답 데이터는 상기 엔티티에 대한 업데이팅된 베이스 버전 넘버를 포함함 ―; 및
    상기 클라이언트 버전 넘버가 상기 베이스 버전 넘버에 매칭하지 않는다고 결정하는 것에 대한 응답으로,
    충돌 해소 정책에 기반하여, 상기 뮤테이션에 의해 특정된 동작이 수행될 것인지 여부를 결정하는 동작;
    상기 데이터베이스의 상기 원격 버전에 대해, 상기 뮤테이션에 의해 특정된 동작이 수행될 것임이 결정되는 경우에만, 상기 뮤테이션에 의해 특정된 동작을 수행하는 동작; 및
    상기 클라이언트 디바이스에 대한 충돌 응답 데이터를 생성하는 동작
    을 더 포함하고,
    상기 충돌 응답 데이터는 상기 뮤테이션에 의해 특정된 동작이 수행되었는지 여부를 특정하는,
    시스템.
  14. 제 13 항에 있어서,
    상기 클라이언트 디바이스에 대한 상기 충돌 응답 데이터는, 상기 뮤테이션에 의해 특정된 엔티티에 대해, 상기 데이터베이스의 상기 원격 버전에 저장된 상기 엔티티에 대한 현재 버전을 포함하는,
    시스템.
  15. 컴퓨터 판독가능 매체로서,
    명령들을 저장하며, 상기 명령들은, 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    클라이언트 디바이스로부터 데이터베이스 뮤테이션들의 로그를 수신하는 동작 ― 상기 데이터베이스 뮤테이션들의 로그는 상기 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은,
    상기 데이터베이스에 포함된 엔티티,
    상기 엔티티에 대한 동작, 및
    상기 엔티티에 대한 클라이언트 버전 넘버를 특정함 ―;
    상기 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 동작;
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작; 및
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는 동작들을 수행하게 하는,
    컴퓨터 판독가능 매체.
  16. 제 15 항에 있어서,
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작은,
    상기 충돌 해소 정책에 기반하여 원격 데이터베이스에 적용될, 상기 2 이상의 데이터베이스 뮤테이션들 중 제1 데이터베이스 뮤테이션들을 식별하는 동작
    을 포함하는,
    컴퓨터 판독가능 매체.
  17. 제 16 항에 있어서,
    상기 2 이상의 데이터베이스 뮤테이션들을 콜랩싱하는 동작은,
    상기 2 이상의 데이터베이스 뮤테이션들 중 상기 제1 데이터베이스 뮤테이션에 후속하여 발생하는 각각의 다른 데이터베이스 뮤테이션과 상기 제1 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는,
    컴퓨터 판독가능 매체.
  18. 제 17 항에 있어서,
    상기 각각의 다른 데이터베이스 뮤테이션과 상기 제1 데이터베이스 뮤테이션을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작은,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 상기 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는,
    컴퓨터 판독가능 매체.
  19. 제 15 항에 있어서,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들의 각각은 상기 충돌 해소 정책을 특정하는,
    컴퓨터 판독가능 매체.
  20. 제 15 항에 있어서,
    상기 단일 데이터베이스 뮤테이션에 대해 그리고 상기 로그에 포함된 각각의 다른 데이터베이스 뮤테이션에 대해,
    상기 뮤테이션에 의해 특정된 엔티티에 대한 베이스 버전 넘버를 식별하기 위해 상기 데이터베이스의 원격 버전에 질의하는 동작;
    상기 엔티티에 대한 상기 클라이언트 버전 넘버가 상기 엔티티에 대한 상기 베이스 버전 넘버에 매칭하는지 여부를 결정하는 동작;
    상기 클라이언트 버전 넘버가 상기 베이스 버전 넘버에 매칭한다고 결정하는 것에 대한 응답으로,
    상기 데이터베이스의 상기 원격 버전에 대해, 상기 뮤테이션에 의해 특정된 동작을 수행하는 동작;
    상기 클라이언트 디바이스에 대한 응답 데이터를 생성하는 동작 ― 상기 응답 데이터는 상기 엔티티에 대한 업데이팅된 베이스 버전 넘버를 포함함 ―; 및
    상기 클라이언트 버전 넘버가 상기 베이스 버전 넘버에 매칭하지 않는다고 결정하는 것에 대한 응답으로,
    충돌 해소 정책에 기반하여, 상기 뮤테이션에 의해 특정된 동작이 수행될 것인지 여부를 결정하는 동작;
    상기 데이터베이스의 상기 원격 버전에 대해, 상기 뮤테이션에 의해 특정된 동작이 수행될 것임이 결정되는 경우에만, 상기 뮤테이션에 의해 특정된 동작을 수행하는 동작; 및
    상기 클라이언트 디바이스에 대한 충돌 응답 데이터를 생성하는 동작
    을 더 포함하고,
    상기 충돌 응답 데이터는 상기 뮤테이션에 의해 특정된 동작이 수행되었는지 여부를 특정하는,
    컴퓨터 판독가능 매체.
  21. 제 20 항에 있어서,
    상기 클라이언트 디바이스에 대한 상기 충돌 응답 데이터는, 상기 뮤테이션에 의해 특정된 엔티티에 대해, 상기 데이터베이스의 상기 원격 버전에 저장된 상기 엔티티에 대한 현재 버전을 포함하는,
    컴퓨터 판독가능 매체.
  22. 제 1 항에 있어서,
    상기 충돌 해소 정책은 상기 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책인,
    방법.
  23. 제 8 항에 있어서,
    상기 충돌 해소 정책은 상기 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책인,
    시스템.
  24. 제 15 항에 있어서,
    상기 충돌 해소 정책은 상기 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책인,
    컴퓨터 판독가능 매체.
  25. 하나 이상의 데이터 프로세싱 장치에 의해 구현되는 방법으로서,
    클라이언트 디바이스 상에 저장된 데이터베이스 뮤테이션들의 로그에 액세싱하는 단계 ― 상기 데이터베이스 뮤테이션들의 로그는 상기 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은,
    상기 데이터베이스에 포함된 엔티티,
    상기 엔티티에 대한 동작, 및
    상기 엔티티에 대한 클라이언트 버전 넘버를 특정함 ―;
    상기 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 단계;
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 단계; 및
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계
    를 포함하는,
    방법.
  26. 제 25 항에 있어서,
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 단계는,
    상기 2 이상의 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과가 상기 데이터베이스의 원격 버전 상의 대응하는 데이터베이스 엔티티들에 대해 저장된 값들에 독립적임을 결정하는 단계
    를 포함하는,
    방법.
  27. 제 25 항에 있어서,
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계는,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 상기 단일 데이터베이스 뮤테이션으로 콜랩싱하는 단계
    를 포함하는,
    방법.
  28. 제 25 항에 있어서,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들의 각각은 상기 충돌 해소 정책을 특정하는,
    방법.
  29. 제 25 항에 있어서,
    상기 충돌 해소 정책은 상기 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책인,
    방법.
  30. 제 25 항에 있어서,
    데이터베이스 뮤테이션들의 콜랩스드 로그(collapsed log)를 데이터베이스 서버에 제공하는 단계
    를 더 포함하고,
    상기 데이터베이스 뮤테이션들의 콜랩스드 로그는 상기 데이터베이스 뮤테이션들의 로그에 있는 콜랩싱되지 않은 각각의 뮤테이션 및 상기 단일 데이터베이스 뮤테이션을 포함하는,
    방법.
  31. 시스템으로서,
    하나 이상의 데이터 프로세싱 장치; 및
    명령들을 저장하는 데이터 스토어
    를 포함하고, 상기 명령들은, 상기 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    클라이언트 디바이스 상에 저장된 데이터베이스 뮤테이션들의 로그에 액세싱하는 동작 ― 상기 데이터베이스 뮤테이션들의 로그는 상기 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은,
    상기 데이터베이스에 포함된 엔티티,
    상기 엔티티에 대한 동작, 및
    상기 엔티티에 대한 클라이언트 버전 넘버를 특정함 ―;
    상기 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 동작;
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작; 및
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는 동작들을 수행하게 하는,
    시스템.
  32. 제 31 항에 있어서,
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작은,
    상기 2 이상의 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과가 상기 데이터베이스의 원격 버전 상의 대응하는 데이터베이스 엔티티들에 대해 저장된 값들에 독립적임을 결정하는 동작
    을 포함하는,
    시스템.
  33. 제 31 항에 있어서,
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작은,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 상기 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는,
    시스템.
  34. 제 31 항에 있어서,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들의 각각은 상기 충돌 해소 정책을 특정하는,
    시스템.
  35. 제 31 항에 있어서,
    상기 충돌 해소 정책은 상기 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책인,
    시스템.
  36. 제 31 항에 있어서,
    상기 동작들은,
    데이터베이스 뮤테이션들의 콜랩스드 로그를 데이터베이스 서버에 제공하는 동작
    을 더 포함하고,
    상기 데이터베이스 뮤테이션들의 콜랩스드 로그는 상기 데이터베이스 뮤테이션들의 로그에 있는 콜랩싱되지 않은 각각의 뮤테이션 및 상기 단일 데이터베이스 뮤테이션을 포함하는,
    시스템.
  37. 컴퓨터 판독가능 매체로서,
    명령들을 저장하며, 상기 명령들은, 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    클라이언트 디바이스 상에 저장된 데이터베이스 뮤테이션들의 로그에 액세싱하는 동작 ― 상기 데이터베이스 뮤테이션들의 로그는 상기 클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대해 이전에 이루어진 변경들을 표시하며, 각각의 데이터베이스 뮤테이션은,
    상기 데이터베이스에 포함된 엔티티,
    상기 엔티티에 대한 동작, 및
    상기 엔티티에 대한 클라이언트 버전 넘버를 특정함 ―;
    상기 데이터베이스 뮤테이션들의 로그에서, 동일한 엔티티에 대해 동일한 클라이언트 버전 넘버를 각각 특정하는 2 이상의 데이터베이스 뮤테이션들을 식별하는 동작;
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작; 및
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는 동작들을 수행하게 하는,
    컴퓨터 판독가능 매체.
  38. 제 37 항에 있어서,
    충돌 해소 정책에 기반하여, 상기 2 이상의 데이터베이스 뮤테이션들이 콜랩싱하기에 적격임을 결정하는 동작은,
    상기 2 이상의 데이터베이스 뮤테이션들에 의해 특정된 동작들의 결과가 상기 데이터베이스의 원격 버전 상의 대응하는 데이터베이스 엔티티들에 대해 저장된 값들에 독립적임을 결정하는 동작
    을 포함하는,
    컴퓨터 판독가능 매체.
  39. 제 37 항에 있어서,
    상기 2 이상의 데이터베이스 뮤테이션들을 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작은,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들로부터의 가장 최근의 데이터베이스 뮤테이션을 상기 단일 데이터베이스 뮤테이션으로 콜랩싱하는 동작
    을 포함하는,
    컴퓨터 판독가능 매체.
  40. 제 37 항에 있어서,
    콜랩싱하기에 적격인 상기 2 이상의 데이터베이스 뮤테이션들의 각각은 상기 충돌 해소 정책을 특정하는,
    컴퓨터 판독가능 매체.
  41. 제 37 항에 있어서,
    상기 충돌 해소 정책은 상기 데이터베이스의 원격 버전과 연관된 디폴트 충돌 해소 정책인,
    컴퓨터 판독가능 매체.
  42. 제 37 항에 있어서,
    상기 동작들은,
    데이터베이스 뮤테이션들의 콜랩스드 로그를 데이터베이스 서버에 제공하는 동작
    을 더 포함하고,
    상기 데이터베이스 뮤테이션들의 콜랩스드 로그는 상기 데이터베이스 뮤테이션들의 로그에 있는 콜랩싱되지 않은 각각의 뮤테이션 및 상기 단일 데이터베이스 뮤테이션을 포함하는,
    컴퓨터 판독가능 매체.
  43. 하나 이상의 데이터 프로세싱 장치에 의해 구현되는 방법으로서,
    클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 요청을 상기 클라이언트 디바이스로부터 수신하는 단계 ― 상기 요청은 i) 상기 데이터베이스의 상기 클라이언트 버전에 대한 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 상기 데이터베이스의 상기 클라이언트 버전에 포함된 특정 데이터베이스 엔티티를 특정하는 제1 커서를 포함함 ―;
    상기 클라이언트 디바이스로부터 원격인 상기 데이터베이스의 원격 버전에 액세싱하는 단계 ― 상기 데이터베이스의 상기 원격 버전은 복수의 데이터베이스 엔티티들을 포함하며, 각각의 데이터베이스 엔티티는 상기 데이터베이스에 대한 상기 복수의 데이터베이스 엔티티들에 걸쳐 단조롭게 증가하는 방식으로 할당된 원격 엔티티 버전을 가짐 ―;
    상기 특정 데이터베이스 엔티티에 매칭하는 데이터베이스 엔티티로 시작하는, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 복수의 데이터베이스 엔티티들 각각에 대해,
    상기 데이터베이스 엔티티의 원격 엔티티 버전 넘버와 상기 클라이언트 데이터베이스 버전 넘버의 비교에 기반하여, 상기 데이터베이스 엔티티가 업데이팅되었는지 여부를 결정하는 단계; 및
    업데이팅된 각각의 데이터베이스 엔티티에 대해, 엔티티 업데이트를 상기 클라이언트 디바이스에 제공하는 단계; 및
    적어도 하나의 엔티티 업데이트를 이용하여 원격 데이터베이스 버전 넘버를 상기 클라이언트 디바이스에 제공하는 단계
    를 포함하고,
    상기 원격 데이터베이스 버전 넘버는 상기 데이터베이스의 상기 원격 버전에서 가장 높은 원격 엔티티 버전 넘버인,
    방법.
  44. 제 43 항에 있어서,
    상기 데이터베이스 엔티티들의 서브세트는 상기 데이터베이스의 상기 원격 버전의 모든 각각의 데이터베이스 엔티티를 포함하는 것은 아닌,
    방법.
  45. 제 44 항에 있어서,
    상기 데이터베이스 엔티티들의 서브세트는 하나 이상의 시스템 제약들이 충족되는 것에 기반하여 동적으로 결정되는,
    방법.
  46. 제 45 항에 있어서,
    상기 하나 이상의 시스템 제약들은,
    업데이트들을 위한 요청에 대해 허용되는 최대 프로세싱 시간; 또는
    업데이트들을 위한 요청에 대해 허용되는 최대 업데이트 사이즈
    를 포함하는,
    방법.
  47. 제 43 항에 있어서,
    상기 데이터베이스의 상기 클라이언트 버전에 대한 업데이트들을 위한 제2 요청을 상기 클라이언트 디바이스로부터 수신하는 단계
    를 더 포함하고,
    상기 제2 요청은 i) 엔티티 업데이트를 이용하여 상기 클라이언트 디바이스에 제공된 상기 원격 데이터베이스 버전 넘버에 매칭하는 제2 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 상기 데이터베이스의 상기 클라이언트 버전에 포함되며, 상기 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 마지막 데이터베이스 엔티티에 후속하여 순서화되는 제2 데이터베이스 엔티티를 특정하는 제2 커서를 포함하는,
    방법.
  48. 제 43 항에 있어서,
    상기 데이터베이스의 상기 원격 버전에 대한 삼차원 테이블을 업데이팅하는 단계
    를 더 포함하고,
    상기 삼차원 테이블은 현재 시간 이전의 미리결정된 시간 기간 내에 발생한, 상기 데이터베이스의 상기 원격 버전에 대한 모든 각각의 업데이트를 특정하는,
    방법.
  49. 시스템으로서,
    하나 이상의 데이터 프로세싱 장치; 및
    명령들을 저장하는 데이터 스토어
    를 포함하고, 상기 명령들은, 상기 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 요청을 상기 클라이언트 디바이스로부터 수신하는 동작 ― 상기 요청은 i) 상기 데이터베이스의 상기 클라이언트 버전에 대한 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 상기 데이터베이스의 상기 클라이언트 버전에 포함된 특정 데이터베이스 엔티티를 특정하는 제1 커서를 포함함 ―;
    상기 클라이언트 디바이스로부터 원격인 상기 데이터베이스의 원격 버전에 액세싱하는 동작 ― 상기 데이터베이스의 원격 버전은 복수의 데이터베이스 엔티티들을 포함하며, 각각의 데이터베이스 엔티티는 상기 데이터베이스에 대한 상기 복수의 데이터베이스 엔티티들에 걸쳐 단조롭게 증가하는 방식으로 할당된 원격 엔티티 버전을 가짐 ―;
    상기 특정 데이터베이스 엔티티에 매칭하는 데이터베이스 엔티티로 시작하는, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 복수의 데이터베이스 엔티티들 각각에 대해,
    상기 데이터베이스 엔티티의 원격 엔티티 버전 넘버와 상기 클라이언트 데이터베이스 버전 넘버의 비교에 기반하여, 상기 데이터베이스 엔티티가 업데이팅되었는지 여부를 결정하는 동작; 및
    업데이팅된 각각의 데이터베이스 엔티티에 대해, 엔티티 업데이트를 상기 클라이언트 디바이스에 제공하는 동작; 및
    적어도 하나의 엔티티 업데이트를 이용하여 원격 데이터베이스 버전 넘버를 상기 클라이언트 디바이스에 제공하는 동작
    을 포함하는 동작들을 수행하게 하고,
    상기 원격 데이터베이스 버전 넘버는 상기 데이터베이스의 상기 원격 버전에서 가장 높은 원격 엔티티 버전 넘버인,
    시스템.
  50. 제 49 항에 있어서,
    상기 데이터베이스 엔티티들의 서브세트는 상기 데이터베이스의 상기 원격 버전의 모든 각각의 데이터베이스 엔티티를 포함하는 것은 아닌,
    시스템.
  51. 제 50 항에 있어서,
    상기 데이터베이스 엔티티들의 서브세트는 하나 이상의 시스템 제약들이 충족되는 것에 기반하여 동적으로 결정되는,
    시스템.
  52. 제 51 항에 있어서,
    상기 하나 이상의 시스템 제약들은,
    업데이트들을 위한 요청에 대해 허용되는 최대 프로세싱 시간; 또는
    업데이트들을 위한 요청에 대해 허용되는 최대 업데이트 사이즈
    를 포함하는,
    시스템.
  53. 제 49 항에 있어서,
    상기 동작들은,
    상기 데이터베이스의 상기 클라이언트 버전에 대한 업데이트들을 위한 제2 요청을 상기 클라이언트 디바이스로부터 수신하는 동작
    을 더 포함하고,
    상기 제2 요청은 i) 엔티티 업데이트를 이용하여 상기 클라이언트 디바이스에 제공된 상기 원격 데이터베이스 버전 넘버에 매칭하는 제2 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 상기 데이터베이스의 상기 클라이언트 버전에 포함되며, 상기 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 마지막 데이터베이스 엔티티에 후속하여 순서화되는 제2 데이터베이스 엔티티를 특정하는 제2 커서를 포함하는,
    시스템.
  54. 제 49 항에 있어서,
    상기 동작들은,
    상기 데이터베이스의 상기 원격 버전에 대한 삼차원 테이블을 업데이팅하는 동작
    을 더 포함하고,
    상기 삼차원 테이블은 현재 시간 이전의 미리결정된 시간 기간 내에 발생한, 상기 데이터베이스의 상기 원격 버전에 대한 모든 각각의 업데이트를 특정하는,
    시스템.
  55. 컴퓨터 판독가능 매체로서,
    명령들을 저장하며, 상기 명령들은, 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    클라이언트 디바이스 상에 저장된 데이터베이스의 클라이언트 버전에 대한 업데이트들을 위한 요청을 상기 클라이언트 디바이스로부터 수신하는 동작 ― 상기 요청은 i) 상기 데이터베이스의 상기 클라이언트 버전에 대한 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 상기 데이터베이스의 상기 클라이언트 버전에 포함된 특정 데이터베이스 엔티티를 특정하는 제1 커서를 포함함 ―;
    상기 클라이언트 디바이스로부터 원격인 상기 데이터베이스의 원격 버전에 액세싱하는 동작 ― 상기 데이터베이스의 상기 원격 버전은 복수의 데이터베이스 엔티티들을 포함하며, 각각의 데이터베이스 엔티티는 상기 데이터베이스에 대한 상기 복수의 데이터베이스 엔티티들에 걸쳐 단조롭게 증가하는 방식으로 할당된 원격 엔티티 버전을 가짐 ―;
    상기 특정 데이터베이스 엔티티에 매칭하는 데이터베이스 엔티티로 시작하는, 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 복수의 데이터베이스 엔티티들 각각에 대해,
    상기 데이터베이스 엔티티의 원격 엔티티 버전 넘버와 상기 클라이언트 데이터베이스 버전 넘버의 비교에 기반하여, 상기 데이터베이스 엔티티가 업데이팅되었는지 여부를 결정하는 동작; 및
    업데이팅된 각각의 데이터베이스 엔티티에 대해, 엔티티 업데이트를 상기 클라이언트 디바이스에 제공하는 동작; 및
    적어도 하나의 엔티티 업데이트를 이용하여 원격 데이터베이스 버전 넘버를 상기 클라이언트 디바이스에 제공하는 동작
    을 포함하는 동작들을 수행하게 하고,
    상기 원격 데이터베이스 버전 넘버는 상기 데이터베이스의 상기 원격 버전에서 가장 높은 원격 엔티티 버전 넘버인,
    컴퓨터 판독가능 매체.
  56. 제 55 항에 있어서,
    상기 데이터베이스 엔티티들의 서브세트는 상기 데이터베이스의 상기 원격 버전의 모든 각각의 데이터베이스 엔티티를 포함하는 것은 아닌,
    컴퓨터 판독가능 매체.
  57. 제 56 항에 있어서,
    상기 데이터베이스 엔티티들의 서브세트는 하나 이상의 시스템 제약들이 충족되는 것에 기반하여 동적으로 결정되는,
    컴퓨터 판독가능 매체.
  58. 제 57 항에 있어서,
    상기 하나 이상의 시스템 제약들은,
    업데이트들을 위한 요청에 대해 허용되는 최대 프로세싱 시간; 또는
    업데이트들을 위한 요청에 대해 허용되는 최대 업데이트 사이즈
    를 포함하는,
    컴퓨터 판독가능 매체.
  59. 제 55 항에 있어서,
    상기 동작들은,
    상기 데이터베이스의 상기 클라이언트 버전에 대한 업데이트들을 위한 제2 요청을 상기 클라이언트 디바이스로부터 수신하는 동작
    을 더 포함하고,
    상기 제2 요청은 i) 엔티티 업데이트를 이용하여 상기 클라이언트 디바이스에 제공된 상기 원격 데이터베이스 버전 넘버에 매칭하는 제2 클라이언트 데이터베이스 버전 넘버, 및 ⅱ) 상기 데이터베이스의 상기 클라이언트 버전에 포함되며, 상기 데이터베이스 엔티티들의 순서화된 서브세트에 포함된 마지막 데이터베이스 엔티티에 후속하여 순서화되는 제2 데이터베이스 엔티티를 특정하는 제2 커서를 포함하는,
    컴퓨터 판독가능 매체.
  60. 제 55 항에 있어서,
    상기 동작들은,
    상기 데이터베이스의 상기 원격 버전에 대한 삼차원 테이블을 업데이팅하는 동작
    을 더 포함하고,
    상기 삼차원 테이블은 현재 시간 이전의 미리결정된 시간 기간 내에 발생한, 상기 데이터베이스의 상기 원격 버전에 대한 모든 각각의 업데이트를 특정하는,
    컴퓨터 판독가능 매체.
  61. 하나 이상의 데이터 프로세싱 장치에 의해 구현되는 방법으로서,
    특정된 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 카운트를 서버 디바이스로부터 수신하는 단계;
    상기 데이터베이스 엔티티들의 카운트가, 상기 특정된 버전 넘버로서 상기 데이터베이스의 클라이언트 버전에 포함된 엔티티들의 개수를 특정하는 클라이언트 엔티티 카운트 미만임을 결정하는 단계;
    상기 데이터베이스 엔티티들의 카운트가 상기 클라이언트 엔티티 카운트 미만임을 결정하는 것에 대한 응답으로, 상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들에 대한 키들의 목록에 대한 요청을 상기 서버 디바이스에 전송하는 단계;
    상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들의 적절한 서브세트에 대한 키들의 적절한 제1 서브세트를 상기 서버 디바이스로부터 수신하는 단계; 및
    상기 데이터베이스의 상기 클라이언트 버전에 포함된 데이터베이스 엔티티들의 대응하는 적절한 서브세트 내에 있으며, 상기 키들의 적절한 제1 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 상기 데이터베이스의 상기 클라이언트 버전으로부터 제거하는 단계
    를 포함하는,
    방법.
  62. 제 61 항에 있어서,
    상기 데이터베이스 엔티티들의 제1 서브세트와 상이한 데이터베이스 엔티티들의 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트에 대한 제2 요청을 상기 서버 디바이스에 전송하는 단계 ― 상기 제2 요청은 상기 데이터베이스의 제2 버전 넘버를 특정함 ―;
    상기 제2 버전 넘버로서 상기 데이터베이스의 상기 원격 버전에 포함된 데이터베이스 엔티티들의 대응하는 제2 서브세트에 포함된 상기 데이터베이스 엔티티들의 제2 카운트를 상기 서버 디바이스로부터 수신하는 단계;
    상기 데이터베이스 엔티티들의 제2 카운트가, 상기 제2 버전 넘버로서 상기 데이터베이스의 데이터베이스 엔티티들 클라이언트 버전의 상기 제2 서브세트에 포함된 엔티티들의 제2 개수를 특정하는 제2 클라이언트 엔티티 카운트 미만임을 결정하는 단계;
    상기 제2 서브세트에 포함된 상기 데이터베이스 엔티티들에 대한 키들의 제2 목록에 대한 제2 요청을 상기 서버 디바이스에 전송하는 단계;
    상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들의 제3 서브세트에 대한 키들의 제3 서브세트를 상기 서버 디바이스로부터 수신하는 단계; 및
    상기 제3 서브세트에 대응하는, 상기 데이터베이스의 상기 클라이언트 버전에 포함된 데이터베이스 엔티티들의 서브세트 내에 있으며, 상기 키들의 제3 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 상기 데이터베이스의 상기 클라이언트 버전으로부터 제거하는 단계
    를 더 포함하는,
    방법.
  63. 시스템으로서,
    하나 이상의 데이터 프로세싱 장치; 및
    명령들을 저장하는 데이터 스토어
    를 포함하고, 상기 명령들은, 상기 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    특정된 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 카운트를 서버 디바이스로부터 수신하는 동작;
    상기 데이터베이스 엔티티들의 카운트가, 상기 특정된 버전 넘버로서 상기 데이터베이스의 클라이언트 버전에 포함된 엔티티들의 개수를 특정하는 클라이언트 엔티티 카운트 미만임을 결정하는 동작;
    상기 데이터베이스 엔티티들의 카운트가 상기 클라이언트 엔티티 카운트 미만임을 결정하는 것에 대한 응답으로, 상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들에 대한 키들의 목록에 대한 요청을 상기 서버 디바이스에 전송하는 동작;
    상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들의 적절한 서브세트에 대한 키들의 적절한 제1 서브세트를 상기 서버 디바이스로부터 수신하는 동작; 및
    상기 데이터베이스의 상기 클라이언트 버전에 포함된 데이터베이스 엔티티들의 대응하는 적절한 서브세트 내에 있으며, 상기 키들의 적절한 제1 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 상기 데이터베이스의 상기 클라이언트 버전으로부터 제거하는 동작
    을 포함하는 동작들을 수행하게 하는,
    시스템.
  64. 제 63 항에 있어서,
    상기 동작들은,
    상기 데이터베이스 엔티티들의 제1 서브세트와 상이한 데이터베이스 엔티티들의 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트에 대한 제2 요청을 상기 서버 디바이스에 전송하는 동작 ― 상기 제2 요청은 상기 데이터베이스의 제2 버전 넘버를 특정함 ―;
    상기 제2 버전 넘버로서 상기 데이터베이스의 상기 원격 버전에 포함된 데이터베이스 엔티티들의 대응하는 제2 서브세트에 포함된 상기 데이터베이스 엔티티들의 제2 카운트를 상기 서버 디바이스로부터 수신하는 동작;
    상기 데이터베이스 엔티티들의 제2 카운트가, 상기 제2 버전 넘버로서 상기 데이터베이스의 데이터베이스 엔티티들 클라이언트 버전의 상기 제2 서브세트에 포함된 엔티티들의 제2 개수를 특정하는 제2 클라이언트 엔티티 카운트 미만임을 결정하는 동작;
    상기 제2 서브세트에 포함된 상기 데이터베이스 엔티티들에 대한 키들의 제2 목록에 대한 제2 요청을 상기 서버 디바이스에 전송하는 동작;
    상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들의 제3 서브세트에 대한 키들의 제3 서브세트를 상기 서버 디바이스로부터 수신하는 동작; 및
    상기 제3 서브세트에 대응하는, 상기 데이터베이스의 상기 클라이언트 버전에 포함된 데이터베이스 엔티티들의 서브세트 내에 있으며, 키들의 상기 제3 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 상기 데이터베이스의 상기 클라이언트 버전으로부터 제거하는 동작
    을 더 포함하는,
    시스템.
  65. 컴퓨터 판독가능 매체로서,
    명령들을 저장하며, 상기 명령들은, 하나 이상의 데이터 프로세싱 장치에 의해 실행될 때, 상기 하나 이상의 데이터 프로세싱 장치로 하여금,
    특정된 버전 넘버로서 데이터베이스의 원격 버전에 포함된 데이터베이스 엔티티들의 카운트를 서버 디바이스로부터 수신하는 동작;
    상기 데이터베이스 엔티티들의 카운트가, 상기 특정된 버전 넘버로서 상기 데이터베이스의 클라이언트 버전에 포함된 엔티티들의 개수를 특정하는 클라이언트 엔티티 카운트 미만임을 결정하는 동작;
    상기 데이터베이스 엔티티들의 카운트가 상기 클라이언트 엔티티 카운트 미만임을 결정하는 것에 대한 응답으로, 상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들에 대한 키들의 목록에 대한 요청을 상기 서버 디바이스에 전송하는 동작;
    상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들의 적절한 서브세트에 대한 키들의 적절한 제1 서브세트를 상기 서버 디바이스로부터 수신하는 동작; 및
    상기 데이터베이스의 상기 클라이언트 버전에 포함된 데이터베이스 엔티티들의 대응하는 적절한 서브세트 내에 있으며, 상기 키들의 적절한 제1 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 상기 데이터베이스의 상기 클라이언트 버전으로부터 제거하는 동작
    을 포함하는 동작들을 수행하게 하는,
    컴퓨터 판독가능 매체.
  66. 제 65 항에 있어서,
    상기 동작들은,
    상기 데이터베이스 엔티티들의 제1 서브세트와 상이한 데이터베이스 엔티티들의 제2 서브세트에 포함된 데이터베이스 엔티티들의 제2 카운트에 대한 제2 요청을 상기 서버 디바이스에 전송하는 동작 ― 상기 제2 요청은 상기 데이터베이스의 제2 버전 넘버를 특정함 ―;
    상기 제2 버전 넘버로서 상기 데이터베이스의 상기 원격 버전에 포함된 데이터베이스 엔티티들의 대응하는 제2 서브세트에 포함된 상기 데이터베이스 엔티티들의 제2 카운트를 상기 서버 디바이스로부터 수신하는 동작;
    상기 데이터베이스 엔티티들의 제2 카운트가, 상기 제2 버전 넘버로서 상기 데이터베이스의 데이터베이스 엔티티들 클라이언트 버전의 상기 제2 서브세트에 포함된 엔티티들의 제2 개수를 특정하는 제2 클라이언트 엔티티 카운트 미만임을 결정하는 동작;
    상기 제2 서브세트에 포함된 상기 데이터베이스 엔티티들에 대한 키들의 제2 목록에 대한 제2 요청을 상기 서버 디바이스에 전송하는 동작;
    상기 데이터베이스의 상기 원격 버전에 포함된 상기 데이터베이스 엔티티들의 제3 서브세트에 대한 키들의 제3 서브세트를 상기 서버 디바이스로부터 수신하는 동작; 및
    상기 제3 서브세트에 대응하는, 상기 데이터베이스의 상기 클라이언트 버전에 포함된 데이터베이스 엔티티들의 서브세트 내에 있으며, 키들의 상기 제3 서브세트에 포함되지 않은 키를 갖는 임의의 데이터베이스 엔티티들을 상기 데이터베이스의 상기 클라이언트 버전으로부터 제거하는 동작
    을 더 포함하는,
    컴퓨터 판독가능 매체.
KR1020167036226A 2014-06-24 2015-06-24 원격 데이터베이스에 대한 변경사항들의 프로세싱 KR102096249B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462016457P 2014-06-24 2014-06-24
US62/016,457 2014-06-24
PCT/US2015/037406 WO2015200476A2 (en) 2014-06-24 2015-06-24 Processing mutations for a remote database

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020197011589A Division KR20190044145A (ko) 2014-06-24 2015-06-24 원격 데이터베이스에 대한 변경사항들의 처리

Publications (2)

Publication Number Publication Date
KR20170010844A true KR20170010844A (ko) 2017-02-01
KR102096249B1 KR102096249B1 (ko) 2020-04-02

Family

ID=53674289

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197011589A KR20190044145A (ko) 2014-06-24 2015-06-24 원격 데이터베이스에 대한 변경사항들의 처리
KR1020167036226A KR102096249B1 (ko) 2014-06-24 2015-06-24 원격 데이터베이스에 대한 변경사항들의 프로세싱

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020197011589A KR20190044145A (ko) 2014-06-24 2015-06-24 원격 데이터베이스에 대한 변경사항들의 처리

Country Status (7)

Country Link
US (4) US10521417B2 (ko)
EP (2) EP3161685B1 (ko)
JP (1) JP6334009B2 (ko)
KR (2) KR20190044145A (ko)
CN (1) CN106462639B (ko)
AU (2) AU2015279979B2 (ko)
WO (1) WO2015200476A2 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10554772B2 (en) * 2016-03-07 2020-02-04 Microsoft Technology Licensing, Llc Sharing personalized entities among personal digital assistant users
US10509778B2 (en) * 2016-05-25 2019-12-17 Google Llc Real-time transactionally consistent change notifications
US20180173778A1 (en) * 2016-12-16 2018-06-21 Linkedin Corporation Database uniqueness constraints
US11089133B1 (en) 2017-11-22 2021-08-10 Amazon Technologies, Inc. Synchronizing data with delayed subscriptions
US10891282B1 (en) 2017-11-22 2021-01-12 Amazon Technologies, Inc. Mutations with immediate feedback
US11126610B1 (en) * 2017-11-22 2021-09-21 Amazon Technologies, Inc. Conflict resolution in a data proxy
US11159634B1 (en) 2017-11-22 2021-10-26 Amazon Technologies, Inc. Subscription fan out
US11100086B2 (en) * 2018-09-25 2021-08-24 Wandisco, Inc. Methods, devices and systems for real-time checking of data consistency in a distributed heterogenous storage system
US11144309B2 (en) * 2018-10-12 2021-10-12 Bentley Systems, Incorporated Changeset conflict rebasing
US11263193B2 (en) * 2018-11-19 2022-03-01 Clover Health Generating tables using data records
CN109634526B (zh) * 2018-12-11 2022-04-22 浪潮(北京)电子信息产业有限公司 一种基于对象存储的数据操作方法及相关装置
US10855761B1 (en) 2018-12-31 2020-12-01 Facebook, Inc. Techniques for in-place directive execution
US11025576B1 (en) 2018-12-31 2021-06-01 Facebook, Inc. Techniques for backend-specific cursor tracking
US11055314B1 (en) 2018-12-31 2021-07-06 Facebook, Inc. Techniques for a database-driven messaging user interface
US10979500B1 (en) * 2018-12-31 2021-04-13 Facebook, Inc. Techniques for directive-based messaging synchronization
CN110059096A (zh) * 2019-03-16 2019-07-26 平安城市建设科技(深圳)有限公司 数据版本管理方法、装置、设备及存储介质
US10979300B2 (en) * 2019-06-20 2021-04-13 Kaloom Inc. Computing device and methods for synchronizing networking information with a topology server
FR3101975B1 (fr) * 2019-10-11 2023-03-10 Thales Sa Procede de gestion d'une base de donnees partagee par un groupe d'applications, produit programme d'ordinateur et systeme embarque associes
CN112565479B (zh) * 2020-12-07 2023-07-11 北京明略昭辉科技有限公司 设备id的动态生成方法、系统、计算机设备及存储介质
US20230153282A1 (en) * 2021-11-15 2023-05-18 International Business Machines Corporation Chaining version data bi-directionally in data page to avoid additional version data accesses
JP7442110B1 (ja) 2023-06-28 2024-03-04 17Live株式会社 端末、方法及びコンピュータプログラム
CN117061338A (zh) * 2023-08-16 2023-11-14 中科驭数(北京)科技有限公司 基于多网卡的服务网格数据处理方法、装置及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040181291A1 (en) * 2003-03-12 2004-09-16 Microsoft Corporation Customization of process logic in a software system
US20130124638A1 (en) * 2011-11-16 2013-05-16 Tomas Barreto Managing updates at clients used by a user to access a cloud-based collaboration service
US20130173530A1 (en) * 2009-12-14 2013-07-04 Daj Asparna Ltd. Revision control system and method

Family Cites Families (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2604555B2 (ja) * 1994-07-28 1997-04-30 日本電気ソフトウェア株式会社 分散コンピュータシステム
WO1997004391A1 (en) * 1995-07-20 1997-02-06 Novell, Inc. Transaction log management in a disconnectable computer and network
AU6669198A (en) * 1997-02-28 1998-09-18 Siebel Systems, Inc. Partially replicated distributed database with multiple levels of remote clients
JP4137391B2 (ja) * 2001-02-19 2008-08-20 株式会社リコー データ管理装置、方法、プログラム、及び記録媒体
US7606881B2 (en) * 2002-04-25 2009-10-20 Oracle International Corporation System and method for synchronization of version annotated objects
US6976022B2 (en) 2002-09-16 2005-12-13 Oracle International Corporation Method and mechanism for batch processing transaction logging records
US7734565B2 (en) 2003-01-18 2010-06-08 Yahoo! Inc. Query string matching method and apparatus
US20070067373A1 (en) * 2003-11-03 2007-03-22 Steven Higgins Methods and apparatuses to provide mobile applications
FI120165B (fi) * 2004-12-29 2009-07-15 Seven Networks Internat Oy Tietokannan synkronointi matkaviestinverkon kautta
EP1708097A1 (de) 2005-03-31 2006-10-04 Ubs Ag Rechnernetzwerksystem zum Synchronisieren einer zweiten Datenbank mit einer ersten Datenbank sowie Vorgehensweise hierfür
US7483882B1 (en) * 2005-04-11 2009-01-27 Apple Inc. Dynamic management of multiple persistent data stores
US8516093B2 (en) * 2005-04-22 2013-08-20 Intel Corporation Playlist compilation system and method
US8533169B1 (en) * 2005-09-21 2013-09-10 Infoblox Inc. Transactional replication
CN101009516B (zh) * 2006-01-26 2011-05-04 华为技术有限公司 一种进行数据同步的方法、系统及装置
US8892509B2 (en) * 2006-03-28 2014-11-18 Oracle America, Inc. Systems and methods for a distributed in-memory database
US7707136B2 (en) * 2006-03-31 2010-04-27 Amazon Technologies, Inc. System and method for providing high availability data
GB2450048B (en) * 2006-04-03 2010-12-29 Beinsync Ltd Peer to peer syncronization system and method
JP2007280303A (ja) * 2006-04-11 2007-10-25 Brother Ind Ltd 情報通信システム、コンテンツカタログ情報配信方法、及びノード装置等
US8924269B2 (en) * 2006-05-13 2014-12-30 Sap Ag Consistent set of interfaces derived from a business object model
US7792792B2 (en) * 2006-05-22 2010-09-07 Microsoft Corporation Synchronizing structured web site contents
US7912916B2 (en) 2006-06-02 2011-03-22 Google Inc. Resolving conflicts while synchronizing configuration information among multiple clients
US8086698B2 (en) 2006-06-02 2011-12-27 Google Inc. Synchronizing configuration information among multiple clients
CA2565847A1 (en) 2006-10-27 2008-04-27 Cognos Incorporated System and method for controlling model editing and merging
CN101174204A (zh) 2006-10-31 2008-05-07 中兴通讯股份有限公司 数据版本升级的装置
JP4134218B2 (ja) * 2006-11-16 2008-08-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム
US20080140732A1 (en) * 2006-12-11 2008-06-12 Bentley System, Inc. Method and system for sharing file based data
US8103272B2 (en) * 2007-01-07 2012-01-24 Apple Inc. Techniques for database updates
US8332353B2 (en) * 2007-01-31 2012-12-11 International Business Machines Corporation Synchronization of dissimilar databases
US7620659B2 (en) 2007-02-09 2009-11-17 Microsoft Corporation Efficient knowledge representation in data synchronization systems
WO2008157735A2 (en) * 2007-06-19 2008-12-24 Qualcomm Incorporated Methods and apparatus for dataset synchronization in a wireless environment
US20090259744A1 (en) * 2008-04-14 2009-10-15 Kolke Daniel J System and Method for Running a Web-Based Application while Offline
US8185323B1 (en) 2008-01-06 2012-05-22 Degen Zhuo Method of identifying exons and introns and diagnostic uses thereof
US20090182707A1 (en) 2008-01-10 2009-07-16 Dbix Corporation Database changeset management system and method
US9411864B2 (en) * 2008-08-26 2016-08-09 Zeewise, Inc. Systems and methods for collection and consolidation of heterogeneous remote business data using dynamic data handling
EP2246810A1 (en) * 2009-04-30 2010-11-03 Collibra NV/SA Method for ontology evolution
US8930306B1 (en) * 2009-07-08 2015-01-06 Commvault Systems, Inc. Synchronized data deduplication
US20140222758A1 (en) * 2009-08-14 2014-08-07 Ic Manage, Inc. Coherent File State Maintained Among Confederated Repositories By Distributed Workspace Apparatuses Backed Up By a File State Ledgerdemain Store
JP5061166B2 (ja) * 2009-09-04 2012-10-31 Kii株式会社 データ同期システムおよびデータ同期方法
JP5511060B2 (ja) * 2010-03-23 2014-06-04 アイシン・エィ・ダブリュ株式会社 地図更新データ供給装置及び地図更新データ供給プログラム
US8340651B1 (en) * 2010-03-26 2012-12-25 Sprint Communications Company L.P. Reconciling contact information between users
US9380011B2 (en) * 2010-05-28 2016-06-28 Google Inc. Participant-specific markup
US9672022B2 (en) * 2010-06-23 2017-06-06 Microsoft Technology Licensing, Llc Applications including multiple experience modules
US8725682B2 (en) * 2010-09-08 2014-05-13 Daniel J Young Distribution and synchronization of digital objects
US8713098B1 (en) * 2010-10-01 2014-04-29 Google Inc. Method and system for migrating object update messages through synchronous data propagation
WO2012072879A1 (en) * 2010-11-30 2012-06-07 Nokia Corporation Method and apparatus for updating a partitioned index
JP5652228B2 (ja) * 2011-01-25 2015-01-14 富士通株式会社 データベースサーバ装置、データベース更新方法及びデータベース更新プログラム
US9563555B2 (en) * 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
US8797874B2 (en) * 2011-09-09 2014-08-05 Futurewei Technologies, Inc. Apparatus and system for packet routing and forwarding in an interior network
CN102436633A (zh) * 2011-11-30 2012-05-02 华为技术有限公司 数据管理方法及系统、数据库系统
US20130144674A1 (en) * 2011-12-01 2013-06-06 Samsung Electronics Co. Ltd. System and method for providing mobile advertising services
JP5967603B2 (ja) * 2011-12-21 2016-08-10 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 複数の変更履歴データのうちからソースコード中の変更内容を探索するための方法、並びに、そのコンピュータ及びコンピュータ・プログラム
US9489434B1 (en) * 2012-01-17 2016-11-08 Amazon Technologies, Inc. System and method for replication log branching avoidance using post-failover rejoin
US8719225B1 (en) * 2012-01-17 2014-05-06 Amazon Technologies, Inc. System and method for log conflict detection and resolution in a data store
CN103294724B (zh) 2012-03-05 2018-11-23 百度在线网络技术(北京)有限公司 一种数据库结构的管理方法及系统
US20130268582A1 (en) 2012-04-05 2013-10-10 Nokia Corporation Method And Apparatus for Distributing Content Among Multiple Devices While In An Offline Mode
US8700569B1 (en) * 2012-05-09 2014-04-15 Bertec Corporation System and method for the merging of databases
EP2856349A1 (en) * 2012-06-01 2015-04-08 Thomson Licensing Method of data storing and data synchronization in a distributed data storage system
WO2014008495A2 (en) * 2012-07-06 2014-01-09 Cornell University Managing dependencies between operations in a distributed system
US9483539B2 (en) * 2012-09-13 2016-11-01 International Business Machines Corporation Updating local data utilizing a distributed storage network
US8769105B2 (en) * 2012-09-14 2014-07-01 Peaxy, Inc. Software-defined network attachable storage system and method
US8539567B1 (en) * 2012-09-22 2013-09-17 Nest Labs, Inc. Multi-tiered authentication methods for facilitating communications amongst smart home devices and cloud-based servers
US8635373B1 (en) * 2012-09-22 2014-01-21 Nest Labs, Inc. Subscription-Notification mechanisms for synchronization of distributed states
US9244914B2 (en) * 2012-09-28 2016-01-26 Apple Inc. Schema versioning for cloud hosted databases
US10599671B2 (en) * 2013-01-17 2020-03-24 Box, Inc. Conflict resolution, retry condition management, and handling of problem files for the synchronization client to a cloud-based platform
US20140222793A1 (en) * 2013-02-07 2014-08-07 Parlance Corporation System and Method for Automatically Importing, Refreshing, Maintaining, and Merging Contact Sets
US9477558B2 (en) * 2013-03-08 2016-10-25 Intel Corporation Hardware supported memory logging
US20140258234A1 (en) * 2013-03-11 2014-09-11 AppGlu, Inc. Synchronization of cms data to mobile device storage
US20140258373A1 (en) * 2013-03-11 2014-09-11 Say Media, Inc. Systems and Methods for Managing and Publishing Managed Content
US20140279901A1 (en) * 2013-03-12 2014-09-18 Nec Laboratories America, Inc. Mobile Data Synchronization
CN104239357B (zh) * 2013-06-21 2019-01-18 Sap欧洲公司 用于数据库事务的并发请求处理
US9053165B2 (en) * 2013-07-08 2015-06-09 Dropbox, Inc. Structured content item synchronization
US20150032982A1 (en) * 2013-07-26 2015-01-29 Fusion-Io, Inc. Systems and methods for storage consistency
US9424367B2 (en) * 2013-07-31 2016-08-23 Adobe Systems Incorporated Interactive visualization of trending data
US9218142B2 (en) 2013-08-22 2015-12-22 International Business Machines Corporation Log data store that stores data across a plurality of storage devices using non-disjoint layers
GB2517932B (en) * 2013-09-04 2021-05-05 1Spatial Group Ltd Modification and validation of spatial data
US9552407B1 (en) * 2013-09-11 2017-01-24 Amazon Technologies, Inc. Log-based synchronization with conditional append
US9411816B2 (en) * 2013-10-23 2016-08-09 Linkedin Corporation Maintaining channels lists
CN103678494B (zh) 2013-11-15 2018-09-11 北京奇虎科技有限公司 客户端同步服务端数据的方法及装置
US9542468B2 (en) * 2014-03-24 2017-01-10 Hitachi, Ltd. Database management system and method for controlling synchronization between databases
US9703801B2 (en) * 2014-03-25 2017-07-11 Alfresco Software, Inc. Synchronization of client machines with a content management system repository
EP2924953B1 (en) * 2014-03-25 2017-03-22 Thorsten Sprenger Method and system for encrypted data synchronization for secure data management
US9613122B2 (en) * 2014-05-02 2017-04-04 Facebook, Inc. Providing eventual consistency for multi-shard transactions
US9805056B2 (en) * 2014-06-24 2017-10-31 Panzura, Inc. Synchronizing file updates between two cloud controllers of a distributed filesystem
GB2527529B (en) * 2014-06-24 2021-07-14 Advanced Risc Mach Ltd A device controller and method for performing a plurality of write transactions atomically within a non-volatile data storage device
US20170085653A1 (en) * 2015-09-22 2017-03-23 Le Holdings (Beijing) Co., Ltd. Method, device and system for message distribution
US20190332712A1 (en) * 2018-04-30 2019-10-31 Hewlett Packard Enterprise Development Lp Switch configuration synchronization

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040181291A1 (en) * 2003-03-12 2004-09-16 Microsoft Corporation Customization of process logic in a software system
US20130173530A1 (en) * 2009-12-14 2013-07-04 Daj Asparna Ltd. Revision control system and method
US20130124638A1 (en) * 2011-11-16 2013-05-16 Tomas Barreto Managing updates at clients used by a user to access a cloud-based collaboration service

Also Published As

Publication number Publication date
KR20190044145A (ko) 2019-04-29
US20160048554A1 (en) 2016-02-18
AU2015279979B2 (en) 2018-03-01
CN106462639B (zh) 2020-04-24
AU2018203739B2 (en) 2019-12-05
US20220405269A1 (en) 2022-12-22
EP3161685A2 (en) 2017-05-03
US20160048570A1 (en) 2016-02-18
JP2017519305A (ja) 2017-07-13
US20150370844A1 (en) 2015-12-24
US11455291B2 (en) 2022-09-27
WO2015200476A3 (en) 2016-02-18
CN106462639A (zh) 2017-02-22
AU2018203739A1 (en) 2018-06-21
EP4057156A1 (en) 2022-09-14
US10545948B2 (en) 2020-01-28
KR102096249B1 (ko) 2020-04-02
US10521417B2 (en) 2019-12-31
AU2015279979A1 (en) 2016-12-08
JP6334009B2 (ja) 2018-05-30
EP3161685B1 (en) 2022-06-08
WO2015200476A2 (en) 2015-12-30

Similar Documents

Publication Publication Date Title
US20220405269A1 (en) Processing mutations for a remote database
US7483927B2 (en) Method for merging metadata on files in a backup storage
US11586506B2 (en) System and method for indexing image backups
US9639542B2 (en) Dynamic mapping of extensible datasets to relational database schemas
US9110807B2 (en) Cache conflict detection
US8255360B1 (en) Synchronization of database changes among multiple devices
US20120185434A1 (en) Data synchronization
US20090012932A1 (en) Method and System For Data Storage And Management
US10489378B2 (en) Detection and resolution of conflicts in data synchronization
US11687595B2 (en) System and method for searching backups
US9998544B2 (en) Synchronization testing of active clustered servers
US8874682B2 (en) Composite graph cache management
US20170116219A1 (en) Efficient differential techniques for metafiles
CN113760860B (zh) 一种数据读取方法和装置
TW201403362A (zh) 在多主控環境中通過以頁面爲基礎之信息追蹤管理大型資料集
US10901641B2 (en) Method and system for inline deduplication

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
X091 Application refused [patent]
AMND Amendment
A107 Divisional application of patent
J201 Request for trial against refusal decision
J301 Trial decision

Free format text: TRIAL NUMBER: 2019101001361; TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20190422

Effective date: 20200123

S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)