KR102311032B1 - 데이터베이스 동기화 - Google Patents

데이터베이스 동기화 Download PDF

Info

Publication number
KR102311032B1
KR102311032B1 KR1020197035714A KR20197035714A KR102311032B1 KR 102311032 B1 KR102311032 B1 KR 102311032B1 KR 1020197035714 A KR1020197035714 A KR 1020197035714A KR 20197035714 A KR20197035714 A KR 20197035714A KR 102311032 B1 KR102311032 B1 KR 102311032B1
Authority
KR
South Korea
Prior art keywords
database
entry
change
query
changes
Prior art date
Application number
KR1020197035714A
Other languages
English (en)
Other versions
KR20200003164A (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 구글 엘엘씨
Priority to KR1020217031583A priority Critical patent/KR102423125B1/ko
Publication of KR20200003164A publication Critical patent/KR20200003164A/ko
Application granted granted Critical
Publication of KR102311032B1 publication Critical patent/KR102311032B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1734Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1873Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
    • 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
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • 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/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터베이스 동기화를 위한 방법(500)이 제공된다. 방법은 데이터베이스(130)에 대한 변경들(312, 314)을 표시하는 데이터베이스 변경 표시자들(230)을 수신하는 단계를 포함한다. 방법은, 각각의 데이터베이스 변경 표시자에 대해, 데이터베이스에 대한 각각의 변경이 데이터베이스의 단일 버전에 대한 단일 변경, 데이터베이스의 공통 버전에 대한 다수의 변경들 중 하나, 또는 데이터베이스의 상이한 버전들에 대한 다수의 변경들 중 하나에 대응하는지를 결정하는 단계를 더 포함한다. 방법은 엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(324)를 생성하는 단계를 더 포함한다. 각각의 엔트리는 데이터베이스의 대응하는 단일 버전에 대한 대응하는 단일 변경을 정의하는 적확 엔트리, 데이터베이스의 대응하는 공통 버전에 대응하는 다수의 변경들을 정의하는 범위 엔트리, 또는 데이터베이스의 대응하는 상이한 버전들에 대응하는 다수의 변경들을 정의하는 간격 엔트리를 포함한다.

Description

데이터베이스 동기화
[0001] 본 개시내용은 데이터베이스들을 동기화하는 것에 관한 것이다.
[0002] 데이터베이스들은 데이터 스토리지의 유비쿼터스 부분이다. 데이터베이스들은 일반적으로 정보 시스템들 내에서 매일마다 사용되는 많은 서비스들을 담당한다. 데이터베이스들은 데이터를 저장하고 저장된 데이터들이 액세스되거나 질의될 수 있게 하는 체계화된 구조를 가지고 있다. 체계화된 구조는 데이터베이스 사용자들이 관련된 데이터를 참조하도록 데이터베이스 내 데이터 사이의 관계들을 형성할 수 있다. 일부 데이터베이스들은 시간이 경과함에 따라 변경 또는 업데이트되므로, 데이터베이스 사용자들은 종종 이러한 수정된 데이터베이스들과 동기화하려 하고 그러한 수정들을 알려고 한다.
[0003] 본 개시내용의 일 양태는 데이터베이스를 동기화하기 위한 방법을 제공한다. 방법은 데이터 처리 하드웨어에서, 데이터베이스에 대한 변경들을 표시하는 데이터베이스 변경 표시자를 수신하는 단계를 포함한다. 각각의 데이터베이스 변경 표시자에 대해, 방법은 또한, 데이터 처리 하드웨어에 의해, 데이터베이스에 대한 각각의 변경이: 데이터베이스의 단일 버전에 대한 단일 변경; 데이터베이스의 공통 버전에 대한 다수의 변경들 중 하나; 또는 데이터베이스의 상이한 버전들에 대한 다수의 변경들 중 하나에 대응하는지를 결정하는 단계를 더 포함한다. 방법은, 데이터 처리 하드웨어에 의해, 엔트리들을 포함하는 변경 로그 압축 데이터 구조(change log compaction data structure)를 생성하는 단계를 더 포함한다. 각각의 엔트리는 데이터베이스의 대응하는 단일 버전에 대한 대응하는 단일 변경을 정의하는 적확 엔트리(exact entry), 데이터베이스의 대응하는 공통 버전에 대응하는 다수의 변경들을 정의하는 범위 엔트리(range entry), 또는 데이터베이스의 대응하는 상이한 버전들에 대응하는 다수의 변경들을 정의하는 간격 엔트리(interval entry)를 포함한다.
[0004] 본 개시내용의 구현예들은 다음의 선택적 특징들 중 하나 이상을 포함할 수 있다. 일부 구현예들에서, 변경 로그 압축 데이터 구조는 인덱스 공간 및 데이터 공간을 포함하고, 인덱스 공간의 임의의 네거티브 공간(negative space)은 데이터베이스에 대한 어떠한 변경도 갖지 않는 알려진 공간을 포함한다. 선택적으로, 데이터베이스 변경 표시자는 커밋 로그 엔트리를 포함할 수 있다. 부가적으로 또는 대안적으로, 간격 엔트리에 대응하는 데이터베이스의 상이한 버전들은 연속적인 시간 간격을 스팬(span)할 수 있다.
[0005] 본 개시내용의 다른 양태는 데이터베이스 동기화를 위한 방법을 제공한다. 방법은, 데이터 처리 하드웨어에서, 클라이언트로부터 데이터베이스에 대한 변경들에 관한 쿼리를 수신하는 단계를 포함하고, 쿼리는 데이터 범위들의 세트 및 시간 간격을 표시한다. 방법은 또한, 데이터 처리 하드웨어에 의해, 엔트리들을 포함하는 변경 로그 압축 데이터 구조에 액세스하는 단계를 포함한다. 각각의 엔트리는: 데이터베이스의 대응하는 단일 버전에 대한 대응하는 단일 변경을 정의하는 적확 엔트리; 데이터베이스의 대응하는 공통 버전에 대응하는 다수의 변경들을 정의하는 범위 엔트리; 또는 데이터베이스의 대응하는 상이한 버전들에 대응하는 다수의 변경들을 정의하는 간격 엔트리를 포함한다. 방법은, 데이터 처리 하드웨어에 의해, 변경 로그 압축 데이터 구조의 임의의 엔트리가 쿼리를 만족시키는지를 결정하는 단계를 더 포함한다. 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 방법은, 데이터 처리 하드웨어에 의해, 대응하는 적어도 하나의 엔트리를 클라이언트에 리턴하는 단계를 포함한다.
[0006] 이러한 양태는 다음의 선택적 특징들 중 하나 이상을 포함할 수 있다. 일부 예들에서, 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 방법은, 데이터 처리 하드웨어에 의해, 다음 중 적어도 하나: 데이터베이스 변경 표시자, 데이터베이스 변경 로그 엔트리, 또는 클라이언트의 적어도 하나의 엔트리에 대응하는 변경을 리턴하는 단계를 포함한다. 일부 구현예들에서, 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 방법은, 데이터 처리 하드웨어에 의해, 클라이언트의 적어도 하나의 엔트리에 대응하는 블룸 필터(bloom filter)를 리턴하는 단계를 포함한다.
[0007] 일부 구성들에서, 변경 로그 압축 데이터 구조는 인덱스 공간 및 데이터 공간을 포함한다. 여기서, 인덱스 공간의 임의의 네거티브 공간은 데이터베이스에 대한 어떠한 변경들도 갖지 않는 알려진 공간을 포함한다. 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 방법은, 데이터 처리 하드웨어에 의해, 쿼리를 만족시키는 적어도 하나의 엔트리의 인덱스 공간의 임의의 겹치는 엔트리들을, 쿼리를 만족시키는 적어도 하나의 엔트리에서 또는 그 다음에 리턴하는 단계를 포함할 수 있다. 부가적으로 또는 대안적으로, 변경 로그 압축 데이터 구조의 다수의 엔트리들이 쿼리를 만족시킬 때, 방법은, 데이터 처리 하드웨어에 의해, 인덱스 공간 또는 데이터 공간에서 범위의 시작에 의해 분류된 범위로서 대응하는 엔트리들을 클라이언트에 리턴하는 단계를 포함할 수 있다.
[0008] 일부 구현예들에서, 방법은, 데이터 처리 하드웨어에 의해, 쿼리를 만족시키는 변경 로그 압축 데이터 구조의 임의의 엔트리가 간격 엔트리를 포함하는지를 결정하는 단계를 포함한다. 쿼리를 만족시키는 각각의 간격 엔트리에 대해, 방법은 간격 엔트리에 의해 정의된 데이터베이스의 모든 대응하는 버전들의 세트로서 정의된 스팬을 리턴하는 단계를 포함할 수 있고, 스팬은 데이터베이스의 시작 버전 및 데이터베이스의 종료 버전을 갖는다.
[0009] 본 개시내용의 다른 양태는 데이터베이스 동기화를 위한 시스템을 제공한다. 시스템은 데이터 처리 하드웨어 및 데이터 처리 하드웨어와 통신하는 메모리 하드웨어를 포함한다. 메모리 하드웨어는 데이터 처리 하드웨어 상에서 실행될 때 데이터 처리 하드웨어로 하여금 동작들을 수행하게 하는 명령어들을 저장한다. 동작들은 데이터베이스에 대한 변경들을 표시하는 데이터베이스 변경 표시자를 수신하는 것을 포함한다. 각각의 데이터베이스 변경 표시자에 대해, 동작들은 데이터베이스에 대한 각각의 변경이 데이터베이스의 단일 버전에 대한 단일 변경, 데이터베이스의 공통 버전에 대한 다수의 변경들 중 하나, 또는 데이터베이스의 상이한 버전들에 대한 다수의 변경들 중 하나에 대응하는지를 결정하는 것을 포함한다. 동작들은 또한 엔트리들을 포함하는 변경 로그 압축 데이터 구조를 생성하는 것을 포함한다. 각각의 엔트리는 데이터베이스의 대응하는 단일 버전에 대한 대응하는 단일 변경을 정의하는 적확 엔트리, 데이터베이스의 대응하는 공통 버전에 대응하는 다수의 변경들을 정의하는 범위 엔트리, 또는 데이터베이스의 대응하는 상이한 버전들에 대응하는 다수의 변경들을 정의하는 간격 엔트리를 포함한다.
[0010] 본 개시내용의 구현예들은 다음의 선택적 특징들 중 하나 이상을 포함할 수 있다. 일부 구성들에서, 변경 로그 압축 데이터 구조는 인덱스 공간 및 데이터 공간을 포함한다. 여기서, 인덱스 공간의 임의의 네거티브 공간은 데이터베이스에 대한 어떠한 변경들도 갖지 않는 알려진 공간을 포함한다. 일부 예들에서, 데이터베이스 변경 표시자는 커밋 로그 엔트리를 포함할 수 있다. 부가적으로 또는 대안적으로, 간격 엔트리에 대응하는 데이터베이스의 상이한 버전들은 연속적인 시간 간격을 스팬할 수 있다.
[0011] 본 개시내용의 또 다른 양태는 데이터베이스 동기화를 위한 시스템을 제공한다. 시스템은 데이터 처리 하드웨어 및 데이터 처리 하드웨어와 통신하는 메모리 하드웨어를 포함한다. 메모리 하드웨어는 데이터 처리 하드웨어 상에서 실행될 때 데이터 처리 하드웨어로 하여금 동작들을 수행하게 하는 명령어들을 저장한다. 동작들은 클라이언트로부터 데이터베이스에 대한 변경들에 관한 쿼리를 수신하는 것을 포함한다. 쿼리는 데이터 범위들의 세트 및 시간 간격을 표시한다. 동작들은 또한 엔트리들을 포함하는 변경 로그 압축 데이터 구조에 액세스하는 것을 포함한다. 각각의 엔트리는 데이터베이스의 대응하는 단일 버전에 대한 대응하는 단일 변경을 정의하는 적확 엔트리, 데이터베이스의 대응하는 공통 버전에 대응하는 다수의 변경들을 정의하는 범위 엔트리, 또는 데이터베이스의 대응하는 상이한 버전들에 대응하는 다수의 변경들을 정의하는 간격 엔트리를 포함한다. 동작들은 또한 변경 로그 압축 데이터 구조의 임의의 엔트리가 쿼리를 만족시키는지를 결정하는 것을 포함한다. 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 동작들은 대응하는 적어도 하나의 엔트리를 클라이언트에 리턴하는 것을 포함한다.
[0012] 이러한 양태의 구현예들은 다음의 선택적 특징들 중 하나 이상을 포함할 수 있다. 일부 구현예들에서, 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 동작들은 데이터베이스 변경 표시자, 데이터베이스 변경 로그 엔트리, 또는 클라이언트의 적어도 하나의 엔트리에 대응하는 변경 중 적어도 하나를 리턴하는 것을 포함한다. 일부 구현예들에서, 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 시스템은 클라이언트의 적어도 하나의 엔트리에 대응하는 블룸 필터를 리턴하는 것을 포함한다.
[0013] 일부 예들에서, 변경 로그 압축 데이터 구조는 인덱스 공간 및 데이터 공간을 포함한다. 이러한 예에서, 인덱스 공간의 임의의 네거티브 공간은 데이터베이스에 대한 어떠한 변경들도 갖지 않는 알려진 공간을 포함한다. 변경 로그 압축 데이터 구조의 적어도 하나의 엔트리가 쿼리를 만족시킬 때, 동작은 쿼리를 만족시키는 적어도 하나의 엔트리의 인덱스 공간의 임의의 겹치는 엔트리들을, 쿼리를 만족시키는 적어도 하나의 엔트리에서 또는 그 다음에 리턴하는 것을 포함할 수 있다. 부가적으로 또는 대안적으로, 변경 로그 압축 데이터 구조의 다수의 엔트리들이 쿼리를 만족시킬 때, 동작들은 인덱스 공간 또는 데이터 공간에서 범위의 시작에 의해 분류된 범위로서 대응하는 엔트리들을 클라이언트에 리턴하는 것을 포함할 수 있다.
[0014] 일부 구성들에서, 동작들은 쿼리를 만족시키는 변경 로그 압축 데이터 구조의 임의의 엔트리가 간격 엔트리를 포함하는지를 결정하는 것을 포함한다. 여기서, 쿼리를 만족시키는 각각의 간격 엔트리에 대해, 동작들은 간격 엔트리에 의해 정의된 데이터베이스의 모든 대응하는 버전들의 세트로서 정의된 스팬을 리턴하는 것을 포함하고, 스팬은 데이터베이스의 시작 버전 및 데이터베이스의 종료 버전을 갖는다.
[0015] 본 개시내용의 하나 이상의 구현예들의 세부 사항은 첨부 도면들 및 이하의 설명에서 제시된다. 다른 양태들, 특징들 및 장점들은 상세한 설명과 도면들 및 청구 범위로부터 명백해질 것이다.
[0016] 도 1a 및 도 1b는 예시적인 데이터베이스 동기화 환경들의 개략도들이다.
[0017] 도 2는 데이터베이스 동기화 환경 내의 예시적인 데이터베이스 로거(database logger)의 개략도이다.
[0018] 도 3a 내지 도 3c는 데이터베이스 동기화 환경 내의 예시적인 압축기들(compacters)의 개략도들이다.
[0019] 도 4a 내지 도 4d는 데이터베이스 동기화 환경 내의 예시적인 쿼리들의 개략도들이다.
[0020] 도 5 및 도 6은 데이터베이스 동기화 환경 내에서 수행되는 동작들의 예시적인 배열들의 블록도이다.
[0021] 도 7은 본 명세서에 설명된 시스템들 및 방법들을 구현하는 데 사용될 수 있는 예시적인 컴퓨팅 디바이스의 개략도이다.
[0022] 다양한 도면들에서 유사한 참조 부호들은 유사한 요소들을 표시한다.
[0023] 오늘날 컴퓨팅 디바이스들은 종종 데이터베이스들에 의존한다. 이들 데이터베이스들은 시간이 경과함에 따라 변경 및 변형될 수 있는 대량의 데이터를 포함할 수 있다. 데이터베이스 내의 데이터가 변경되므로, 데이터베이스의 디바이스 및/또는 클라이언트는 그 변경들과 동기화될 필요가 있을 것이다. 디바이스가 데이터베이스와 동기화를 시도할 때마다 데이터베이스의 상당 부분을 취득하기 보다는, 일반적으로 디바이스들은 마지막 업데이트 이후에 발생한 오로지 변경들만을 식별하도록 구성될 수 있다. 이러한 접근 방식은 디바이스가 수신해야 할 수 있는 데이터베이스 내의 데이터 양을 줄이기는 하지만, 접근 방식은 여전히 비효율적일 수 있다. 예를 들어, 디바이스는 마지막 업데이트 이후의 변경들을 찾아 전체 데이터베이스를 처음부터 끝까지 분석해야 할 수도 있다. 예를 들어 일부 접근 방식들은 발생하는 각각의 변경에 대응하는 마커들을 데이터베이스 내에 만든다. 그러나 시간이 경과하고 데이터 양이 많아지면, 마커들조차 점점 더 비효율적이 된다. 그러므로, 데이터베이스와 보다 효과적이고 보다 효율적으로 동기화하기 위해 데이터 구조를 보존하는 콤팩트 공간(compact space)을 제공하는 것이 바람직하다.
[0024] 도 1을 참조하면, 일부 구현예들에서, 예시적인 데이터베이스 동기화 환경(10)은 하나 이상의 클라이언트 디바이스들(102, 102a-n)을 포함하고, 각각의 클라이언트 디바이스는 네트워크(120)를 통해 원격 시스템(110)의 데이터베이스 동기화 시스템(100)과 통신하는 각각의 클라이언트(20)와 연관된다. 원격 시스템(110)은 확장 가능한/탄력적인 컴퓨팅 자원들(112)(예를 들어, 데이터 처리 하드웨어) 및/또는 스토리지 자원들(114)(예를 들어, 메모리 하드웨어)를 갖는 분산 시스템(예를 들어, 클라우드 환경)일 수 있다. 데이터베이스 동기화 시스템(100)은 원격 시스템(110)의 분산 데이터베이스(130)(예를 들어, 도 1)와 같은 데이터베이스(130)에 관한 정보 및/또는 데이터를 동기화하도록 구성된다. 본 개시내용은 분산 시스템(예를 들어, 클라우드 환경)과 관련하여 데이터베이스 동기화 시스템(100)을 도시하지만, 데이터베이스 동기화 시스템(100)은 임의의 유형의 데이터베이스와 상호 작용할 수 있다. 다른 유형들의 데이터베이스들(130)의 일부 예들은 관계형 데이터베이스들(예를 들어, 구조화된 쿼리 언어 데이터베이스), 비 구조화된 쿼리 언어 데이터베이스들(예를 들어, 문서 데이터베이스, 그래프 데이터베이스, 키-값 데이터베이스 또는 테이블-스타일 데이터베이스), 또는 객체 지향 데이터베이스들을 포함한다. 부가적으로 또는 대안적으로, 데이터베이스(130)는 동일한 데이터베이스 유형의 하나 초과의 데이터베이스 또는 상이한 데이터베이스 유형들의 하나 초과의 데이터베이스들일 수 있다.
[0025] 도 1a에서 점선 인클로저로 예시된 바와 같이, 데이터베이스 동기화 시스템(100)은 일반적으로 데이터베이스 로거(database logger)(200) 및 압축기(300)를 포함한다. 데이터베이스(130)에 관한 정보 및/또는 데이터를 동기화하기 위해, 데이터베이스 동기화 시스템(100)은 데이터베이스(130)에 대한 변경들을 추적하고 이렇게 추적된 변경들에 기초하여 데이터 구조를 구성한다. 데이터베이스 로거(200)는 데이터베이스(130)에 대한 변경들을 추적하고 추적된 변경들을 압축기(300)에 전달하도록 구성된다. 데이터베이스 로거(200)로부터 전달된 변경들에 따라, 압축기(300)는 변경들에 기초하여 데이터 구조를 구성한다. 일부 예들에서, 데이터베이스(130)는 또한 동기화 시스템(100)에 통합된다. 예를 들어, 도 1a는 데이터베이스(130)를 데이터베이스(130) 둘레의 점선 박스에 의해 데이터베이스 동기화 시스템(100)에 대한 옵션인 것으로 도시한다. 데이터베이스(130)를 데이터베이스 동기화 시스템(100)과 통합하는 것은, 데이터베이스 동기화 환경(10)의 구성에 따라, 데이터베이스 동기화 시스템(100)과 데이터베이스(130) 사이의 통신 시간을 감소시킬 수 있다. 일부 구현예들에서, 데이터베이스 동기화 시스템(100)은 데이터베이스 관리 시스템 또는 데이터베이스 관리 시스템의 일부이다. 이러한 관리 시스템은 데이터베이스(130)에 로컬이거나 데이터베이스(130)와 원격으로 통신할 수 있다.
[0026] 도 1b를 참조하면, 클라이언트(20)는 클라이언트 디바이스(102)를 통해 데이터베이스 동기화 시스템(100)에 쿼리(140)를 전송한다. 쿼리(140)는 데이터베이스(130)로부터 데이터를 추출하려는 클라이언트(20)에 의한 요청을 지칭한다. 여기서, 쿼리(140)에 의해, 클라이언트(20)는 클라이언트 디바이스(102)를 데이터베이스(130) 내에 포함된 데이터와 동기화하려고 한다. 동기화는 일반적으로 클라이언트(20)가 클라이언트 디바이스(102)를 통해 데이터베이스(130)와 마지막으로 통신한 이후 클라이언트(20)를 데이터베이스(130) 내에서 발생되었던 변경들로 업데이트 또는 따라 잡기하는 프로세스를 지칭한다. 예로서, 전자 메일(이메일) 애플리케이션을 사용하는 클라이언트(20)는 클라우드 기반 이메일 서버(110)에 대응하는 이메일 데이터베이스(130)와 동기화한다. 이러한 예에서, 클라이언트(20)는 이동 전화기와 같은 클라이언트 디바이스(102) 상의 이메일 애플리케이션을 열거나 또는 이메일 애플리케이션 내에서 이메일을 전송 및 수신하도록 선택함으로써 이메일 데이터베이스(130)와 동기화한다. 다시 말해서, 클라이언트(20)는 이메일을 전송하고 수신하기 위해 쿼리(140)에 의해 이메일 데이터베이스(130)와 동기화한다. 예를 들어, 도 1b는 "오전 9:47과 현재 시간 이후에 임의의 변경들"이 있었는지를 데이터베이스 동기화 시스템(100)에 묻는 것으로 쿼리(140)를 도시한다. 이러한 예에서, 클라이언트(20)는 오전 9:47에 그의 또는 그녀의 이메일을 마지막으로 업데이트(즉, 동기화)하였고, 쿼리(140)의 현재 시간과 오전 9:47의 마지막 업데이트 사이에 그의 또는 그녀의 이메일에 임의의 업데이트들이 있었는지 알기를 원한다. 동기화의 일부로서, 데이터베이스 동기화 시스템(100)은 이메일 데이터베이스(130)에 임의의 변경들(예를 들어, 이메일과 같은 데이터의 추가들)이 있었는지를 결정함으로써 임의의 업데이트들(예를 들어, 새로운 이메일들)이 발생했는지를 식별한다. 이러한 결정에 기초하여, 데이터베이스 동기화 시스템(100)은 "오후 9:47 이후 새로운 이메일이 없었음"이라는 응답(150)을 전달한다.
[0027] 도 2는 데이터베이스 동기화 시스템(100)의 데이터베이스 로거(200)에 대한 추가적인 세부 사항을 제공한다. 도 2는 시간의 진전에 따른 데이터베이스(130)의 예를 포함한다. 도 2에 의해 도시된 바와 같이, 데이터베이스(130)와 같은 데이터베이스들은 데이터 공간(dataspace)(132)을 포함한다. 데이터 공간은 일반적으로 데이터(D)에 액세스 가능한 또는 데이터(D)로 점유되는 공간을 지칭한다. 예를 들어, 도 2는 데이터(D)에 대해 여덟 개의 공간들을 갖는 단순화된 데이터 공간을 갖는 데이터베이스(130)를 도시한다. 시간의 진전에 따라, 데이터베이스(130)의 상이한 버전들("t")은 데이터 공간(132)에 만들어지는 변경들(예를 들어, 기입 기능들 또는 삭제 기능들)을 캡처할 수 있다. 데이터베이스(130)의 버전은 각각의 버전(t)이 데이터베이스(130)의 시간의 상이한 순간을 나타내도록 하는 시간의 특정 순간에서의 데이터베이스(130)이다. 다시 말해서, 데이터베이스(130)의 버전들(tn)은 이산적인 시간 간격들에서 데이터베이스(130)의 스냅샷들에 대응한다. 각 버전(t)은 그 버전(t)을 식별하는 데 도움이 되는 연관된 타임 스탬프를 가질 수 있다. 일부 예들에서, 데이터베이스(130)의 버전(t)은 데이터베이스(130)와 연관된 프로세서의 클록에 따라 변하여 각각의 증분 버전(t(n+1))이 타임클록의 증분이도록 한다. 다른 예들에서, 데이터베이스(130)의 버전(t)은 데이터베이스(130)에 변경이 있을 때 증분된다. 또 다른 예들에서, 각각의 버전(t)은 미리 프로그램된 시간 간격에 따라 증분된다.
[0028] 도 2는 데이터베이스(130)의 여섯 개의 버전들(t0-t5)을 도시한다. 각각의 버전(t)은 데이터베이스(130)의 데이터공간(132)의 표현을 포함한다. 데이터베이스(130)의 각각의 버전(t) 사이에서, 데이터 공간(132) 내에서 변경들이 발생할 수 있다. 추가 또는 삭제와 같은 각각의 변경은 트랜잭션이 커밋될 때 발생한다. 트랜잭션이 커밋될 때(즉, 변경이 발생할 때), 트랜잭션은 데이터베이스 변경 로그(database change log)(220)에서 변경 로그 엔트리(change log entry)(210)(즉, 커밋 로그(commit log) 또는 트랜잭션 로그(transaction log))로서 기념되도록 구성된다. 변경 로그 엔트리(210)는 트랜잭션과 관련된 텍스트의 라인, 실제 트랜잭션의 엔트리, 또는 트랜잭션에 대응하는 데이터베이스(130)에 대한 변경의 반영을 의미하거나 또는 제공하는 임의의 다른 표현일 수 있다. 부가적으로 또는 대안적으로, 각각의 변경 로그 엔트리(210)는 변경과 연관된 데이터베이스(130)의 버전(t)을 포함한다.
[0029] 일부 구현예들에서, 데이터베이스 로거(200)는 대응하는 변경 로그 엔트리들(210)을 갖는 데이터베이스 변경 로그(220)를 포함한다. 일부 예들에서, 데이터베이스 로거(200)는 하나 초과의 데이터베이스(130)에 대응하는 하나 초과의 데이터베이스 변경 로그(220)를 포함한다. 다른 예들에서, 데이터베이스 변경 로거(200)는 하나 초과의 데이터베이스(130)에 대한 단일 데이터베이스 변경 로그(220)를 포함한다. 간략화를 위해, 도 2는 데이터베이스(130)에 대한 단일 데이터베이스 변경 로그(220)를 도시한다.
[0030] 도 2를 더 참조하면, 제1 버전(t0)에서, 데이터(D1-D5)가 데이터베이스(130)를 점유하고 있다. 도 2의 예에 도시된 데이터베이스(130)의 제1 버전(t0)으로서, 데이터베이스(130)에는 아직 아무 변경도 발생하지 않았다. 제2 버전(t1)에서, 데이터(D1)가 데이터베이스(130)로부터 삭제되고 데이터(D6)가 데이터베이스(130)에 기입되었다. 제1 변경 로그 엔트리(210a)가 데이터베이스 변경 로그(220)에서 데이터(D1)의 삭제 및 데이터(D6)의 추가를 기념한다. 데이터베이스(130)의 제 3 버전(t2)에서, 데이터 공간(132) 내의 데이터(D2-D6)는 변경되지 않는다. 변경들이 없으면, 데이터베이스 로거(200)는 데이터베이스 변경 로그 엔트리(210)를 생성하지 않는다. 제4 버전(t3)에서, 데이터(D1)가 데이터베이스(130)에 기입되었고 데이터(D6)가 데이터베이스(130)로부터 삭제되었다. 제2 변경 로그 엔트리(210b)가 데이터베이스 변경 로그(220)에서 데이터(D1)의 추가 및 데이터(D6)의 삭제를 기념한다. 데이터베이스(130)의 제5 버전(t4)에서, 데이터(D2)가 삭제되었고, 제3 변경 로그 엔트리(210c)는 데이터(D2)의 삭제를 기념한다. 제6 버전(t5)에서, 데이터(D1)가 삭제되었고 데이터(D6 및 D7)이 기입되었다. 데이터베이스 변경 로그(220)는 제6 버전(t5) 동안 변경들을 나타내는 제4 엔트리(210d)를 포함한다. 변경 로그 엔트리(210)의 각각의 변경에 대해, 데이터베이스 로거(200)는 그 변경에 대응하는 데이터베이스 변경 표시자(230)를 생성하여 압축기(300)에 전달할 수 있다. 예를 들어, 제1 변경 로그 엔트리(210a) 및 제2 변경 로그 엔트리(210b)는 각각 두 개의 데이터베이스 변경 표시자들(230, 230a1-2 및 230, 230b1-2)에 각각 대응하고, 반면에 제4 변경 로그 엔트리(210d)는 세 개의 데이터베이스 변경 로그 표시자들(230, 230d1-3)에 대응한다.
[0031] 도 3a 내지 도 3c는 데이터베이스 동기화 시스템(100)의 압축기(300)의 예들이다. 압축기(300)는 데이터베이스 로거(200)로부터 데이터베이스(130)에 대한 변경들을 표시하는 데이터베이스 변경 표시자(230)를 수신하도록 구성된다. 변경 로그 엔트리(210)에 따라, 데이터베이스 변경 표시자(230)는 변경 로그 엔트리(210)(예를 들어, 커밋 로그 엔트리)와 동일할 수 있거나 또는 변경 로그 엔트리(210)와 상이할 수 있다. 데이터베이스 변경 표시자들(230)과 대부분이 유사한 변경 로그 엔트리들(210)을 갖는 구성들은 데이터베이스 로거(200)에 부가적인 처리를 감소시키고 잠재적으로는 계산상의 중복성들 또는 오류의 위험들을 감소시킬 수 있다. 수신된 각각의 데이터베이스 변경 표시자(230)에 대해, 압축기(300)는 데이터베이스(130)에 대한 기본적 변경의 유형을 결정한다. 일부 구현예들에서, 압축기(300)는 데이터베이스(130)에 대한 각각의 변경이 데이터베이스(130)의 단일 버전(ti)에 대한 단일 변경(312)에 대응하는지, 데이터베이스(130)의 공통 버전(ti)에 대한 다수의 변경들(314c) 중 하나에 대응하는지, 또는 데이터베이스(130)의 상이한 버전들(ti-n)에 대한 다수의 변경들(314d) 중 하나에 대응하는지를 결정하는 변경 결정기(310)를 포함한다. 예를 들어, 도 3a 및 도 3b에 도시된 바와 같이, 데이터베이스 변경 표시자(230c)는 데이터베이스(230)의 제5 버전(t4)에 대한 단일 변경(312)에 대응한다. 도 3a 및 도 3b에서, 변경 결정기(310)는 또한 여러 변경 표시자들(230)이 데이터베이스(130)의 공통 버전(ti)에 대한 다수의 변경들(314c) 중 하나에 대응하는 것으로 결정한다. 데이터베이스 변경 표시자들(230a1 및 230a2)은 데이터베이스(130)의 제2 버전(t1)에 대한 다수의 변경들(314c)에 대응한다. 데이터베이스 변경 표시자들(230b1 및 230b2)은 데이터베이스(130)의 제4 버전(t3)에 대한 다수의 변경들(314c)에 대응한다. 데이터베이스 변경 표시자들(230d1-3)은 데이터베이스(130)의 제6 버전(t5)에 대한 다수의 변경들(314c)에 대응한다. 여기서, 공통 버전은 동일한 버전에서 발생하는(즉, 공유하는) 변경들을 지칭한다. 다시 말해서, 이들 변경들은 동일한 버전을 공통으로 가지고 있다. 더욱이, 데이터베이스 변경 표시자들(230b-d)은 집합적으로 제4 버전(t3), 제5 버전(t4) 및 제6 버전(t5)과 같은 상이한 버전들에 대한 다수의 변경들(314d)에 대응한다.
[0032] 도 3a 내지 도 3c를 참조하면, 압축기(300)는 변경 로그 압축 데이터 구조(change log compaction data structure)(324)를 형성하는 엔트리들(322)을 생성하도록 구성된 구성기(320)를 더 포함한다. 일부 예들에서, 구성기(320)는 적확 엔트리(exact entry)(322e), 범위 엔트리(range entry)(322r) 또는 간격 엔트리(interval entry)(322i)를 생성할 수 있다. 각 엔트리(322)는 데이터베이스 변경 표시자들(230)에 기초하여 변경 결정기(310)에 의해 결정된 상이한 유형들의 변경들(312, 314)에 대응한다. 적확 엔트리(322e)는 대응하는 데이터베이스(130)의 대응하는 단일 버전(ti)에 대한 대응하는 단일 변경(312)을 정의한다. 범위 엔트리(322r)는 데이터베이스(130)의 대응하는 공통 버전(ti)에 대한 대응하는 다수의 변경들(314c)을 정의한다. 간격 엔트리(322i)는 데이터베이스(130)의 대응하는 상이한 버전들에 대한 대응하는 다수의 변경들(314d)을 정의한다.
[0033] 일부 구현예들에서, 변경 로그 압축 데이터 구조(324)는 버전 공간(version space)(326v) 및 데이터 공간(data space)(326d)을 포함한다. 버전 공간(326v)은 구성기(320)가 변경 로그 압축 데이터 구조(324)를 구축할 수 있게 하여 클라이언트(20)에 의한 변경 로그 압축 데이터 구조(324)의 쿼리(140)가 버전들(ti)(예를 들어, 이전의 동기화 이후의 버전들)의 특정 스팬(span)에 효율적으로 집중할 수 있도록 한다. 데이터베이스(130)의 데이터 공간(132)과 거의 유사한 데이터 공간(326d)은 변경 로그 압축 데이터 구조(324) 내의 엔트리들(322)(즉, 압축 데이터)에 액세스 가능하거나 엔트리들(322)로 점유되는 공간에 대응한다. 도 3a 내지 도 3c의 전체에 걸쳐 도시된 예들에서, 변경 로그 압축 데이터 구조(324)는 일반적으로 버전 공간(326v) 및 데이터 공간(326d)을 포함하지만, 인덱스 공간(index space)(326i)(예를 들어, 도 3b 및 도 3c)을 또한 포함할 수 있다. 일반적으로 말하면, 인덱스는 데이터 구조의 일부이고 데이터 구조 내 데이터의 검색(예를 들어, 빠른 조회) 및 액세스를 최적화할 수 있다. 인덱스 공간은 숫자 또는 타임 스탬프와 같은 고유 식별자들인 인덱스들을 포함한다. 인덱스 공간(326i)은 인덱스에 대응하는 데이터 공간(326d) 내의 기본적 데이터(D)(즉, 인덱스에 의해 고유하게 식별되는 데이터)를 가리키는 포인터를 또한 포함할 수 있다. 부가적으로 또는 대안적으로, 변경 로그 압축 데이터 구조(324)는 데이터 변경들을 수정할 수도 있거나 수정하지 않을 수도 있는 이차 인덱스들에 대해 구성된다. 변경 로그 압축 데이터 구조(324)는 데이터 공간(326d), 버전 공간(326v) 및/또는 인덱스 공간(326i)에 대한 변경들에 대응하기 때문에, 클라이언트(20)와의 동기화는 코퍼스(corpus)의 크기(예를 들어, 데이터베이스의 크기)라기 보다는, 코퍼스에 대한 변경들의 개수에 따라 대략적으로 스케일링된다. 또한, 동기화 시스템(100)은 유연하므로 변경 로그 압축 데이터 구조(324)는 (예를 들어, 데이터베이스의 발생 시점에 결부된다기 보다는) 언제라도 구성될 수 있고, 변경 로그 압축 데이터 구조는 데이터베이스(130)의 기입 경로(write path)에서 반드시 중대한 종속성(critical dependency)이 있는 것은 아니다. 동기화 시스템(100)의 유연성이라는 장점은 변경 로그 압축 데이터 구조(324)가 언제라도 구성될 수 있기 때문에 변경 로그 압축 데이터 구조(324)가 내구성 있는 스토리지를 필요로 하지 않는다는 것이다.
[0034] 도 3b와 같은 일부 예에서, 구성기(320)는 데이터 공간(326d), 인덱스 공간(326i) 및 버전 공간(326v)을 포함하는 단일 변경 로그 압축 데이터 구조(324)를 생성한다. 도 3c와 같은 다른 예들에서, 구성기(320)는 하나 초과의 변경 로그 압축 데이터 구조(324)를 생성하도록 구성된다. 예를 들어, 구성기(320)는 데이터 공간(326d) 및 버전 공간(326v)을 갖는 제1 변경 로그 압축 데이터 구조(324a) 및 인덱스 공간(326i) 및 버전 공간(326v)을 갖는 제2 변경 로그 압축 데이터 구조(324b)를 생성한다.
[0035] 도 3a 내지 도 3c를 더 참조하면, 구성기(320)는 변경 결정기(310)로부터의 변경들(312, 314c, 314d)을 해석하고 변경 로그 압축 데이터 구조(324)를 생성한다. 이러한 예들에서, 데이터베이스 변경 표시자(230c)에 대응하는 단일 변경(312)은 변경 로그 압축 데이터 구조(324) 내의 제5 버전(t4)에서 적확 엔트리(322e)를 생성한다. 공통 버전(예를 들어, 제2 버전(t1), 제4 버전(t3) 및 제6 버전(t5) 각각)에 대한 다수의 변경들(314c)에 대응하는 데이터베이스 변경 표시자들(230a1-2, 230b1-2, 230d1-3)은 각각 범위 엔트리(322r)를 생성 ― 제2 버전(t1)의 데이터베이스 변경 표시자(230a1-2)는 범위 엔트리(322r1)를 생성하고; 제4 버전(t3)의 데이터베이스 변경 표시자(230b1-2)는 범위 엔트리(322r2)를 생성하며; 그리고 제6 버전(t5)의 데이터베이스 변경 표시자(230d1-3)는 범위 엔트리(322r3)를 생성함 ― 한다. 데이터베이스 변경 표시자들(230b-d)은 또한 데이터베이스(130)의 상이한 버전들(예를 들어, 제4 버전(t3), 제5 버전(t4) 및 제6 버전(t5) 각각)에 대한 다수의 변경들(314d)에 대응하고 간격 엔트리(322i)를 생성한다. 여기서, 일부 구성들과 마찬가지로, 간격 엔트리(322i)는 버전들(t3-t5)과 같은 상이한 버전들에 관련한 연속적인 시간 간격을 스팬(span)한다. 일부 예들에서, 엔트리들(322)은 업데이트 시간 또는 삭제 시간과 같은, 기본적 변경 또는 데이터베이스 변경 표시자(230)에 대응하는 메타데이터를 포함한다. 일부 구현예들에서, 블룸 필터(bloom filter)는, 예를 들어 나중에 이차 인덱스들에 대해 최적화될 수 있는, 엔트리들(322)의 메타데이터를 필터링할 수 있다. 일부 구성들에서, 엔트리들(322)이 삭제 변경(delete change)에 대응할 때, 블룸 필터 또는 존재 필터(existence filter)는 이러한 변경들을 축적한다. 이러한 블룸 필터 또는 존재 필터는 이어서 쿼리(140)에 대한 응답(150)으로서 클라이언트(20)에 전송될 수 있다. 부가적으로 또는 대안적으로, 블룸 필터는 엔트리(322)와 관련된 데이터를 검토하고 및/또는 엔트리(322)에 대응하는 기본적 변경을 식별하는 데 이용될 수 있다.
[0036] 일부 구현예들에서, 구성기(320)는 임의의 네거티브 공간(negative space)(328)이 실제로 데이터베이스(130)에 대한 어떠한 변경들도 갖지 않는 알려진 공간이 되도록 변경 로그 압축 데이터 구조(324)를 구성한다. 네거티브 공간(328)이 실제로 데이터베이스(130)에 대한 어떠한 변경들도 갖지 않는 알려진 공간일 때, 동기화는 데이터를 누락하는 위험없이 넓은 범위들의 데이터를 자신 있게 스킵할 수 있다. 다시 말해서, 데이터 로그 압축 데이터 구조(324)를 통해 내비게이팅(navigating)하는 것은 데이터 로그 압축 데이터 구조(324)가 데이터베이스 변경 표시자들(230)에 대응하는 엔트리들(322)(예를 들어, 범위 엔트리들(322r), 간격 엔트리들(322i) 또는 적확 엔트리들(322e))만을 포함할 수 있기 때문에 넓은 범위들의 데이터를 본래 스킵할 수 있다.
[0037] 변경 로그 압축 데이터 구조(324)의 장점은 이 구조가 데이터 공간 엔트리들 및/또는 인덱스 엔트리들의 서브세트를 검사함으로써 수정된 데이터(즉, 변경들)를 찾기 위한 가속 구조(acceleration structure)라는 것이다. 예를 들어, 변경 로그 압축 데이터 구조(324)는 특정 타임스탬프(예를 들어, 버전(t)) 이후에 변경된 데이터를 효율적으로 찾는다. 변경 로그 압축 데이터 구조(324)는 공간 효율적인 데이터 구조일 수 있는데, 왜냐하면 클라이언트(20)가 쿼리(140) 대부분을 수정된 데이터 및/또는 데이터 표현들로 향하게 하는 것을 보장하기 위해 모든 누락 데이터 범위들(즉, 구조에 포함되지 않은 데이터 범위들)이 필터링(예를 들어, 블룸 필터)되었기 때문이다. 예로서, 동기화 시스템(100)은 블룸 필터를 사용하여 변경 로그 압축 데이터 구조(324)에 포함시킬 변경된 데이터를 페칭(fetching)하는 것을 최적화하도록 구성된다. 블룸 필터들은 데이터베이스 로거(200) 및/또는 압축기(300)와 통합되거나 또는 이와 연계하여 동작할 수 있다.
[0038] 부가적으로 또는 대안적으로, 변경 로그 압축 데이터 구조(324)는 쿼리 응답 시간을 더 감소시키기 위해 데이터베이스(130)의 유한 개수의 버전(예를 들어, 가장 최신 버전들)으로 제한될 수 있다. 다시 말해서, 변경 로그 압축 데이터 구조(324)는 데이터베이스(130)와의 클라이언트 동기화와 관련 있는 데이터로 형성된 공간 보존 구조이다. 데이터베이스 동기화 시스템(100)의 다른 장점은 엔트리들을 병합하는 프리미티브들을 제공하고 병합되어야 하는 대상 및 시기에 관한 의사 결정을 허용함으로써 적응적 세분성(adaptive granularity)을 제공할 수 있다는 것이다. 예를 들어, 엔트리들을 병합하는 것은 데이터베이스(130)에 대한 변경들이 없는 것으로 알려진 네거티브 공간(328)으로 단순화될 수 있다.
[0039] 도 4a 내지 도 4d는 데이터베이스 동기화 시스템(100)으로의 쿼리들(140)의 예들이다. 이러한 예들에서, 압축기(300)는 쿼리 분석기(330)를 더 포함한다. 쿼리 분석기(330)는 클라이언트(20)로부터 데이터베이스(130)에 대한 변경들에 관한 쿼리(140)를 수신하도록 구성된다. 일부 예들에서, 쿼리(140)는 데이터 범위들의 세트(142) 및 시간 간격(144)을 표시한다. 예를 들어, 도 1b를 다시 참조하면, 쿼리(140)는 오전 9:47에 마지막 업데이트 이후 업데이트들이 있었는지를 질의함으로써 시간 간격(144)을 암시했다. 다시 말해서, 쿼리(140) 자체는 오전 9:47과 쿼리(140)의 시간 사이의 시간 간격(144)을 암시했다. 쿼리(140)에 따라, 쿼리 분석기(330)는 구성기(320)에 의해 엔트리들(322)로 구성된 변경 로그 압축 데이터 구조(324)에 액세스한다. 변경 로그 압축 데이터 구조(324) 내의 엔트리들(322)에 기초하여, 쿼리 분석기(330)는 임의의 엔트리(322)가 쿼리(140)를 만족시키는지를 결정한다. 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 쿼리(140)를 만족시킬 때, 데이터베이스 동기화 시스템(100)은 대응하는 적어도 하나의 엔트리(322)를 클라이언트(20)에 리턴한다.
[0040] 도 4a 내지 도 4d를 참조하면, 이들 도면들은 쿼리(140)에 대한 특정 응답을 제외하고는 압축기(300)와 대부분 유사한 예들이다. 일부 구성들에서, 데이터베이스 동기화 시스템(100)은 대응하는 적어도 하나의 엔트리(322)를 응답(150)으로서 클라이언트(20)에 리턴한다. 쿼리(140)를 만족시키는 적어도 하나의 엔트리(322)에 따라, 응답(150)은 적어도 하나의 엔트리(322)에 관한 추가적인 세부 사항을 또한 포함할 수 있다. 일부 예들에서, 변경 로그 압축 데이터 구조(324)의 다수의 엔트리들(322)이 쿼리(140)를 만족시킬 때, 데이터베이스 동기화 시스템(100)은 인덱스 공간(326i) 또는 데이터 공간(326d)에서 범위(152)의 시작에 의해 분류된 범위(152)로서 대응하는 엔트리들(322)을 클라이언트(20)에 리턴한다. 예를 들어, 범위(152)를 분류함으로써, 클라이언트(20)는 시간 순서대로(chronologically) 동기화를 받아들일 수 있다. 일부 구현예들에서, 쿼리(140)를 만족시키는 엔트리(322)는 간격 엔트리(322i)이다. 여기서, 쿼리(140)를 만족시키는 각각의 간격 엔트리(322i)에 대해, 응답(150)은 간격 엔트리(322i)에 의해 정의된 데이터베이스(130)의 모든 대응하는 버전들의 세트로서 정의된 스팬(154)을 포함한다. 이러한 구현예들에서, 스팬(154)의 일부로서, 응답(150)은 데이터베이스(130)의 시작 버전(tstart) 및 데이터베이스(130)의 종료 버전(tend)을 포함한다.
[0041] 응답(150)은, 도 4a에 도시된 바와 같이, 데이터베이스 변경 표시자(230), 데이터베이스 변경 로그 엔트리(210), 또는 적어도 하나의 엔트리(322)에 대응하는 변경 중 적어도 하나일 수 있다. 예를 들어, 데이터베이스 동기화 시스템(100)은 쿼리(140)를 만족시키는 적어도 하나의 엔트리(322)로부터, 대응하는 데이터베이스 변경 표시자(230), 데이터베이스 변경 로그 엔트리(210), 또는 데이터(D)의 기본적 변경을 역으로 결정하도록 구성된다. 도 4b 및 도 4d와 같은 일부 예들에서, 데이터베이스 동기화 시스템(100)은 제1 응답(150a)을 데이터베이스 로거(200)에 전달한다. 제1 응답(150a)은 압축기(300)에 의해 전달될 수 있고, 쿼리(140)를 만족시키는 적어도 하나의 엔트리(322), 적어도 하나의 엔트리(322)에 대응하는 데이터베이스 변경 표시자(230) 또는 둘 다 중 어느 하나를 포함할 수 있다. 데이터베이스 로거(200)가, 제1 응답(150a)으로서, 적어도 하나의 데이터베이스 변경 표시자(230)를 수신하면, 데이터베이스 로거(200)는 또한 적어도 하나의 데이터베이스 변경 표시자(230)를 상호 참조하여, 제2 응답(150b)으로서 데이터베이스 변경 로그 엔트리(210) 및/또는 원래 데이터 변경을 클라이언트(20) 및/또는 클라이언트 디바이스(102)에 제공하도록 구성될 수 있다.
[0042] 도 4c 및 도 4d는 이들이 도 2 및 도 3에 도시된 예들과 관련되는 쿼리(140) 및 응답(150)의 예들이다. 도 4c는 쿼리(140)에 기초한 단일 응답(150)의 예이고, 반면에 도 4d는 동일한 쿼리(140)에 기초한 다단계 응답(150)의 예이다. 도 4c 및 도 4d는 데이터(D1-D5)의 데이터 범위(142) 및 (t0-t3)의 시간 간격(144)을 갖는 쿼리(140)를 도시한다. 여기서, 쿼리 분석기(330)는 쿼리(140)를 수신하고 데이터 범위(142) 및 시간 간격(144)을 변경 로그 압축 데이터 구조(324)와 비교한다. 이러한 비교는 변경 로그 압축 데이터 구조(324) 내에서 겹치는 세 개의 엔트리들(322) ― 하나의 간격 엔트리(322i) 및 두 개의 범위 엔트리들(322r, 322r1-2) ― 을 식별한다. 응답(150)의 일부로서, 데이터베이스 동기화 시스템(100)은 분류된 범위(152)와 함께 간격 엔트리(322i)의 스팬(154, t3-t5)을 리턴한다. 도 4d는 유사하지만, 제1 응답(150a) 및 제2 응답(150b)과 관련한 결과들을 도시한다. 도시된 바와 같이, 제1 응답(150a)은 엔트리들(322i, 322r1, 322r2) 및 데이터베이스 변경 표시자들(230a-d)을 리턴한다. 여기서, 쿼리 분석기(330)는 제1 응답(150a)을 데이터베이스 로거(200)에 전달하여 데이터베이스 로거(200)가 대응하는 데이터베이스 로그 엔트리들(210a-d) 및/또는 데이터베이스 로그 엔트리들(210a-d)과 관련된 데이터(D1-2 및 D6-7)를 추가로 제공할 수 있도록 한다. 이들 대응하는 데이터베이스 로그 엔트리들(210a-d) 및/또는 데이터(D1-2 및 D6-7)는 이후 제2 응답(150b)을 통해 클라이언트(20) 및/또는 클라이언트 디바이스(102)에 전달될 수 있다. 일부 예들에서, 데이터베이스 동기화 시스템(100)은 제1 응답(150a) 및 제2 응답(150b) 둘 모두를 클라이언트(20) 및/또는 클라이언트 디바이스(102)에 전달한다.
[0043] 도 2를 다시 참조하면, 도 2는 또한 데이터베이스 변경들에 따라 업데이트되는 일부 시스템들의 잠재적 결함을 도시한다. 예를 들어, 클라이언트 디바이스(102)가 이전에 제1 버전(t0)에서 업데이트되고 그런 다음 이어서 제4 버전(t3)에서 업데이트되면, 일부 시스템들에서, 클라이언트 디바이스(102)는 데이터베이스(130)에 대한 변경들이 없었다는 부정확한 통신문을 수신할 수 있다. 예를 들어, 클라이언트 디바이스(102)가 제1 버전(t0)과 비교하여 제4 버전(t3)에서의 변경들을 스캔하도록 구성되었다면, 데이터베이스(130)가 동일한 데이터(D1-D5)를 포함하는 것으로 보이기 때문에 클라이언트 디바이스(102)는 변경들을 식별하는데 실패할 수 있다. 그러나, 데이터베이스(130)는 데이터베이스 변경 로그(220)에 따라, 데이터베이스(130)에 네 개의 수정들을 기록했다. 이 시간 동안, 데이터베이스(130)는 실제로 데이터(D6)를 포함하도록 확장되었고 또한 나중에는 데이터(D6)를 제거했다. 다시 말해서, 제1 스냅샷(예를 들어, t0에서의 제1 버전)을 제2 스냅샷(예를 들어, t3에서의 제4 버전)과 비교하는 것은 제1 스냅샷과 제2 스냅샷 사이에 발생한 변경들을 감안하는 것에 실패한다. 클라이언트 디바이스(102)가 대신에 변경 로그 압축 데이터 구조(324)를 검토했다면, 클라이언트 디바이스(102)는 제1 버전(t0)과 제4 버전(t3) 사이의 변경들을 식별했을 것이다. 스냅샷들 사이에서 발생하는 변경들을 알고 있는 것은 데이터 문제 해결(troubleshooting)에 도움이 될 수 있거나, 시스템에 대한 데이터의 무단 수정을 표시할 수 있거나, 또는 변경들이 다른 데이터에 영향을 미칠 수 있는지를 클라이언트(20)가 식별할 수 있다.
[0044] 도 5 및 도 6은 데이터베이스 동기화 시스템을 동작시키는 것에 관한 예시적인 방법들(500 및 600)이다. (502)에서, 방법(500)은 데이터베이스(130)에 대한 변경들을 표시하는 데이터베이스 변경 표시자들(230)을 수신하는 단계를 포함한다. (504)에서, 방법(500)은 각각의 데이터베이스 변경 표시자(230)에 대해, 데이터베이스(130)에 대한 각각의 변경이 데이터베이스(130)의 단일 버전에 대한 단일 변경(312), 데이터베이스(130)의 공통 버전에 대한 다수의 변경들(314c) 중 하나, 또는 데이터베이스(130)의 상이한 버전들에 대한 다수의 변경들(314d) 중 하나 중 하나에 대응하는지를 결정하는 단계를 더 포함한다. (506)에서, 방법(500)은 또한 엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(324)를 생성하는 단계를 포함한다. (602)에서, 방법(600)은 클라이언트(102)로부터 데이터베이스(130)에 대한 변경들에 관한 쿼리(140)를 수신하는 단계를 포함하고, 쿼리(140)는 데이터 범위들의 세트(142) 및 시간 간격(144)을 표시한다. (604)에서, 방법(600)은 엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(324)에 액세스하는 단계를 포함한다. (606)에서, 방법(600)은 변경 로그 압축 데이터 구조(324)의 임의의 엔트리(322)가 쿼리(140)를 만족시키는지를 결정하는 단계를 더 포함한다. (608)에서, 방법(600)은 또한 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 쿼리(140)를 만족시킬 때, 대응하는 적어도 하나의 엔트리(322)를 클라이언트(20)에 리턴하는 단계를 포함한다.
[0045] 도 7은 본 문서에 설명된 시스템들 및 방법들을 구현하는 데 사용될 수 있는 예시적인 컴퓨팅 디바이스(700)의 개략도이다. 컴퓨팅 디바이스(700)는 랩톱들, 데스크톱들, 워크스테이션들, 개인 휴대 정보 단말기들, 서버들, 블레이드 서버들, 메인프레임들 및 그 밖의 다른 적절한 컴퓨터들과 같은 다양한 형태들의 디지털 컴퓨터들을 나타내는 것으로 의도된다. 여기에 도시된 컴포넌트들, 그들의 연결들 및 관계들, 및 그들의 기능들은 단지 예시적인 것으로 여겨지며, 본 문서에 설명되고/되거나 청구된 발명들의 구현예들을 제한하려 의도하는 것은 아니다.
[0046] 컴퓨팅 디바이스(700)는 프로세서(710), 메모리(720), 저장 디바이스(730), 메모리(720)에 연결되는 고속 인터페이스/제어기(740) 및 고속 확장 포트들(750), 및 저속 버스(770) 및 저장 디바이스(730)에 연결되는 저속 인터페이스/제어기(760)를 포함한다. 컴포넌트들(710, 720, 730, 740, 750 및 760)의 각각은 다양한 버스들을 사용하여 상호 연결되며, 공통 마더보드 상에 또는 적절할 경우 다른 방식들로 장착될 수 있다. 프로세서(710)는 그래픽 사용자 인터페이스(graphical user interface)(GUI)에 필요한 그래픽 정보를 고속 인터페이스(740)에 연결된 디스플레이(780)와 같은 외부의 입력/출력 디바이스 상에 디스플레이하기 위해 메모리(720) 내에 또는 저장 디바이스(730) 상에 저장된 명령어들을 비롯한, 컴퓨팅 디바이스(700) 내에서 실행을 위한 명령어들을 처리할 수 있다. 다른 구현예들에서, 다수의 프로세서들 및/또는 다수의 버스들이, 적절한 경우, 다수의 메모리들 및 메모리의 유형들과 함께 사용될 수 있다. 또한, 다수의 컴퓨팅 디바이스들(700)이 연결될 수 있으며, 각각의 디바이스는 (예를 들어, 서버 뱅크, 블레이드 서버들의 그룹, 또는 멀티 프로세서 시스템으로서) 필요한 동작들의 부분들을 제공한다.
[0047] 메모리(720)는 정보를 컴퓨팅 디바이스(700) 내에 비 일시적으로 저장한다. 메모리(720)는 컴퓨터 판독 가능 매체, 휘발성 메모리 유닛(들) 또는 비 휘발성 메모리 유닛(들)일 수 있다. 비 일시적 메모리(720)는 컴퓨팅 디바이스(700)에 의해 사용하기 위해 일시적 또는 영구적으로 프로그램들(예를 들어, 명령어들의 시퀀스들) 또는 데이터(예를 들어, 프로그램 상태 정보)를 저장하는 데 사용되는 물리적 디바이스들일 수 있다. 비 휘발성 메모리의 예들은 플래시 메모리 및 판독 전용 메모리(ROM)/프로그램 가능 판독 전용 메모리(PROM)/소거 가능 프로그램 가능 판독 전용 메모리(EPROM)/전기적으로 소거 가능 프로그램 가능 판독 전용 메모리(EEPROM Memory)(예를 들어, 부팅 프로그램들과 같은, 전형적으로 펌웨어용으로 사용됨)을 포함한다(그러나, 이에 제한되지 않는다). 휘발성 메모리의 예들은 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 위상 변화 메모리(PCM) 및 디스크들 또는 테이프들을 포함한다(그러나, 이에 제한되지 않는다).
[0048] 저장 디바이스(730)는 컴퓨팅 디바이스(700)에 대용량 저장소를 제공할 수 있다. 일부 구현들에서, 저장 디바이스(730)는 컴퓨터 판독 가능 매체이다. 다양한 상이한 구현예들에서, 저장 디바이스(730)는 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 또는 테이프 디바이스, 플래시 메모리 또는 다른 유사한 솔리드 스테이트 메모리 디바이스, 또는 저장 영역 네트워크 또는 다른 구성들 내의 디바이스들을 비롯한 디바이스들의 어레이일 수 있다. 부가적인 구현예들에서, 컴퓨터 프로그램 제품은 정보 캐리어에서 유형적으로 구현된다. 컴퓨터 프로그램 제품은 실행될 때 위에서 설명한 것들과 같은 하나 이상의 방법들을 수행하는 명령어들을 내장한다. 정보 캐리어는 메모리(720), 저장 디바이스(730), 또는 프로세서(710) 상의 메모리와 같은 컴퓨터 또는 머신 판독 가능 매체이다.
[0049] 고속 제어기(740)는 컴퓨팅 디바이스(700)의 대역폭 집약적 동작들을 관리하는 반면, 저속 제어기(760)는 보다 낮은 대역폭 집약적 동작들을 관리한다. 이러한 임무들의 할당은 예시적일 뿐이다. 일부 구현예들에서, 고속 제어기(740)는 메모리(720), 디스플레이(780)(예를 들어, 그래픽 프로세서 또는 가속기를 통해) 및 다양한 확장 카드들(도시되지 않음)을 수용할 수 있는 고속 확장 포트들(750)에 연결된다. 일부 구현예들에서, 저속 제어기(760)는 저장 디바이스(730) 및 저속 확장 포트(790)에 연결된다. 다양한 통신 포트들(예를 들어, USB, 블루투스, 이더넷, 무선 이더넷)을 포함할 수 있는 저속 확장 포트(790)는 키보드, 포인팅 디바이스, 스캐너, 또는 예를 들어 네트워크 어댑터를 통해 스위치 또는 라우터와 같은 네트워킹 디바이스와 같은 하나 이상의 입력/출력 디바이스들에 연결될 수 있다.
[0050] 컴퓨팅 디바이스(700)는 도면에 도시된 바와 같이 다수의 상이한 형태들로 구현될 수 있다. 예를 들어, 이것은 표준 서버(700a)로서 구현될 수 있거나 또는 이러한 서버들(700a)의 그룹에서 여러 번 랩톱 컴퓨터(700b)로서 또는 랙 서버 시스템(700c)의 일부로서 구현될 수 있다.
[0051] 본 명세서에 설명된 시스템들 및 기술들의 다양한 구현예들은 디지털 전자 및/또는 광학 회로, 집적 회로, 특별히 설계된 ASIC들(application specific integrated circuit), 컴퓨터 하드웨어, 펌웨어, 소프트웨어 및/또는 이들의 조합들로 실현될 수 있다. 이러한 다양한 구현예들은 저장 시스템, 적어도 하나의 입력 디바이스 및 적어도 하나의 출력 디바이스로부터 데이터 및 명령어들을 수신하고, 이들로 데이터 및 명령어들을 송신하도록 연결된, 특수 목적 또는 범용일 수 있는, 적어도 하나의 프로그램 가능 프로세서를 포함하는 프로그램 가능 시스템상에서 실행 가능한 및/또는 해석 가능한 하나 이상의 컴퓨터 프로그램들에서의 구현예들을 포함할 수 있다.
[0052] 이러한 컴퓨터 프로그램들(프로그램들, 소프트웨어, 소프트웨어 애플리케이션들 또는 코드라고도 알려져 있음)은 프로그래밍 가능 프로세서를 향한 머신 명령어들을 포함하고, 상위 레벨 절차 및/또는 객체 지향 프로그래밍 언어로 및/또는 어셈블리/머신 언어로 구현될 수 있다. 본 명세서에서 사용되는 것으로, "머신 판독 가능 매체" 및 "컴퓨터 판독 가능 매체"라는 용어들은 머신 명령어들 및/또는 데이터를 프로그램 가능 프로세서에 제공하는데 사용되는, 머신 명령어들을 머신 판독 가능 신호로서 수신하는 머신 판독 가능 매체를 비롯한, 임의의 컴퓨터 프로그램 제품, 비 일시적 컴퓨터 판독 가능 매체, 장치 및/또는 디바이스(예를 들어, 자기 디스크들, 광학 디스크들, 메모리, 프로그램 가능 로직 디바이스들(Programmable Logic Devices)(PLDs))을 지칭한다. "머신 판독 가능 신호"라는 용어는 머신 명령어들 및/또는 데이터를 프로그램 가능 프로세서에 제공하는 데 사용되는 임의의 신호를 지칭한다.
[0053] 본 명세서에 설명된 프로세스들 및 논리 흐름들은 입력 데이터에 대해 동작하고 출력을 발생함으로써 하나 이상의 컴퓨터 프로그램들을 실행하여 기능들을 수행하는 하나 이상의 프로그램 가능 프로세서들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로, 예를 들어 필드 프로그램 가능 게이트 어레이(field programmable gate array)(FPGA) 또는 주문형 집적 회로(application specific integrated circuit)(ASIC)에 의해 수행될 수 있다. 컴퓨터 프로그램의 실행에 적합한 프로세서들은, 예로서 두 범용 마이크로프로세서 및 특수 목적 마이크로 프로세서, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서들을 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 다로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소들은 명령어들을 수행하기 위한 프로세서 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스들, 예를 들면 자기, 광자기 디스크들 또는 광학 디스크들을 포함하거나, 또는 이들로부터 데이터를 수신하거나 이들로 데이터를 전송하기 위해, 또는 그 둘 모두를 위해 동작적으로 연결될 것이다. 그러나 컴퓨터는 이러한 디바이스들을 가질 필요가 없다. 컴퓨터 프로그램 명령어들 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는, 예로서 반도체 메모리 디바이스들, 예를 들면 EPROM, EEPROM 및 플래시 메모리 디바이스들; 자기 디스크들, 예를 들면 내부 하드 디스크들 또는 착탈식 디스크들; 광자기 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 비롯한, 모든 형태들의 비 휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나, 특수 목적 로직 회로에 포함될 수 있다.
[0054] 사용자와의 상호 작용을 제공하기 위해, 본 개시내용의 하나 이상의 양태들은 디스플레이 디바이스, 예를 들어 음극선관(cathode ray tube)(CRT), 액정 디스플레이(liquid crystal device)(LCD) 모니터 또는 사용자에게 정보를 디스플레이하기 위한 터치 스크린 및 임의로 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스, 예를 들어, 마우스 또는 트랙볼을 갖는 컴퓨터 상에서 구현될 수 있다. 다른 종류들의 디바이스들이 사용되어 마찬가지로 사용자와의 상호 작용을 제공할 수 있고; 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예를 들어 시각적 피드백, 청각 피드백 또는 촉각 피드백일 수 있으며; 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 비롯한, 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는, 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 디바이스로부터 문서들을 수신함으로써; 예를 들어, 사용자의 클라이언트 디바이스 상의 웹 브라우저로부터 수신된 요청들에 응답하여 웹 페이지들을 이 웹 브라우저에 전송함으로써, 사용자와 상호 작용할 수 있다.
[0055] 다수의 구현예들이 설명되었다. 그럼에도 불구하고, 본 개시내용의 사상 및 범위를 벗어나지 않고 다양한 변형들이 이루어질 수 있다는 것이 이해될 것이다. 따라서, 다른 구현예들은 다음의 청구 범위의 범주 내에 있다.

Claims (22)

  1. 데이터 처리 하드웨어에서, 데이터베이스(130)에 대한 변경들(312, 314)을 표시하는 데이터베이스 변경 표시자들(database change indicators)(230)을 수신하는 단계;
    각각의 데이터베이스 변경 표시자(230)에 대해, 상기 데이터 처리 하드웨어에 의해, 상기 데이터베이스(130)에 대한 각각의 변경(312, 314)이:
    상기 데이터베이스(130)의 단일 버전에 대한 단일 변경(312);
    상기 데이터베이스(130)의 공통 버전에 대한 다수의 변경들(312, 314) 중 하나; 또는
    상기 데이터베이스(130)의 상이한 버전들에 대한 다수의 변경들(312, 314) 중 하나에 대응하는지를 결정하는 단계; 및
    상기 데이터 처리 하드웨어에 의해, 엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(change log compaction data structure)(324)를 생성하는 단계 ― 상기 변경 로그 압축 데이터 구조(324)는 인덱스 공간(index space)(326i) 및 데이터 공간(data space)(132)을 포함함 ―를 포함하고,
    각각의 엔트리(322)는:
    상기 데이터베이스(130)의 대응하는 단일 버전에 대한 대응하는 단일 변경(312)을 정의하는 적확 엔트리(exact entry)(322);
    상기 데이터베이스(130)의 대응하는 공통 버전에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 범위 엔트리(range entry)(322); 또는
    상기 데이터베이스(130)의 대응하는 상이한 버전들에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 간격 엔트리(interval entry)(322)를 포함하며,
    상기 인덱스 공간(326i)의 임의의 네거티브 공간(negative space)(328)은 상기 데이터베이스(130)에 대한 어떠한 변경들(312, 314)도 갖지 않는 알려진 공간을 포함하는,
    방법(500).
  2. 삭제
  3. 제1 항에 있어서,
    상기 데이터베이스 변경 표시자(230)는 커밋 로그 엔트리(commit log entry)(210)를 포함하는,
    방법(500).
  4. 제1 항에 있어서,
    상기 간격 엔트리(322)에 대응하는 상기 데이터베이스(130)의 상기 상이한 버전들은 연속적인 시간 간격(144)을 스팬(154)하는,
    방법(500).
  5. 데이터 처리 하드웨어에서, 클라이언트(20)로부터 데이터베이스(130)에 대한 변경들(312, 314)에 관한 쿼리(140)를 수신하는 단계 ― 상기 쿼리(140)는 데이터 범위들의 세트(142) 및 시간 간격(144)을 표시함 ―;
    상기 데이터 처리 하드웨어에 의해, 엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(324)에 액세스하는 단계 ― 상기 변경 로그 압축 데이터 구조(324)는 인덱스 공간(326i) 및 데이터 공간(132)을 포함하고, 상기 인덱스 공간(326i)의 임의의 네거티브 공간(328)은 데이터베이스(130)에 대한 어떠한 변경들(312, 314)도 갖지 않는 알려진 공간을 포함하며, 각각의 엔트리(322)는:
    상기 데이터베이스(130)의 대응하는 단일 버전에 대한 대응하는 단일 변경(312)을 정의하는 적확 엔트리(322);
    상기 데이터베이스(130)의 대응하는 공통 버전에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 범위 엔트리(322); 또는
    상기 데이터베이스(130)의 대응하는 상이한 버전들에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 간격 엔트리(322)를 포함함 ―;
    상기 데이터 처리 하드웨어에 의해, 상기 변경 로그 압축 데이터 구조(324)의 임의의 엔트리(322)가 상기 쿼리(140)를 만족시키는지를 결정하는 단계; 및
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때, 상기 데이터 처리 하드웨어에 의해, 대응하는 상기 적어도 하나의 엔트리(322)를 상기 클라이언트(20)에 리턴하는 단계를 포함하는,
    방법(600).
  6. 제5 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때, 상기 데이터 처리 하드웨어에 의해:
    데이터베이스 변경 표시자(230),
    데이터베이스 변경 로그 엔트리(210), 또는
    상기 클라이언트(20)의 상기 적어도 하나의 엔트리(322)에 대응하는 변경 중 적어도 하나를 리턴하는 단계를 더 포함하는,
    방법(600).
  7. 제5 항 또는 제6 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때, 상기 데이터 처리 하드웨어에 의해, 상기 적어도 하나의 엔트리(322)에 대응하는 블룸 필터(bloom filter)를 상기 클라이언트(20)에 리턴하는 단계를 더 포함하는,
    방법(600).
  8. 삭제
  9. 제5 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때, 상기 데이터 처리 하드웨어에 의해, 상기 쿼리(140)를 만족시키는 상기 적어도 하나의 엔트리(322)의 상기 인덱스 공간(326i)의, 상기 쿼리(140)를 만족시키는 상기 적어도 하나의 엔트리(322)에 있는 또는 상기 적어도 하나의 엔트리(322) 이후에 있는 임의의 겹치는 엔트리들(322)을 리턴하는 단계를 더 포함하는,
    방법(600).
  10. 제5 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 다수의 엔트리들(322)이 상기 쿼리(140)를 만족시킬 때, 상기 데이터 처리 하드웨어에 의해, 상기 인덱스 공간(326i) 또는 상기 데이터 공간(132)에서 범위의 시작에 의해 분류된 상기 범위로서 상기 대응하는 엔트리들(322)을 상기 클라이언트(20)에 리턴하는 단계를 더 포함하는,
    방법(600).
  11. 제5 항 또는 제6 항에 있어서,
    상기 데이터 처리 하드웨어에 의해, 상기 쿼리(140)를 만족시키는 상기 변경 로그 압축 데이터 구조(324)의 임의의 엔트리(322)가 간격 엔트리(322)를 포함하는지를 결정하는 단계; 및
    상기 쿼리(140)를 만족시키는 각각의 간격 엔트리(322)에 대해, 상기 간격 엔트리(322)에 의해 정의된 상기 데이터베이스(130)의 모든 대응하는 버전들의 세트로서 정의된 스팬(154)을 리턴하는 단계를 더 포함하고,
    상기 스팬(154)은 상기 데이터베이스(130)의 시작 버전 및 상기 데이터베이스(130)의 종료 버전을 갖는,
    방법(600).
  12. 데이터 처리 하드웨어; 및
    상기 데이터 처리 하드웨어와 통신하는 메모리 하드웨어를 포함하고,
    상기 메모리 하드웨어는, 상기 데이터 처리 하드웨어 상에서 실행될 때, 상기 데이터 처리 하드웨어로 하여금 동작들을 수행하게 하는 명령어들을 저장하고,
    상기 동작들은:
    데이터베이스(130)에 대한 변경들(312, 314)을 표시하는 데이터베이스 변경 표시자들(230)을 수신하는 동작;
    각각의 데이터베이스 변경 표시자(230)에 대해, 상기 데이터베이스(130)에 대한 각각의 변경이:
    상기 데이터베이스(130)의 단일 버전에 대한 단일 변경(312);
    상기 데이터베이스(130)의 공통 버전에 대한 다수의 변경들(312, 314) 중 하나; 또는
    상기 데이터베이스(130)의 상이한 버전들에 대한 다수의 변경들(312, 314) 중 하나에 대응하는지를 결정하는 동작; 및
    엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(324)를 생성하는 동작 ― 상기 변경 로그 압축 데이터 구조(324)는 인덱스 공간(326i) 및 데이터 공간(132)을 포함함 ―을 포함하고,
    각각의 엔트리(322)는:
    상기 데이터베이스(130)의 대응하는 단일 버전에 대한 대응하는 단일 변경(312)을 정의하는 적확 엔트리(322);
    상기 데이터베이스(130)의 대응하는 공통 버전에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 범위 엔트리(322); 또는
    상기 데이터베이스(130)의 대응하는 상이한 버전들에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 간격 엔트리(322)를 포함하며,
    상기 인덱스 공간(326i)의 임의의 네거티브 공간(328)은 상기 데이터베이스(130)에 대한 어떠한 변경들(312, 314)도 갖지 않는 알려진 공간을 포함하는,
    시스템(100).
  13. 삭제
  14. 제12 항에 있어서,
    상기 데이터베이스 변경 표시자(230)는 커밋 로그 엔트리(210)를 포함하는,
    시스템(100).
  15. 제12 항에 있어서,
    상기 간격 엔트리(322)에 대응하는 상기 데이터베이스(130)의 상기 상이한 버전들은 연속적인 시간 간격(144)을 스팬(154)하는,
    시스템(100).
  16. 데이터 처리 하드웨어; 및
    상기 데이터 처리 하드웨어와 통신하는 메모리 하드웨어를 포함하고,
    상기 메모리 하드웨어는, 상기 데이터 처리 하드웨어 상에서 실행될 때, 상기 데이터 처리 하드웨어로 하여금 동작들을 수행하게 하는 명령어들을 저장하고,
    상기 동작들은:
    클라이언트(20)로부터 데이터베이스(130)에 대한 변경들(312, 314)에 관한 쿼리(140)를 수신하는 동작 ― 상기 쿼리(140)는 데이터 범위들의 세트(142) 및 시간 간격(144)을 표시함 ―;
    엔트리들(322)을 포함하는 변경 로그 압축 데이터 구조(324)에 액세스하는 동작 ― 상기 변경 로그 압축 데이터 구조(324)는 인덱스 공간(326i) 및 데이터 공간(132)을 포함하고, 상기 인덱스 공간(326i)의 임의의 네거티브 공간(328)은 데이터베이스(130)에 대한 어떠한 변경들(312, 314)도 갖지 않는 알려진 공간을 포함하며, 각각의 엔트리(322)는:
    상기 데이터베이스(130)의 대응하는 단일 버전에 대한 대응하는 단일 변경(312)을 정의하는 적확 엔트리(322);
    상기 데이터베이스(130)의 대응하는 공통 버전에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 범위 엔트리(322); 또는
    상기 데이터베이스(130)의 대응하는 상이한 버전들에 대한 대응하는 다수의 변경들(312, 314)을 정의하는 간격 엔트리(322)를 포함함 ―;
    상기 변경 로그 압축 데이터 구조(324)의 임의의 엔트리(322)가 상기 쿼리(140)를 만족시키는지를 결정하는 동작; 및
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리((322)가 상기 쿼리(140)를 만족시킬 때, 상기 대응하는 적어도 하나의 엔트리(322)를 상기 클라이언트(20)에 리턴하는 동작을 포함하는,
    시스템(100).
  17. 제16 항에 있어서,
    상기 동작들은, 상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때,
    데이터베이스 변경 표시자(230),
    데이터베이스 변경 로그 엔트리(210), 또는
    상기 클라이언트(20)의 상기 적어도 하나의 엔트리(322)에 대응하는 변경 중 적어도 하나를 리턴하는 동작을 더 포함하는,
    시스템(100).
  18. 제16 항 또는 제17 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때, 상기 클라이언트(20)의 상기 적어도 하나의 엔트리(322)에 대응하는 블룸 필터를 리턴하는 동작을 더 포함하는,
    시스템(100).
  19. 삭제
  20. 제16 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 적어도 하나의 엔트리(322)가 상기 쿼리(140)를 만족시킬 때, 상기 쿼리(140)를 만족시키는 상기 적어도 하나의 엔트리(322)의 상기 인덱스 공간(326i)의, 상기 쿼리(140)를 만족시키는 상기 적어도 하나의 엔트리(322)에 있는 또는 상기 적어도 하나의 엔트리(322) 이후에 있는 임의의 겹치는 엔트리들(322)을 리턴하는 동작을 더 포함하는,
    시스템(100).
  21. 제16 항에 있어서,
    상기 변경 로그 압축 데이터 구조(324)의 다수의 엔트리들(322)이 상기 쿼리(140)를 만족시킬 때, 상기 인덱스 공간(326i) 또는 상기 데이터 공간(132)에서 범위의 시작에 의해 분류된 상기 범위로서 상기 대응하는 엔트리들((322)을 상기 클라이언트(20)에 리턴하는 동작을 더 포함하는,
    시스템(100).
  22. 제16 항 또는 제17 항에 있어서,
    상기 쿼리(140)를 만족시키는 상기 변경 로그 압축 데이터 구조(324)의 임의의 엔트리(322)가 간격 엔트리(322)를 포함하는지를 결정하는 동작; 및
    상기 쿼리(140)를 만족시키는 각각의 간격 엔트리(322)에 대해, 상기 간격 엔트리(322)에 의해 정의된 상기 데이터베이스(130)의 모든 대응하는 버전들의 세트로서 정의된 스팬(154)을 리턴하는 동작을 더 포함하고,
    상기 스팬(154)은 상기 데이터베이스(130)의 시작 버전 및 상기 데이터베이스(130)의 종료 버전을 갖는,
    시스템(100).
KR1020197035714A 2017-12-14 2018-06-14 데이터베이스 동기화 KR102311032B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020217031583A KR102423125B1 (ko) 2017-12-14 2018-06-14 데이터베이스 동기화

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/842,008 US10769114B2 (en) 2017-12-14 2017-12-14 Database syncing
US15/842,008 2017-12-14
PCT/US2018/037534 WO2019117994A1 (en) 2017-12-14 2018-06-14 Database syncing

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020217031583A Division KR102423125B1 (ko) 2017-12-14 2018-06-14 데이터베이스 동기화

Publications (2)

Publication Number Publication Date
KR20200003164A KR20200003164A (ko) 2020-01-08
KR102311032B1 true KR102311032B1 (ko) 2021-10-07

Family

ID=62817096

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197035714A KR102311032B1 (ko) 2017-12-14 2018-06-14 데이터베이스 동기화
KR1020217031583A KR102423125B1 (ko) 2017-12-14 2018-06-14 데이터베이스 동기화

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020217031583A KR102423125B1 (ko) 2017-12-14 2018-06-14 데이터베이스 동기화

Country Status (5)

Country Link
US (3) US10769114B2 (ko)
EP (1) EP3616024A1 (ko)
KR (2) KR102311032B1 (ko)
CN (1) CN111448560A (ko)
WO (1) WO2019117994A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110209642A (zh) * 2018-02-05 2019-09-06 北京智明星通科技股份有限公司 信息处理的方法、装置、服务器及计算机可读介质
AU2021216392A1 (en) * 2020-02-04 2022-09-01 Grav1Ty Inc. Selective synchronization of database objects
US20210243111A1 (en) * 2020-02-04 2021-08-05 Nokia Solutions And Networks Oy Supporting multicast communications
US11032158B1 (en) 2020-11-18 2021-06-08 Coupang Corp. Computerized systems and methods for processing high-volume log files from virtual servers
CN113761052A (zh) * 2020-11-27 2021-12-07 北京沃东天骏信息技术有限公司 数据库同步方法和装置
US11657032B2 (en) * 2021-07-30 2023-05-23 Thoughtspot, Inc. Compacted table data files validation
CN113595800B (zh) * 2021-08-03 2022-07-05 腾云悦智科技(深圳)有限责任公司 一种应用连接关系自动发现与cmdb信息保鲜的方法
KR20230138673A (ko) 2022-03-24 2023-10-05 주식회사 티맥스티베로 데이터베이스를 관리하기 위한 방법
US20230409594A1 (en) * 2022-06-15 2023-12-21 International Business Machines Corporation Conditional replication of data

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998054662A1 (en) * 1997-05-27 1998-12-03 Arkona, Inc. Method, computer program product, and system for distributing changes made in a data store to remote client copies of the data store
US5924096A (en) 1997-10-15 1999-07-13 Novell, Inc. Distributed database using indexed into tags to tracks events according to type, update cache, create virtual update log on demand
US20090064160A1 (en) * 2007-08-31 2009-03-05 Microsoft Corporation Transparent lazy maintenance of indexes and materialized views
US20130166554A1 (en) * 2011-12-22 2013-06-27 Sap Ag Hybrid Database Table Stored as Both Row and Column Store

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516314B1 (en) * 1998-11-17 2003-02-04 Telefonaktiebolaget L M Ericsson (Publ) Optimization of change log handling
US6671757B1 (en) 2000-01-26 2003-12-30 Fusionone, Inc. Data transfer and synchronization system
US7076508B2 (en) 2002-08-12 2006-07-11 International Business Machines Corporation Method, system, and program for merging log entries from multiple recovery log files
US7685253B1 (en) 2003-10-28 2010-03-23 Sun Microsystems, Inc. System and method for disconnected operation of thin-client applications
US8135670B2 (en) 2008-07-22 2012-03-13 International Business Machines Corporation Embedded change logging for data synchronization
CN101369283A (zh) * 2008-09-25 2009-02-18 中兴通讯股份有限公司 一种内存数据库与物理数据库间的数据同步方法及系统
US8386423B2 (en) * 2010-05-28 2013-02-26 Microsoft Corporation Scalable policy-based database synchronization of scopes
IL208641A0 (en) 2010-10-12 2010-12-30 Eci Telecom Ltd Method for accelerating start up of a computerized system
US9367560B1 (en) * 2011-12-14 2016-06-14 Unboundid, Corp. Method, system and apparatus for synchronizing changes in a directory service
US9058367B2 (en) 2012-08-20 2015-06-16 Sears Brands, L.L.C. Methods and systems for staging and propagating data
EP2741217A1 (en) 2012-12-04 2014-06-11 Thomson Licensing Database synchronization

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998054662A1 (en) * 1997-05-27 1998-12-03 Arkona, Inc. Method, computer program product, and system for distributing changes made in a data store to remote client copies of the data store
US5924096A (en) 1997-10-15 1999-07-13 Novell, Inc. Distributed database using indexed into tags to tracks events according to type, update cache, create virtual update log on demand
US20090064160A1 (en) * 2007-08-31 2009-03-05 Microsoft Corporation Transparent lazy maintenance of indexes and materialized views
US20130166554A1 (en) * 2011-12-22 2013-06-27 Sap Ag Hybrid Database Table Stored as Both Row and Column Store

Also Published As

Publication number Publication date
US20190188283A1 (en) 2019-06-20
US11615058B2 (en) 2023-03-28
CN111448560A (zh) 2020-07-24
WO2019117994A1 (en) 2019-06-20
US20200372000A1 (en) 2020-11-26
KR20200003164A (ko) 2020-01-08
US10769114B2 (en) 2020-09-08
KR20210121315A (ko) 2021-10-07
US20230214362A1 (en) 2023-07-06
KR102423125B1 (ko) 2022-07-19
EP3616024A1 (en) 2020-03-04

Similar Documents

Publication Publication Date Title
KR102311032B1 (ko) 데이터베이스 동기화
US11604782B2 (en) Systems and methods for scheduling concurrent summarization of indexed data
US11416505B2 (en) Querying an archive for a data store
US10417265B2 (en) High performance parallel indexing for forensics and electronic discovery
CN107402963B (zh) 搜索数据的构建方法、增量数据的推送方法及装置和设备
CN107077691B (zh) 用于确定数据库高速缓存命中的基于年龄的策略
US8510323B2 (en) Grouping identity records to generate candidate lists to use in an entity and relationship resolution process
US9811577B2 (en) Asynchronous data replication using an external buffer table
US11487714B2 (en) Data replication in a data analysis system
US11687595B2 (en) System and method for searching backups
US11023449B2 (en) Method and system to search logs that contain a massive number of entries
US10360234B2 (en) Recursive extractor framework for forensics and electronic discovery
CN112699129A (zh) 一种数据处理系统、方法及装置
CN113515518A (zh) 数据存储方法、装置、计算机设备和存储介质
US11113296B1 (en) Metadata management for a transactional storage system
US20180173805A1 (en) Application programming interface for detection and extraction of data changes

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant