KR20100124801A - 동기화 서버 프로세스 - Google Patents

동기화 서버 프로세스 Download PDF

Info

Publication number
KR20100124801A
KR20100124801A KR1020107022201A KR20107022201A KR20100124801A KR 20100124801 A KR20100124801 A KR 20100124801A KR 1020107022201 A KR1020107022201 A KR 1020107022201A KR 20107022201 A KR20107022201 A KR 20107022201A KR 20100124801 A KR20100124801 A KR 20100124801A
Authority
KR
South Korea
Prior art keywords
data
server
clients
client
synchronization
Prior art date
Application number
KR1020107022201A
Other languages
English (en)
Other versions
KR101217389B1 (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 KR20100124801A publication Critical patent/KR20100124801A/ko
Application granted granted Critical
Publication of KR101217389B1 publication Critical patent/KR101217389B1/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/176Support for shared access to files; File sharing support
    • 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/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)

Abstract

특히, 동기 서버 프로세스를 제공하는 기술들 및 시스템들이 개시된다. 데이터 동기 세션들을 처리한다는 것은 하나 또는 그 이상의 데이터 항목들을 포함하는 하나 또는 그 이상의 데이터 레코드들을 갱신하기 위해 하나 또는 그 이상의 클라이언트들로부터 동기 세션을 개시하기 위한 요청을 처리하는 것을 포함한다. 하나 또는 그 이상의 클라이언트들은 동기 세션의 하나 또는 그 이상의 특성들에 기초하여 신뢰 클라이언트 및 비신뢰 클라이언트 중 하나로서 선택적으로 식별되고, 여기서, 신뢰 클라이언트는 서버에 의해 정의되는 모든 데이터클래스들을 지원하도록 구성된다. 하나 또는 그 이상의 클라이언트들은 단지 하나 또는 데이터 레코드들에 대해서만 변경된 데이터 항목들을 전송하는 디퍼런싱하는 필드 레벨 또는 하나 또는 그 이상의 데이터 레코드들에 포함된 모든 데이터 항목들을 전송하는 것을 디퍼런싱하는 레코드 레벨을 지원하도록 구성됨으로서 검출된다.

Description

동기화 서버 프로세스{SYNCHRONIZATION SERVER PROCESS}
본 출원은 데이터 동기 서버 프로세스들에 관한 것이다.
원격 데이터 레포지토리로서 기능하는 네트워크 어플라이언스는 로컬 클라이언트로부터 업로드된 데이터를 저장할 수 있다. 원격 데이터 레포지토리에 저장된 데이터는 수정될 수 있고, 관리될 수 있고, 다른 클라이언트들과 공유될 수 있고, 웹 페이지를 구성하는 데 사용될 수 있는 등이 가능하다. 클라이언트와 서버 간의 데이터 동기화는 오픈 모바일 얼라이언스(Open Mobile Alliance) - 데이터 동기화 프로토콜인 OMA DS/SyncML(이전에는 SyncML 프로토콜로서 알려져 있었음)과 같은 동기화 프로토콜들을 이용하여 수행될 수 있다. OMS DA/SyncML는 데이터클래스들의 직렬 동기화를 가능하게 하는 동기 프로토콜이고, 데이터클래스마다 5회 이상의 라운드트립(roundtrips)을 요구할 수 있다.
다른 것들 중에서도 특히, 다양한 동기 서버 프로세스를 수행하는 동기 서버를 제공하기 위한 기술 및 시스템이 개시된다.
일 양태에서, 데이터 동기 세션들을 처리하는 것은, 하나 이상의 데이터 항목을 포함하는 하나 이상의 데이터 레코드를 갱신하기 위해 하나 이상의 클라이언트로부터의 동기 세션을 개시하기 위한 요청을 처리하는 것을 포함한다. 하나 이상의 클라이언트는 동기 세션의 하나 이상의 특성에 기초하여 신뢰 클라이언트(trusted client) 및 비신뢰 클라이언트(untrusted client) 중 하나로서 선택적으로 식별되고, 신뢰 클라이언트는 하나 이상의 데이터클래스에 대하여 서버에 의해 정의되는 스키마(schema)를 지원하도록 구성된다. 하나 이상의 클라이언트는 하나 이상의 데이터 레코드에 대해서 변경된 데이터 항목들만을 송신하는 필드 레벨 디퍼런싱(field level differencing), 또는 하나 이상의 데이터 레코드에 포함된 데이터 항목들 전부를 송신하는 레코드 레벨 디퍼런싱을 지원하도록 구성된 것으로서 검출된다.
구현은 다음의 특징 중 하나 이상을 선택적으로 포함할 수 있다. 하나 이상의 클라이언트가 레코드 레벨 디퍼런싱을 지원하도록 구성된 것을 검출할 때, 하나 이상의 데이터 레코드 내의 변경된 데이터 항목들이 식별될 수 있다. 또한, 동기 세션을 처리하는 것에 응답하여, 하나 이상의 데이터 레코드에 연관된 하나 이상의 변경에 대해 변경 로그가 생성될 수 있다. 또한, 동기 세션을 처리하는 것에 응답하여, 생성된 변경 로그에서 식별된 하나 이상의 데이터 레코드에 대한 하나 이상의 변경을 반영하도록, 서버에 연관된 데이터 레포지토리가 갱신될 수 있다. 또한, 다른 데이터 레포지토리에 액세스하고, 서버에 연관된 갱신된 데이터 레포지토리에 기초하여, 액세스된 다른 데이터 레포지토리에 저장된 데이터 레코드들을 수정하기 위해 브리지 클라이언트가 이용될 수 있다. 또한, 다른 데이터 레포지토리를 액세스하고 수정하는 것은, 다른 데이터 레포지토리를 갱신하기 위하여, 생성된 변경 로그를 처리하는 것을 포함할 수 있다. 또한, 하나 이상의 데이터 레코드에 대한 갱신은 하나 이상의 클라이언트로부터 수신될 수 있고, 클라이언트와 서버의 데이터스토어 간에서 하나 이상의 컨플릭트(conflict)가 식별될 수 있다. 클라이언트들로부터의 갱신들은 혼합(mingle)될 수 있다. 또한, 식별된 하나 이상의 컨플릭트는 동기 세션을 요청하는 하나 이상의 클라이언트 중 가장 최근의 클라이언트에게 우선순위를 할당함으로써 해결될 수 있다. 또한, 하나 이상의 클라이언트가 비신뢰 클라이언트로서 식별된 것을 검출할 때, 비신뢰 클라이언트에 연관된 변경들의 집합 내에서, 그 비신뢰 클라이언트에 연관된 변경들의 집합 내에 포함된 하나 이상의 데이터 레코드에 대해 서버에 의해 정의된 스키마로부터의 하나 이상의 불일치(discrepancy)가 검출될 수 있다. 클라이언트로부터의 변경들의 하나 이상의 특성은 데이터 레코드들 내에 포함된 데이터 항목들에 대한 고유 식별자를 포함할 수 있다.
다른 양태에서, 본 명세서에 설명된 기술들은 데이터 처리 장치로 하여금 다양한 동작들을 수행하게 하도록 동작할 수 있는, 컴퓨터 판독가능 매체 상에 구현된 컴퓨터 프로그램 제품으로서 구현될 수 있다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 데이터 항목을 포함하는 하나 이상의 데이터 레코드를 갱신하기 위하여 하나 이상의 클라이언트로부터의 동기 세션을 개시하기 위한 요청을 처리하게 하도록 동작할 수 있다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 클라이언트를 동기 세션의 하나 이상의 특성에 기초하여 신뢰 클라이언트 및 비신뢰 클라이언트 중 하나로서 선택적으로 식별하게 하도록 동작할 수 있고, 여기에서 신뢰 클라이언트는 데이터 레코드들에 대하여 서버에 의해 정의된 스키마에 대한 관계 데이터 무결성 제약(relational data integrity constraints)을 시행하도록 구성된다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 클라이언트가 하나 이상의 데이터 레코드에 대해서 변경된 데이터 항목들만을 송신하는 필드 레벨 디퍼런싱 또는 하나 이상의 변경된 데이터 레코드에 포함된 데이터 항목들 전부를 송신하는 레코드 레벨 디퍼런싱을 지원하도록 구성되었는지를 검출하게 하도록 동작할 수 있다.
구현은 아래의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 클라이언트가 레코드 레벨 디퍼런싱을 지원하도록 구성된 것을 검출할 때, 하나 이상의 데이터 레코드 내의 변경된 데이터 항목들을 식별하게 하도록 동작할 수 있다. 청구항의 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 동기 세션을 처리하는 것에 응답하여, 하나 이상의 데이터 레코드에 연관된 하나 이상의 변경에 대해 변경 로그를 생성하고; 생성된 변경 로그에서 식별된 하나 이상의 데이터 레코드에 대한 하나 이상의 변경을 반영하도록, 서버에 연관된 데이터 레포지토리를 갱신하게 하도록 동작할 수 있다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 다른 데이터 레포지토리에 액세스하고, 서버에 접속된 갱신된 데이터 레포지토리에 기초하여, 액세스된 다른 데이터 레포지토리를 수정하기 위해 브리지 클라이언트를 이용하게 하도록 동작할 수 있다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 다른 데이터 레포지토리를 갱신하기 위하여, 생성된 변경 로그를 처리하는 것을 포함하여, 다른 데이터 레포지토리에 액세스하게 하도록 동작할 수 있다. 또한, 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 클라이언트로부터 하나 이상의 데이터 레코드에 대한 갱신을 수신하게 하도록 동작할 수 있다. 수신된 갱신과 서버에 연관된 데이터스토어에 저장된 데이터 레코드 간에서 하나 이상의 컨플릭트가 식별될 수 있다. 클라이언트들로부터의 갱신들은 각각의 참가자(클라이언트 또는 서버 데이터스토어)가, 수신자의 데이터스토어에 적용될 때 모든 원격 데이터스토어들에서 동일한 데이터 집합을 만들어낼 데이터 집합에 대한 갱신 집합을 수신할 것을 보장하도록 혼합될 수 있다. 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 클라이언트 중 가장 최근의 클라이언트에게 우선순위를 할당함으로써, 식별된 하나 이상의 컨플릭트를 해결하게 하도록 동작할 수 있다. 또한, 컴퓨터 프로그램 제품은 데이터 처리 장치로 하여금, 하나 이상의 클라이언트가 비신뢰 클라이언트로서 식별된 것을 검출할 때, 비신뢰 클라이언트에 연관된 변경들의 집합 내에서, 그 비신뢰 클라이언트에 연관된 변경들의 집합 내에 포함된 하나 이상의 데이터 레코드에 대해 서버에 의해 정의된 스키마로부터의 하나 이상의 불일치를 식별하게 하도록 동작할 수 있다. 동기 세션의 하나 이상의 특성은 데이터 레코드들 내에 포함된 데이터 항목들에 대한 고유 식별자를 포함할 수 있다.
다른 양태에서, 시스템은 하나 이상의 동기 모드에서 데이터를 동기시키도록 구성된 하나 이상의 클라이언트 장치로의 하나 이상의 연결의 오프닝을 가능하게 하는 전송 프로토콜, 및 서버가 그 오프닝된 하나 이상의 연결을 통해 하나 이상의 데이터클래스를 하나 이상의 클라이언트에 동기화하는 것을 가능하게 하는 하나 이상의 동기 프로토콜을 동작시키도록 구성된 프로세서를 포함한다. 하나 이상의 동기 프로토콜은 서버가 다양한 동작들을 수행할 수 있게 한다. 동기 프로토콜은 서버가 하나 이상의 클라이언트로부터의 동기 세션을 개시하기 위한 요청을 처리할 수 있게 한다. 또한, 하나 이상의 동기 프로토콜은 서버가, 동기 세션의 하나 이상의 특성에 기초하여 하나 이상의 클라이언트를 신뢰 클라이언트 및 비신뢰 클라이언트 중 하나로서 선택적으로 식별하게 할 수 있고, 여기에서 신뢰 클라이언트는 데이터 레코드들에 대하여 서버에 의해 정의된 스키마를 지원하도록 구성된다. 또한, 하나 이상의 동기 프로토콜은 서버가, 하나 이상의 클라이언트가 하나 이상의 데이터 레코드에 대해서 변경된 데이터 항목들만을 송신하는 필드 레벨 디퍼런싱 또는 하나 이상의 데이터 레코드에 포함된 데이터 항목들 전부를 송신하는 레코드 레벨 디퍼런싱을 지원하도록 구성되었는지를 검출할 수 있게 한다.
구현은 아래의 특징들 중 하나 이상을 선택적으로 포함할 수 있다. 프로세서는 하나 이상의 동기 프로토콜로 하여금, 하나 이상의 클라이언트가 레코드 레벨 디퍼런싱을 지원하도록 구성된 것을 검출할 때, 하나 이상의 데이터 레코드 내의 변경된 데이터 항목들을 식별하도록 동작시키도록 구성될 수 있다. 또한, 프로세서는 하나 이상의 동기 프로토콜로 하여금, 동기 세션을 처리하는 것에 응답하여, 하나 이상의 데이터 레코드에 연관된 하나 이상의 변경에 대해 변경 로그를 생성하고; 생성된 변경 로그에서 식별된 하나 이상의 데이터 레코드에 대한 하나 이상의 변경을 반영하도록, 서버에 연관된 데이터 레포지토리를 갱신하게 하도록 동작시키도록 구성될 수 있다. 프로세서는 하나 이상의 동기 프로토콜로 하여금, 다른 데이터 레포지토리에 액세스하고, 서버에 접속된 갱신된 데이터 레포지토리에 기초하여, 액세스된 데이터 레포지토리에 저장된 데이터 레코드들을 수정하기 위해 브리지 클라이언트를 이용하도록 동작시키도록 구성될 수 있다. 또한, 프로세서는 하나 이상의 동기 프로토콜로 하여금, 다른 데이터 레포지토리를 갱신하기 위하여, 생성된 변경 로그를 처리함으로써 다른 데이터 레포지토리를 수정하도록 동작시키도록 구성될 수 있다. 또한, 프로세서는 하나 이상의 동기 프로토콜로 하여금, 하나 이상의 클라이언트로부터 하나 이상의 데이터 레코드에 대한 갱신을 수신하고, 수신된 갱신과 서버에 연관된 데이터스토어에 저장된 데이터 레코드 간에서 하나 이상의 컨플릭트를 식별하도록 동작시키도록 구성될 수 있다. 하나 이상의 클라이언트로부터의 갱신들은 혼합될 수 있다. 프로세서는 하나 이상의 동기 프로토콜로 하여금, 동기 세션을 요청하는 하나 이상의 클라이언트 중 가장 최근의 클라이언트에게 우선순위를 할당함으로써, 식별된 하나 이상의 컨플릭트를 해결하도록 동작시키도록 구성될 수 있다. 또한, 서버는 하나 이상의 클라이언트가 비신뢰 클라이언트로서 식별된 것을 검출할 때, 비신뢰 클라이언트에 연관된 변경들의 집합 내에서, 그 비신뢰 클라이언트에 연관된 변경들의 집합 내에 포함된 하나 이상의 데이터 레코드에 대해 서버에 의해 정의된 스키마로부터의 하나 이상의 불일치를 식별하도록 동작할 수 있다. 동기 세션의 하나 이상의 특성은 데이터 레코드들 내에 포함된 데이터 항목들에 대한 고유 식별자를 포함할 수 있다.
본 명세서에 따른 기술들 및 시스템들은 잠재적으로 다양한 이점들을 제공하도록 구현될 수 있다. 본 명세서에 설명된 동기 서버 처리는 다양한 입도에서의 동기 변경 처리를 가능하게 할 수 있다. 예를 들어, 동기 서버는 변경된 데이터(차이)만이 교환되는 필드 레벨 디퍼런싱을 수용할 수 있다. 이것은 다른 클라이언트들 및 서버들에 대하여 변경되지 않은 데이터 항목들의 불필요한 갱신을 감소시킬 수 있다. 또한, 동기 서버는 신뢰 클라이언트 및 비신뢰 클라이언트를 지원한다. 신뢰 클라이언트와 인터페이스할 때, 동기 서버는 서버의 확장성(scalability)을 향상시키기 위하여 비신뢰 클라이언트에 대해서는 필요할 수 있는 소정의 무결성 체크를 건너뛸 수 있다.
도 1은 복수의 클라이언트 유형 및 복수의 클라이언트를 하나 이상의 서버에 동기화시키기 위한 예시적인 시스템을 도시한 블록도이다.
도 2는 동기 데이터베이스 및 클라이언트 상태들을 유지하기 위한 동기 서버의 예시적인 내부 모델을 도시한 것이다.
도 3은 동기 서버에 대한 예시적인 애플리케이션 아키텍처를 도시한 블록도이다.
도 4는 예시적인 동기 서버 시스템 아키텍쳐를 도시한 블록도이다.
도 5a, 5b, 5c, 5d, 5e, 5f, 5g 및 5h는 동기 서버 처리의 예를 도시한 것이다.
도 6은 RLD 대 FLD 변환을 수행하기 위한 예시적인 서버 프로세스를 도시한 것이다.
다양한 도면들에서 유사한 참조 기호 및 지정들은 유사한 요소들을 나타낸다.
서버와 복수의 클라이언트 간의 동기화를 관리하기 위한 기술들 및 시스템들이 개시된다.
도 1은 서버와 복수의 클라이언트 간의 데이터를 동기화시키기 위한 예시적인 시스템(100)을 도시한 블록도이다. 시스템(100)은 네트워크(170)를 통해 범용 서버(140)에 접속된 동기 서버(110)를 포함한다. 동기 서버(110)는 네트워크(190)를 통해 하나 이상의 웹 클라이언트(120)와 인터페이스하도록 설계된다. 또한, 동기 서버(110)는 네트워크(180)를 통해 하나 이상의 클라이언트 장치(130)와 인터페이스하도록 설계된다. 동기 서버(110)는, 동기 서버(110)가 웹 클라이언트(120) 및 클라이언트 장치(130)에 대한 데이터스토어로서 동작할 수 있게 하기 위해 동기 데이터 레포지토리(112)에 접속된다. 데이터베이스 관리 시스템(DBMS) 데이터베이스는 사용될 수 있는 한 유형의 데이터 레포지토리(112)이다. 범용 서버(140)는 네트워크(160)를 통해 데스크탑 및 랩탑과 같은 하나 이상의 컴퓨터(150)에 인터페이스하도록 설계된다. 범용 서버(140)는, 범용 서버(140)가 범용 데이터 레포지토리로서 동작할 수 있도록 하기 위해 범용 데이터 레포지토리(142)에 접속된다. 네트워크들(160, 170, 180, 190)은 LAN(local area network), WAN(wide area network), 이더넷, 인터넷 등과 같은 다양한 유선 및 무선 네트워크를 포함할 수 있다. 네트워크들(160, 170, 180, 190)은 단일 네트워크일 수도 있고 각각 별개의 네트워크일 수도 있다.
범용 서버(140)는 Dot Mac® 웹 서비스 및 도구들과 같은 웹 서비스 및 인터넷 도구를 제공하는 웹 서버를 포함할 수 있다. 이용가능한 웹 서비스들은 데스트탑 또는 랩탑의 운영체제(OS)에 통합될 수 있다. 예를 들어, Dot Mac® 서비스 및 도구는 Mac® OS와 밀접하게 통합될 수 있다. 이용가능한 Dot Mac® 서비스들 중 하나는 Mac® OS 데스크탑 상의 임의의 다른 볼륨으로서 탑재될 수 있는 iDisks® 온라인 디스크 저장 서비스를 포함한다. 또한, 다른 사용자의 iDisks®의 공개 부분이 데스크탑에 탑재될 수 있다. iDisks®를 사용하여, 사용자는 데스크탑으로 및 데스크탑으로부터 파일을 업로드하고 다운로드할 수 있다. 또한, iWeb®은 사용자들이 iDisks®에 업로드되고 공개될 수 있는 웹 페이지들을 생성할 수 있게 할 수 있다. 마찬가지로, 다른 데이터가, 다른 것들 중에서도 특히 iCal®, iMovie®, iPhoto®, GarageBand®, iTunes® 라이브러리 도구들을 이용하여 iDisk®로 및 iDisk®로부터 업로드 및/또는 다운로드될 수 있다. 다른 Dot Mac® 서비스들은 POP(Post Office Protocol) 및 IMAP(Internet Message Access Protocol) 둘다를 지원하는 @mac.com을 통한 웹 이메일 서비스를 포함할 수 있다.
범용 서버(140)는 WebDAV(Web-based Distributed Authoring and Versioning) 상에 계층화된, 구조화된 데이터 동기화 시멘틱을 이용하여 컴퓨터-대-컴퓨터 동기화를 가능하게 할 수 있다. WebDAV는 사용자들이 원격 월드와이드웹 서버들 상의 파일들을 협업하여 편집 및 관리할 수 있게 해 주는 HTTP(Hypertext Transfer Protocol)에 대한 확장들의 집합이다. WebDAV는 범용 서버(140)와 같은 원격 서버 또는 웹 서버 상의 문서들을 생성, 변경 및 이동하는 기능성을 제공한다. WebDAV는 임의의 컴퓨터에 의해 어디에서든지 액세스될 수 있는 일반적인 웹-기반 파일 저장을 가능하게 한다.
동작시에, WebDAV 프로토콜은 각 클라이언트가 다른 클라이언트에 의한 원하지 않는 수정을 방지하기 위해 특정 리소스를 잠금하는 것을 가능하게 한다. WebDAV는 또한 작성자, 수정일자 등에 관한 정보의 생성, 제거 및 질의와 같은 다양한 특징들을 지원한다. WebDAV는 (웹 페이지 또는 다른 문서와 같은) 리소스들이 서버의 이름공간 내에서 복사 및 이동되는 것을 가능하게 하는 이름 공간 관리를 지원한다. 또한, WebDAV는 리소스들의 생성, 제거 및 리스팅을 가능하게 한다.
WebDAV 상에 계층화된 구조화된 데이터 동기화 시멘틱은 컴퓨터-대-컴퓨터 동기화를 가능하게 하는 SyncDAV(synchronization Distributed Authoring and Versioning)를 포함할 수 있다. 예를 들어, SyncDAV 프로토콜은 Mac® OS X(Tiger/Leopard)에서의 Mac®-대-Mac® 동기를 가능하게 할 수 있다. 또한, SyncDAV 프로토콜은 컴퓨터가 주소록 엔트리, iCal 데이트, Safari 북마크, 키체인(keychains), 메일 계정, 메일 규칙, 메일 서명, 스마트 메일박스(smart mailboxes) 등과 같은 다양한 사용자 데이터를 갱신 및 동기화하기 위하여 iDisk® 또는 다른 컴퓨터들과 동기화할 수 있게 한다.
웹 클라이언트(120)는 다양한 Dot Mac® 웹 애플리케이션을 포함할 수 있다. 또한, 클라이언트 장치(130)는 이동 전화(132), PDA(personal digital assistant)(134), 핸드핼드형 데이터 처리 장치(136) 등과 같은 이동 장치들을 포함할 수 있다. 이동 전화(132)는 iPhone®과 같은 통합형 모바일 장치 및 스마트폰을 포함할 수 있다. 핸드핼드형 데이터 처리 장치는 MP3 플레이어 및 iPod® 장치와 같은 오디오 재생 장치를 포함할 수 있다.
동기화는 2개의 별개의 데이터스토어가 일치하는 것으로 알려진 최후의 시간 이후로 각각의 데이터스토어에 발생한 변경들을 주기적으로 비교함으로써 데이터스토어들 간의 일관성을 유지하는 프로세스이다. 데이터스토어들은 일 측에서 웹 클라이언트(120) 및 클라이언트 장치(130)를 포함하고, 다른 측에서 동기 서버(110) 및 범용 서버(140)를 포함할 수 있다. 각 측과 데이터를 동기화하기 위하여, 데이터스토어들은 다양한 기능을 가지고서 구성된다. 예를 들어, 각 데이터스토어는 요청될 때 모든 데이터를 공급하도록 구성된다. 또한, 각 데이터스토어는 최후 동기화 시간 이후의 변경을 식별 및 공급하도록 구성된다. 각 데이터스토어는 동기 상태로 유지된 스키마에 동의하도록 구성된다. 각 데이터스토어는 데이터 표현에 동의하도록 구성된다. 각 데이터스토어는 동기화 프리미티브(즉, 추가, 갱신, 삭제)의 시멘틱에 동의하도록 구성된다. 또한, 각 데이터스토어는 데이터스토어를 손상시키는 것을 방지하기 위해, 동기화 동안 문제가 발생한 경우 이전 상태로 롤백(rollback)하도록 구성된다.
동기화되는 데이터는 관계형 모델을 따르며, 구조화된 데이터 유형("엔티티")들의 정의들을 그룹짓는 "스키마들" 또는 "데이터클래스들"로 분할된다. 각 데이터클래스는 관계된 엔티티들 및 특성들의 네트워크인 스키마에 의해 표현된다. 주어진 데이터클래스 내의 엔티티들은 "관계(relationships)"를 통해 서로에 대해 참조될 수 있다. 별개의 데이터클래스들 내의 엔티티들 간의 관계는 금지되며, 따라서 각 데이터클래스는 다른 데이터클래스에 대하여 완전히 독립적이다. 사용자의 관점으로부터 볼 때, 데이터클래스들은 별개의 전용 애플리케이션들로부터 관리되는 것으로 보일 수 있다. 예를 들어, "컨택트트" 데이터클래스는 주로 주소록 애플리케이션에 의해 관리될 수 있는 한편, "캘린더" 데이터클래스는 일정관리 애플리케이션에 의해 관리될 수 있다.
동기 서버(110)는 느림(slow), 리셋(reset) 및 빠름(fast)을 포함하는 다양한 동기화 모드를 가능하게 한다. 클라이언트 장치와 서버가 처음으로 동기화할 때, 데이터클래스에 대한 모든 데이터가 교환되어, 동일한 것으로 고려되는 기존 데이터 항목들을 "매칭"시킨다. 후속 동기화 동작들에 대한 동기 및 네트워크 대역폭 사용을 최적화하기 위하여, 클라이언트 장치(130) 및 서버(110)는 해당 쌍이 동기화되었던 최후의 시간 이후에 변경된 데이터만을 교환할 수 있다. 따라서, 각 엔티티(즉, 클라이언트 장치 또는 서버)는 어떤 로컬 변경이 다른 엔티티에 보내져야 하는지를 결정할 수 있어야 한다. 또한, 각 엔티티는 "빠른" 동기화가 재개될 수 있기 전에 추가의 데이터를 교환할 것을 요구하는 상황이 발생했는지를 검출할 수 있어야 한다.
느린 동기화 모드는 클라이언트 장치(130) 및 동기 서버(110)가 처음으로 동기화할 때, 후속의 차이있는 데이터만의 교환(difference-only data exchange)을 위한 공통의 베이스라인을 설정하기 위해 요구될 수 있다. 느린 동기화 동안, 클라이언트 장치(130)는 동기 서버(110)에 대해 데이터클래스에 대한 모든 데이터를 송신한다. 서버는 이러한 데이터 항목들을 동기 서버(110)에 이미 알려져 있는 데이터 항목들과 매칭시키려고 시도한다. 적절한 "동일성 매칭(identity matching)"의 수행에 실패하면, 바람직하지 않은 데이터의 중복 또는 병합이 발생할 수 있다. 그 다음, 동기 서버(110)는 클라이언트 장치(130)에 누락된 데이터 항목들로 응답한다.
리셋 동기 모드는 클라이언트 장치(130) 상의 데이터클래스에 대한 모든 데이터를 서버의 데이터로 리셋하기 위해 이용된다. 이는, 데이터 구조가 클라이언트 장치(130)에 푸시된 때, 또는 서버(110) 또는 클라이언트 장치(130)가 장치의 로컬 데이터가 손상되었음을 결정한 경우에 발생할 수 있다. 클라이언트 장치(130)는 데이터를 송신하지 않고, 서버는 데이터클래스에 대한 완전한 데이터 구조로 응답한다.
고속 동기 모드는 특히 제한된 대역폭 접속을 사용하는 경우에 가장 효과적인 모드이다. 클라이언트 장치(130)는 동기 서버(110)와 최종 동기된 이래로 변화된 데이터만을 송신한다. 동기 서버(110)는 클라이언트 장치(130) 외부에서 변화된 데이터에만 응답한다.
동기 서버(110)는 중앙 데이터 레포지토리(142)에 동기된 데이터에의 판독/기입 액세스를 갖는 복수의 웹 클라이언트(120) 및 클라이언트 장치(130)를 제공하기 위한 확장가능형 솔루션이다. 동기 서버(110)는 동기 데이터 레포지토리(112)에 저장된 하나 이상의 데이터 기록을 갱신하기 위하여 복수의 웹 클라이언트(120) 및 클라이언트 장치(130)에 대한 동기 트랜잭션들을 관리한다. 동기 서버(110)는 동기 세션들을 처리하고, 갱신된 동기 데이터 레포지토리(112)는 범용 서버(140)와 연관된 중앙 데이터 레포지토리(142)에 의해 동기된다. 동기 데이터 레포지토리(112)를 중앙 데이터 레포지토리(142)와 동기시킴으로써, 동기 서버(110)는 범용 서버(140)의 다른 클라이언트로서 동작한다. 따라서, 범용 서버(140)에게는, 동기 서버(110)가 컴퓨터 클라이언트(150) 중 하나인 것처럼 행동한다.
효과적인 확장가능형 동기 서비스들을 가능하게 하기 위하여, 동기 서버(110)는 SQL(Structured Query Language)을 필요로 하지 않는 임베디드된 B-Tree에 기초하여 동기 데이터 레포지토리(112)를 구현한다. 동기 데이터 레포지토리(112)는 실제 데이터베이스를 제외한 동기 서버(110) 상의 모든 것을 포함하는 Berkeley DB®와 같은 임베디드된 데이터 스토리지이다. Berkeley DB Java Edition("Berkeley DB JE", 또는 "BDB JE", 또는 "JE")은 (캘리포니아의 레드우드 시티에 있는 Oracle® Corporation의) 순수 Java 데이터베이스이다. Berkeley DB는 높은 확장가능형의 고성능의 트랜잭션 B-Tree 데이터베이스를 제공한다. 구현들은 Berkeley DB에 제한되지 않는다. 일부 구현들에서, Hibernate와 같은 다른 영특성 메커니즘들이 사용될 수 있다. Hibernate는 Java 및 .Net에 대한 개체/관계 영특성 및 쿼리 서비스이다.
Oracle Berkeley DB는 개발자들에게 고속의 신뢰성있는 로컬 데이터 영특성을 제공하는 개방형 소스 임베디드가능형 데이터베이스 엔진이다. 임베디드된 데이터베이스로서, Berkeley DB 라이브러리는 웹 클라이언트 애플리케이션들(120)로 직접 링크된다. Berkeley DB에 의해 링크시킨 후에, 웹 클라이언트 애플리케이션들(120)은 간단한 함수 호출들을 통해 국지적으로 데이터에 액세스할 수 있어, 이에 의해 클라이언트-서버 아키텍쳐들에서 공통으로 사용되는 네트워크 기반 프로토콜들의 성능 페널티를 제거한다. 마찬가지로, Berkeley DB가 비-SQL 데이터베이스인 경우, 애플리케이션 개발자들은 특정한 데이터 액세스 패턴들을 규정할 수 있다. Berkeley DB에 의해 제공된 제어 및 옵션들의 양이 주어지면, 애플리케이션 개발자들은 데이터 자체에의 보다 최적화되고 예측가능한 액세스를 획득할 수 있다.
로컬 동기 데이터 레포지토리(112)는 no SQL 오버헤드와 관계가 없다. 또한, 로컬 동기 데이터 레포지토리(112)는 no 클라이언트-서버 오버헤드와 인-프로세스(in-process)에 있다. 로컬 동기 데이터 레포지토리(112)는 데이터에 대해 편리한 수집 스타일 인터페이스를 제공할 수 있다. 또한, 각각의 사용자에 대해 별개의 스토어를 가지면 위험이 감소된다.
동기 서버(110)는 (예를 들면, 서버(110)에 의해 정의된 스키마에서 "데이터"에 의해 표현되는) 바이너리 데이터 특성들을 다루는 특정한 경우를 갖는다. "com.apple.Contacts" 스키마에서의 일례는 "com.apple.contacts.Constact" 엔티티 상의 "이미지" 특성이다. 영특성 저장소가 이들 데이터 유형들을 직렬화하고 저장할 수 있지만, 이들을 보다 콤팩트한 데이터 유형들을 사용하여 특성들로부터 별도로 저장하는 것이 보다 효과적일 수 있다. 동기 서버(110)는 "Blob" 디렉토리에서 바이너리의 큰 개체들(BLOBS)을 저장할 수 있고, 이들을 데이터클래스 및 기록 ID에 의해 조직화한다. BLOB는 데이터베이스 관리 시스템에 단일의 엔티티로서 저장된 바이너리 데이터의 집합이다. BLOBS는 이미지, 오디오 또는 기타 멀티미디어 개체들을 포함한다. 일부 인스턴스들에서, 바이너리 실행가능 코드는 미확인 개체(blob)로서 저장될 수 있다. BLOB 데이터에 대한 레퍼런스들은 파일 레퍼런스 URI들로 변환된다. 이를 실현하기 위해, 동기 서버(110)는 중앙 데이터 레포지토리(142) 또는 동기 데이터 레포지토리(112)에서 영속되기 전에 데이터 제공자들로부터 나오는 임의의 데이터를 인터셉트하고 변형(mutate)하는 데에 사용될 수 있는 인터셉터를 구현한다. 인터셉터들은 BLOB 데이터를 파일 레퍼런스로 변환하고, 실제 BLOB 데이터를 직렬화할 수 있다. 이는 동기 서버(110)로 하여금 확장가능성을 개선시키는 동기를 수행하는 프로세스에서 메모리로부터 벌크 데이터를 일찍 제거하게 할 수 있다. 또한, 동기 서버(110)가 중앙 데이터베이스(142) 및/또는 동기 서버(112)에의 직접적인 액세스를 갖는 다른 백엔드 애플리케이션들과 이들 BLOB 레퍼런스들을 공유하게 할 수 있으며, 이는 이들 프로세스들이 데이터를 페치할 필요가 있을 때 동기 서버의 성능을 더욱 향상시킨다. 또한, 중앙 데이터베이스(142)에 저장된 BLOB 레퍼런스들은 그들 각각의 네트워크들(160, 190 및 180)을 통해 클라이언트들(150, 120 및 130)에 대해 서버 프로세스들(140 및 110)에 의해 액세스되는 직접적인 판독만이 제공될 수 있다. 이는 동기 서버(110)가 다른 서버 프로세스들에 의해 벌크 데이터에 액세스할 책임을 공유하게 할 수 있다. BLOB들은 외부 파일들로서 저장될 수 있다.
동기 서버(110)는 각각의 동기 세션에 대해 기록 스냅 샷들을 유지할 필요성을 제거하는 동기 데이터 레포지토리(142)를 나타내기 위한 최소 스키마에 의존한다. 예를 들어, 동기 서버(110)는 상호관련되는 엔티티 세트를 포함하는 데이터클래스들을 사용한다. 동기 서버(110)는 텍스트 또는 바이너리 특성 리스트 파일들(plist: property list files)을 사용함으로써 각종 데이터클래스들을 지원한다. Mac® OS X Cocoa, NeXTSTEP 및 GNUstep 프로그래밍 프레임워크들에서, plist들은 예를 들어 직렬화된 개체들을 저장하는 파일들이다. plists는 Microsoft Windows® 상의 윈도우즈 레지스트리의 기능과 유사하게, 사용자의 설정을 저장하는 데 사용된다. 특성 리스트 파일들은 또한 번들 및 애플리케이션에 관한 정보를 저장하는 데 종종 사용된다. plist는 NSPropertyListSerialization 클래스와 같은 표준 운영체제(OS) 피쳐들을 사용하여 발생 및 파싱하기 쉽다. 예를 들어, 동기 서버(110)는 각 데이터클래스를 어떻게 지원하고 동기할지를 이해하기 위해, Mac® OS 10 plist를 사용하여 데이터클래스들에 대한 내부 개체 모델들을 생성할 수 있다. 이는 동기 서버 자체를 변경할 필요없이, 동기 서버(100)로 하여금 서버의 구성을 변경함으로써 추가의 데이터베이스들을 동적으로 지원하도록 허용한다.
도 2는 동기 서버(110)에 의해 지원되는 예시적인 데이터 모델을 도시한다. 동기 서버(110)는 엔티티 기록, 특성, 기록 변화(추가, 변경, 삭제), 특성 변화(세트, 클리어) 및 id-매핑을 나타내는 각 데이터클래스에 대한 개체 데이터 모델을 생성한다. 동기 서버(110)는 자신을 구조화된 데이터 스토어 및 SyncEngine 양쪽 모두로 표시하고, 동기 서버(110)의 내부 지속 모델은 다음에 대한 요건의 균형을 맞춘다 : (1) Truth access (임의의 데이터클래스 및/또는 엔티티의 현재 버전)(210); (2) History management (관련 이벤트들의 타임라인을 따른 필드 레벨 차이)(220); (3) Client state (히스토리, 동기 모드, 클라이언트 타입에서 최종적으로 알려진 위치)(230); 및 (4) 클라이언트 디바이스(130)에 대한 Device specifics(240). 이 요건들 각각은 동기 서버의 스키마에서 논리적으로 분리된다.
신뢰 데이터(210)는 사용자를 위한 데이터의 전체적인, 현재의 세트를 포함한다. 신뢰 데이터(210)는 중앙 데이터 레포지토리(140)에 저장된다. 신뢰 데이터(210)는 현재 데이터를 단순히 얻기를 원하는 클라이언트에게 최소한의 SyncEngine 논리로 신속한 데이터 액세스를 가능하게 한다. 신뢰 데이터(210)는 GUID(global unique identifier), entity name, dataclassName, deleted, creationTime, modificationTime 등과 같은 각종 엔티티들을 포함하는 하나 이상의 데이터 records(212)를 포함할 수 있다. 각각의 record(212)는 name 및 value와 같은 각종 파라미터들(214)과 연관된다.
신뢰 히스토리(220)는 이벤트들의 순서화된 타임라인을 제시한다(History.id에 의해 순서매겨짐). 신뢰 히스토리(220)는 ID, recordId, dataclassName, clientId, type, timespamp, synthetic 등을 비롯한 각종 엔티티를 갖는 하나 이상의 히스토리 데이터(222)를 포함한다. 각 신뢰 히스토리 데이터(222)는 action 및 name과 같은 하나 이상의 히스토리 특성(224)과 연관되어 있다. 신뢰 히스토리는 또한 Conflict 데이터(226)를 포함한다. 중복을 피하기 위해, 실제 기록 값은 신뢰 히스토리에 저장되지 않는다. 예를 들면, 동기 서버(110)는 버저닝 시스템이 아니다. 대신에 동기와 서버(110)는 어떤 기록 및 특성들이 변경되었는지(예를 들어, FLD), 기록이 추가, 변경, 또는 삭제되었는지의 여부, 및 어느 클라이언트가 변경을 했는 지에 관한 정보를 저장한다. 컨플릭트들(Conflicts)이 또한 이 영역 내에 논리적으로 들어간다. 그러나, 컨플릭트들은 신뢰(Truth) 내에서 지속되지 않을 수 있다.
클라이언트 상태(230)는 주어진 클라이언트의 존재 및 각 데이터클래스에 대한 동기화 상태를 유지하는 데 사용되는 각종 엔티티들을 포함할 수 있다. 클라이언트 상태는 GUID, name, account, type, state, isEnabled, isRegisteredWithBridgeStore, firstSyncDate, lastSyncDate, buildversion, creation time, modification time, deviceinfo, 또는 activation을 포함한다. 각 클라이언트와 연관된 것은 데이터클래스들이다(232). 데이터클래스들은 name, anchor, fastSync, lastSync, lastreset, lastSyncState, hash, lastSyncHistory, enabled, creation time, pending updates, pendingIdmapping, 및 deviceDataclass State를 포함한다.
또한, 각 데이터클래스는 sync Anchor(236) 데이터클래스와 연관되어 있다. sync Anchor 정보는 generation, historyid, syncMode, syncDirection, 및 changelogVersion을 포함할 수 있다. 데이터클래스는 dataclass history(238)와 연관될 수 있다. dataclass history(238)는 recordId, type, time stamp를 포함할 수 있다. 또한, 각 데이터클래스는 IdMapping(239)과 연관될 수 있다.
디바이스 상태(240)는 클라이언트 데이터(232)에 관련된 DeviceInfo(242) 및 Activation(244)을 포함할 수 있다. Activation(244)은 msisdn, carrier 및 notify elements를 포함할 수 있다. 또한, 디바이스 상태(240)는 name, anchors, filter, creationTime 및 modificationTime을 포함하는 각종 엔티티를 포함하는 DeviceDataClassState(246)를 포함할 수 있다. 디바이스 또는 클라이언트 상태(240)는 LUID, GUID, dataclass:clientID, creation time, 및 modification time을 비롯한 각종 데이터 엔티티를 포함하는 RecordidMap(248)을 포함할 수 있다. DeviceDataclassState(246)는 DeviceAnchorType(250) 및 map과 enabled 같은 filter information을 포함할 수 있다. 엔티티들은 OTA 클라이언트들(130)에 의해 특히 사용된다.
신뢰 클라이언트
동기 서버(110)는 신뢰 클라이언트와 비신뢰 클라이언트들 양쪽 모두를 지원하도록 구성된다. 신뢰 클라이언트와 인터페이싱할 때, 동기 서버는 비신뢰 클라이언트들에게는 필수적일 수 있는 특정 무결성 체크를 스킵할 수 있다. 신뢰 클라이언트는 동기 서버(110)와의 특정 계약을 만족하는 클라이언트이다. 예를 들면, 신뢰 클라이언트는 본래 ID로서 동기 서버 ID의 사용을 지원한다. 따라서, 신뢰 클라이언트의 LUID(Local Unique Identifier)는 동기 서버(110)에 의해 생성된 UUID(Universal Unique Identifier)로 대체된다. 또한, 신뢰 클라이언트는 동기 서버(110)의 모든 엔티티 및 특성을 지원한다. 또한, 신뢰 클라이언트는 도입된 변화들이 동기 서버(110)의 스키마에 따라 보유된다고 보장한다. 동기 서버(110)에 의해 지원되는 스키마들 또는 데이터클래스들은 Contacts, Calendars 및 Bookmarks를 포함한다.
신뢰되지 않는 클라이언트들과 인터페이싱할 때, 동기 서버(110)는 신뢰되지 않는 클라이언트들에 의해 보내진 변화들을 처리하려고 시도할 수 있다. 동기 서버(110)는 신뢰되지 않는 클라이언트들에 의해 요구된 데이터 변화들의 구조를 보고 요구된 데이터 변화들이 적법한지(동기 서버(110)의 요건들과 부합하는지) 여부를 결정할 수 있다. 또한, 동기 서버(110)는 요구된 기록 변화들이 식별된 스키마에 대하여 타당한지 여부를 결정할 수 있다. 예를 들어, 동기 서버는 신뢰되지 않는 클라이언트들이 요구된 특성을 갖지 않는 기록을 추가하려는 시도 중인지 여부를 결정할 수 있다. 동기 서버는 존재하지 않는 관련된 ID들과의 관계들을 설정함으로써 신뢰되지 않는 클라이언트들이 기록을 수정하려는 노력 중인지 여부를 결정할 수 있다. 동기 서버(110)가 부적법한 데이터 변화 요구를 검출할 때, 동기 서버(110)는 변화를 플래그한다. 동기 서버(110)가 변경시킬 수 없는 변화들은 거부된다. 일부 예들에서, 소정의 부적법한 데이터 변화들이 동기 서버(110)에 의해 바로 잡히고 명시적인 클라이언트 개입 없이 허용될 수 있다.
예를 들어, 이하의 부적법한 데이터 변화는 동기 서버(110)에 의해 바로 잡힐 수 있다. 비신뢰 클라이언트가 컨택트 및 전화번호를 추가하기 위한 요구를 송신하는 것을 고려한다. 컨택트와 전화번호 간에는 "다수에 대한(to-many)" 관계가 있다. 예를 들어, 컨택트 엔트리는 많은 전화번호들에 할당될 수 있다. 주요 전화번호의 경우, 컨택트는 하나의 주요 전화번호를 가지므로 관계는 일-대-일이다. 신뢰되지 않는 클라이언트들이 컨택트 및 전화번호를 추가할 때, 전화번호는 컨택트에 링크된다. 전화번호 자체는 다시 관련된 컨택트으로의 백포인터 또는 컨택트 관계를 갖는다. 따라서, 컨택트가 전화번호와 함께 추가될 때, 관계들이 지정되어야 한다. 관계들 중 다수는 역(inverse)을 갖는다. 컨택트트 데이터클래스에서의 전화번호의 관계는 컨택트 관계들인 전화번호 엔티티 상의 역관계를 갖는다. 예를 들어, "contact.phone_numbers"는 관계를 나타낼 수 있으며, 그 관계에 대한 역관계는 "phone_number_entity.contact_property" 역관계로서 제공될 수 있다. 관계들 중 하나 이상이 누락되거나 부정확한 경우, 동기 서버(110)는 역관계와 같은 누락되거나 부정확한 관계들을 정정할 수 있다.
다른 예에서, Foo와 같은 컨택트 엔티티(contacts entity)는 전화번호 엔티티 Bar를 참조하고 있을 수 있다. 신뢰되지 않는 클라이언트에서, 전화번호 엔티티 Bar의 컨택트 백포인터는 부정확하게 다시 컨택트 엔티티 Baz를 참조하고 있을 수 있다. 동기 서버(110)는 이 부정확한 백포인터를 정정할 수 있다. 신뢰 클라이언트는 그러한 부정확한 관계를 생성하지 않을 것이다.
따라서, 동기 서버(110)가 신뢰되지 않는 클라이언트와 인터페이스하고 있으며, 역관계에 대한 백포인터가 설정되지 않는 경우, 동기 서버(110)는 이것을 보고 적법하지 않은 것으로 결정한다. 또한, 동기 서버(110)는 오류를 바로잡기 위해 무엇을 할 수 있는지 알 수 있다. 동기 서버(110)는 전화번호를 참조하고 있던 컨택트 엔티티로의 백포인터를 갖는 컨택트 엔티티에 대한 전화번호 상에 설정된 특성을 합성한다. 따라서, 신뢰되지 않는 클라이언트에 대하여, 동기 서버(110)는 동기 서버(110)에 허용 가능한 특성 변화들을 합성함으로써 도움이 될 수 있다. 또한, 동기 서버(110)는 신뢰되지 않는 클라이언트에게 동기 서버 추론에 기초하여 이와 같이 바로 잡는 것이 수행되었음을 알릴 수 있다.
동기 서버(110)는 클라이언트가 신뢰되는지 여부를 선험적으로(priori) 결정할 수 있다. 소정의 클라이언트들은 특별한 프로토콜들을 이용하는 것으로 인해 신뢰되는 것으로 식별 또는 검출된다. 예를 들어, SDK(software development kit) 클라이언트들(120)은 SDK 기반 프로토콜을 이용하는 것으로 인해 신뢰된다. SDK는 소프트웨어 엔지니어가 소정의 소프트웨어 패키지, 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템, 비디오 게임 콘솔, 운영체제, 또는 유사한 플랫폼에 대한 애플리케이션들을 생성하는 것을 가능하게 하는 개발 툴들의 세트이다. 또한, SyncDAV 클라이언트들(150)도 신뢰된다. SyncDAV는 Dot Mac® 서버와 같은 범용 서버(140) 상의 컴퓨터 클라이언트(150)(예를 들어, Mac®)로부터의 변화들을 저장하는 데에 이용된 WebDAV에 기반한 유선 프로토콜이다.
동기 서버(110)는 또한 클라이언트가 신뢰 클라이언트인지 여부를 동적으로 결정한다. 동기 서버(110)는 현재 sync의 특성들을 검출하여 그러한 결정을 할 수 있다. 예를 들어, 신뢰되지 않는 클라이언트는 신뢰 클라이언트로서 동작하도록 갱신되었을 수 있다. 그리고 나서 다음 sync에서, 동기 서버(110)는 클라이언트가 신뢰 클라이언트인 것을 검출할 것이다. 또한, 동기 서버(110)는 클라이언트가 예를 들어 LUID 또는 UUID를 보내는지 여부를 검출할 수 있다. 또한, 동기 서버(110)는 클라이언트에 대한 장치 정보의 클라이언트 정의에 설정된 플래그를 검출할 수 있다. 또한, 동기 서버(110)는 클라이언트가 느린 동기 모드를 이용하고 있으므로, 변화들은 FLD가 아닌 RLD라는 것을 검출할 수 있다. 또한, 클라이언트는 동기 서버 클라이언트 SDK(320)을 통해 서버(110)와 인터페이스하여, 퍼블리시된(published) SDK에 따르는 클라이언트들은 신뢰 클라이언트들임을 나타낼 수 있다. 일부 구현에서, 신뢰 클라이언트들의 라이브러리가 퍼블리시되어 승인된 신뢰 클라이언트들의 표준을 설정할 수 있다.
모든 동기화된 데이터는 범용 고유 기록 ID 또는 UUID를 갖는다. 효율성을 위해, 동기 서버(110)는 Mac®OS X 상의 SyncServices의 UUID를 이용할 수 있다. 대안으로, 클라이언트 장치(130) 상의 애플리케이션은 데이터에 대한 자신의 로컬 고유 ID(LUID)들을 이용하여, 예컨대 로컬 데이터 레포지토리의 효율을 증진시킬 수 있다.
서버(120)는 클라이언트 장치(130)(데이터 레포지토리)로 하여금 필요에 따라 데이터 아이템들을 참조하는 데 자신의 LUID를 이용하게 할 수 있다. 이 경우, 서버(120)는 LUID-UUID 매핑을 유지하여 클라이언트 장치(130)로 하여금 자신의 로컬 ID를 이용함으로써 전체 기록을 투명하게 참조할 수 있다. 서버(120)는 데이터 클래스에 대해 "슬로우(slow)" 또는 "리셋(reset)" 동기 모드가 허용되는 경우 새로운 매핑들을 재확립한다.
동기 서버(110)는 신뢰 클라이언트에 대해 권한 동기 서버 UUID를 설정한다. 각 데이터 엔티티에 대해 권한 UUID를 설정함으로써, 동기 서버(110)는 LUID-GUID(Global Unique Identifier) 매핑을 제거할 수 있다. 비신뢰 클라이언트에 대해, 동기 서버(110)는 필요에 따라 LUID-GUID 매핑(248)을 유지한다. LUID-GUID 매핑은 외부 클라이언트로 하여금 클라이언트 자신의 로컬 식별자에 의해 데이터 엔티티에 액세스 가능하게 한다. 그러나, 이는 어떻게 변경들이 표현되는지에 대한 추가적인 부기(bookkeeping)를 필요로 한다. 웹 애클리케이션 등의 신뢰 클라이언트가 동기 서버의 UUID를 지원하도록 요청함으로써, 비용이 드는 LUID-GUID 매핑이 회피될 수 있다. 이는 예를 들어 동기 서버(110)에 대한 처리 작업들을 감소시킬 수 있다.
클라이언트가 추가하고 있는 데이터 아이템이 이미 동기 데이터 레포지토리(112)에 존재하는 경우, 동기 서버(110)는 식별 매칭을 수행할 수 있다. 식별 매치가 검출되는 경우, 동기 서버(110)는 클라이언트에게 데이터 아이템이 동기 서버(110)의 새로운 UUID에 의해 참조되어야 한다는 것을 통지한다. 예를 들어, 유사한 데이터세트(예컨대, 한 묶음의 어드레스 컨택트트)의 동기화를 시도하는 2개의 Macs®를 고려해 보자. 이들은 SyncDAV 프로토콜을 이용한 신뢰 클라이언트들이다. 각각의 Mac®는 자신의 UUID를 데이터 엔티티들에 할당할 것이다. 제1 Mac®가 범용 서버(140)와 동기화되는 경우, 식별 매칭에 기초한, 데이터 엔티티가 아직 존재하지 않으므로 제1 Mac®로부터의 UUID가 허용된다. 동기 서버(110)에는 동기화가 통지되고, 그 결과 동기 서버(110)는 SyncDAV 동기화를 수행하여 제1 Mac®에 의해 할당되는 UUID를 갖는 추가 데이터 엔티티를 획득한다. 그 후, 제2 Mac®가 동일한 데이터세트를 동기화하고, 자신의 UUID를 슬로우 동기화를 통해 제공하면, 동기 서버(110)는 이러한 새로운 UUID를 허용하지 않고, 제1 Mac®로부터 다른 UUID 값을 할당한다.
필드 레벨 디퍼런싱 대 레코드 레벨 디퍼런싱
데이터의 차이는 다양한 형태로 동기화될 수 있다. 동기화 데이터를 교환하는 경우, 클라이언트 장치(130) 및 웹 클라이언트(120)는 각각의 변경된 레코드의 RLD(record-level differencing)에 대한 완전한 데이터를 송신할 수 있다. 대안으로, FLD(field-level differencing)에 대한 각각의 변경된 레코드의 변경된 필드만이 송신될 수 있다. 특히 데이터 레코드가 다수의 필드를 포함하거나, 또는 콘텐츠 데이터클래스 내의 이미지 등의 대량의 데이터를 포함하는 경우에, FLD는 RLD에 비해 보다 바람직할 수 있다.
서버(110)는 클라이언트 장치(130)로부터 수신된 데이터의 RLD 표현 및 FLD 표현 양자 모두를 동적으로 지원할 수 있다. 변경에 대한 데이터 표현은 클라이언트 장치(130) 및/또는 웹 클라이언트(120)가 주어진 데이터클래스에 대하여 RLD 또는 FLD를 이용하는지 여부를 나타낸다. 이는 FLD를 지원하는 메타 정보를 유지하는 것의 복잡성이 합리적이지 않은 경우 최대의 유연성을 갖는 클라이언트 장치 데이터스토어의 구현을 제공한다.
RLD 변경을 수신하는 경우, 동기 서버(110)는 처리, 저장 및 통신 효율을 위해 그 변경들을 FLD 포맷으로 내부적으로 변환한다. 동기 서버(110)는 RLD 클라이언트 장치(130)가 완료된 레코드를 송신하기를 기대한다. 클라이언트 장치(130)에 의해 지원되고 클라이언트 장치의 데이터 레코드로부터 누락된 데이터 필드들은 클라이언트 장치(130)에 의해 클리어되거나/삭제되도록 상정된다. 그러나, 클라이언트 장치(130)로 하여금 소정의 데이터 필드 제외 값들이 그 값들을 송신하지 않고 변경되지 않았다는 것을 나타내는 메커니즘이 제공될 수 있다.
RLD 클라이언트는 변경된 데이터 엔티티들을 나타내도록 플래그들을 갖는 전체 데이터세트를 송신할 수 있다. FLD 클라이언트는 변경된 데이터 엔티티들만을 송신한다. 일부 구현예서, 신뢰 클라이언트는 FLD 변경들만을 송신할 수 있다. FLD를 이용하는 것은, 중앙 데이터 레포지토리(142)에 액세스하는 다른 클라이언트 및 서버들에 대한 불필요한 갱신 및 대역폭 사용량을 감소시킨다.
컨플릭트 해결
2개 이상의 클라이언트가 동일한 데이터 엔티티 및/또는 특성을 변경하기를 시도하는 경우, 컨플릭트가 존재할 수 있다. 예를 들어, 2개의 클라이언트가 컨택트트 개체의 최종 이름을 변경하기를 시도하는 경우, 동기 서버(110)는 컨플릭트를 자동 해결하기를 시도한다. 어느 변경이 허용될 지를 결정하는 경우, 시간적 순서가 이용될 수 있다. 동기 서버(110)는 가장 최근의 변경을 결정하기를 시도하고, 그 변경에 높은 우선 순위를 할당한다.
그러나, 시간 순서화(temporal ordering)는 복잡할 수 있다. 예를 들어, 동기 서버(sync server)(10)가 클라이언트의 내부 클록을 신뢰하지 못할 수 있으므로, 타임 스탬프(time stamp)를 이용하는 것은 위험하다. 또한, 시간 순서화는 클라이언트 각각에 의해 사용된 네트워크의 품질에 의해 영향을 받을 수 있다. 일반적으로, 컨플릭트가 검출되면, 동기 서버(110)는 더 높은 우선순위를 현재 동기를 개시한 클라이언트에 할당한다.
몇몇 경우에는, 어떤 변경들이, 심지어 보다 최근의 변경들인 경우에도, 더 취약한 것으로 간주될 수 있고, 또는 오래된 변경보다 낮은 우선순위가 할당되어야 한다. 예를 들어, 변경의 타입인, RLD 또는 FLD는 어떤 변경이 더 높은 우선순위를 가져야 하는지에 영향을 줄 수 있다. 우선, 동기 서버(110)는 RLD 클라이언트로부터의 이름(First Name) 및 성(Last Name)과의 콘택트들(Contacts)에 대한 변경을 검출한다. 그 다음에, 가운데 이름(middle name)을 추가하라는 FLD 클라이언트로부터의 변경을 검출한다. RLD 클라이언트가 새로운 전화 번호를 보낸다면, RLD 클라이언트는 추가된 가운데 이름을 보지 않은 것이다. 따라서, 그 변경이 가장 최근의 동기인 경우에도, 동기 서버(110)는 그 변경이 RLD 클라이언트로부터의 것으로서 이해하기 때문에, 비어 있는 가운데 이름이 클리어(clear) 또는 삭제(delete) 로서 검출되지 않는다. 이러한 경우에 동기 서버(110)는 RLD 와 FLD 간 간섭 동안에 가운데 이름을 삭제하지 않는다. 따라서, 동기 서버(110)에 의해 합성 변경들(추론된 클리어)은 보다 최근인 경우에도 더 취약한 변경들인 것으로 간주된다. 사용자가 그 변경들을 입력한 순서를 그 사용자가 알고 있더라도, 동기 서버(110)에는 그 순서가 그다지 명확하지 않을 수 있다.
동기 데이터 레포지토리와 중앙 데이터 레포지토리의 동기
SyncDAV 변경 로그들은 레코드 변경들의 집합을 나타내는 파일들이다. 단일 레코드 변경은 데이터의 하나의 레코드에 속하며 다음 3개의 연산들 중 하나를 표현한다: (1) 추가(add), (2) 수정(modify) 또는 (3) 삭제(delete). 수정 변경 모두는 특성 이름(property name), 특성 값(property value) 및 액션(action)을 포함하는 특성 변경들을 갖는다. 또한, 액션은 셋(set) 또는 클리어(clear)일 수 있다. 클라이언트가 동기 서버(110)와 동기될 때마다, 변경 로그가 생성된다. 생성된 변경 로그는 최신 레코드 변경들 및 헤더들을 포함한다. 또한, 생성된 변경 로그가 압축된다. 예를 들어, Mac® OS 10 Cocoa 클래스들에서는, NSArchiver로 지칭되는 클래스를 구현하여 개체의 개체 그래프를 작성하며, 이 개체 그래프를 메모리 또는 파일 내에 직렬화한다. 공간을 줄이기 위해, 재발생하는 개체들의 런 길이 토큰화(run-length tokenization)가 수행된다. 따라서, 개체 각각은 한 번 인코딩되고, 인코딩된 개체들 각각은 자신의 토큰을 참조할 수 있게 된다. 토큰은 숫자를 포함하는 값을 포함할 수 있다.
변경 로그는 상당히 복잡할 수 있고, 개방형 포맷이 아닐 수 있다. NSArchiver 를 자바(Java)로 재구현하여, 동기 서버 클라이언트 SDK 라이브러리(320) 클라이언트들로 하여금 Cocoa 클래스들, 예를 들어, NSArray 및 NSMutableArray; NSDictionary 및 NSMutableDictionary; NSSet 및 NSMutableSet; NSData 및 NSMutableData; NSDate 및 NSCalendar Date; NSTimeZone 및 NSLocalTimeZone; NSColor; NSURL 등을 이해할 수 있게 해준다.
동기 서버(110)는 이들 클래스들을 판독할 수 있고, 범용 서버(universal server)(140)(예를 들어, Mac® OS 10 서버)에 링크들을 아카이브(archive)할 수 있다. 변경 로그들을 이용하여 동기 서버(110)를 범용 서버(140) 또는 iDisk®와 같은 네트워크 저장소에 브리지(bridge)한다. 변경 로그들은 그 고유의 관계 무결성(relational integrity)을 갖는 데이터클래스에 대한 직렬화된 변경들의 세트이다. 변경 로그들은 아직 존재하지 않는 엔티티(entity)를 참조하지 않는다.
동기 서버(110)는 변경 로그들을 판독하며 중앙 데이터 레포지토리(142)(예를 들어, SyncDAV 데이터 레포지토리들)을 iPhones®와 같은 클라이언트 디바이스들(130) 및 Web Apps와 같은 웹 클라이언트들(120)과 브리지하도록 구성된다. 변경 로그들은 직렬로 저장되며 가법적(additive)이다. 일련의 변경 로그들을 처리함으로써, 동기 서버(110)는 일련의 트랜잭션(transaction)들을 처리한다. 따라서, 동기 서버(110)가 소정 수의 변경 로그들의 처리를 완료하면, 동기 서버(110)는 중앙 데이터 레포지토리의 버전(version)을 획득할 수 있다. 동기 서버(110)가 변경 로그들 모두를 처리하면, 동기 서버는 중앙 데이터 레포지토리(142)의 현재 버전을 획득할 수 있다.
동기 서버(110)는 변경 로그들을 직렬화하며, 중앙 데이터 레포지토리(142)와 동기한다. 이러한 프로세스 동안에, 동기 서버(110)는 SyncDAV 서버에 대한 단지 다른 SyncDAV 클라이언트(150)로서 (SyncDAV 서버와 같은) 범용 서버(140)에 보여진다. 따라서, SyncDAV 서버에게는, 동기 서버(110)가 예를 들어, 다른 Mac® 클라이언트와 같이 거동하게 된다.
SyncDAV 프로토콜은 WebDAV 프리미티브(primitive)들 위에 동기 시맨틱스(sync semantics)를 계층화하기 위한 것이다. WebDAV 는 get, put, delete 및 lock 연산들을 지원한다. 이들 연산들은 iDisk®와 같은 WebDAV 서버를 위한 표준 함수들이다. WebDAV 서버와 같이 동작하는 범용 서버(140)는 예를 들어, 2개의 Macs® 간의 SyncDAV 변경들을 동기할 수 있다.
중앙 데이터 레포지토리(142)와 동기하는 경우에는, 동기 데이터클래스 및 클라이언트와 연관된 WebDAV 자원들 상에 로크(lock)가 배치된다. 이로 인해, 동기 동작의 지속기간 동안 그 동일 데이터클래스를 다른 클라이언트들이 동기하지 못하도록 효과적으로 차단된다. 따라서, SyncDAV 프로토콜은 직렬화에 의해 다양한 경합들이 발생할 수 있다.
동기 서버(110)는 중앙 데이터 레포지토리(central data repository; 142)로의 빠른 액세스를 할 수 있게 해준다. 따라서, 동기 서버(110)의 클라이언트는 동기를 인식해야될 필요가 없다. 동기 서버(110)는 개별적인 데이터스토어들과 같은 클라이언트들을 처리한다.
또한, 동기 서버(110)는 중앙 데이터 레포지토리(142)인 SyncDAV 스토어로부터 분리된다(decoupled). 빠르고 효율적인 동기화를 촉진하기 위하여, 동기 서버(110)는 웹 애플리케이션 클라이언트(120)를 위해 데이터를 올려놓기(serve up) 전에 클라이언트가 동기화를 완료하는 것을 기다릴 수 없다. 따라서, 서버(110)용 로컬 동기 데이터 레포지토리(112)(예를 들면, 버클리 데이터베이스)가 구현되는데, 이 데이터 레포지토리는 SyncDAV 데이터 스토어인 중앙 데이터 레포지토리(142)에 대한 백업으로서 동작할 수 있다.
2개의 데이터 레포지토리(동기 데이터 레포지토리(112) 및 중앙 데이터 레포지토리(142))가 동기화된 상태를 유지하기 위해, 브리지 클라이언트(bridge client)가 생성된다. SyncDAV에서, 모든 동기화하는 클라이언트는 중앙 데이터 레포지토리(142)인 SyncDAV 데이터스토어 내에 소정의 표시(represenation)를 가지고 있어야 한다. 동기 서버(110)는 SyncDAV 클라이언트(150) 같이 동작하기 때문에, 동기 서버(110)는 이들 표현 중 하나를 생성한다. 따라서, SyncDVA 서버인 범용 서버(universal server; 140)에 대하여, 동기 서버는 다른 Mac®과 유사하게 보인다.
동기 서버(110)는 임의의 다른 클라이언트를 로킹 아웃하는(locking out)것을 피하기 위하여 중앙 데이터 레포지토리(142)와의 끊기지 않는 동적인 동기화(seamless dynamic syncs)를 수행한다. 예를 들면, 아이폰과 같은 클라이언트 장치(130)는 동기 서버(110)와의 콘택트(contacts)를 갱신하고 있을 수 있다. 동시에, Mac®과 같은 다른 클라이언트는 SyncDAV 서버인 범용 서버(140)와의 동일한 콘택트들의 스케줄링된 동기화를 수행하고 있을 수 있다. SyncDAV 데이터스토어인 중앙 데이터 레포지토리(142)는 Mac®에 의해 로킹될 수 있고, 동기 서버(110)는 이 록(lock)을 인지한다. 동기 서버(110)는 아이폰으로부터의 변경사항들이 중앙 데이터 레포지토리(142)로 들어가는 것(getting into)을 막지 않는다. 동기 서버(110)는 내부 동기 데이터 레포지토리(112)를 포함하기 때문에, 동기 서버(110)는 자신의 내부 동기 데이터 레포지토리(112)를 갱신한다. 그 후에, Mac®과의 동기화가 완료되면, 동기 서버(110)는 SyncDAV 서버인 중앙 데이터 레포지토리(142)에 갱신할 변경사항이 있다는 통지를 백엔드(backend) 프로세스에 의해 수신한다. 이는 2개의 데이터 레포지토리들 간의 동기화를 트리거하고 그 변경사항들은 두 개의 데이터 레포지토리 모두에 의해 픽업된다. 내부 동기 데이터 레포지토리(112)에 대한 갱신이 가능하다는 점은 SyncDAV 데이터스토어인 중앙 데이터 레포지토리(142)가 SyncDAV 클라이언트로부터의 변경들을 동기화하느라 바쁜 경우에 클라이언트 장치(예를 들면, 아이폰)가 블로킹되는 것을 막을 수 있다.
일부 구현에서, 동기 데이터 레포지토리(112)가 손상될 때, 동기 서버(110)는 SyncDAV 변경 로그들을 열거하고(serialize) 처리함으로써 중앙 데이터 레포지토리(142)로부터 데이터를 복원할 수 있다. 중앙 데이터 레포지토리(142)는 동기 데이터 레포지토리(112)와 동일한 일을 할 수 있다. 따라서, 각 데이터 레포지토리는 다른 데이터 레포지토리에 대한 백업으로서 기능할 수 있다.
동기 서버(110)는 HTTP 전송 프로토콜과 같은 전송 프로토콜을 이용하여 클라이언트 장치(130) 및 웹 클라이언트(120)에 접속하여 보안 데이터 접속을 완료한다. 예를 들면, 전송 프로토콜 상에서, 동기 서버(110)는 OTA(over-the-air) 동기화 프로토콜을 이용하여 접속된 클라이언트 장치(130)와 동기 서버(110) 간의 데이터 동기화를 할 수 있게 한다. 동기화된 데이터는 콘택트들(예를 들면, 주소 및 전화 번호), 달력 등과 같은 다양한 데이터 클래스들(classes)을 포함할 수 있다. 데이터 동기화는 네트워크(180)를 통해 수행될 수 있다. 동기 서버(110)에 의해 지원되는 예시적인 OTA 동기 프로토콜 및 스키마는 그 내용이 본 명세서의 일부로서 참조로 포함되는 공동 계류중인 US 특허 출원 제__/______(발명의 명칭이 "Data Synchronization Protocol"이며, 대리인 정리 번호는 18814-104001임)에 기재되어 있다.
전송 프로토콜 상에서, 동기 서버(110)는 동기 서버 클라이언트 SDK 라이브러리(320)를 이용하여 웹 클라이언트(120)와 동기화할 수 있다. 일 구현에서, 동기 서버 클라이언트 SDK 라이브러리(320)는 자바 플랫폼을 이용하는 jar 파일로서 구현될 수 있다. 예를 들면, 동기 서버(110)는 웹 클라이언트(120)가 동기 서버의 스키마 및 데이터클래스들을 완전하게 지원하는 신뢰 클라이언트로서 동작하기를 보장하기 위하여 동기 서버 클라이언트 SDK 라이브러리(320)를 구현할 수 있다. 동기 서버 클라이언트 SDK 라이브러리(320)는 모든 관계형 무결성 검사(relational integrity check)를 수행하고, 수락할 동기 서버(110)에 대한 웹 클라이언트(120) 상의 UUID를 생성하도록 구현될 수 있다. 동기 서버 클라이언트 SDK 라이브러리(320)는 관계(relationships)를 세팅하는 것을 처리하고 동기 서버(110)로 전송되는 레코드가 동기 서버(110)로 전송되기 전과 동일함을 보장할 수 있다.
또한, 동기 서버 클라이언트 SDK 라이브러리(320)는 또한 동기 서버측 상에서 데이터 레포지토리 리셋 예외 취급과 같은 예외들을 취급한다. 클라이언트 장치(130)가 전체 데이터셋을 푸시하고, 그 다음에 웹 클라이언트(120)가 데이터셋을 갱신하는 것을 시도하는 경우, 웹 클라이언트(120)는 클라이언트 장치(130)가 갱신을 송신할 수 있기 전에 웹 클라이언트가 중앙 데이터 레포지토리로부터 데이터셋을 재로드해야한다는 것을 나타내는 예외 메시지를 수신한다. 웹 클라이언트(120)는 신뢰 클라이언트로서 감지되기 때문에, 관계형 무결성 검사는 동기 서버(110)로부터 동기 서버 클라이언트 SDK 라이브러리(320)로 오프로드된다(offloaded). 또한, 동기 서버 클라이언트 SDK 라이브러리(320)는 웹 클라이언트(120)를 동기 서버(110)의 복잡도로부터 차단한다(shield).
동기화 서버 클라이언트 SDK 라이브러리(320)는 동기화 서버의 스키마의 완전한 개체 모델을 구현한다. 일부 구현들에서, 각각의 데이터클래스에 대한 자바 클래스가 생성된다. 예를 들어, 콘택들에 대한 자바 클래스, 및 이메일 어드레스에 대한 자바 클래스가 생성된다. 그 후 동기화 서버 클라이언트 SDK 라이브러리(320)는 이메일 어드레스와 콘택들 사이의 관계들을 설정한다. 웹 클라이언트(120)가 동기화 동작을 호출하면, 동기화 서버 클라이언트 SDK 라이브러리(320)는 동기화 서버(110)에 대한 변경들을 푸시(push)한다. 동기화 서버 클라이언트 SDK 라이브러리(320)는 동기화 서버(110) 스키마에 대한 요구되는 특성들 및 관계들을 이해하고 동기화 서버 클라이언트 SDK 라이브러리(320)의 사용자가 요구되는 특성들 및 관계들을 따르는 것을 보장한다. 동기화 서버 클라이언트 SDK 라이브러리 (320)는 클라이언트가 나쁜 데이터를 포함하는 변경들을 제출하려고 시도할 때 사용자에게 런타임 에러를 보낸다(즉, 동기화 서버 스키마 외부로). 따라서, 스키마 내의 정정을 강화하는 책임은 동기화 서버의 CPU로부터 오프로드될 수 있다. 동기화 서버 클라이언트 SDK 라이브러리(320)는 웹 애플리케이션 내의 보통 다른 CPU 상에서 실행될 수 있다.
동기화 서버(110)는 적어도 1.5M 동기화/일(syncs/day)을 가능하게 함으로써 백엔드 확장성(scalability) 및 간단함(simplicity)을 향상시킬 수 있다. 또한, 동기화 서버(110)는 동기화 서버(110)에 대한 트리클-동기화(trickle-sync) 변경들을 지원한다.
도 3은 동기화 서버(110)에 대한 예시적인 애플리케이션 아키텍쳐를 도시하는 블록도이다. 동기화 서버(110)는 본 명세서에서 설명되는 각종 기능들을 동작시키는 각종 컴포넌트들을 포함한다. 예를 들어, 동기화 서버(110)는 자바 NS아키버들(NSArchivers) 컴포넌트(320), 통지 메커니즘(304), 관리 인터페이스(306), 클라이언트 프로토콜 메커니즘(308), 디퍼런싱 엔진(밍글러(Mingler), 컨플릭트들(Conflicts))(310), 공통 컴포넌트들(312), SyncDAV 체인지로그(changelog) 컴포넌트(314), 스키마(정의, 검증) 컴포넌트(316) 및 진실(truth)(지속) 컴포넌트(318)를 포함할 수 있다. 서버(110)는 프로토콜(340)을 통해 클라이언트 SDK(320)에 접속된다. SDAP 프로토콜(340)은 동기화 서버 클라이어트 SDK와 같은 유선 프로토콜을 포함할 수 있다.
동기화 서버 클라이언트 SDK(320)는 클라이언트(120)가 특정 프로토콜 지식을 가지는 것을 요구하지 않고, 동기화 서버 데이터 액세스 프로토콜(SDAP)을 통해 동기화 서버에 대한 액세스를 제공하는 라이브러리이다. SDAP(340)는 동기화 데이터 레포지토리(112)에 액세스하고 동기화를 수행하기 위한 프로토콜이다. SDAP는 동기화 데이터 레포지토리(112) 데이터 및 변경들에 대한 XML 스키마; 데이터클래스들 레코드들 및 특성들에 대한 URL 스키마를 정의하는 HTTP 프로토콜 시맨틱스; HEAD, GET, PUT 및 DELETE에 대한 시맨틱스; 및 클라이언트 id들 및 동기화 앵커들과 같은 동기화 특정 데이터를 교환하기 위한 맞춤형 X-헤더들로 이루어진다.
SDAP(340)는 클라이언트(120)가 동기화 서버(110)(아카 메트로폴리스)와 인터페이싱할 수 있게 한다. 동기화 서버(110)는 기본적이고 다이제스트한 인증을 지원한다. 웹 클라이언트(120)와 동기화 서버(110) 사이의 통신은 암호화되지 않는데, 그 이유는 웹 클라이언트(예를 들어, 웹 애플리케이션들)(120) 및 동기화 서버(110) 모두가 서버측 상에 내부적으로 전개되기 때문이다. SDAP는 기본적인 인증을 지원할 수 있다. 동기화 서버(110) 또는 별도의 게이트웨이 서버는 OTA(Over-the-air) 클라이언트들(130)과의 동기화를 지원하기 위해 인증 및 세션 핸들링을 포함할 수 있다. 또한, SDAP는 장치들을 등록하고 개별적인 데이터클래스들에 대한 동기화를 가능/불가능하게 하는 설비를 제공한다.
SDAP는 웹 클라이언트들(120)이 복잡한 클라이언트 동기화 상태 머신을 요구하지 않고 동기화 서버(110)와 동기화하고 동기화 데이터 레포지토리(112)에 액세스할 수 있게 한다. SDAP는 하위-500 밀리초 범위에서 응답 시간 목표를 갖는 동기화 데이터 레포지토리(112) 및 중앙 데이터 레포지토리(142) 내의 동기화된 데이터에 대한 무상태(stateless) 액세스를 허용한다. SDAP는 각종 서버들, 예를 들어 도트 맥 서버들(Replicant, SFDE들 및 WOA들) 사이에서 임의의 기존 프로토콜(예를 들어, 동기화 API)를 대체할 수 있다. 또한, SDAP는 콘택들, 캘린더들 및 북마크들을 포함하는 각종 데이터클래스들의 동기화를 가능하게 한다. 애플사 확장들을 갖는 예시적인 데이터클래스들은 "com.apple.Contacts", "com.apple.Calendars" 및 "com.apple.Bookmarks를 포함한다. 또한, SDAP는 웹 애플리케이션들(120) 및 클라이언트 장치들(130)이 동기화 서버(110)와 트리클-동기화할 수 있게 한다. SDAP를 이용하고자 하는 클라이언트 애플리케이션, 예를 들어 웹 클라이언트(120)는 필드 레벨의 변경들을 지원하고 API에 의해 배달되는 특성 그 전체를 보존해야 한다.
동기화 서버 클라이언트 SDK(320)는 특정 프로토콜 지식을 요구하지 않고 SDAP를 통해 동기화 서버(110)에 대한 액세스를 제공하는 자바 라이브러리일 수 있다. 일부 실시예들에서, 동기화 서버 클라이언트 SDK(320)는 다른 언어들 및 기술들을 이용하여 구현될 수 있다. 동기화 서버 클라이언트 SDK(320)는 주요 데이터클래스들(북마크들, 콘택들 및 캘린더들 등)에 대한 오브젝트 모델을 제공하고 클라이언트들이 그들 자신의 데이터스토어를 가질 필요 없이 동기화 서버와 데이터를 동기화할 수 있게 한다. 전술한 바와 같이, 서버 스케일러빌리티를 향상시키기 위해서, SDK는 관계 무결성 시행(relational integrity enforcement)을 보증하는 태스크를 서버로부터 클라이언트로 오프로드하고(클라이언트를 신뢰 클라이언트로 만듬), 서버 상의 LUID-GUID 매핑에 대한 필요를 없앤다. 동기 서버 클라이언트 SDK는 동기 서버(110)와 동시성을 가지도록 하기 위해 .Mac Contacts and Calendar Web-Oriented Architectures (WOAs)에 의해 이용된다.
SDAP는 그 자신의 XML 스키마를 정의하여 싱크 데이터 레포지토리(112) 및 "기록" 및 "특성" 변화와 같은 싱크 동작들을 기술한다. SDAP에 대한 XML 스키마는 동기 서버(110)의 데이터 모델에 따른다. 예를 들어, XML 스키마는 엔티티 기록들; 특성들; 추가, 수정 및 삭제와 같은 기록 변화들; 세트 및 클리어와 같은 특성 변화들; 및 id-매핑을 표현할 수 있다.
동기 서버 클라이언트 SDK(320)는 동기 서버(110)와의 동기 세션 중에 이용될 수 있는 다양한 컴포넌트를 포함한다. 동기 서버 클라이언트 SDK(320)는 동기 서버(110)에 의해 정의되는 지원된 스키마들 또는 데이터클래스들을 포함할 수 있다. 이들 데이터클래스들은 컨택트들(322), 달력들(324), 및 북마크들(326)을 포함할 수 있다. 이들 데이터클래스들 각각은 관계들에 의해 조직된 데이터 항목들을 포함한다. 동기 서버 클라이언트 SDK(320)는 또한 SDAP 클라이언트 컴포넌트(328), 공통 (XML, 기록, 변화) 컴포넌트(330) 및 엔티티스토어(332)를 포함한다.
도 4는 예시적인 동기 서버 시스템 아키텍처를 도시하는 블록도이다. 시스템 아키텍처는 하나 이상의 동기 세션에서 하나 이상의 데이터 기록들을 동시성을 가지도록 하기 위해 범용 서버(140)와 인터페이스하는 하나 이상의 클라이언트(410 및 412)를 포함한다. 클라이언트들(410, 412)은 Mac® OS X Tiger 및 Leopard를 구동하는 것들과 같은 컴퓨터들을 포함할 수 있다. 이들 클라이언트들(410 및 412)은 하나 이상의 Dot Mac® 서비스들에 접속하는 Dot Mac® 클라이언트들일 수 있다.
클라이언트들(410 및 412)은 네트워크(420)를 거쳐 범용 서버(140)에 대한 HTTP 접속들을 형성할 수 있다. 라우터와 같은 네트워크 설비(414)는 목적지에 대한 접속을 관리한다. 범용 서버(140)는 iDisk®와 같은 온라인 스토리지 서버를 제공하는 SyncDAV 서버를 포함할 수 있다. 범용 서버(140)는 가장 최근의 완성된 데이터스토어로서 동작하는 중앙 데이터 레포지토리(142)에 접속된다. 갱신들이 이용가능할 때, 클라이언트들(410, 412)에 의해 보내진 변화들에 응답하여, 동기 서버(110)는 통지를 받는다. 그 다음 동기 서버(110)는 갱신들을 수신하기 위해 범용 서버(140)와 동기 세션들을 진행할 수 있다.
동기 서버(110)는 다른 Dot Mac® 서버들(416)에 접속되어 추가적인 서비스들을 제공하고 지원된 데이터클래스들 및 스키마들을 정의할 수 있다. 예를 들어, 컨택트들, 달력들 및 북마크들의 데이터클래스들이 지원될 수 있다. 또한, 동기 서버(110)를 관리하기 위해 별개의 서버(418) 및/또는 프로세서가 제공될 수 있다.
도 5a, 5b, 5c, 5d, 5e, 5f, 5g 및 5h는 동기 세션들을 처리하기 위한 프로세스(500)의 예를 도시한다. 교섭 단계(510) 중에, 동기 서버(110)는 하나 이상의 클라이언트(120, 130 등)로부터 동기 세션을 개시하기 위한 요구를 수신한다(511). 하나 이상의 클라이언트(120, 130 등)로부터 수신된 요구는 원하는 데이터클래스 및 데이터클래스에 대한 제안된 싱크 모드를 포함한다. 예를 들어, iPhone®과 같은 모바일 장치를 조작하는 사용자는 컨택트 데이터클래스에 새로운 이름을 입력할 수 있다. 입력된 새로운 이름에 응답하여, 동기 세션을 개시하기 위한 요구는 동기 서버(110)와 동기 세션을 개시하기 위해 클라이언트로부터 동기 서버(31)에 전송될 수 있다. 동기 서버(110)는 제안된 싱크 모드가 수락가능한지를 판정한다(512). 동기 서버(110)가 제안된 싱크 모드가 수락가능하지 않다고 판정하면, 동기 서버(110)는 동기 세션을 개시하도록 요청하는 하나 이상의 클라이언트(120, 130)에 수락가능한 싱크 모드(슬로우 또는 리셋)에 대해 알려준다(513). 동기 서버(110)가 제안된 싱크 모드가 수락가능하다고 판정하면, 동기 서버(110)는 동기 세션을 개시하도록 요청하는 클라이언트에 제안된 싱크 모드가 수락되었음을 알려준다(514).
수집 단계(520) 중에, 동기 서버(110)는 현재의 싱크 잡(sync job)에 조인하기 위해 다른 클라이언트들이 이용가능한지를 판정한다(521). 현재의 싱크 잡은 컨택트 데이터클래스를 동기성을 갖도록 하는 것을 포함한다. 다른 클라이언트들이 이용가능하면, 동기 서버(110)는 사용자가 중앙 데이터 레포지토리(142)에 데이터를 갖는지(522) 그리고 데이터가 잠겨져 있지 않은지(523)를 판정한다. 잠겨져 있지 않다면, 중앙 데이터 레포지토리(142) 내 사용자 데이터에 대해 프록시 액세스(proxy access)하기 위해 브리지 클라이언트가 이용된다(524). 예를 들어, iPhone®을 조작하는 사용자가 중앙 데이터 레포지토리(142)(예를 들어, SyncDAV 데이터스토어)에 컨택트 데이터클래스를 갖는 경우. 동기 서버(110)는 중앙 데이터 레포지토리 내의 컨택트 데이터클래스가 잠겨져 있지 않은지를 알아보기 위해 체크한다. 동기 서버(110)가 컨택트 데이터클래스가 잠겨져 있지 않다고 판정하면, 중앙 저장소에 대해 프록시 액세스하는 브리지 클라이언트가 "피어 클라이언트"로서 싱크 잡에 추가된다. 동기 서버(110)는 또한 수집된 피어가 싱크 데이터를 푸시(push)하기를 희망하는지를 판정한다(525). 수집된 피어가 전체 데이터세트에 대해 대체 데이터를 푸시하기를 희망하는 경우(예를 들어, 피어가 진실(Truth)을 푸시하기를 희망하는 경우), 개시자에 대한 싱크 모드가 재교섭된다(526). 다른 피어들이 "리셋" 싱크 모드를 수락하도록 요구될 것이다.
풀 단계(530) 동안에, 동기 서버(110)는 모든 클라이언트들(120, 130, 등)으로부터 변경들을 수신한다(531). 동기 서버(110)는 수신된 변경들을 서버(110)에 의해 정의된 스키마에 대하여 유효 확인한다(532). 동기 서버(110)는 클라이언트들이 신뢰되거나 또는 신뢰되지 않는 지의 여부를 판정한다(533). 클라이언트가 신뢰되지 않는 클라이언트라고 판정된 경우, 종합적 변경이 생성되어(534), 그러한 스키마의 관계 무결성을 강화한다. 또한, 하나 이상의 클라이언트들(120, 130)은, 동기 세션 중 하나 이상의 특성들에 기초하여 신뢰 클라이언트 및 신뢰되지 않는 클라이어트 중 하나로서 선택적으로 식별된다(504). 신뢰 클라이언트가 구성되어 동기 서버(110)과 특정 협약을 실행한다. 예를 들어, 신뢰 클라이언트는 동기 서버 ID를 고유 ID로서 이용하는 것을 지원한다. 또한, 신뢰 클라이언트의 LUID(Local Unique Identification)는 동기 서버(110)에 의해 생성된 UUID(Universal Unique Identifiacation)에 의해 대체된다. 또한, 신뢰 클라이언트는 동기 서버(110)에 의해 정의된 모든 엔티티들, 특성들 및 데이터클래스들을 지원한다. 또한, 신뢰 클라이언트는, 주입된 변경들이, 동기화되고 있는 데이터클래스의 스키마에 따라 유지되고 있음을 보장할 수 있다. 동기 서버에 의해 지원되는 스키마들 또는 데이터클래스들은 예를 들어, 콘택트들(Contacts), 달력들 및 북마크들(Calendars and Bookmarks)을 포함한다.
복합 단계(540) 동안에, 동기 서버(110)는 각각의 클라이언트에 대해 이하를 수행한다: (1) 중앙 데이터 레포지토리(142)로부터 어떤 갱신들이 각각의 클라이언트로 가야만 하는지를 판정함(541); (2) 각각의 클라이언트로부터의 변경들이 피어들(peers)에게 전송되어야 할지를 판정함(542); 및 (3) 중앙 데이터 레포지토리(142) 또는 피어들로부터의 변경들이 서로 컨플릭트를 식별(543)함. 식별에 기초하여, 하나 이상의 컨플릭트가 생성된다(544). 각각의 컨플릭트는 상충하는 레코드 id, 클라이언트1(개시자), 클라이언트2(피어 또는 진실(the Truth) 중 어느 하나), 컨플릭트 특성 이름들의 설정, 공통 특성 이름들의 설정, "위크(weak)" 특성 이름들의 설정 등을 포함한다. 생성된 컨플릭트들은, 사건들의 상대적 시간적 순서화(relative temporal ordering)에 기초하여 해결된다(545). 예를 들어, 개시자로부터의 변경들은 중앙 데이터 레포지토리(142)로부터 그리고 수집된 피어들로부터의 변경들보다 "이후"인 것으로 간주된다. 식별된 "이후의 변경들"은 통상적으로 컨플릭트에서 "승리한다"(wins) (즉, 승자의 변경들이 패자의 변경들을 무시한다). 개시자로부터의 변경이 수집된 피어들로부터의 변경에 대해 "위크"한 것으로 간주되는 경우에 예외가 존재한다. 컨플릭트가 해결된 경우, 승자(예를 들어, 승리하는 클라이언트, 승리하는 수집된 피어들 또는 승리하는 중앙 데이터 레포지토리(142) 등)로부터의 모든 컨플릭트하는 특성들의 값들이 컨플릭트하는 레코드에 적용된다. 결과가, 중앙 데이터 레포지토리 및 지고 있는(losing) 클라이언트들, 지고 있는 수집된 피어들 등에 갱신들로서 적용된다.
2개 이상의 클라이언트들이 동일한 레코드들을 갱신하거나 변경시키기 위해 동기 서버와 동기되는 경우 컨플릭트가 발생할 수 있다. 예를 들어, 동기 서버(110)는 하나 이상의 데이터 레코드들에 대한 갱신을 위해 클라이언트들 중 하나와의 동기 세션을 처리할 수 있다. 동기 서버(110)는 하나 이상의 데이터 레코드들에 대한 다른 갱신을 위해 클라이언트들 중 다른 하나와의 다른 동기 세션을 처리할 수 있다. 두개의 동기 세션들 간에 하나 이상의 컨플릭트들이 검출되는 경우, 식별된 컨플릭트들은 동기 세션들 중 가장 최근의 것에 우선 순위를 할당함으로써 해결될 수 있다(514). 따라서, 변경들은 가장 최근에 수반된 클라이언트 또는 다른 클라이언트에 의해 전송된 초기의 컨플릭트 변경들에 대해 승리하는 동기 세션에 의해 전송된다. 전술한 바와 같이, 이러한 일반적 규칙에 대해 예외가 존재할 수 있다. 예를 들어, 초기의 FLD 변경들은 일부 예들에서는 현재의 RLD 변경들에 대해 승리할 수 있다.
아무런 컨플릭트도 검출되지 않는 경우, 싱크 데이터 레포지토리(112)가 갱신되어(512) 동기 세션(들)로부터의 변경들을 반영한다. 또한, 컨플릭트들이 해결된 후, 동기 서버(112)가 갱신될 수 있다.
푸시 단계(550) 동안에, 동기 서버(110)는 모든 피어들에게 갱신들을 전송한다(552). 커밋 단계(commit phase)(560) 동안에 동기 서버는 피어들이 갱신들 및 id 매핑들을 행할 수 있는지의 여부를 판정하기 위해 모든 피어들에게 질의한다(562). 피어들이 수행할 수 없다고 검출된 경우, 동기 서버(110)는 갱신들 및 id 맵들을 저장하여, 저장된 갱신들 및 id맵들은, 다음번에 피어가 동기 세션을 개시하도록 요청할 때에 클라이언트에게 전송될 수 있다. 동기 서버(110)는 앵커들(anchors) 및 다음 싱크 모드를 이용하여 피어 싱크 상태들을 또한 갱신한다(568).
통지 단계(570) 동안에, 동기 서버(110)는 변경들이 중앙 데이터 레포지토리(142)에 적용되었는지의 여부를 판정한다. 변경들이 중앙 데이터 레포지토리(142)에 적용되었다고 검출된 경우, 동기 서버(110)는 중앙 데이터 레포지토리(142)에 적용된 변경된 데이터클래스(510)와 동기되는 다른 주지된 클라이언트들에게 통지한다.
도 6은 RLD로부터 FLD로의 변환을 수행하는 예시적인 서버 프로세스를 도시한다. RLD를 지원하는 하나 이상의 클라이언트들과의 요청된 동기 세션들을 처리하는 경우, 동기 서버(110)는 또한 RLD로부터 FLD로의 변환을 수행할 수 있다. 중앙 데이터 레포지토리의 레코드에 값을 갖지만, 클라이언트 RLD RecordChange에 SET을 갖지 않고, 갱신로서 클라이언트에 이미 전송된 중앙 데이터 레포지토리 이력에 SET 동작이 존재하지 않는 임의의 지원된 특성은 클라이언트(120, 130)로부터의 CLEAR로서 취급된다. 중앙 데이터 레포지토리의 특성의 현재 값에 매칭되는 값을 갖는 SET을 갖는, 클라이언트(120, 130)로부터의 임의의 지원된 특성은 RLD RecordChange로부터 제거될 수 있다.
필드 레벨 디퍼런싱(differencing)을 지원하는 클라이언트들(120, 130)은 갱신될 하나 이상의 데이터 레코드들에 대해서만 변경된 데이터 항목들을 보낸다. 반대로, 레코드 레벨 디퍼런싱을 지원하는 클라이언트들(120, 130)은 갱신될 하나 이상의 데이터 레코드들에 포함된 모든 데이터 항목들을 보낸다.
도 6에 도시된 예에서, 동기 서버(110)는, 클라이언트 기술 플리스트(clientdescription.plist.)에 규정된 바와 같이, 클라이언트(120, 130)에 의해 지원되는 스키마 특성들을 식별한다(602). MODIFY 명령(예컨대, ADD들 또는 DELETE들을 무시할 수 있음)인 각각의 RLD 레코드에 대하여, 동기 서버(110)는, 개체에 대하여 클라이언트가 지원하는 각각의 특성에 대한 레코드의 개체 이름(예컨대, com.apple.contacts.Contact)을 판정하거나 또는 식별한다(604). 동기 서버(110)는 특성이 RLD 레코드로부터 분실되었는지의 여부를 판정한다(606). 동기 서버(110)가 특성이 RLD 레코드로부터 분실되었음을 검출할 때, 동기 서버(110)는 그 특성에 대항 "약한" CLEAR 동작을 발생시키고(608), 클라이언트(120, 130)에 갱신로서 보내지지 않은(612) SET는 중앙 데이터 레포지토리(142)에 존재하지 않는다. 그렇지 않고, 특성이 RLD 레코드에서 SET이고, 값이 중앙 데이터 레포지토리의 특성에 대한 현재의 값과 매칭되면(610), 동기 서버(110)는 RLD 레코드로부터 특성을 제거한다(612). 그렇지 않고, 특성이 RLD 레코드에서 SET이고 값의 해시값이 클라이언트에 보내진 마지막으로 알려진 해시값과 매칭되면(614), 동기 서버(110)는 RLD 레코드로부터 특성을 제거한다(612).
또한, 일단 동기 세션이 데이터 레코드들에 대한 변경으로 되면, 변경 기록이 하나 이상의 데이터 레코드와 연관된 모든 변경들에 대해 발생될 수 있다. 변경 기록은 주어진 동기 세션 동안에 적용된 스키마 데이터클래스에 대한 모든 변경들의 표현이다. 변경 기록들은 변경들을 축적하기 위해 시리얼화될 수 있다. 따라서, 변경들은 조금씩 갱신될 수 있거나 또는 전체가 한번에 갱신될 수 있다. 브리지 클라이언트를 이용하여, 동기 서버(110)는 중앙 데이터 레포지토리(142)에 저장된 데이터를 액세스할 수 있다. 일단 액세스되면, 동기 서버(110)는 변경 기록들을 이용하여 범용 서버(140)에 접속된 중앙 데이터 레포지토리(142)를 갱신할 수 있다. 따라서, 발생된 변경 기록들은 중앙 데이터 레포지토리(142), "Truth"를 갱신하는데 사용될 수 있다.
처리된 동기 세션에 기초하여, 동기 서버(110)는 하나 이상의 클라이언트들(120, 130)이 FLD 또는 RLD를 지원하는지(540) 여부를 판정할 수 있다. 예를 들어, 클라이언트들에 의해 나타내어진 동기 모드는 느릴 수 있고 따라서 RLD를 나타낼 수 있다. 또한, 변경에 대한 데이터 표현은 클라이언트 디바이스(130) 및/또는 웹 클라이언트들(120)이 주어진 데이터클래스에 대하여 RLD 또는 FLD를 사용하는지 여부를 나타낸다. 하나 이상의 클라이언트들이 레코드 레벨 디퍼런싱을 지원하도록 구성되는 경우, 동기 서버(110)는 RDL에서 FLD로의 변환(542)을 수행하여 하나 이상의 데이터 레코드들에서 변경된 데이터 항목들을 식별한다. 동기 서버(110)는 클라이언트들에 의해 보내진 데이터 레코드들을 동기 데이터 레포지토리(112)와 비교하여 변경된 데이터 레코드들의 데이터 항목들을 식별한다. 동기 데이터 레포지토리(112)와 동일한 데이터 항목들은 버려진다. 동기 서버(110)가 클라이언트들이 FLD를 지원한다고 판정하는 경우, 클라이언트들에 의해 보내진 데이터 레코들의 모든 데이터 항목들은 변경된 데이터로서 수용된다(544). 이것은 추가된, 변형된, 그리고 삭제된 데이터를 포함한다.
또한, 하나 이상의 클라이언트들이 비신뢰 클라이언트로서 식별되는 것을 감지한 경우, 비신뢰 클라이언트와 연관된 동기 세션에 포함된 하나 이상의 데이터 레코드에 대하여 서버에 의해 정의된 스키마로부터 비신뢰 클라이언트와 연관된 동기 세션에서 하나 이상의 불일치가 검출될 수 있다.
본 명세서에 기술된 청구 대상 및 기능 동작들의 실시예들은, 본 명세서에서 개시된 구조들 및 그들의 구조적 등가물들, 또는 그들의 하나 이상의 조합들을 포함하여, 디지털 전자 회로로, 또는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로 구현될 수 있다. 본 명세서에서 기술된 청구 대상의 실시예들은 하나 이상의 컴퓨터 프로그램 제품들, 즉, 데이터 처리 장치에 의한 실행을 위한, 또는 데이터 처리 장치의 동작을 제어하기 위해, 유형의 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 유형의 프로그램 캐리어는 전파 신호 또는 컴퓨터 판독가능한 매체일 수 있다. 전파 신호는 인위적으로 발생된 신호, 예컨대, 컴퓨터에 의한 실행을 위해 적절한 수신기 장치로의 전송을 위한 정보를 인코딩하도록 발생된 기계-발생된 전기, 광학, 또는 전자기 신호이다. 컴퓨터 판독가능한 매체는 기계-판독가능한 저장 장치, 기계-판독가능한 저장 기판, 메모리 디바이스, 기계-판독가능한 전파 신호에 영향을 주는 물질의 조합, 또는 그들 중 하나 이상의 조합일 수 있다.
"데이터 처리 장치"라는 용어는, 예를 들어 프로그램가능한 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함하는, 데이터를 처리하기 위한 모든 장치들, 디바이스들, 및 기계들을 포함한다. 장치는, 하드웨어에 추가하여, 논의되는 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예컨대, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 동작 시스템, 또는 그들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
(프로그램, 소프트웨어, 소프트웨어 어플리케이션, 스크립트, 또는 코드로서도 알려진) 컴퓨터 프로그램은 컴파일된 또는 해석된 언어들, 또는 선언형 또는 절차형 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있고, 예를 들면, 자립형 프로그램 또는 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에서 이용하기에 적합한 그외의 유닛을 포함하는, 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 파일 시스템 내의 파일에 반드시 대응하지는 않는다. 프로그램은 그외의 프로그램들 또는 데이터(예를 들면, 마크업 언어 문서에 저장된 하나 이상의 스크립트)를 홀딩하는 파일의 일부분에, 문제의 프로그램에 전용되는 단일 파일에, 또는 다수의 코디네이트된 파일들(예를 들면, 하나 이상의 모듈들, 서브 프로그램들, 또는 코드의 부분들을 저장하는 파일들)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서, 또는 하나의 사이트에 위치되거나 또는 다수의 사이트에 걸쳐 분포되고 통신 네트워크에 의해 상호 접속된 다수의 컴퓨터들 상에서 전개될 수 있다.
본 명세서에서 설명되는 프로세스들 및 로직 흐름들은 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램가능한 프로세서에 의해 수행되어, 입력 데이터에 대해 동작하고 출력을 생성함으로써 기능들을 수행할 수 있다. 프로세스들 및 로직 흐름들은 또한 특별 목적 로직 회로, 예를 들면 FPGA(field programmable gate arry) 또는 ASIC(application specific integrated circuit)에 의해 수행될 수 있고, 장치는 또한 특별 목적 로직 회로, 예를 들면 FPGA 또는 ASIC으로서 구현될 수 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서들은, 예로써, 범용 및 특별 목적 마이크로프로세서들 양쪽 모두, 및 임의의 유형의 디지털 컴퓨터의 임의의 하나 이상의 프로세서들을 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 양쪽 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 엘리먼트들은 명령어들을 수행하기 위한 프로세서이고, 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들면, 자기, 광자기 디스크, 광 디스크들을 포함하거나, 또는 그들로부터 데이터를 수신하거나 또는 그들에 데이터를 전송하거나 또는 양자 모두를 하도록 동작가능하게 결합될 것이다. 그러나, 컴퓨터는 그러한 디바이스를 가질 필요는 없다. 더욱이, 컴퓨터는 또 다른 디바이스에 임베디드될 수 있다.
컴퓨터 프로그램 명령어들 및 데이터를 저장하기에 적합한 컴퓨터 판독가능한 매체는, 예로서 반도체 메모리 디바이스들, 예를 들면, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예를 들면, 내부 하드 디스크들 또는 이동식 디스크들; 광자기 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 포함하는, 모든 형태의 비휘발성 메모리, 매체 및 메모리 디바이스를 포함한다. 프로세서 및 메모리는 특별 목적 로직 회로에 의해 보충되거나 또는 통합될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명된 대상물의 실시예들은 사용자에게 정보를 표시하기 위한 디스플레이 디바이스, 예를 들면, CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터, 및 사용자가 컴퓨터에의 입력을 제공할 수 있는 키보드 및 포인팅 디바이스, 예를 들면, 마우스 또는 트랙볼을 갖는 컴퓨터 상에서 구현될 수 있다. 다른 유형의 디바이스들도 사용자와의 상호작용을 제공하는 데에 이용될 수 있는데; 예를 들면, 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다.
본 명세서에 설명되는 내용의 실시예들은, 예를 들어, 데이터 서버로서 백 엔드 컴포넌트를 포함하거나, 미들웨어 컴포넌트, 예를 들어 애플리케이션 서버를 포함하거나, 프론트 엔드 컴포넌트, 예를 들어 사용자가 본 명세서에 설명되는 본 발명의 구현과 상호작용할 수 있는 그래픽 사용자 인터페이스 또는 웹 브라우저를 구비하는 클라이언트 컴퓨터를 포함하거나, 또는 하나 이상의 그러한 백 엔드, 미들웨어 또는 프론트 엔드 컴포넌트들의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 임의의 형태 또는 매체의 디지털 데이터 통신, 예를 들어 통신 네트워크에 의해 상호접속될 수 있다. 통신 네트워크들의 예들은 근거리 네트워크("LAN") 및 광역 네트워크("WAN"), 예를 들어 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트와 서버는 일반적으로 서로 떨어져 있으며, 통상적으로는 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터들 상에서 실행되고 서로에 대해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의해 이루어진다.
본 명세서는 많은 상세들을 포함하지만, 이들은 임의의 발명 또는 청구될 수 있는 발명의 범위에 대한 한정으로서 해석되지 않아야 하며, 오히려 특정한 발명들의 특정한 실시예들에 대해 특정적일 수 있는 특징들의 설명들로서 해석되어야 한다. 개별 실시예들의 맥락으로 본 명세서에 설명되는 소정의 특징들은 단일 실시예에서 조합하여 구현될 수도 있다. 역으로, 단일 구현의 맥락으로 설명되는 다양한 특징들은 다수의 실시예들에서 개별적으로 또는 임의의 적절한 하위 조합으로 구현될 수도 있다. 더욱이, 특징들이 위에서 소정 조합들로 동작하는 것으로 기술되고, 심지어 최초에 그렇게 청구되었지만, 청구되는 조합으로부터의 하나 이상의 특징은 일부 경우들에서 그 조합으로부터 삭제될 수 있으며, 청구되는 조합은 하위 조합 또는 하위 조합의 변형으로 유도될 수 있다.
마찬가지로, 동작들이 도면들에서 특정 순서로 도시되지만, 이것은 그러한 동작들이 도시된 특정 순서로 또는 순차적으로 수행되어야 하거나, 바람직한 결과들을 달성하기 위해 도시된 동작들이 모두 수행되어야 하는 것을 필요로 하는 것으로 이해되지 않아야 한다. 특정한 환경들에서는, 멀티태스킹 및 병렬 처리가 유용할 수 있다. 더욱이, 전술한 실시예들에서의 다양한 시스템 컴포넌트의 분리는 모든 구현에서 그러한 분리를 필요로 하는 것으로서 이해되지 않아야 하며, 설명되는 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품 내에 함께 통합되거나, 다수의 소프트웨어 제품 내에 패키지될 수 있다는 것을 이해해야 한다.
소수의 구현들 및 예시들만이 설명되었고, 본원에서 설명되고 도시된 것에 기초하여 그 외의 구현들, 개선들 및 변형들을 행할 수 있다.

Claims (27)

  1. 서버에서 수행되는 방법으로서,
    하나 이상의 데이터 아이템들을 포함하는 하나 이상의 데이터 레코드(data record)들을 갱신하기 위해 하나 이상의 클라이언트들로부터 동기 세션(sync session)을 개시하라는 요청을 처리하는 단계와,
    동기 세션의 하나 이상의 특성(property)들에 기초하여 하나 이상의 클라이언트들을 신뢰 클라이언트(trusted client) 및 비신뢰 클라이언트(untrusted client) 중의 하나로서 선택적으로 식별하는 단계 - 신뢰 클라이언트는 하나 이상의 데이터 레코드들에 대해 서버에 의해 정의된 스키마(schema)를 지원하도록 구성됨 - 와,
    하나 이상의 클라이언트들이, 하나 이상의 데이터 레코드들에 대해서만 변경된 데이터 아이템들을 보내는 필드 레벨 디퍼런싱(field level differencing) 또는 하나 이상의 데이터 레코드들에 포함된 모든 데이터 아이템들을 보내는 레코드 레벨 디퍼런싱 중 하나를 지원하도록 구성되는지를 검출하는 단계
    를 포함하는 서버에서의 수행 방법.
  2. 제1항에 있어서, 하나 이상의 클라이언트들이 레코드 레벨 디퍼런싱을 지원하도록 구성된 것으로 검출하는 경우, 레코드 레벨 디퍼런싱으로부터 필드 레벨 디퍼런싱으로의 변환을 수행하여 하나 이상의 데이터 레코드들에서 변경된 데이터 아이템들을 식별하는 단계를 더 포함하는 서버에서의 수행 방법.
  3. 제1항에 있어서,
    동기 세션을 처리하는 것에 응답하여,
    하나 이상의 데이터 레코드들과 연관된 하나 이상의 변경들을 식별하는 변경 로그(change log)를 생성하는 단계와,
    생성된 변경 로그에서 식별된 하나 이상의 데이터 레코드들에 대한 하나 이상의 변경들을 반영하기 위해 서버와 연관된 데이터 레포지토리(data repository)를 갱신하는 단계
    를 더 포함하는 서버에서의 수행 방법.
  4. 제3항에 있어서,
    브리지 클라이언트(bridge client)를 사용하여 다른 데이터 레포지토리에 액세스하고 또한 서버와 연관된 갱신된 데이터 레포지토리에 기초하여 액세스된 다른 데이터 레포지토리에 저장된 데이터 레코드들을 수정(modify)하는 단계
    를 더 포함하는 서버에서의 수행 방법.
  5. 제3항에 있어서, 다른 데이터 레포지토리에 액세스하는 단계는 생성된 변경 로그를 처리하여 다른 데이터 레포지토리를 갱신하는 단계를 포함하는 서버에서의 수행 방법.
  6. 제1항에 있어서,
    하나 이상의 클라이언트들로부터 하나 이상의 데이터 레코드들에 대한 갱신들을 수신하는 단계와,
    수신된 갱신들 및 서버와 연관된 데이터스토어(datastore)에 저장된 데이터 레코드들 간에서 하나 이상의 컨플릭트(conflict)들을 식별하는 단계와,
    하나 이상의 클라이언트들로부터의 갱신들을 혼합(mingle)하는 단계
    를 더 포함하는 서버에서의 수행 방법.
  7. 제6항에 있어서, 동기 세션을 요청하는 하나 이상의 클라이언트들 중에서 가장 최근의 클라이언트에게 우선 순위를 할당함으로써 식별된 하나 이상의 컨플릭트들을 해결하는 단계를 더 포함하는 서버에서의 수행 방법.
  8. 제1항에 있어서,
    하나 이상의 클라이언트들이 비신뢰 클라이언트로서 식별된 것으로 검출한 경우, 비신뢰 클라이언트와 연관된 변경들의 세트에 수반된 하나 이상의 데이터 레코드들에 대해 서버에 의해 정의된 스키마로부터 비신뢰 클라이언트와 연관된 변경들의 세트에서 하나 이상의 컨플릭트들을 식별하는 단계
    를 더 포함하는 서버에서의 수행 방법.
  9. 제1항에 있어서, 하나 이상의 클라이언트들을 신뢰 클라이언트 및 비신뢰 클라이언트 중의 하나로서 선택적으로 식별하는 단계는 데이터 레코드들에 포함된 데이터 아이템들에 대한 고유 식별자들을 포함하는 동기 세션의 하나 이상의 특성들을 검출하는 단계를 더 포함하는
    서버에서의 수행 방법.
  10. 컴퓨터 판독 가능 매체 상에 구현된 컴퓨터 프로그램 프로덕트로서,
    데이터 처리 장치로 하여금,
    하나 이상의 데이터 아이템들을 포함하는 하나 이상의 데이터 레코드들을 갱신하기 위해 하나 이상의 클라이언트들로부터 동기 세션을 개시하라는 요청을 처리하고,
    동기 세션의 하나 이상의 특성들에 기초하여 하나 이상의 클라이언트들을 신뢰 클라이언트 및 비신뢰 클라이언트 중의 하나로서 선택적으로 식별하고 - 신뢰 클라이언트는 하나 이상의 데이터 레크드들에 대해 서버에 의해 정의되는 스키마를 지원하도록 구성됨 - ,
    하나 이상의 클라이언트들이, 하나 이상의 데이터 레코드들에 대해서만 변경된 데이터 아이템들을 보내는 필드 레벨 디퍼런싱 또는 하나 이상의 데이터 레코드들에 포함된 모든 데이터 아이템들을 보내는 레코드 레벨 디퍼런싱 중 하나를 지원하도록 구성되는지를 검출하는 것을 포함하는 동작들을 수행하도록 초래하게 동작하는 컴퓨터 프로그램 프로덕트.
  11. 제10항에 있어서,
    데이터 처리 장치로 하여금, 하나 이상의 클라이언트들이 레코드 레벨 디퍼런싱을 지원하도록 구성된 것을 검출하는 경우 하나 이상의 데이터 레코드들 내에서 변경된 데이터 아이템들을 식별하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  12. 제10항에 있어서,
    데이터 처리 장치로 하여금,
    하나 이상의 데이터 레코드들과 연관된 하나 이상의 변경들을 식별하는 변경 로그를 생성하고,
    생성된 변경 로그에서 식별된 하나 이상의 데이터 레코드들에 대한 하나 이상의 변경들을 반영하기 위해 서버와 연관된 데이터 레포지토리를 갱신하는 것을 포함하는 동작들을 수행하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  13. 제12항에 있어서, 데이터 처리 장치로 하여금, 브리지 클라이언트를 사용하여 다른 데이터 레포지토리에 액세스하고 또한 서버와 연관된 갱신된 데이터 레포지토리에 기초하여 액세스된 다른 데이터 레포지토리에 저장된 데이터 레코드들을 수정하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  14. 제13항에 있어서, 데이터 처리 장치로 하여금, 생성된 변경 로그를 처리하여 다른 데이터 레포지토리를 갱신하는 것을 포함하여 다른 데이터 레포지토리에 액세스하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  15. 제10항에 있어서, 데이터 처리 장치로 하여금,
    하나 이상의 클라이언트들로부터 하나 이상의 데이터 레코드들에 대한 갱신들을 수신하고,
    수신된 갱신들 및 서버와 연관된 데이터스토어에 저장된 데이터 레코드들 간에서 하나 이상의 컨플릭트들을 식별하고,
    하나 이상의 클라이언트들로부터의 갱신들을 혼합하는 것을 포함하는 동작들을 수행하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  16. 제15항에 있어서, 데이터 처리 장치로 하여금, 동기 세션을 요청하는 하나 이상의 클라이언트들 중 가장 최근의 클라이언트에게 우선 순위를 할당함으로써 식별된 하나 이상의 컨플릭트들을 해결하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  17. 제10항에 있어서, 데이터 처리 장치로 하여금, 하나 이상의 클라이언트들이 비신뢰 클라이언트로서 식별된 것으로 검출한 경우, 비신뢰 클라이언트와 연관된 변경들의 세트에 수반된 하나 이상의 데이터 레코드들에 대해 서버에 의해 정의된 스키마로부터 비신뢰 클라이언트와 연관된 변경들의 세트에서 하나 이상의 불일치(discrepancy)들을 식별하도록 초래하게 또한 동작하는 컴퓨터 프로그램 프로덕트.
  18. 제10항에 있어서,
    데이터 레코드들에 포함된 데이터 아이템들에 대한 고유 식별자들을 포함하는 동기 세션의 하나 이상의 특성들을 검출하는 것을 수행함으로써 하나 이상의 클라이언트들을 신뢰 클라이언트 및 비신뢰 클라이언트 중의 하나로서 선택적으로 식별하도록 또한 동작하는 컴퓨터 프로그램 프로덕트.
  19. 서버로서,
    하나 이상의 클라이언트들로의 하나 이상의 연결들을 오프닝(opening)하도록 인에이블하는 전송 프로토콜과,
    서버로 하여금 오프닝된 하나 이상의 연결들에 걸쳐서 하나 이상의 클라이언트들과 하나 이상의 데이터클래스(dataclass)들을 동기화하도록 인에이블하는 하나 이상의 동기 프로토콜들
    을 동작시키도록 구성된 프로세서를 포함하고,
    하나 이상의 동기 프로토콜들은, 서버가,
    하나 이상의 데이터 아이템들을 포함하는 하나 이상의 데이터 레코드들을 갱신하기 위해 하나 이상의 클라이언트들로부터 동기 세션을 개시하라는 요청을 처리하고,
    동기 세션의 하나 이상의 특성들에 기초하여 하나 이상의 클라이언트들을 신뢰 클라이언트 및 비신뢰 클라이언트 중의 하나로서 선택적으로 식별하고 - 신뢰 클라이언트는 데이터 레코드들에 대해 서버에 의해 정의된 스키마를 지원하도록 구성됨 - ,
    하나 이상의 클라이언트들이, 하나 이상의 데이터 레코드들에 대해서만 변경된 데이터 아이템들을 보내는 필드 레벨 디퍼런싱 또는 하나 이상의 데이터 레코드들에 포함된 모든 데이터 아이템들을 보내는 레코드 레벨 디퍼런싱 중 하나를 지원하도록 구성되는지를 검출하도록 인에이블하는
    서버.
  20. 제19항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이, 하나 이상의 클라이언트들이 레코드 레벨 디퍼런싱을 지원하도록 구성된 경우 하나 이상의 데이터 레코드들에서 변경된 데이터 아이템들을 식별하도록 동작시키게 구성된 서버.
  21. 제19항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이,
    동기 세션을 처리하는 것에 응답하여,
    하나 이상의 데이터 레코드들과 연관된 하나 이상의 변경들을 표시하는 변경 로그를 생성하고,
    생성된 변경 로그에서 표시된 하나 이상의 데이터 레코드들에 대한 하나 이상의 변경들을 반영하기 위해 서버와 연관된 데이터 레포지토리를 갱신하는 것을 수행하도록 동작시키게 구성된 서버.
  22. 제19항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이,
    브리지 클라이언트를 사용하여 다른 데이터 레포지토리에 액세스하고 또한 서버에 연결된 갱신된 데이터 레포지토리에 기초하여 액세스된 데이터 레포지토리에 저장된 데이터 레코드들을 수정하게 동작시키도록 구성된 서버.
  23. 제22항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이 생성된 변경 로그를 처리하여 다른 데이터 레포지토리를 갱신함으로써 다른 데이터 레포지토리를 수정하도록 동작시키게 구성된 서버.
  24. 제19항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이,
    하나 이상의 클라이언트들로부터 하나 이상의 데이터 레코드들에 대한 갱신들을 수신하고,
    수신된 갱신들 및 서버와 연관된 데이터스토어에 저장된 데이터 레코드들 간에서 하나 이상의 컨플릭트들을 식별하고,
    하나 이상의 클라이언트들로부터의 갱신들을 혼합하는 것을 포함하는 동작들을 수행하도록 동작시키게 구성된 서버.
  25. 제24항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이,
    동기 세션을 요청하는 하나 이상의 클라이언트들 중에서 가장 최근의 클라이언트에게 우선 순위를 할당함으로써 식별된 하나 이상의 컨플릭트들을 해결하도록 동작시키게 구성된 서버.
  26. 제19항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이,
    하나 이상의 클라이언트들이 비신뢰 클라이언트로서 식별된 것으로 검출한 경우, 비신뢰 클라이언트와 연관된 변경들의 세트에 수반된 하나 이상의 데이터 레코드들에 대해 서버에 의해 정의된 스키마로부터 비신뢰 클라이언트와 연관된 변경들의 세트에서 하나 이상의 불일치들을 식별하도록 동작시키게 구성된 서버.
  27. 제19항에 있어서,
    프로세서는, 하나 이상의 동기 프로토콜들이,
    데이터 레코드들에 포함된 데이터 아이템들에 대한 고유 식별자들을 포함하는 동기 세션의 하나 이상의 특성들을 검출함으로써 하나 이상의 클라이언트들을 신뢰 클라이언트 및 비신뢰 클라이언트 중의 하나로서 선택적으로 식별하도록 동작시키게 구성된 서버.
KR1020107022201A 2008-03-04 2009-03-03 동기화 서버 프로세스 KR101217389B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/042,305 US7991740B2 (en) 2008-03-04 2008-03-04 Synchronization server process
US12/042,305 2008-03-04

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020127019611A Division KR101265455B1 (ko) 2008-03-04 2009-03-03 동기화 서버 프로세스

Publications (2)

Publication Number Publication Date
KR20100124801A true KR20100124801A (ko) 2010-11-29
KR101217389B1 KR101217389B1 (ko) 2013-01-02

Family

ID=40651459

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020107022201A KR101217389B1 (ko) 2008-03-04 2009-03-03 동기화 서버 프로세스
KR1020127019611A KR101265455B1 (ko) 2008-03-04 2009-03-03 동기화 서버 프로세스

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020127019611A KR101265455B1 (ko) 2008-03-04 2009-03-03 동기화 서버 프로세스

Country Status (9)

Country Link
US (3) US7991740B2 (ko)
EP (2) EP2098962B1 (ko)
JP (1) JP5624479B2 (ko)
KR (2) KR101217389B1 (ko)
CN (1) CN102089760B (ko)
AU (1) AU2009222001B2 (ko)
CA (1) CA2717415C (ko)
GB (1) GB2470871B (ko)
WO (1) WO2009111495A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101529162B1 (ko) * 2012-10-25 2015-06-16 주식회사 케이티 동기화 정보 제공 시스템 및 그 방법
KR102171027B1 (ko) * 2019-07-26 2020-10-28 이화여자대학교 산학협력단 비정형 로그를 처리하기 위한 추종 서버 장치 및 선도 서버 장치, 이를 포함하는 합의 시스템 및 그 방법

Families Citing this family (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7437484B2 (en) 2003-12-29 2008-10-14 International Business Machines Corporation Method for optimizing synchronization
US7516108B2 (en) * 2005-12-22 2009-04-07 International Business Machines Corporation Block allocation times in a computer system
US7991740B2 (en) 2008-03-04 2011-08-02 Apple Inc. Synchronization server process
US8010487B2 (en) * 2008-06-27 2011-08-30 Microsoft Corporation Synchronization and collaboration within peer-to-peer and client/server environments
US8135670B2 (en) * 2008-07-22 2012-03-13 International Business Machines Corporation Embedded change logging for data synchronization
US8437456B2 (en) 2008-07-28 2013-05-07 At&T Intellectual Property I, L.P. Method and apparatus for managing contact books
US20100159898A1 (en) * 2008-12-19 2010-06-24 Openpeak, Inc. Services platform for networked devices that provide telephony and digital media services
US9002787B2 (en) * 2009-01-30 2015-04-07 Blackberry Limited Method and apparatus for tracking device management data changes
US20100211544A1 (en) * 2009-02-19 2010-08-19 Jyshyang Chen System with session synchronization
US8028070B2 (en) * 2009-05-18 2011-09-27 Microsoft Corporation Synchronizing tasks between servers
US20110078332A1 (en) * 2009-09-25 2011-03-31 Poon Roger J Method of synchronizing information across multiple computing devices
US8516137B2 (en) 2009-11-16 2013-08-20 Microsoft Corporation Managing virtual hard drives as blobs
US8572022B2 (en) * 2010-03-02 2013-10-29 Microsoft Corporation Automatic synchronization conflict resolution
CN102193841B (zh) * 2010-03-04 2013-07-31 阿里巴巴集团控股有限公司 一种Subversion配置库的备份方法及装置
US9467338B2 (en) 2010-04-01 2016-10-11 Blackberry Limited Method for communicating device management data changes
US20110258160A1 (en) * 2010-04-15 2011-10-20 Po-Yen Lee Data synchronization methods for synchronizing data in communication system and communication systems
US8527591B2 (en) 2010-05-20 2013-09-03 Actual Works, Inc. Method and apparatus for the implementation of a real-time, sharable browsing experience on a guest device
US10318477B2 (en) * 2010-05-26 2019-06-11 Red Hat, Inc. Managing and archiving system and application log files
CN102315930B (zh) 2010-06-30 2014-07-23 国际商业机器公司 用于在数据同步中减少数据传输量的方法和系统
US9349368B1 (en) 2010-08-05 2016-05-24 Google Inc. Generating an audio notification based on detection of a triggering event
US8521854B2 (en) 2010-08-06 2013-08-27 International Business Machines Corporation Minimising network resource overhead consumption by reports from one or more agents distributed in an electronic data network of nodes
US8478772B2 (en) 2010-10-21 2013-07-02 Oracle International Corporation On-device database service for mobile device
KR20120107022A (ko) * 2011-03-14 2012-09-28 삼성전자주식회사 개인 정보 동기화 방법 및 장치
WO2012167108A1 (en) 2011-06-03 2012-12-06 Apple Inc. Cloud storage
US9729549B2 (en) 2011-09-24 2017-08-08 Elwha Llc Behavioral fingerprinting with adaptive development
US8713704B2 (en) 2011-09-24 2014-04-29 Elwha Llc Behavioral fingerprint based authentication
US9825967B2 (en) 2011-09-24 2017-11-21 Elwha Llc Behavioral fingerprinting via social networking interaction
US9348985B2 (en) 2011-11-23 2016-05-24 Elwha Llc Behavioral fingerprint controlled automatic task determination
US8869241B2 (en) 2011-09-24 2014-10-21 Elwha Llc Network acquired behavioral fingerprint for authentication
US9298900B2 (en) 2011-09-24 2016-03-29 Elwha Llc Behavioral fingerprinting via inferred personal relation
US9015860B2 (en) 2011-09-24 2015-04-21 Elwha Llc Behavioral fingerprinting via derived personal relation
US8688980B2 (en) 2011-09-24 2014-04-01 Elwha Llc Trust verification schema based transaction authorization
US20130191887A1 (en) * 2011-10-13 2013-07-25 Marc E. Davis Social network based trust verification Schema
US9083687B2 (en) 2011-09-24 2015-07-14 Elwha Llc Multi-device behavioral fingerprinting
US9621404B2 (en) 2011-09-24 2017-04-11 Elwha Llc Behavioral fingerprinting with social networking
US9396277B2 (en) 2011-12-09 2016-07-19 Microsoft Technology Licensing, Llc Access to supplemental data based on identifier derived from corresponding primary application data
US8601121B2 (en) 2012-01-09 2013-12-03 International Business Machines Corporation Tracking changes to data within various data repositories
KR20130094608A (ko) * 2012-02-16 2013-08-26 삼성전자주식회사 통합주소록 서버에 의한 문서 복원 방법 및 이를 위한 통합주소록 클라이언트 단말
EP2701106A3 (en) * 2012-08-20 2014-05-14 BlackBerry Limited Methods and devices for applying constraints to data object
EP2709022A1 (en) * 2012-09-14 2014-03-19 Harman Becker Automotive Systems GmbH Method and devices for updating a database of a navigation device
US9218405B2 (en) * 2012-10-10 2015-12-22 Apple Inc. Batch processing and data synchronization in cloud-based systems
CN102932439A (zh) * 2012-10-26 2013-02-13 华为终端有限公司 一种内容同步的方法和装置
CN103873519B (zh) * 2012-12-14 2018-03-27 北京金山云网络技术有限公司 一种数据同步方法、客户端、服务器、终端和系统
US9077759B2 (en) 2013-01-18 2015-07-07 Apple Inc. Conflict resolution for keychain syncing
US9197700B2 (en) * 2013-01-18 2015-11-24 Apple Inc. Keychain syncing
US9449061B2 (en) * 2013-03-15 2016-09-20 Tactile, Inc. Storing and processing data organized as flexible records
CN104125249A (zh) * 2013-04-24 2014-10-29 北京远方环宇通讯技术有限责任公司 通信终端配置文件的同步系统和方法
US20160110261A1 (en) * 2013-05-07 2016-04-21 Axcient, Inc. Cloud storage using merkle trees
US10963431B2 (en) * 2013-06-11 2021-03-30 Red Hat, Inc. Storing an object in a distributed storage system
KR20150029185A (ko) * 2013-09-09 2015-03-18 삼성전자주식회사 애플리케이션 제공 방법 및 장치
US9426140B2 (en) * 2013-09-09 2016-08-23 Layer, Inc. Federated authentication of client computers in networked data communications services callable by applications
US10956446B1 (en) 2013-09-11 2021-03-23 Amazon Technologies, Inc. Log-based synchronization with inferred context
US9251235B1 (en) 2013-09-11 2016-02-02 Amazon Technologies, Inc. Log-based synchronization
US9552407B1 (en) * 2013-09-11 2017-01-24 Amazon Technologies, Inc. Log-based synchronization with conditional append
CN103716370B (zh) * 2013-10-13 2018-01-02 北界创想(北京)软件有限公司 在多个客户端之间进行数据同步的方法和装置
US11075996B2 (en) * 2013-10-15 2021-07-27 Red Hat Israel, Ltd. Remote dashboard console
US9690838B2 (en) * 2013-10-31 2017-06-27 Microsoft Technology Licensing, Llc Master data management
CN104679530B (zh) * 2013-11-26 2017-12-29 英业达科技有限公司 服务器系统与固件更新方法
US10645157B2 (en) 2014-03-31 2020-05-05 Google Llc Content synchronization using profiles
CN104346479A (zh) * 2014-11-26 2015-02-11 北京奇虎科技有限公司 一种数据库同步方法及装置
US10007682B2 (en) * 2015-03-30 2018-06-26 International Business Machines Corporation Dynamically maintaining data structures driven by heterogeneous clients in a distributed data collection system
US10574745B2 (en) * 2015-03-31 2020-02-25 Western Digital Technologies, Inc. Syncing with a local paired device to obtain data from a remote server using point-to-point communication
US10497044B2 (en) 2015-10-19 2019-12-03 Demandware Inc. Scalable systems and methods for generating and serving recommendations
US10397319B2 (en) * 2015-11-24 2019-08-27 Dropbox, Inc. Server-side selective synchronization
CN110557441B (zh) * 2016-03-01 2022-02-22 张君 客户端与服务端在网与离网状态下数据交互方法、系统
US10740298B2 (en) 2016-10-12 2020-08-11 Microsoft Technology Licensing, Llc File synchronization with reduced conflicts in computing systems
CN107204854A (zh) * 2017-06-30 2017-09-26 上海测吧信息技术有限公司 一种基于usb‑token的数字签章方法
CN110019469B (zh) * 2017-12-07 2022-06-21 金篆信科有限责任公司 分布式数据库数据处理方法、装置、存储介质及电子装置
US10216508B1 (en) 2018-01-05 2019-02-26 Bank Of America Corporation System and method for configurable services platform
CN110309191B (zh) * 2018-04-08 2023-07-04 腾讯科技(深圳)有限公司 存储业务数据的方法、装置和系统
CN108874884B (zh) * 2018-05-04 2021-05-04 广州多益网络股份有限公司 数据同步更新方法、装置和系统、服务器设备
KR102133925B1 (ko) * 2018-07-30 2020-07-14 네이버 주식회사 데이터 동기화 트래픽을 최소화하기 위한 방법 및 시스템
US11914612B2 (en) * 2018-09-24 2024-02-27 Salesforce, Inc. Selective synchronization of linked records
JP7234726B2 (ja) * 2019-03-20 2023-03-08 富士フイルムビジネスイノベーション株式会社 通信装置、通信システム、及びプログラム
CN110069567A (zh) * 2019-04-02 2019-07-30 北京信安世纪科技股份有限公司 一种数据库之间的数据同步方法及系统
US11080265B2 (en) 2019-04-24 2021-08-03 Microsoft Technology Licensing, Llc Dynamic hash function composition for change detection in distributed storage systems
US11055274B2 (en) 2019-04-24 2021-07-06 Microsoft Technology Licensing, Llc Granular change detection in distributed storage systems
US11061936B2 (en) 2019-04-24 2021-07-13 Microsoft Technology Licensing, Llc Property grouping for change detection in distributed storage systems
CN110086719B (zh) * 2019-04-30 2021-07-27 深圳市腾讯网域计算机网络有限公司 数据处理方法、装置及服务器
US11037207B2 (en) * 2019-08-20 2021-06-15 Shopify Inc. Channel synchronization engine with call control
US11474921B2 (en) 2020-07-13 2022-10-18 Micron Technology, Inc. Log compression
CN111939565B (zh) * 2020-08-28 2023-09-26 腾讯科技(深圳)有限公司 虚拟场景的显示方法、系统、装置、设备以及存储介质
CN112667309A (zh) * 2020-12-22 2021-04-16 互联网域名系统北京市工程研究中心有限公司 DoT在DNS权威服务器上的支持方法及系统
US20230385307A1 (en) * 2022-05-25 2023-11-30 Hop.dev, Inc. Enabling communication between multiple disparate systems

Family Cites Families (110)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1403580A (en) * 1920-05-03 1922-01-17 George G Venema Clamp
JP3621433B2 (ja) * 1993-05-24 2005-02-16 日本電信電話株式会社 データベース排他制御方法
US6173335B1 (en) 1993-07-30 2001-01-09 Apple Computer, Inc. Structure and protocol for routing information in a system
US5684984A (en) 1994-09-29 1997-11-04 Apple Computer, Inc. Synchronization and replication of object databases
US5873093A (en) * 1994-12-07 1999-02-16 Next Software, Inc. Method and apparatus for mapping objects to a data source
US5706509A (en) * 1995-04-28 1998-01-06 Intel Corporation Application independent record level synchronization
EP0750253B1 (en) * 1995-06-22 2002-04-03 Hewlett-Packard Company, A Delaware Corporation Method and apparatus for shared management information via a common repository
US5728335A (en) * 1996-06-26 1998-03-17 Union Carbide Chemicals & Plastics Technology Corporation Process for extrusion
US5758355A (en) * 1996-08-07 1998-05-26 Aurum Software, Inc. Synchronization of server database with client database using distribution tables
US5926816A (en) * 1996-10-09 1999-07-20 Oracle Corporation Database Synchronizer
US5884325A (en) * 1996-10-09 1999-03-16 Oracle Corporation System for synchronizing shared data between computers
US6446092B1 (en) * 1996-11-01 2002-09-03 Peerdirect Company Independent distributed database system
US6182141B1 (en) 1996-12-20 2001-01-30 Intel Corporation Transparent proxy server
US6253228B1 (en) 1997-03-31 2001-06-26 Apple Computer, Inc. Method and apparatus for updating and synchronizing information between a client and a server
US7490112B1 (en) * 1997-04-15 2009-02-10 Intellisync Corporation System and methods for synchronizing information among disparate datasets
US5999937A (en) * 1997-06-06 1999-12-07 Madison Information Technologies, Inc. System and method for converting data between data sets
JPH113368A (ja) * 1997-06-11 1999-01-06 Nippon Telegr & Teleph Corp <Ntt> 分散環境におけるスケジュールデータ管理方法及びシステム及びスケジュールデータ管理プログラムを格納した記憶媒体
US6041325A (en) * 1997-10-09 2000-03-21 Alcatel Usa Sourcing, L.P. System and method for controlling access to a telephony database
US6026408A (en) * 1998-01-28 2000-02-15 Unisys Corp. Method for synchronizing the schema of a database with its representation in an object-oriented repository
JP3204206B2 (ja) * 1998-03-13 2001-09-04 日本電気株式会社 部分抽出型リモートメンテナンス方式
DE19813929A1 (de) * 1998-03-28 1999-10-07 Mannesmann Vdo Ag Aufnahme für ein als Kugelkopf ausgebildetes Ende eines Stößels
US6317754B1 (en) * 1998-07-03 2001-11-13 Mitsubishi Electric Research Laboratories, Inc System for user control of version /Synchronization in mobile computing
US6341291B1 (en) 1998-09-28 2002-01-22 Bentley Systems, Inc. System for collaborative engineering using component and file-oriented tools
US6477543B1 (en) 1998-10-23 2002-11-05 International Business Machines Corporation Method, apparatus and program storage device for a client and adaptive synchronization and transformation server
US6449622B1 (en) * 1999-03-08 2002-09-10 Starfish Software, Inc. System and methods for synchronizing datasets when dataset changes may be received out of order
AU1838200A (en) * 1998-11-30 2000-06-19 Siebel Systems, Inc. Client server system with thin client architecture
US6516327B1 (en) * 1998-12-24 2003-02-04 International Business Machines Corporation System and method for synchronizing data in multiple databases
US6247135B1 (en) * 1999-03-03 2001-06-12 Starfish Software, Inc. Synchronization process negotiation for computing devices
US6430576B1 (en) 1999-05-10 2002-08-06 Patrick Gates Distributing and synchronizing objects
EP1093061A1 (de) * 1999-10-14 2001-04-18 SAP Aktiengesellschaft Integriertes Datenbank-Verbundsystem
US6393434B1 (en) * 1999-09-14 2002-05-21 International Business Machines Corporation Method and system for synchronizing data using fine-grained synchronization plans
US6694336B1 (en) * 2000-01-25 2004-02-17 Fusionone, Inc. Data transfer and synchronization system
US6820088B1 (en) * 2000-04-10 2004-11-16 Research In Motion Limited System and method for synchronizing data records between multiple databases
CA2808275C (en) * 2000-06-22 2016-11-15 Microsoft Corporation Distributed computing services platform
US20050055382A1 (en) * 2000-06-28 2005-03-10 Lounas Ferrat Universal synchronization
US20020059299A1 (en) * 2000-07-14 2002-05-16 Frederic Spaey System and method for synchronizing databases
US20020026474A1 (en) 2000-08-28 2002-02-28 Wang Lawrence C. Thin client for wireless device using java interface
US7284271B2 (en) * 2001-03-14 2007-10-16 Microsoft Corporation Authorizing a requesting entity to operate upon data structures
EP1410202B1 (en) * 2001-03-16 2006-07-26 Novell, Inc. Client-server model for synchronization of files
US7177866B2 (en) * 2001-03-16 2007-02-13 Gravic, Inc. Asynchronous coordinated commit replication and dual write with replication transmission and locking of target database on updates only
US6829655B1 (en) 2001-03-28 2004-12-07 Siebel Systems, Inc. Method and system for server synchronization with a computing device via a companion device
US7099896B2 (en) * 2001-04-06 2006-08-29 Patientkeeper, Inc. Synchronizing data between disparate schemas using composite version
US6970876B2 (en) * 2001-05-08 2005-11-29 Solid Information Technology Method and arrangement for the management of database schemas
US7149813B2 (en) 2001-08-14 2006-12-12 Microsoft Corporation Method and system for synchronizing mobile devices
US7761535B2 (en) * 2001-09-28 2010-07-20 Siebel Systems, Inc. Method and system for server synchronization with a computing device
US7155521B2 (en) * 2001-10-09 2006-12-26 Nokia Corporation Starting a session in a synchronization system
FI112015B (fi) * 2001-11-12 2003-10-15 Nokia Corp Datan synkronoinnin järjestäminen tietoliikennejärjestelmässä
US6920469B2 (en) * 2001-11-13 2005-07-19 Tadpole Technology Plc Unique ID management in disconnected database replication
US6728335B1 (en) 2002-01-25 2004-04-27 Carl-Zeiss-Stiftung Controller for array of miniature radiation sources
US6807541B2 (en) * 2002-02-28 2004-10-19 International Business Machines Corporation Weak record locks in database query read processing
US7346616B2 (en) * 2002-03-20 2008-03-18 Extended System, Inc. Synchronizing data shared between two devices independent of any other devices that may also share the data
US6920486B2 (en) * 2002-05-20 2005-07-19 Nokia Corporation Method and apparatus for enabling synchronizing data in different devices having different capabilities and unmatched data fields
US6983293B2 (en) 2002-07-24 2006-01-03 International Business Machines Corporation Mid-tier-based conflict resolution method and system usable for message synchronization and replication
US7206788B2 (en) * 2002-07-30 2007-04-17 Microsoft Corporation Schema-based services for identity-based access to device data
US20060190984A1 (en) * 2002-09-23 2006-08-24 Credant Technologies, Inc. Gatekeeper architecture/features to support security policy maintenance and distribution
CA2406079C (en) * 2002-09-30 2010-03-30 Ibm Canada Limited-Ibm Canada Limitee System and method for synchronizing data repositories
US7359991B2 (en) 2002-11-05 2008-04-15 Microsoft Corporation Folder synchronization
US20060259524A1 (en) 2003-03-17 2006-11-16 Horton D T Systems and methods for document project management, conversion, and filing
US7117209B2 (en) * 2003-03-28 2006-10-03 International Business Machines Corporation Record trimming method, apparatus, and system to improve processing in a sort utility
US7890091B2 (en) * 2003-05-08 2011-02-15 Good Technology, Inc. Collaborative data and intelligent synchronization for mobile devices
US7406499B2 (en) * 2003-05-09 2008-07-29 Microsoft Corporation Architecture for partition computation and propagation of changes in data replication
US7660833B2 (en) * 2003-07-10 2010-02-09 Microsoft Corporation Granular control over the authority of replicated information via fencing and unfencing
JP2005056063A (ja) * 2003-08-01 2005-03-03 Hitachi Ltd 情報処理装置、ネットワークにおけるユーザ認証プログラム、および記録媒体
JP4583375B2 (ja) * 2003-08-21 2010-11-17 マイクロソフト コーポレーション 同期スキーマの実装のためのシステム
US7143117B2 (en) * 2003-09-25 2006-11-28 International Business Machines Corporation Method, system, and program for data synchronization by determining whether a first identifier for a portion of data at a first source and a second identifier for a portion of corresponding data at a second source match
US7080104B2 (en) * 2003-11-07 2006-07-18 Plaxo, Inc. Synchronization and merge engines
KR100547896B1 (ko) * 2004-03-05 2006-01-31 삼성전자주식회사 데이터 동기화 시스템 및 서버와 클라이언트의 데이터동기화 방법
US20050251523A1 (en) * 2004-05-07 2005-11-10 Oracle International Corporation Minimizing downtime for application changes in database systems
WO2005116892A1 (en) 2004-05-24 2005-12-08 Apple Computer, Inc. Methods for sharing groups of objects, synchronising, and synchronising between three or more devices
US7809682B2 (en) * 2004-05-24 2010-10-05 Apple Inc. Data synchronization between multiple devices
US7567988B2 (en) * 2004-07-16 2009-07-28 Sap Ag Synchronizing agent for multiple clients/applications on a computer system
US7506006B2 (en) * 2004-09-03 2009-03-17 Microsoft Corporation Synchronization for smart clients
US20060080468A1 (en) * 2004-09-03 2006-04-13 Microsoft Corporation Smart client add-in architecture
US20060088038A1 (en) * 2004-09-13 2006-04-27 Inkaar, Corporation Relationship definition and processing system and method
US20070038642A1 (en) * 2004-09-15 2007-02-15 Scott Durgin Method for providing extensible software components within a distributed synchronization system
CA2622404A1 (en) 2004-09-15 2006-03-23 Adesso Systems, Inc. System and method for managing data in a distributed computer system
CN1753359B (zh) 2004-09-24 2011-01-19 华为技术有限公司 实现传输SyncML同步数据的方法
US8069226B2 (en) 2004-09-30 2011-11-29 Citrix Systems, Inc. System and method for data synchronization over a network using a presentation level protocol
US7657925B2 (en) * 2004-10-14 2010-02-02 Oracle International Corporation Method and system for managing security policies for databases in a distributed system
US8001082B1 (en) * 2004-10-28 2011-08-16 Good Technology, Inc. System and method of data security in synchronizing data with a wireless device
US8230326B2 (en) 2004-12-17 2012-07-24 International Business Machines Corporation Method for associating annotations with document families
US7962448B2 (en) * 2004-12-17 2011-06-14 International Business Machines Corporation Optimizing a three tiered synchronization system by pre-fetching and pre-formatting synchronization data
US9020887B2 (en) 2004-12-21 2015-04-28 Proofpoint, Inc. Managing the status of documents in a distributed storage system
US7908247B2 (en) 2004-12-21 2011-03-15 Nextpage, Inc. Storage-and transport-independent collaborative document-management system
US20060155716A1 (en) * 2004-12-23 2006-07-13 Microsoft Corporation Schema change governance for identity store
US7593942B2 (en) * 2004-12-30 2009-09-22 Oracle International Corporation Mandatory access control base
US7317907B2 (en) * 2005-01-31 2008-01-08 Research In Motion Limited Synchronizing server and device data using device data schema
US7677441B2 (en) * 2005-04-01 2010-03-16 Microsoft Corporation Relaxed currency constraints
US7516478B2 (en) * 2005-06-03 2009-04-07 Microsoft Corporation Remote management of mobile devices
NO20052719D0 (no) 2005-06-06 2005-06-06 Ericsson Telefon Ab L M Synkronisering av informasjonsenheter med tilhorende referanser
US20060277224A1 (en) * 2005-06-07 2006-12-07 Microsoft Corporation Synchronizing arbitrary data using a flexible schema
US7770785B2 (en) * 2005-06-13 2010-08-10 Qualcomm Incorporated Apparatus and methods for detection and management of unauthorized executable instructions on a wireless device
JP4867249B2 (ja) * 2005-09-20 2012-02-01 富士ゼロックス株式会社 データサーバ、およびプログラム
US20070130217A1 (en) * 2005-10-13 2007-06-07 Unwired Software, Inc. Many to many data synchronization
US8015319B2 (en) * 2005-10-27 2011-09-06 Huawei Technologies Co., Ltd. Method, system, client and server for implementing data sync
CN1956452B (zh) * 2005-10-27 2012-02-29 华为技术有限公司 一种实现数据同步的方法、系统、客户端及服务器
CN1852309A (zh) * 2005-11-16 2006-10-25 华为技术有限公司 数据同步处理方法及其客户端
US7543000B2 (en) * 2006-01-23 2009-06-02 International Business Machines Corporation Method and system combining state replication and operational-replay synchronization
US7712137B2 (en) * 2006-02-27 2010-05-04 Microsoft Corporation Configuring and organizing server security information
US7756829B2 (en) 2006-04-18 2010-07-13 Sandeep Bhanote Method and apparatus for mobile data collection and management
US8108388B2 (en) 2006-04-26 2012-01-31 Microsoft Corporation Significant change search alerts
US7860825B2 (en) * 2006-05-08 2010-12-28 Palm, Inc. Method for synchronizing software application and user data for asynchronous client-server and peer to peer computer networks
US7792792B2 (en) * 2006-05-22 2010-09-07 Microsoft Corporation Synchronizing structured web site contents
EP1883257A1 (fr) * 2006-07-28 2008-01-30 Gemplus Procédé de synchronisation entre un equipement mobile et une carte a puce
US7827138B2 (en) * 2006-10-02 2010-11-02 Salesforce.Com, Inc. Method and system for synchronizing a server and an on-demand database service
US20080155112A1 (en) 2006-12-22 2008-06-26 Nokia Corporation System and method for updating information feeds
US20080294729A1 (en) * 2007-05-22 2008-11-27 Nokia Corporation Email object for open mobile alliance data synchronization usage
US8090685B2 (en) * 2007-09-14 2012-01-03 Microsoft Corporation Knowledge based synchronization of subsets of data with no move condition
US7991740B2 (en) 2008-03-04 2011-08-02 Apple Inc. Synchronization server process
US20110078332A1 (en) 2009-09-25 2011-03-31 Poon Roger J Method of synchronizing information across multiple computing devices

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101529162B1 (ko) * 2012-10-25 2015-06-16 주식회사 케이티 동기화 정보 제공 시스템 및 그 방법
KR102171027B1 (ko) * 2019-07-26 2020-10-28 이화여자대학교 산학협력단 비정형 로그를 처리하기 위한 추종 서버 장치 및 선도 서버 장치, 이를 포함하는 합의 시스템 및 그 방법

Also Published As

Publication number Publication date
GB2470871B (en) 2012-11-14
CA2717415C (en) 2013-05-28
AU2009222001A1 (en) 2009-09-11
CN102089760B (zh) 2015-07-01
KR101217389B1 (ko) 2013-01-02
JP2011513863A (ja) 2011-04-28
GB201016655D0 (en) 2010-11-17
KR101265455B1 (ko) 2013-05-22
CN102089760A (zh) 2011-06-08
WO2009111495A1 (en) 2009-09-11
US10749953B2 (en) 2020-08-18
US20110289050A1 (en) 2011-11-24
US20090228509A1 (en) 2009-09-10
CA2717415A1 (en) 2009-09-11
KR20120105544A (ko) 2012-09-25
EP2098962A1 (en) 2009-09-09
EP2098962B1 (en) 2014-05-21
US20130006929A1 (en) 2013-01-03
AU2009222001B2 (en) 2011-10-20
US8290908B2 (en) 2012-10-16
GB2470871A (en) 2010-12-08
US7991740B2 (en) 2011-08-02
EP2426611A1 (en) 2012-03-07
JP5624479B2 (ja) 2014-11-12

Similar Documents

Publication Publication Date Title
US10749953B2 (en) Synchronization server process
US10902016B2 (en) Autonomous interdependent repositories
EP1917608B1 (en) Security in peer to peer synchronization applications
JP6626459B2 (ja) 共有ファイル・アクセス−restインターフェースを使用するファイル・サービス
US6393434B1 (en) Method and system for synchronizing data using fine-grained synchronization plans
US7577691B2 (en) Extending hierarchical synchronization scopes to non-hierarchical scenarios
JP2021505984A (ja) コンテンツ管理クライアント同期サービス
AU2009296436B2 (en) Trickle sync protocol
US20170075921A1 (en) Hosted file sync with direct access to hosted files
WO2005024626A1 (en) Systems for the implementation of a synchronization schemas
AU2011253726B2 (en) Synchronization server process
Bartlang Architecture and methods for flexible content management in peer-to-peer systems
Martin et al. A Bibliographical Survey on Data Sharing Systems for Mobile Ad Hoc Networks
Mullender et al. Pepys–the network is a file system
Redkar Windows Azure Storage Part I—Blobs

Legal Events

Date Code Title Description
A201 Request for examination
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151118

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171117

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181129

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20191127

Year of fee payment: 8