KR101319767B1 - 데이터 동기화 방법 및 컴퓨터 판독가능 매체 - Google Patents

데이터 동기화 방법 및 컴퓨터 판독가능 매체 Download PDF

Info

Publication number
KR101319767B1
KR101319767B1 KR1020087019515A KR20087019515A KR101319767B1 KR 101319767 B1 KR101319767 B1 KR 101319767B1 KR 1020087019515 A KR1020087019515 A KR 1020087019515A KR 20087019515 A KR20087019515 A KR 20087019515A KR 101319767 B1 KR101319767 B1 KR 101319767B1
Authority
KR
South Korea
Prior art keywords
participant
knowledge
change
data
replica
Prior art date
Application number
KR1020087019515A
Other languages
English (en)
Other versions
KR20080113347A (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 KR20080113347A publication Critical patent/KR20080113347A/ko
Application granted granted Critical
Publication of KR101319767B1 publication Critical patent/KR101319767B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Transfer Between Computers (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

변화하는 장치 및/또는 서비스 유형 사이에서 데이터의 동기화를 개선하는 다양한 기술 및 기법이 개시된다. 완전 참가자는 다른 참가자로부터 동기화 동작을 실행하라는 요청을 수신한다. 동기화 엔진은 장치 또는 서비스가 완전 참가자인지, 부분 참가자인지, 단순 참가자인지 판정한다. 장치 또는 서비스는 동기화된 데이터를 위한 데이터 저장소가 있고, 지식 저장소가 없으면, 단순 참가자이다. 장치 또는 서비스는 동기화된 데이터를 위한 데이터 저장소 및 지식 저장소가 있지만, 지식을 이해할 수 없으면, 부분 참가자이다. 장치 또는 서비스는 동기화된 데이터를 위한 데이터 저장소 및 지식 저장소가 있고, 지식을 이해하면, 완전 참가자 유형이다. 동기화 엔진은 장치 또는 서비스의 유형에 적절한 로직의 집합을 사용하여 장치 또는 서비스와의 동기화 동작을 실행한다.
동기화 엔진, 완전 참가자, 부분 참가자, 단순 참가자, 데이터 저장소, 지식 저장소, 핸들러

Description

데이터 동기화 방법 및 컴퓨터 판독가능 매체{SYNCHRONIZATION PEER PARTICIPANT MODEL}
본 발명은 변화하는 장치 및/또는 서비스 유형 사이에서 데이터의 동기화를 개선하는 다양한 기술 및 기법에 관한 것이다.
오늘날의 기술 및 디지털 정보 처리의 세계에서, 개인들은 각종 상이한 장치 및 위치에 정보 또는 데이터를 저장할 수 있다. 종종, 사용자는 2개 이상의 장치 및/또는 위치에 동일한 정보를 저장한다. 사용자는 각 데이터 저장소에 대한 동일한 변경을 수동으로 입력할 필요 없이 다양한 데이터 저장소 전체가 동일한 정보를 갖게 하고 싶어한다. 복제는 각 데이터 저장소가 동일한 정보를 반드시 갖게 하기 위해 사용된 하나의 프로세스이다.
예를 들어, 사용자는 각종 상이한 장치 또는 위치에 전자 주소록을 유지할 수 있다. 사용자는 예를 들어, 그들의 데스크톱 컴퓨터에 저장된 개인 정보 매니저 상에, 그들의 랩톱 컴퓨터상에, 개인 휴대 정보 단말기(PDA) 내에, 온라인 연락처 매니저 내에 등등에 주소록을 유지할 수 있다. 사용자는 예를 들어, 연락처를 추가하거나, 연락처를 삭제하거나, 연락처 정보를 변경함으로써, 각 위치에 있는 전자 주소록을 변경할 수 있다. 복제는 특정 장치상에서 이루어진 변경이 궁극적 으로 사용자의 다른 장치의 데이터 저장소 내에 반드시 반영되게 하기 위해 사용된다.
복제는 특정 사용자가 사용하는 장치 및/또는 서비스의 수가 증가하고 및/또는 그러한 장치의 크기 또는 처리 능력이 감소함에 따라 점점 더 복잡해진다. 예를 들어, 많은 사용자에게는 썸(thumb) 드라이브, 이동식 메모리, PDA, 전화기, 휴대용 음악 장치 등등이 있다. 연락처 기록과 같은 정보는 그들 장치 중의 많은 장치 상에 갖고 있는 것이 유용할 수 있고 및/또는 그들 장치 사이에서 동기화될 수 있지만, 그러한 유형의 장치들의 다수는 종종 전형적인 동기화 프로세스에 참가하기 위해 요구되는 컴퓨터 프로세스조차도 없다. 이들 동기화 문제는 다수의 사용자가 그룹 캘린더를 공유하는 것과 같이, 데이터의 그룹 공유가 수반될 때 더욱 증가될 수 있다.
변화하는 장치 및/또는 서비스 유형 사이에서 데이터의 동기화를 개선하는 다양한 기술 및 기법이 개시된다. 완전 참가자 장치 또는 서비스는 다른 장치 또는 서비스로부터 동기화 엔진을 사용하여 동기화 동작을 실행하라는 요청을 수신한다. 기타 장치 또는 서비스는 핸들러 인터페이스의 구현을 통해 완전 참가자의 동기화 엔진과 통신한다. 동기화 엔진은 종점들 사이의 동기화를 수행하기 위해 시스템상에 설치된 다양한 핸들러들 사이의 통신을 조정한다. 일단 동기화 엔진에 접속되면, 핸들러들은 그들이 참가할 수 있는 동기화 시나리오, 또는 단순히, 피어 참가자 모델에 정의된 그들의 참가 레벨을 판정하기 위해 조사된다.
한 구현에서, 동기화 엔진은 장치 또는 서비스가 완전 참가자인지, 부분 참가자인지, 단순 참가자인지 판정한다. 장치 또는 서비스는 동기화된 데이터를 위한 데이터 저장소가 있고, 지식 저장소가 없으면, 단순 참가자이다. 단순 참가자는 데이터에 어떤 변경을 했는지 추적할 책임이 없다. 장치 또는 서비스는 동기화된 데이터를 위한 데이터 저장소 및 지식 저장소가 있지만, 지식을 이해할 수 없으면, 부분 참가자이다. 부분 참가자는 데이터에 어떤 변경을 했는지 추적할 책임이 있다. 장치 또는 서비스는 동기화된 데이터를 위한 데이터 저장소 및 지식 저장소가 있고, 지식 및 그 지식에 관한 일부 또는 전체 동작을 이해하면, 완전 참가자 유형이다. 지식은 "동기화 메타데이터"를 칭한다. 동기화 엔진은 장치 또는 서비스의 유형에 적절한 로직의 집합을 사용하여 장치와의 동기화 동작을 실행한다. 이 아키텍처의 한 구현은 멀티-마스터(multi-master) 양방향 동기화 커뮤니티를 제공하고, 제한된 처리 및/또는 저장 능력을 가진 장치 및/또는 서비스(이를테면, 썸 드라이브, 소정의 PDA 및/또는 전화기 등)가 소정 레벨에서 동기화 프로세스에 참가할 수 있게 한다. 다수의 마스터 동기화는 동일한 데이터의 쓰기 가능한 복제본을 각각 갖고 있는 둘 이상의 참가자가 이전에 통신한 적이 있든 없든 함께 모여서 동기화할 수 있게 하는 것을 의미한다.
한가지 비제한적인 예로서, 부분 참가자 장치 또는 서비스는 부분 참가자가 지식을 이해하지도 못하더라도, 부분 참가자 상에 저장된 지식으로 인해 한 구현에서의 멀티-마스터 양방향 동기화 동작에 참가할 수 있다. 다른 비제한적인 예로서, (썸 드라이브와 같이) 복제된 데이터를 저장하는 데이터 저장소가 있지만 지식이 없는 단순 참가자는 한 구현에서 완전 참가자와의 동기화 프로세스에 참가할 수 있다.
이 요약은 아래의 상세한 설명에서 더욱 설명되는 개념들의 선택을 단순화된 형태로 소개하기 위해 제공되었다. 이 요약은 청구된 주제의 중요한 특징이나 본질적인 특징을 식별하고자 하는 것도 아니고, 청구된 주제의 범위를 결정하는데 도움을 주고자 하는 것도 아니다.
도 1은 완전 참가자, 부분 참가자 및 단순 참가자의 그래픽 표현을 도시한 한 구현의 동기화 피어 참가자 모델의 도식적인 도면.
도 2는 완전 참가자, 부분 참가자 및 단순 참가자의 표 형태의 표현을 도시한 한 구현의 동기화 피어 참가자 모델의 도식적인 도면.
도 3은 참가자 장치와 접속하는 핸들러를 가진 한 구현의 동기화 시스템의 도식적인 도면.
도 4는 완전 참가자 장치상에서 동기화 애플리케이션을 동작시키는 것과 같은, 하나 이상의 구현에 적합한 운영 환경인 예시적인 컴퓨터 시스템을 도시한 도면.
도 5는 한 구현의 동기화 애플리케이션의 도식적인 도면.
도 6은 시스템의 한 구현의 하이 레벨 프로세스 흐름도.
도 7은 부분 참가자 장치를 사용한 데이터의 갱신 및 동기화에 관련된 단계를 도시한 한 구현의 프로세스 흐름도.
도 8은 기록을 새로운 틱(tick) 카운트 또는 다른 식별자로 갱신함으로써 부분 참가자 장치가 데이터에 대한 변경을 추적하는 것과 관련된 단계를 도시한 한 구현의 프로세스 흐름도.
도 9는 기록 식별자 및 변경 날짜/시간을 따로 저장함으로써 부분 참가자 장치가 데이터에 행한 변경을 추적하는 것과 관련된 단계를 도시한 한 구현의 프로세스 흐름도.
도 10-11은 부분 참가자 장치에 의한 수정 전과 수정 후의 부분 참가자 장치상의 예시적인 기록을 도시한 도면.
도 12는 수정 전의 부분 참가자 장치상의 예시적인 기록을 도시한 도면.
도 13은 도 12의 기록에 행한 변경을 추적하기 위한 부분 참가자 장치상의 예시적인 변경 추적 기록을 도시한 도면.
도 14는 도 13의 변경 추적 기록에 설명된 바와 같이 부분 참가자가 데이터를 수정했다는 것을 판정한 후에 완전 참가자 장치에 의해 갱신되는 도 12의 예시적인 기록을 도시한 도면.
도 15는 한 구현의 부분 참가자 장치 또는 완전 참가자 장치상에 저장된 지식 기록의 예.
도 16은 단순 참가자 장치를 사용한 데이터의 갱신 및 동기화에 관련된 단계를 도시한 한 구현의 프로세스 흐름도.
도 17은 다수의 장치 및 핸들러를 갖는 한 구현의 예시적인 동기화 커뮤니티의 도식적인 도면.
도 18은 한 구현의 동기화 커뮤니티의 예를 도시한 도면.
도 19는 변경이 참가자에게 추가되고, 참가자의 지식이 변경을 포함하도록 갱신되는 것을 도시한 한 구현의 참가자 및 시간별(timewise) 예시를 도시한 도면.
도 20은 2개의 참가자 사이의 시간별 복제 시나리오의 한 구현을 도시한 도면.
도 21은 시간별 충돌 검출 시나리오의 한 구현을 도시한 도면.
도 22는 한 구현에서 참가자의 변경에 변경 ID를 할당하는 예를 도시한 도면.
도 23은 지식 벡터를 사용하는 시간별 복제 시나리오의 한 구현을 도시한 도면.
도 24A는 예외 목록을 사용하여 복제 다음에 참가자의 지식을 갱신하는 한 구현을 도시한 도면.
도 24B는 지식 벡터들의 쌍별 최대치를 사용하여 복제 다음에 참가자의 지식을 갱신하는 한 구현을 도시한 도면.
도 24C는 갱신된 지식에 예외가 존재하는 경우에 복제 다음에 참가자의 지식을 갱신하는 한 구현을 도시한 도면.
도 25는 대리 복제를 포함하는 복제를 구현하기 위한 한 구현의 허브 앤드 스포크 토폴로지(hub-and-spoke topology)를 도시한 도면.
도 26A는 한 구현에서의 충돌 해소 시나리오의 예를 도시한 도면.
도 26B는 한 구현에서의 다른 충돌 해소 시나리오를 도시한 도면.
본 발명의 원리의 이해를 돕기 위해, 이제 도면에 도시된 실시예가 참조될 것이고, 그 실시예를 설명하기 위해 특정 언어가 사용될 것이다. 그렇지만, 그것에 의해 범위를 제한하고자 하는 것은 아니라는 것을 이해할 것이다. 설명된 실시예의 임의의 변경 및 추가 수정, 및 여기에서 설명된 원리의 임의의 추가 애플리케이션은 본 분야에 숙련된 기술자에게 통상적으로 일어날 수 있는 것으로 고려된다.
시스템은 다양한 능력을 갖는 다양한 장치들 사이에서 데이터의 동기화를 개선하는 하나 이상의 기술로서 일반적인 문맥으로 설명될 수 있지만, 시스템은 이들 이외에 다른 용도로도 쓰인다. 한 구현에서, 여기에서 설명된 기술들 중의 하나 이상의 기술은 MICROSOFT? ACTIVESYNC?와 같은 동기화 프로그램 내의 특징으로서 구현될 수 있고, 또는 장치들 사이의 동기화 프로세스에 참가하는 임의의 다른 유형의 프로그램 또는 서비스로부터 구현될 수 있다. 다른 구현에서, 여기에서 설명된 기술들 중의 하나 이상의 기술은 장치 및/또는 서비스 전반에 걸친 데이터 동기화를 다루는 기타 애플리케이션이 갖는 특징으로서 구현된다. 여기에서 사용된 이동 장치라는 용어는 휴대폰, 개인 휴대 정보 단말기, 휴대용 미디어 플레이어, VoIP(voice-over-IP) 폰, 및 다양한 다른 유형의 가변 능력 레벨의 이동 장치를 포함하고자 하는 것이다.
도 1은 완전 참가자(10), 부분 참가자(20) 및 단순 참가자(30)의 그래픽 표현을 도시한 한 구현의 동기화 피어 참가자 모델의 도식적인 도면이다. 참가자라는 용어는 또한 여기에서 "복제본(replica)"이라 칭해진다. 참가자 및 복제본은 동기화 커뮤니티에 참가하는 장치 및/또는 서비스를 나타낸다. 완전 참가자(10)는 지식 데이터 저장소(12)가 있고, 지식을 이해하는 능력(14)이 있다. 또한, 완전 참가자(10)는 장치들 사이에서 동기화되는 연락처 정보 또는 기타 정보와 같은, 동기화된 실제 데이터를 저장하는 동기화 데이터 저장소(16)가 있다. 완전 참가자의 몇몇 비제한 예는 퍼스널 컴퓨터, 소정의 PDA, 소정의 폰, 소정의 다른 이동 장치, 및/또는 지식을 저장하고 이해할 수 있는 기타 장치를 포함한다.
각각의 완전 참가자는 효율적이고 개선된 복제를 용이하게 하는 "지식"을 지식 데이터 저장소 내에 유지한다. 한 구현에서, 지식은 주어진 참가자에게 알려지는 변경을 설명하는 메타데이터이다. 지식은 쌍들 또는 변경 ID들의 벡터로서 나타내질 수 있는데, 각각의 쌍 또는 변경 ID는 복제본 ID 및 최대 버전(복제본 ID, 최대 버전)을 나타낸다. 특정 지식 벡터 내의 쌍들의 수는 참가자가 동기화 커뮤니티에 추가되거나 동기 커뮤니티로부터 제거됨에 따라 바뀔 수 있다. 지식 벡터는 또한 다르게 표현될 수 있지만, 특정 참가자가 알고 있는 변경을 간결하게 나타내는 것이 유리하다. 특정 지식이 동기화 커뮤니티 내의 각 참가자에 대한 변경 ID를 명확히 포함하라는 요구사항은 없다. 참가자는 다른 참가자가 이미 알고 있는 것을 추적하지 않아도 되는데, 그것은 이 정보가 참가자의 지식에 의해 효과적으로 표현되기 때문이다.
완전 참가자(10)와 유사하게, 부분 참가자(20)는 또한 지식 데이터 저장소(22)를 포함한다. 그러나, 완전 참가자(10)와 달리, 부분 참가자(20)는 지식을 이해하는 능력이 없다(또는 제한된다)(24). 부분 참가자는 동기화된 데이터를 저 장하는 동기화 데이터 저장소(26)를 포함한다. 부분 참가자는 동기화 데이터 저장소(26)에 대해 행하는 변경에 관련된 정보를 저장하는 버전 데이터 저장소(25)를 포함한다. 부분 참가자의 비제한 예는 소정의 PDA, 폰, 소정의 기타 이동 장치, 및/또는 동기화 데이터 저장소(26)에 대해 행한 변경을 추적하는 단순 프로그램을 동작시킬 수 있는 다른 유형의 장치를 포함할 수 있다.
단순 참가자(30)는 동기화 데이터 저장소(36)가 있고, 지식 저장소가 없다. 단순 참가자의 예는 소정의 썸 드라이브, 소정의 메모리 카드, 및/또는 동기화 데이터 저장소(36)에 대해 행해진 변경을 추적하는 단순 프로그램을 동작시킬 수 없는 기타 장치를 포함할 수 있는데, 이에 제한되는 것은 아니다.
이제, 도 2를 참조하면, 피어 참가자 모델의 표 형태의 표현(50)이 도시된다. 단순 참가자(52), 부분 참가자(54) 및 완전 참가자(56)는 한가지 이상의 특성이 있다. 이들 특성 중의 일부는 도 1의 설명에서 설명되었다. 단순 참가자(52)는, 예를 들어 지식을 저장할 수 없다(58). 단순 참가자는 핸들러를 통해 단일 완전 참가자와 동기화할 수 있다(60). 부분 참가자(54)는 지식을 저장하지만 이해하지는 못한다(62). 부분 참가자(54)는 멀티-마스터 양방향 동기화에 참여할 수 있다(64). 대안적으로 또는 부수적으로, 부분 참가자(54)는 완전 참가자 상의 핸들러를 통해 동기화할 수 있다(66). 이러한 방식으로, 부분 참가자(54)는 하나 이상의 완전 참가자 장치를 통해 관리된 피어 투 피어 시나리오에 참가할 수 있다. 그러므로, 부분 참가자들은 완전 참가자의 사용을 통해 서로 동기화할 수 있다. 완전 참가자(56)는 지식을 이해하고 저장하며(68), 멀티-마스터 양방향 동기화 대 상(70)에 참가할 수 있고, 피어 투 피어 동기화를 실행할 수 있다(72).
도 3은 하나 이상의 참가자 장치와 접속하는 핸들러를 갖는 한 구현의 동기화 시스템(80)의 도식적 도면이다. 동기화 애플리케이션(82)은 참가자들 사이의 동기화 루프를 완성하고 다른 접속된 참가자들 사이에서 갱신된 변경을 전송할 책임이 있는 동기화 조정 엔진(84)을 포함한다. 다양한 핸들러(86, 88 및 90)는 동기화 커뮤니티 내의 다른 참가자들이 동기화 엔진(84)과 통신할 수 있게 하기 위해 사용된다. 동기화 엔진(84)은 각각 핸들러 인터페이스(91, 92 및 97)를 통해 핸들러(86, 88 및 90)와 통신한다. 그 다음, 핸들러(86, 88 및 90)는 적절한 경우에 데이터를 액세스하기 위해 지식 저장소(93 및 95), 로컬 동기화 데이터 저장소(94) 및 원격 동기화 데이터 저장소(96)와 통신한다. 한 구현에서, 원격 동기화 데이터 저장소(96)와 같은, 도 1에 도시된 하나 이상의 데이터 저장소는 하나 이상의 분리된 컴퓨터 또는 장치상에 위치한다.
도 4에 도시된 바와 같이, 시스템의 하나 이상의 부분을 구현하기 위해 사용하는 예시적인 컴퓨터 시스템은 퍼스널 컴퓨팅 장치(100)와 같은 컴퓨팅 장치를 포함한다. 가장 기본적인 구성에서, 컴퓨팅 장치(100)는 통상적으로 최소한 하나의 처리 장치(102) 및 메모리(104)를 포함한다. 컴퓨팅 장치의 정확한 구성 및 유형에 의존하여, 메모리(104)는 (RAM과 같은) 휘발성, (ROM, 플래시 메모리 등과 같은) 비휘발성, 또는 이 둘의 소정의 조합일 수 있다. 이 가장 기본적인 구성은 도 4에 점선(106)으로 도시된다.
부수적으로, 장치(100)는 또한 추가 특징/기능을 가질 수 있다. 예를 들어, 장치(100)는 또한 자기 또는 광 디스크 또는 테이프를 포함하는(이에 제한되는 것은 아님) 추가 저장장치(이동식 및/또는 비이동식)를 포함할 수 있다. 그러한 추가 저장장치는 도 4에서 이동식 저장장치(108) 및 비이동식 저장장치(110)로 도시된다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 메모리(104), 이동식 저장장치(108) 및 비이동식 저장장치(110)는 모두 컴퓨터 저장 매체의 예이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하기 위해 사용될 수 있고 장치(100)에 의해 액세스될 수 있는 임의의 기타 매체를 포함하는데, 이에 제한되는 것은 아니다. 임의의 그러한 컴퓨터 저장 매체는 장치(100)의 일부일 수 있다.
컴퓨팅 장치(100)는 통신 장치(100)가 완전 참가자, 부분 참가자 및/또는 단순 참가자와 같은 다른 장치(115)와 통신할 수 있게 하는 하나 이상의 통신 접속(114)을 포함한다. 컴퓨팅 장치(100)는 또한 다른 컴퓨터 및/또는 애플리케이션(113)과 통신할 수 있다. 장치(100)는 또한 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치 등과 같은 입력 장치(들)(112)를 가질 수 있다. 디스플레이, 스피커, 프린터 등과 같은 출력 장치(들)(111)가 또한 포함될 수 있다. 이들 장치는 본 분야에 잘 알려져 있어서, 여기에서 더 이상 설명될 필요가 없다.
한 구현에서, 컴퓨팅 장치(100)는 여기에서 설명된 기술들의 하나 이상을 구현하는 완전 참가자 장치로서 작용한다. 그러한 구현에서, 컴퓨팅 장치(100)는 지식 데이터 저장소(125) 및 동기화 데이터 저장소(126)뿐만 아니라, 동기화 조정 엔진(124)이 있는 동기화 애플리케이션(122)을 포함한다. 한 구현에서, 지식 데이터 저장소(125) 및/또는 동기화 데이터 저장소(126)는 메모리(104), 이동식 저장장치(108), 비이동식 저장장치(110) 및/또는 기타 컴퓨터 저장 매체와 같이, 여기에서 설명된 컴퓨터 저장 매체의 일부로서 포함된다. 한 구현에서, 동기화 애플리케이션(122)은 도 3에 도시된 동기화 애플리케이션(82)과 동일하다.
이제, 도 4와 관련하여 계속되는 도 5를 참조하면, 한 구현의 동기화 애플리케이션(200)이 도시된다. 한 구현에서, 동기화 애플리케이션(200)은 컴퓨팅 장치(100)에 존재하는 애플리케이션 프로그램 중의 하나이다. 대안적으로 또는 부수적으로, 동기화 애플리케이션(200)의 하나 이상의 부분은 기타 컴퓨터 및/또는 애플리케이션(113), 또는 컴퓨터 소프트웨어 분야에 숙련된 사람에게 떠오를 수 있는 기타 그러한 변형 상의 시스템 메모리(104)의 일부분일 수 있다.
동기화 애플리케이션(200)은 여기에서 설명된 기술의 일부 또는 전부를 실행할 책임이 있는 프로그램 로직(204)을 포함한다. 프로그램 로직(204)은 동기화 프로세스에 참가하기 위한 각 장치 및/또는 서비스에 대한 핸들러를 등록하는 로직(206); 접속된 장치 및/또는 서비스의 유형(단순, 부분 또는 완전 참가자)을 검출하는 로직(208); 부분 참가자로부터 지식을 수신하고, 예외의 경우에 수정을 하며, 지식을 다시 부분 참가자에게 전송하는 로직(210); 단순 참가자에 관한 변경을 검출하고, 자체의 로컬 데이터 저장소 내에 충돌을 저장하는 로직(212); 지식을 사용하여 변경된 데이터 집합을 동기화하기 위해 다른 완전 참가자(들)와 함께 작업하는 로직(214); 동기화 루프를 완성하고 다른 접속된 장치들 및/또는 서비스들 사이에서 갱신된 변경을 끌어오기 위해 조정을 실행하는 로직(216); 및 애플리케이션을 동작시키는 기타 로직(220)을 포함한다.
한 구현에서, 프로그램 로직(204)은 이를테면 프로그램 로직(204) 내의 절차에 대한 단일 호출을 사용하여, 다른 프로그램으로부터 프로그램에 따라 호출되도록 동작가능하다. 대안적으로 또는 부수적으로, 프로그램 로직(204)은 하나 이상의 컴퓨터상의 및/또는 도 4에 도시된 것과 다른 변형 내의 컴퓨터 실행가능 명령어로서 대안적으로 또는 부수적으로 구현될 수 있다는 것을 이해할 것이다.
도 6은 동기화 애플리케이션(200)의 하이 레벨 프로세스 흐름도이다. 한 형태에서, 도 6의 프로세스는 컴퓨팅 장치(100), 기타 컴퓨터/애플리케이션(113) 및/또는 기타 참가자 장치(115)의 동작 로직으로 최소한 부분적으로 구현된다. 절차는 시작점(240)에서 시작하고, 참가자 장치 또는 서비스는 동기화 엔진을 갖는 (컴퓨팅 장치(100) 또는 소정의 이동 장치와 같은) 완전 참가자에게 접속한다(단계(242)). 장치 또는 서비스는 완전 참가자 상의 동기화 엔진에 핸들러를 등록하거나, 그 동기화 엔진과 다르게 통신한다(단계(244)). 동기화 엔진은 장치 또는 서비스의 유형을 검출하고(단계(246)), 참가자의 유형: 단순 참가자(판정점(248)), 부분 참가자(판정점(250)) 또는 완전 참가자(판정점(252))에 기초하여 적절한 동기화 로직을 실행한다. 예를 들어, 장치 또는 서비스가 동기화 데이터 저장소를 갖 지만 지식이 없는 단순 참가자이면(판정점(248)), 동기화 엔진은 단순 참가자에 관한 변경을 검출하고, 완전 참가자 상의 자체의 로컬 데이터 저장소 내에 임의의 충돌을 저장한다(단계(254)).
장치 또는 서비스가 동기화 데이터 저장소를 갖고 지식을 저장하지만 이해하지 못하는 부분 참가자이면(판정점(250)), 장치 또는 서비스는 완전 참가자 상의 동기화 엔진에 자신의 지식 저장소를 제공한다(단계(258)). 완전 참가자는 예외의 경우와 같은 경우에 지식에 대한 수정을 하고(단계(260)), 완전 참가자는 변경된 지식을 다시 부분 참가자에게 전송한다(단계(262)). 부분 참가자 장치 또는 서비스 상에 전달된 지식은 예외가 발생한 경우라도 다수의 마스터와 안전하게 동기화할 수 있게 한다(단계(264)). 장치 또는 서비스가 동기화 데이터 저장소를 갖고, 또한 지식을 저장하고 이해하는 완전 참가자이면(판정점(252)), 양쪽 참가자는 지식을 사용하여 변경된 데이터 집합을 최적하게 동기화하는 방법을 알고 있다(단계(266)). 완전 참가자들 사이에서 데이터를 동기화하는 하나 이상의 구현은 도 18-26의 설명에서 상세하게 설명된다.
참가자의 유형을 판정한 후, 장치 또는 서비스는 그에 따라 변경 및 충돌을 처리하고, 그 다음 동기화 엔진은 동기화 루프를 완성하고 다른 접속된 참가자 장치 및/또는 서비스 사이에서 갱신된 변경을 끌어넣기 위해 조정을 따른다(단계(256)). 프로세스는 종료점(268)에서 끝난다.
도 7은 부분 참가자 장치를 사용한 데이터의 갱신 및 동기화와 관련된 단계를 도시한 프로세스 흐름도이다. 한 형태에서, 도 7의 프로세스는 컴퓨팅 장 치(100), 기타 컴퓨터/애플리케이션(113) 및/또는 기타 참가자 장치(115)의 동작 로직으로 최소한 부분적으로 구현된다. 절차는 시작점(280)에서 시작하고, 동기화 프로세스 동안에 검색된 데이터를 저장하는 데이터 저장소, 및 (예를 들어, 완전 참가자(들)/마스터(들)이 알고 있는 변경을 추적하기 위한 벡터, 문자열 및/또는 다른 형태로) 데이터에 대해 행한 변경에 관한 정보를 저장하는 버전 데이터 저장소를 부분 참가자 장치 또는 서비스에 제공한다(단계(282)). 부분 참가자의 몇몇 비제한 예는 소정의 웹 서비스, 소정의 썸 드라이브, 소정의 PDA 및/또는 소정의 폰과 같은 소정의 이동 장치, 및/또는 지식을 저장할 수 있지만 이해하지 못하는 기타 장치 또는 서비스를 포함한다.
부분 참가자는 지식을 이해하는 방법을 모르지만, 단순히 지식을 저장한다(단계(284)). 부분 참가자는 동기화 데이터 저장소 내의 데이터의 일부 또는 전부를 변경하라는 요청을 사용자로부터 수신한다(단계(286)). 부분 참가자는 사용자가 요청한 대로 데이터 저장소 내의 데이터를 변경한다(단계(288)). 부분 참가자는 데이터에 어떤 변경을 했는지 추적할 책임이 있으므로, 사용자의 요청에 기초하여 그것이 행한 변경에 관련된 정보를 저장한다(단계(290)). 한 구현에서, 부분 참가자가 완전 참가자와 동기화할 때, 동기화는 완전 참가자로부터 부분 참가자로 및 부분 참가자로부터 완전 참가자로 발생한다(단계(292)). 한 구현에서, 이들은 2개의 분리된 한 방향 동기화이다. 다른 구현에서, 단일의 한 방향 동기화와 같은 다른 순서 및/또는 동기화 시나리오가 또한 가능하다. 동기화 동안에, 부분 참가자에 의해 이루어진 임의의 변경은 완전 참가자에 의해 검색된다(단계(294)). 완 전 참가자는 임의의 충돌을 해소한 후에 부분 참가자 상의 데이터 저장소 지식을 갱신한다(단계(296)). 프로세스는 종료점(298)에서 끝난다.
도 8은 기록을 새로운 틱 카운트 또는 기타 식별자로 갱신함으로써 부분 참가자가 데이터에 대한 변경을 추적하는 것과 관련된 단계를 도시한 한 구현의 프로세스 흐름도이다. 한 형태에서, 도 8의 프로세스는 컴퓨팅 장치(100), 기타 컴퓨터/애플리케이션(113) 및/또는 기타 참가자 장치(115)의 동작 로직으로 최소한 부분적으로 구현된다. 절차는 시작점(300)에서 시작하고, 부분 참가자는 데이터에 어떤 변경을 했는지 추적할 책임이 있다(단계(302)). 부분 참가자는 변경이 발생했다는 것을 나타내기 위해 버전 데이터 저장소 기록을 갱신한다(단계(304)). 몇몇의 비제한 예로서, 버전 데이터 저장소는 새로운 틱 카운트나 버전으로 갱신될 수 있고, 또는 기록이 변경되었다는 것을 식별하는, 및/또는 변경을 행한 마지막 장치 또는 서비스를 식별하는 기타 식별자로 갱신될 수 있다. 완전 참가자는 특정 기록이 부분 참가자에 의해 변경되었다는 것을 알기 위해 변경된 틱 카운트 또는 기타 식별자를 판독한다(단계(306)). 프로세스는 종료점(308)에서 끝난다.
도 9는 기록 식별자 및 변경 날짜/시간을 따로 저장함으로써 부분 참가자가 데이터에 대해 행한 변경을 추적하는 한 구현에 관련된 단계를 도시한 프로세스 흐름도이다. 한 형태에서, 도 9의 프로세스는 컴퓨팅 장치(100), 기타 컴퓨터/애플리케이션(113) 및/또는 기타 참가자 장치(115)의 동작 로직으로 최소한 부분적으로 구현된다. 절차는 시작점(310)에서 시작하고, 부분 참가자는 데이터에 어떤 변경을 했는지 추적할 책임이 있다(단계(312)). 부분 참가자는 복제본 기록을 식별하 는 고유 식별자, 및 기록이 변경되었을 때의 날짜/시간을 나타내는 날짜/시간 스탬프를 추적한다(단계(314)). 완전 참가자는 특정 기록이 변경되었다는 것을 알기 위해 고유 식별자 및 날짜/시간 스탬프를 판독한다(단계(316)). 완전 참가자는 기록을 변경하는 마지막 장치 또는 서비스(이 경우에는 부분 참가자임)를 식별하는 틱 카운트 또는 기타 식별자를 갱신한다(단계(318)). 프로세스는 종료점(320)에서 끝난다.
도 10-11은 도 8에서 설명된 단계에 따라 부분 참가자 장치에 의한 수정 전과 수정 후의 부분 참가자 장치상의 예시적인 기록을 도시한 도면이다. 한 구현에서, 도 10의 기록(330)은 복제본 ID 필드(332), 기록을 변경한 마지막 참가자의 틱 카운트 필드(334), 및 완전 참가자(336)로부터 기록이 되었을 때의 로컬 틱 카운트 필드를 포함한다. 필드(332, 334 및 336) 내의 각 값(338, 340 및 342)은 각각, 문자열이나 벡터로 저장될 수 있고, 및/또는 제한된 저장 용량 및/또는 자원을 갖는 장치 또는 서비스 상에 저장하기 적합한 임의의 다른 유형의 표현으로 저장될 수 있다. 앞에서 설명된 바와 같이, 다양한 다른 변형은 또한 부분 참가자 상의 특정 기록이 변경되었다는 것을 나타내기 위해 사용될 수 있다.
이제, 도 11을 참조하면, 기록(343)은 부분 참가자에 의해 부분 참가자 상에서 교정된 후의 데이터를 나타낸다. 복제본 ID 필드(332)는 "X1"의 값이 기록에 대한 고유 식별자이기 때문에, "X1"의 값(350)이 남아있다. 기록을 변경한 마지막 컴퓨터의 틱 카운트 필드(334)는 "G66"의 값(도 10의 참조번호(340))에서 "G67"의 값(352)으로 수정되었다. "G"는 변경을 행한 참가자를 나타내고, "67"은 틱 카운 터 순서에서 이용가능한 다음으로 높은 수이다. 완전 참가자로부터 기록되었을 때의 로컬 틱 카운트는 "34"의 동일한 값(354)이 남아 있는다.
도 12는 도 9에 설명된 단계에 따라 수정 전의 부분 참가자 장치상의 예시적인 기록을 도시한 도면이다. 도 10 및 11의 예와 유사하게, 기록(360)은 복제본 ID 필드(362)의 값(368), 기록을 변경한 마지막 참가자의 틱 카운트 필드(364)의 값(370) 및 완전 참가자로부터 기록되었을 때의 로컬 틱 카운트 필드(366)의 값(372)을 포함한다. 이 구현에서, 부분 참가자는 기록 대신에 분리된 변경 추적 기록을 틱 카운트로 갱신한다. 기록(360)은 부분 참가자에 의한 하위 데이터의 수정 이전의 틱 카운트를 갖는 기록을 나타낸다. 도 13의 기록(375)은 도 9에서 설명된 단계에 따라 도 12의 기록에 행한 변경을 추적하기 위한 부분 참가자 장치상의 예시적인 변경 추적 기록을 도시한 것이다. 복제본 ID 필드(374) 및 기록이 변경되었을 때의 날짜/시간 필드(376)는 부분 참가자 장치상에 저장된다. 이 예에서, 값 "X1"(378)은 복제본 ID(374)용으로 저장되고, "01-26-06-12:32PM"(380)은 날짜/시간 필드(376)용으로 저장된다. 부분 참가자가 다음에 완전 참가자에 접속할 때, 완전 참가자는 기록(375)을 검색하고 해석하여, 부분 참가자가 동기화 데이터 저장소 내의 하위 데이터에 대해 변경을 했다는 것을 판정한다. 이제, 도 14를 참조하면, 완전 참가자는 이때 기록을 변경한 마지막 참가자의 기록(381)의 틱 카운트 필드(390)(이 경우에는 "G67"임)를 갱신해서, 부분 참가자 및 다음으로 높은 틱 카운트 수를 나타낸다. 로컬 틱 카운트 필드(366)는 적절한 경우에 갱신 값(392)으로 교정된다. 복제본 ID 필드(362)의 값(388)은 동일한 값이 남는다.
도 15는 한 구현을 위한 부분 참가자 장치 또는 완전 참가자 장치상에 저장된 지식 기록의 예이다. 도시된 예에서, 지식 기록(396)은 여기에서 설명된 문자열 벡터로서 표현되는데, 값(398, 400, 402 및 404)은 그 특정 장치에 대해 알게 된 마지막 변경에 대한 참가자 식별자 및 일련 번호를 나타낸다. 예를 들어, 값 "G100"(398)은 이 참가자가 기록 100을 통해 장치 G에 대한 모든 변경을 알았다는 것을 의미한다. 이들 지식 벡터는 도 18-26의 설명에서 더욱 상세하게 설명된다.
이제, 도 16을 참조하면, 단순 참가자 장치를 사용한 장치의 갱신 및 동기화에 관련된 단계를 도시한 프로세스 흐름도가 도시된다. 한 형태에서, 도 16의 프로세스는 컴퓨팅 장치(100), 기타 컴퓨터/애플리케이션(113) 및/또는 기타 참가자 장치(115)의 동작 로직으로 최소한 부분적으로 구현된다. 절차는 시작점(420)에서 시작하고, 동기화된 데이터를 저장하는 데이터 저장소가 있지만 지식이 없는 단순 참가자 장치 또는 서비스를 제공한다(단계(424)). 단순 참가자 장치의 몇몇 비제한 예는 소정의 썸 드라이브, 소정의 메모리 스틱/카드, 소정의 PDA, 소정의 휴대폰, 및/또는 지식을 저장 및 이해할 수 없는 기타 장치 또는 서비스를 포함한다. 단순 참가자는 장치 또는 서비스 제한 또는 사용자 설정으로 인해, 지식을 저장하거나 이해할 수 없다(단계(426)). 단순 참가자는 사용자로부터 동기화 데이터 저장소 내의 데이터의 일부 또는 전부를 변경하라는 요청을 수신한다(단계(428)).
단순 참가자는 사용자가 요청한 대로 동기화 데이터 저장소 내의 데이터를 변경한다(단계(430)). 사용자가 동기화 데이터 저장소를 변경할 수 있는 방법의 한가지 비제한 예는 썸 드라이브를 퍼스널 컴퓨터 내로 삽입한 다음에 썸 드라이브 의 내용을 변경하는 것과 같이, 퍼스널 컴퓨터와 같은 다른 장치로부터 파일 브라우저 내의 데이터를 수정하는 것을 포함한다. 단순 참가자는 아무것도 모르는 것으로 여겨지기 때문에, 데이터에 어떤 변경을 했는지 추적할 책임이 없다(단계(432)). 단순 참가자가 완전 참가자와 동기화할 때, 동기화는 완전 참가자로부터 단순 참가자로 및 단순 참가자로부터 완전 참가자로 발생한다(단계(434)). 동기화 동안에, 단순 참가자에 의해 동기화 데이터 저장소에 이루어진 임의의 변경은 완전 참가자에 의해 검색된다(단계(436)). 완전 참가자는 임의의 충돌을 해소한 후에 단순 참가자 상의 동기화 데이터 저장소를 갱신한다(단계(438)). 프로세스는 종료점(440)에서 끝난다.
도 17은 다수의 장치 및 핸들러를 갖는 한 구현의 예시적인 동기화 커뮤니티의 도식적 도면이다. 도 17은 퍼스널 컴퓨터 1 또는 "PC1"(506)이라고 하는 완전 참가자(500); 장치1(514)이라고 하는 단순 참가자; "서비스1"이라고 하는 부분 참가자(502); 및 퍼스널 컴퓨터 2 또는 "PC2"라고 하는 제2 완전 참가자(504)를 도시한 것이다. 예시를 위해, 장치1(514)은 썸 드라이브 또는 기타 메모리 카드라고 하고, 서비스1은 웹 서버상에 위치한 음악 서비스라고 하며, PC1 및 PC2는 컴퓨팅 장치(100)와 유사한 퍼스널 컴퓨터라고 하자. 완전 참가자(500)는 핸들러(508, 510 및 512)를 갖고, 완전 참가자(504)는 핸들러(516, 518 및 520)를 갖는다. 이들 핸들러는 동기화 커뮤니티의 일부인 다양한 참가자와 접속할 책임이 있다. 장치1(514)이 PC1(506)에 접속할 때, 도 6에서 설명된 동기화 프로세스가 실행된다. 참가자의 유형이 결정되는데, 이 경우에는 단순 참가자이고, 그 다음에 동기화는 장치1(514)과 완전 참가자(500)의 PC1(506) 사이에서 발생한다. 일단 동기화가 이들 2개의 참가자(500과 514) 사이에서 완료되면, 동기화 조정은 다른 참가자들이 접속된 경우 및/또는 다음번에 다른 참가자들이 PC1(506) 또는 장치1(514)에 접속하는 경우에 다른 참가자들(502 및 504)이 갱신되게 할 것이다.
이제, 도 18-26을 참조하면, 완전 참가자들(예를 들어, 장치(100)와 같은 2개의 퍼스널 컴퓨터) 사이에서 데이터를 동기화하는 하나 이상의 구현이 설명된다. 도 18-26에서 설명된 예들의 하나 이상은 또한 앞의 도면에서 설명된 부분 참가자 시나리오 또는 다른 시나리오에 최소한 부분적으로 적용할 수 있을 것이다. 대안적으로 또는 부수적으로, 도 18-26에서 설명된 기술들의 하나 이상은 도 4의 컴퓨팅 장치(100)와 같은 장치상에서 구현될 수 있다. 다음 설명에서 사용된 "복제본"이라는 용어는 또한 "참가자"를 의미한다.
동기화 커뮤니티 내의 복제본/참가자는 그들이 복제하는 복제본으로 그들 자체의 지식을 제공함으로써 복제한다. 복제하는 복제본들 사이에서 보내져야 하는 지식을 나타내는 데이터의 양을 줄이기 위해, 지식은 앞에서 설명된 바와 같이 지식 벡터로서 표현될 수 있다. 그러므로, 복제본들 사이에서 보내지는 지식은 모든 변경 ID를 포함할 필요가 없고, 다수의 변경 ID를 나타내는 벡터의 형태로 될 수 있다. 예를 들어, 복제본이 제1 변경에서부터 제10 변경까지 복제본 A에 의해 이루어진 모든 변경, 및 제1 변경에서부터 제5 변경까지 복제본 B에 의해 이루어진 모든 변경을 알고 있으면, 복제본은 변경 ID A1 내지 A10에 대응하는 모든 변경 및 변경 ID B1 내지 B5에 대응하는 모든 변경을 복제본이 알고 있다는 것을 나타내는 지식 벡터 A10B5를 보낼 수 있다. 지식은 지식 벡터로서 표현될 수 있지만, 본 발명의 다른 구현은 또한 지식의 다른 표현을 고려한다. 예를 들어, 본 발명의 몇몇 구현은 (1) 지식 표현에 변경을 추가할 수 있고, (2) 변경이 지식 표현에 포함되었는지 확인할 수 있으며, (3) 2개의 지식 표현을 함께 합할 수 있는 임의의 지식 표현을 사용하여 지식을 표현한다.
도 18은 도시된 토폴로지를 갖는 동기화 커뮤니티(1100)의 한 예를 도시한 것이다. 동기화 커뮤니티(1100)는 다수의 복제본을 포함하고, 본 발명의 구현물을 구현하는 환경의 한 예이다. 동기화 커뮤니티(1100) 내의 복제본은 컴퓨터, 노트북 컴퓨터, PDA, 휴대폰, 기타 무선 장치, 서버 컴퓨터, 온라인 서비스 등 또는 임의의 그 조합을 포함할 수 있지만 이에 제한되지 않는 다양한 데이터 저장소 또는 장치를 나타낸다.
도 18에서, 복제본 A(1102)는 통신 링크(1106)를 통해 복제본 B(1104)에 전자적으로 결합될 수 있다. 복제본 A(1102)는 통신 링크(1108)를 통해 복제본 C(1110)에 접속될 수 있다. 복제본 C(1110)는 통신 링크(1112)를 통해 복제본 B(1104)에 접속될 수 있다. 복제본 C(1110)는 통신 링크(1116)를 통해 복제본 D(1114)에 더 접속될 수 있다. 이 동기화 커뮤니티(1100)에서, 모든 복제본이 통신 링크를 통해 직접 접속되는 것은 아니지만, 임의의 복제본의 변경은 동기화 커뮤니티(100) 내의 임의의 다른 복제본에 복제될 수 있다.
예를 들어, 복제본 D(1114)로 복제될 복제본 A(1102)의 경우에, 복제본 A(1102) 및 C(1110)는 통신 링크(1108)를 통해 복제될 수 있다. 그러므로, 복제본 C(1110)는 복제본 A(1102) 상에서 이루어진 변경을 포함한다. 그 다음, 복제본 C 및 D는 통신 링크(1116)를 통해 복제하고, 이와 같이 복제본 D(1114)는 복제본 A(1102)로부터의 변경을 포함한다. 이러한 방식으로, 복제본 A(1102)는 어떤 종류의 직접 링크 없이 복제본 D(1114)로 복제할 수 있다. 실제로, 복제본 A(1102) 및 D(1114)는 동기화 커뮤니티(1100) 내에서 서로의 존재를 알아차릴 수도 없다. 도시된 통신 링크는 유선 및/또는 무선 링크일 수 있다.
이제, 도 19를 참조하면, 본 발명의 한 구현은 변경이 복제본에서 관리되는 방법을 도시한다. 도 19는 복제본 A(1200)의 시간별 진행을 도시한 것이다. 복제본 A(1200)는 이 경우에 KA 표시가 붙은 지식(1202) 및 이 경우에 ΔA 표시가 붙은 변경(1204)을 포함한다. 변경(1204) 내의 각 변경은 항목의 현재 데이터 내용이다. 변경은 본질적으로 변경된 항목이 하나도 없고, 항목의 삭제 등이 없다 하더라도, 복제본에 추가된 새로운 항목일 수 있다. 변경(1204)의 각각은 본 발명의 한 구현에서 변경 ID인 버전과 관련된다. 특히, 본 발명의 한가지 유리한 실시양상은 이전의 변경에 대한 정보를 포함하는 변경 로그(log)를 유지할 필요가 없다는 것이다. 오히려, 각 복제본은 지식, 및 변경들(즉 현재 항목들)의 데이터베이스를 포함하고, 여기에서 각 변경은 대응하는 버전을 갖는다. 시간(1)에서, 복제본 A(1200)는 안정된 상태에 있다. 시간(2)에서, 사용자는 X로 표시된 변경을 복제본 A(1200) 내로 입력한다. 도 19는 변경(1204)의 멤버로서 변경 X가 추가되는 것을 도시한 것이다. 지식(1202)은 변경 X와 관련되고 변경(1204)으로의 변경 X의 추가 를 식별하는 변경 ID, 즉 ChangeID(X)를 포함하도록 갱신된다. 이 구현은 복제본에 대한 변경이 특정 변경 ID와 관련되는 한가지 방식을 예시한 것이다. 지식(1202)은 지식 벡터일 수 있고, 복제본 A(1200)가 알고 있는 변경을 나타낸다. 본 발명의 한 구현에서, 버전 또는 변경 ID는 데이터베이스 내의 항목 또는 개체에 대해 유지되고, 버전은 복제되어야 하는 것을 식별하기 위해 사용될 수 있다. 대안적으로, 변경의 로그가 또한 유지될 수 있다.
도 20은 복제 동안 변경을 열거하기 위한 지식의 사용을 도시한 것이다. 도 20은 2개의 복제본, 즉 복제본 A(1302) 및 복제본 B(1304)를 도시하고 있다. 복제본 A(1302)는 이 예에서 ΔA로 표시된 변경 집합(1306)을 포함한다. 복제본 A(1302)는 이 예에서 KA로 표시된 지식(1308)을 더 포함한다. 지식(1308)은 위에서 설명된 것들과 같은 변경 ID의 목록을 포함한다. 이와 유사하게, 복제본 B(1304)는 변경 ID인 버전과 각각 관련된 변경 집합(1310)을 포함한다. 복제를 시작하기 위해, 시간(1)에서, 복제본 A(1302)는 지식(1308)을 포함하는 복제본 B(1304)에 동기화 요청을 보낸다. 복제본 B(1304)는 지식(1308)을 변경 집합(13010) 내의 각 변경과 관련된 버전과 비교함으로써, 복제본 B의 변경(1310) 중에서 복제본 A(1302)가 자신의 변경(1306) 내에 이미 갖고 있는 변경, 및 복제본 A가 알고 있는 변경에 관해 판정을 할 수 있다. 대안적으로, 복제본 B(1304)는 지식(1308)을 각 항목의 버전과 비교한다. 그러므로, 복제본 B(1304)는 변경(1314)에 의해 도시된 바와 같이 복제본 A(1302)의 지식(1308) 내에 포함되지 않는 버전과 관련되는 복제 본 B의 변경(1310)의 그 부분만을 시간(2)에서 복제본 A(1302)에 보낸다. 예를 들어, 복제본 A의 지식 벡터가 A3B12이고, 복제본 B가 변경 ID B13 및 B14인 버전과 관련된 현재의 변경을 가지면, 복제본 A로 보내진 변경은 변경 ID B13 및 B14와 관련된 것들을 포함할 수 있을 것이다. 한 구현에서, B13 및 B14가 동일 항목에 대해 이루어진 경우에 B14만 보내진다.
또한, 복제본 B(1304)는 또한 복제본 B의 지식(1312)을 복제본 A(1302)에 보낸다. 복제본 B(1304)가 복제본 A(1302)에서 아직 이용가능하지 않지만 복제본 B(1304)에서 이용가능한 모든 변경(1310)을 복제본 A(1302)에 보냈기 때문에, 그들 변경(1310)이 복제본 B(1304) 내에 원래 있던 변경(1310) 이외에 복제본 B(1304)에 의해 보내진 변경으로 대체되지 않은 한, 복제본 A(1302)는 이제 복제본 A(1302) 내에 원래 있던 모든 변경(1306)을 갖는다. 복제본 A(1302)는 복제본 B(1304)가 알고 있던 모든 변경에 대한 정보를 더 갖는다. 그러므로, 복제본 A(1302)는 변경(1310)의 추가를 반영하기 위해 자신의 지식(1308)을 갱신할 수 있다. 이것은 단순히 복제본 A의 지식(1308)을 복제본 B의 지식(1312)에 추가하고 도 20의 시간(3)에서 도시된 것과 같은 복제본 A의 지식(1308)으로서 그 값을 정의함으로써 행해진다.
이와 같이, 효율적인 복제가 실행되는데, 여기에서는 필요한 변경만이 복제되고, 복제하는 개별 복제본은 특정 복제본 내에 존재하는 변경 및 그 복제본이 알고 있는 이전의 변경에 관한 정보만을 유지할 필요가 있다. 이 예는 복제본 B 상의 모든 변경을 복제본 A로 완전히 복제하는 것을 도시하지만, 변경의 일부만이 복 제되는 경우가 존재한다. 이와 같이, 복제되는 변경에 대응하는 변경 ID만이 갱신을 수신하는 복제본의 지식에 추가된다.
변경을 열거하는 것 이외에, 복제본의 지식은 또한 충돌 검출에 사용될 수 있다. 이제, 도 21을 참조하면, 본 발명의 한 구현은 충돌 검출이 달성될 수 있는 방법을 예시한다. 도 21은 통신 및 복제를 위해 전자 링크(무선 및/또는 유선)에 의해 접속된 2개의 복제본을 도시한 것이다. 복제본 A(1402)는 지식(1408) 및 변경 집합(1406)을 포함한다. 도 20의 예에서와 같이, 지식(1408)은 변경(1406)과 관련되고 이전의 변경과 관련된 변경 ID의 컬렉션을 포함한다. 복제본 A(1402)는 이 예를 위해, 복제본 A(1402)에서 이루어진 항목에 대한 변경을 더 포함한다. 변경은 X 표시가 붙고, X는 변경(1406)의 멤버이다. 이와 유사하게, 복제본 B(1404)는 지식(1412), 각각이 현재 버전(변경 ID)을 갖는 항목 컬렉션(1410)을 포함한다. 예시적으로, 시간(1)에서, 복제본 A(1402)는 변경 X를 복제본 B(1404)에 보낸다.
변경 X와 관련되어 보내진 것은 2개의 다른 값, 즉 ChangeID(X)로 표시된, 변경 X와 관련된 변경 ID, 및 KA(X)로 표시된, 변경이 이루어진 지식 값이다. 변경이 이루어진 지식 값은 복제본에 대해 변경 X가 이루어졌을 때에 복제본 A(1402)에 존재한 지식이다. 대안적으로, 본 발명의 몇몇 구현에서, 변경이 이루어진 지식은 변경이 보내질 때 복제본에 존재한 지식일 수 있다. 복제본 A의 현재 지식(1408)은 또한 복제본 B(1404)에 보내질 수 있다. 시간(2)에서 나타낸 바와 같이, 복제본 B(1404)는 변경 X에 의해 변경된 항목을 변경 Y에 의해 변경된 항목과 비교하 여, A의 변경 X가 B의 상태와 충돌할 수 있는지 판정한다.
변경이 동일 항목의 상이한 버전을 나타내면, 추가 분석이 요구된다. 이때, 복제본 B(1404)는 변경 Y가 복제본 B(1404)에서 이루어졌을 때 변경 X가 복제본 B(1404)에 알려져 있는지 살펴보기 위해 확인한다. 변경 Y는 변경 ID인 ChangeID(Y) 및 이와 관련된 변경이 이루어진 지식 값 KB(Y)를 갖는다. ChangeID(X)가 변경 Y의 변경이 이루어진 지식 KB(Y)의 멤버이면, 충돌이 없다. 즉, 변경 Y는 복제본 A(1402)에서 이루어진 변경 X의 지식으로 복제본 B(1404)에서 이루어졌다. 이와 같이, 변경 Y는 이제 복제본 A 및 B에 대한 가장 현재의 유효한 값을 나타낸다. 도 21에 의해 도시된 예에서 도시되지는 않았지만, 이후의 시간에, 변경 Y는 아마 복제본 A(1402)로 보내질 것이고, 변경 X 및 Y와 관련된 항목은 도 20에서 설명된 방식으로 복제본 A(1402) 상에서 변경 Y로 갱신될 것이다.
변경 X 및 Y가 동일 항목에 대한 것이고, ChangeID(X)가 KB(Y) 내에서 보이지 않으면, 시간(4)에 나타낸 바와 같이, 변경 X가 이루어졌을 때 복제본 A(1402)에 의해 변경 Y가 알려졌는지 살펴보기 위해 확인이 행해진다. 이것은 전형적으로, ChangeID(Y)로 표시된, 변경 Y에 대한 변경 열거목록이, 변경 X가 이루어졌을 때의 복제본 A의 지식(1408)인 KA(X) 내에 포함되는지 살펴보기 위해 확인함으로써 행해진다. ChangeID(Y)가 KA(X)의 멤버이면, 변경 X는 변경 Y의 변경이 이루어진 지식이고, 충돌이 없다. 변경 X는 특정 항목에 대한 가장 현재의 유효한 변경이 다. 이와 같이, 복제본 B(1404)는 아마, 도 20에서 설명된 방식으로 변경 X로 갱신될 것이다.
변경 X 및 Y가 동일 항목에 대한 것이고, ChangeID(Y)가 KA(X) 내에서 보이지 않고, ChangeID(X)가 KB(Y) 내에서 보이지 않으면, 실제 충돌이 존재한다. 즉, 변경 X와 Y가 서로 관계없이 이루어졌다. 이 경우에, 충돌이 보고될 것이고, 다양한 충돌 해소 규칙은 변경 X 또는 Y가 가장 현재의 유효한 변경인지 판정하기 위해 적용될 수 있다. 그러한 규칙은 어느 변경이 가장 최근에 이루어졌는지 판정하기 위해 타임 스탬프를 확인하는 것, (서버상에 저장된 것들과 같은) 소정 유형의 복제본을 위해 항상 충돌을 해소하는 것, 및/또는 임의의 다른 적합한 충돌 해소를 포함할 수 있다. 대안적으로, 충돌 해소의 한 형태에서, 충돌하는 변경을 갖는 항목은 충돌하는 변경이 새로운 변경을 형성하기 위해 합해지도록 갱신될 수 있다.
이제, 도 22를 참조하면, 변경 ID 및 지식 추적의 한 예시적인 구현이 도시된다. 도 22는 복제본(1502)을 도시한 것이다. 복제본(1502)은 변경 컬렉션(1506) 및 지식(1508)을 포함한다. 변경 컬렉션(1506)은 이 예에서 X, Y 및 Z로표시된 몇 개의 개별 변경(1510)을 포함한다. 도 22에 도시된 예에서, 복제본 지식의 현 상태는 이 경우에 A4인 지식 벡터(1512)로 표시된다. 지식 벡터(1512)는 복제본 A의 지식(1508)의 전부를 나타낸다.
또한 도 22에 나타내진 것은 다수의 변경 ID(1514)이다. 도 22의 예에서, 복제본 A(1502)는 변경(1510)에 대응하는 3개의 변경된 항목(1516)인 IX, IY 및 IZ를 포함한다. 변경 ID를 사용하여, 우리는 변경 ID A1인 항목 IX가 처음으로 복제본 A(1502)에서 만들어졌다는 것을 식별할 수 있다. 변경 ID A2인 변경 IY는 항목 IX의 다음번에 복제본 A(1502)에서 만들어졌다. 그리고, 변경 ID A4인 항목 IZ는 항목 IY가 만들어지고 난 다음번에 복제본 A(1502)에서 만들어졌다. A3는 도 22에 직접 도시되지는 않았지만, 한 예에서, A4로 표시된 항목 IZ에 대한 변경으로 대체된 변경과 같은 이전의 변경에 대응할 수 있다.
변경 ID A4와, 또한 A4로 표시된 복제본 A의 지식 벡터(1512) 사이에는 차이가 있다. 이 예에서, 지식 벡터 A4는 복제본 A의 지식(1508)이 A4, A3, A2 및 A1로 표시된 변경 ID에 대응하는 변경을 포함한다는 것을 의미한다. 다르게 말하면, 지식 벡터는 지식 벡터 내에 표시된 변경 ID(1518) 이전에 이루어진 동일한 복제본 ID를 갖는 모든 변경뿐만 아니라, 지식 벡터와 동일한 변경 ID(1518)에 의해 표시된 변경을 포함한다. 다른 한편으로, 본 예에서, A4로 표시된 변경 ID(1518)는 단지 항목 IZ에 대해 이루어진 변경 Z를 나타낸다.
이제, 도 23을 참조하면, 다수의 복제본을 포함하는 토폴로지 내에서 복제하는 2개의 복제본의 예가 도시된다. 복제본 A(1602)는 변경 집합(1604), 지식(1606), 및 지식(1606)의 속기 표현인 지식 벡터(1608)를 포함한다. 예시적으로, 복제본 A(1602)의 지식 벡터(1608)인 A5B3C1D10은 복제본 A의 지식(1606)이 복제본 A(1602)에서의 제5 변경까지 이루어진 변경, 복제본 B(1610)에서의 제3 변경 까지의 지식, 복제본 C에서의 제1 변경까지의 지식 및 복제본 D에서의 제10 변경까지의 지식을 포함한다는 것을 나타낸다. 도 23의 예에서, 복제본 B(1610)는 변경 집합(1612), 지식(1614), 및 복제본 B의 지식(1614)의 속기 표현인 지식 벡터(1616)를 포함한다. 복제본 B의 지식 벡터(1616)인 A3B3C5D8은 복제본 B가 복제본 A(1602)에 의해 이루어진 제3 변경까지의 지식, 복제본 B(1610)에 의해 이루어진 제3 변경까지의 지식, 복제본 C에 의해 이루어진 제5 변경까지의 지식 및 복제본 D에 의해 이루어진 제8 변경까지의 지식을 포함하는 지식을 갖는다는 것을 나타낸다. 위에서 설명된 지식 벡터는 제1 변경에서부터 소정의 후속 변경까지 복제본에 의해 이루어진 변경 열거목록의 연속적인 표현을 포함한다. 여기에서 나중에 더욱 상세하게 설명되는 바와 같이, 지식 벡터는 또한 복제본에 의해 이루어진 제1 변경 열거목록과 다른 소정의 변경 목록인 시작점을 포함할 수 있다.
복제본 B(1610)와의 복제본 A(1602)의 복제의 시간별 도면이 도 23에 도시된다. 시간(1)에서, 복제본 A(1602)는 복제본 A의 지식 벡터(1608)로 표현될 수 있는 복제본 A의 지식(1606)과 함께 동기화 요청(1618)을 복제본 B(1610)에 보낸다. 복제본 B(1610)는 시간(2)에서 복제본 A의 지식(1606)을 복제본 B 내의 변경과 관련된 변경 ID와 비교함으로써 복제본 A의 지식(1606)을 검사한다. 복제본 B(1610)는 복제본 A가 변경 ID C2, C3, C4 및 C5로 표시된 복제본 C에 의해 이루어진 변경을 모르고 있다는 것을 발견한다. 그러므로, 복제본 B는 그러한 변경 ID 표시가 붙은 변경이 복제본 B(1610) 내의 항목에 적용가능한 현재의 변경인 한, 이들 변경 ID에 대응하는 복제본 B의 변경(1612)을 보낸다. 변경 ID가 이전의 구식 변경에 대응하면, 그 ID에 대응하는 변경은 보내지지 않는다. 예를 들어, 버전 C3을 갖는 항목이 갱신되어 새로운 버전을 할당받았으면, C3과 관련된 변경은 복제본 B(1610) 내에 더 이상 존재하지 않고, 복제본 A에 보내지지 않는다. 시간(3)에서 나타낸 바와 같이 후속적으로 또는 동시에, 복제본 B(1610)는 지식 벡터(1616)로서 표현될 수 있는 복제본 B의 지식(1614)을 복제본 A(1602)에 보낸다.
시간(4)에서, 복제본 A(1602)는 복제본 B에 의해 보내진 지식(1614)을 복제본 A(1602) 내의 변경에 대응하는 변경 ID와 비교함으로써 그 지식(1614)을 검사한다. 복제본 A(1602)는 복제본 B가 변경 ID A4, A5, D9 및 D10에 의해 표시된 변경, 또는 그들 변경에 대한 지식을 갖지 않는다는 것을 발견한다. 그러므로, 복제본 A(1602)는 (변경 ID가 변경이 보내지지 않게 하는 구식 변경을 나타낼 때를 제외하고) 그들 변경 ID에 대응하는 복제본 A의 변경(1604)에 존재하는 임의의 현재의 변경을 보낸다. 복제본 A(1602)는 복제본 A(1602) 및 복제본 B(1610)가 최근에 복제된 변경을 포함하기 위해 각각 그들의 지식 벡터(1608 및 1616)를 이제 갱신할 수 있도록 모든 변경이 보내졌다는 것을 나타내는 메시지를 복제본 B(1610)에 후속적으로 보낼 수 있다. 도 23의 시간(5)에서 도시된 바와 같이, 복제본 A의 지식 벡터 A5B3C5D10은 제5 변경 열거목록까지 복제본 A에 의해 이루어진 모든 변경, 제3 변경 열거목록까지 복제본 B에 의해 이루어진 모든 변경, 제5 변경 열거목록까지 복제본 C에 의해 이루어진 모든 변경, 및 제10 변경 열거목록까지 복제본 D에 의해 이루어진 모든 변경을 포함하는 복제본 B의 지식 벡터와 동일하다.
이제, 도 24A 및 24B를 참조하면, 도 23에 나타낸 것과 같은 완전한 복제 다 음에 지식 벡터를 갱신하는 2가지 방법이 도시된다. 구체적으로, 도 24A는 복제본 상에 저장된 예외 목록(1702)을 사용하여 지식 벡터를 갱신하는 방법을 도시한 것이다. 예외 목록(1702)을 생성하기 위해, 변경이 복제본들 사이에서 보내질 때, 변경은 변경과 관련된 변경 ID로 보내진다. 변경이 복제본에 추가될 때, 변경 ID는 예외 목록(1702)에 예외로서 추가된다. 이제, 도 24A에서 복제본 A에 대한 지식을 검사하면; 지식은 지식 벡터(1608), 및 예외 C2, C3, C4 및 C5를 포함하는 예외 목록(1702)을 포함한다. 지식 벡터(1608)와 함께하는 예외 목록(1702)의 검사는 예외 목록(1702)으로부터의 변경 ID를 포함한다는 것을 밝혀내고, 복제본 A의 지식은 복제본 C에 의해 이루어진 제5 변경까지의 모든 변경을 포함한다. 그러므로, 예외는 복제본 A(1602)의 지식, 및 갱신된 지식 벡터(1704)에서 나타낸 바와 같이 요소 C5를 포함하도록 갱신된 지식 벡터에서 제거될 수 있다. 이와 유사한 분석은 복제본 B(1610)의 지식(1614)에서 실행될 수 있다. 예외 목록(1703) 내의 예외 A4, A5, D9 및 D10과 결합된 원래의 지식 벡터(1616)는 지식 벡터(1616)가 갱신된 지식 벡터(1706)로 갱신될 수 있게 한다.
특히, 부분 복제만이 실행되었으면, 이를테면 예를 들어 변경 ID(A4 및 D9)에 대응하는 변경이 도 23에 의해 나타낸 것과 같은 복제에서 보내지지 않았으면, 복제본 B(1610)의 지식(1614)은 변경 ID A4 및 D9에 의해 나타낸 변경을 복제본 B(1610)에 전송하는 다른 복제본으로 후속 복제를 할 때까지 예외 A5 및 D10을 유지할 필요가 있을 것이다.
도 24B는 도 23에 도시된 복제를 반영하도록 지식 벡터(1608 및 1616)를 갱 신하는 다른 방법을 도시한 것이다. 이 예에서, 지식 벡터는 갱신된 지식 벡터(1708)를 형성하기 위해 원래의 지식 벡터(1608 및 1616) 내의 각 요소에 대한 요소별 최대치를 사용하여 갱신된다. 지식 벡터(1608 및 1616)의 각각의 제1 요소는 복제본 A에서 이루어진 변경을 표시하는 변경 ID 집합에 대응한다. A5가 2개의 지식 벡터(1608 및 1616)의 요소별 최대 요소이기 때문에, 갱신된 지식 벡터(1708)는 요소 A5를 포함한다. 이와 마찬가지로, 벡터 요소 B3, C5 및 D10은 각 요소가 대응하는 특정 복제본에서의 변경에 대응하는 요소별 최대 요소를 각각 나타낸다. 갱신된 지식 벡터(1704, 1706 및 1708)의 각각의 검사는 어느 방법에 의해서든, 동일한 갱신된 지식 벡터가 얻어진다는 것을 밝혀낸다. 지식 벡터 갱신의 요소별 최대 방법은 통상적으로 완전한 복제가 실행되었을 때 사용되는 반면, 지식 벡터를 갱신하는 예외 목록 방법은 완전한 복제가 발생했다는 것이 확실하지 않을 때(사용자가 복제를 삭제할 수 있고, 장치가 충돌할 수 있는 등등의 때에) 유용할 수 있다. 즉, 예외 목록 방법은 복제본의 전체 지식이 단순한 벡터 형태로 나타내질 수 없을 때 예외가 특정 복제본의 지식의 일부를 계속 포함할 수 있도록 하기 위해 사용될 필요가 있을 수 있다.
이제, 도 24C를 참조하면, 지식을 갱신하는 예는 불완전한 복제로부터의 지식을 갖는 복제본에 대해 도시된다. 도 24C는 원래의 지식 벡터(1710), 원래의 예외 목록(1712), 갱신된 지식 벡터(1714) 및 갱신된 예외 목록(1716)을 포함한다. 도시된 복제본과 관련하여, 부분 복제 후에, 복제본은 벡터 요소 A5로 나타낸, A1 내지 A5 표시가 붙은 모든 변경 ID, 및 A7, A8, A9 및 A10을 포함하는 예외 목록에 의해 나타낸 A7 내지 A10 표시가 붙은 모든 변경 ID를 갖는다. 도 24C에 도시된 바와 같이, 지식의 갱신된 버전에서, 갱신된 예외 목록(1716)은 도 24C에 도시된 표현(A7:A10)과 같은 표현에 의해 A7에서 A10까지의 모든 요소의 포함을 나타내도록 줄어들 수 있다. 이 표현은 단순히, 벡터의 시작점이 복제본 A에 대한 제1 변경 열거목록과 다른 소정의 점인 것을 제외하면 여기에서 앞에서 설명된 것들과 같은 벡터이다. 그러므로, A에 관련된 복제본 지식의 표현은 벡터 요소 A5 및 예외 벡터(A7:A10)에 의해 나타내진다.
복제본 B에 관한 복제본의 지식의 경우에, 지식 벡터(1710)는 복제본 B에 대한 벡터 요소 내에 포함된 변경 ID 다음의 연속적인 변경 ID를 포함하도록 갱신될 수 있다. 벡터 요소 B1은 변경 ID B1만을 포함한다. 변경 ID B2, B3 및 B4가 예외 목록(1712)에 존재하고, 이들이 지식 벡터(1710) 내에 포함된 변경 ID B1과 연속적이기 때문에, 복제본 B에 대한 벡터 요소는 요소 B1 내지 B4의 포함을 나타내는 갱신된 지식 벡터(1714) 내에서 B4로 갱신될 수 있다. 변경 ID B5가 예외 목록에서 없기 때문에, 예외 B6은 갱신된 지식 내의 예외 목록(1716)에 남아있어야 한다.
이와 유사한 분석은 복제본 C에 의해 이루어진 변경에 관한 도 24C의 지식의 복제본에 관해 실행될 수 있다. 원래의 지식 벡터(1710)는 C5를 포함한다. 원래의 예외 목록은 C6, C7 및 C8을 포함한다. 원래의 지식 벡터 요소 C5가 변경 ID C1 내지 C5를 포함하기 때문에, C5는 원래의 예외 목록(1712) 내의 변경 ID와 연속적이고, 복제본 C에 대한 갱신된 지식 벡터 요소는 C8로 갱신될 수 있다.
지식 벡터의 크기와 관련하여 발생할 수 있는 한가지 난제는 특히 동기화 커뮤니티 내의 복제본의 수가 많을 때 보편적으로 발생한다. 지식 벡터가 동기화 커뮤니티 내의 각각의 모든 복제본에 대한 변경 ID 또는 기타 벡터 요소를 포함하는 토폴로지에서, 지식 벡터는 동기화 커뮤니티에 추가되는 각 복제본에 따라 증가한다. 한가지 최적화는 몇몇 동기화 커뮤니티에서, 모든 복제본이 지식 벡터 내에 표현될 필요는 없다는 것을 인식하는 것이다. 그러한 경우의 한가지 예시는 허브 앤드 스포크(hub and spoke) 서버 토폴로지를 나타내는 도 25에 도시된 동기화 커뮤니티이다. 도 25는 복제본 A(1804), 복제본 B(1806), 복제본 C(1808) 및 복제본 D(1810)를 포함하는 다수의 클라이언트에 접속된 서버(1802)를 도시한 것이다. 이 예에서, 클라이언트들 사이의 모든 복제 경로는 서버(1802)를 통하므로, 서버(1802)는 복제본 ID로서 서버(1802)를 포함하는 변경 ID를 할당할 수 있다. 개별 클라이언트(1804 내지 1810) 내에서 이루어진 모든 변경은 복제가 실행될 때까지 변경 ID의 할당 없이 변경이 이루어진 각 클라이언트 내에 남아있는다. 그러므로, 이 예에서, 지식 벡터는 서버(1802)의 복제본 ID 및 변경 ID를 포함하는 단일 요소를 포함한다. 예시적으로, 변경이 복제본 A(1804)에서 이루어지고, 처음으로 서버(1802)로 복제되는 경우에, 서버(1802)는 S1의 변경 열거목록을 변경에 할당한다. 그 다음번에, 복제본 B(1806)에서 이루어진 변경이 서버(1802)로 복제된다. 이 변경은 서버에 의해 S2의 변경 열거목록이 할당된다. 특히, 이 예에서, 서버(1802)는 모든 변경 열거목록을 할당하지만, 서버(1802)가 몇몇 변경 열거목록을 할당하고, 다른 복제본이 다른 변경 열거목록을 할당하는 다른 구현이 존재할 수 있다.
본 발명의 구현은 또한 다른 토폴로지에서 지식 벡터를 최적화하도록 적응가능하다. 예를 들어, 도 18에서, 복제본 D(1114)는 단지 복제본 C(1110)로 복제한다. 그러므로, C 및 D에 의해 이루어진 변경은 단일 복제본 ID를 갖는 변경 열거목록을 사용하여 열거될 수 있다. 한 예에서, 복제본 C의 복제본 ID가 복제본 C(1110) 또는 복제본 D(1114)에 의한 모든 변경에 대한 변경 열거목록의 일부로 선택되는 경우에, 복제본 C 내의 제1 변경은 변경 열거목록 C1로 표시될 수 있을 것이다. 복제본 D(1114) 내의 후속 변경은 C2로 표시되는 등등으로 된다. 한 복제본이 상이한 복제본에서 이루어진 변경에 대한 변경 ID를 생성하면, 변경 ID를 생성하는 복제본은 대리 생성자로 칭해질 수 있다.
특정 토폴로지 또는 동기화 커뮤니티에 대한 지식 벡터를 최적화함으로써, 지식 벡터를 저장하기 위해 사용된 자원은 도 25에 도시된 것과 같은 허브 앤드 스포크 서버-클라이언트 토폴로지에 가까운 토폴로지에서 절약될 수 있다. 한층 더 피어 투 피어 네트워크와 같은 토폴로지에서는, 더 큰 지식 벡터가 요구되지만, 개별 복제본은 동기화 루프, 거짓 충돌 등과 같은 문제를 방지하면서 더 많은 수의 다른 복제본으로 효과적으로 독립적으로 복제할 수 있다.
상이한 복제본들이 서로 독립적으로 항목에 대한 변경을 하도록 허용될 때, 독립적으로 이루어진 변경들 사이의 충돌이 생길 수 있는데, 이것은 해소되어야 한다. 충돌 해소는 통상적으로 어느 항목 버전이 유효 항목으로서 선택되어야 하는지 판정하는 소정의 규칙이 있을 필요가 있다. 이들 규칙의 몇 가지 예는 나중에 이루어진 항목 변경을 선택하는 것, 또는 다른 유형의 복제본에 의해 이루어진 변경보다 서버에 의해 이루어진 변경을 우선시하는 것처럼 특정 유형의 복제본에 의해 이루어진 항목 변경을 선택하는 것을 포함한다. 대안적으로, 모든 충돌은 수동 해소를 위해 로그될 수 있다. 수동 해소는 충돌하는 변경들을 대신할 새로운 값을 충돌 항목에 제공하는 사용자에 의해 달성된다.
동기화 커뮤니티 또는 토폴로지 내의 모든 복제본이 동일한 방식으로 충돌을 해소하면, 시스템 내의 모든 복제본이 복제된 임의의 충돌 해소로 이동할 것이기 때문에, 통상적으로 요구되는 다른 해소 규칙 또는 해소 시스템이 없다. 동기화 커뮤니티 내의 복제본들이 정확히 동일한 방식으로 충돌을 해소하도록 특별히 설계될 수 없지만, 그럼에도 동기화 커뮤니티 내의 복제본들은 정확히 동일한 방식으로 충돌을 해소할 수 있다. 그러한 예는 도 26A에 도시된다. 도 26A는 복제본 D(1902)를 도시한 것이다. 복제본 D(1902)는 항목 IX 내의 변경에 대응하는 변경 ID를 수신하는데, 변경 ID는 A4이다. 그 후, 복제본 D(1902)는 동일한 항목 IX에 대한 변경 ID를 수신하는데, 변경 ID는 B5이다. 복제본 D(1902)는 항목 IX에 대한 변경중 어느 변경이 우선 변경인지 선택하기 위한 충돌 해소 규칙을 갖는다. 이 경우에, 복제본 D는 변경 ID A4로 표시된 항목 IX에 대한 변경을 선택한다. 충돌이 복제본 D(1902)에 의해 해소되었다는 것과 충돌이 해소된 방법을 나타내기 위해, 새로운 변경 ID가 항목 IX에 할당되는데, 이것은 충돌 해소의 결과, 및 충돌 해소를 한 특정 복제본에 의해 할당된 새로운 변경 ID를 포함한다. 새로운 변경 ID는 충돌 해소를 한 복제본에 대한 다음 순서의 변경 열거목록을 포함한다. 이 경우에, 새로운 변경 ID는 A4(D7)로 표시되어, A4로 표시된 변경이 충돌 해소에 선택되었다는 것과 복제본 D(1902)에 의해 충돌이 해소되었다는 것을 나타낸다. 도 26A에 도시된 바와 같이, 변경의 충돌이 복제본 C(1904)에 의해 검출될 때 유사한 프로세스가 발생한다. 복제본 C(1904)는 복제본 D(1902)와 동일한 방식으로 충돌을 해소한다. 그러므로, A4(C3)로 표시된 새로운 변경 ID가 항목 IX의 변경에 할당된다. 이 경우에, 변경 ID A4와 B5로 표시된 항목 IX에 대한 변경들 사이의 충돌은 궁극적으로 토폴로지 내의 모든 복제본에서 동일한 방식으로 해소될 것이다.
도 26B는 충돌이 토폴로지 내의 상이한 복제본에 의해 서로 다르게 해소되는 예를 도시한 것이다. 도 26B에서, 시간(1)에서, 복제본 D(1902)는 한 방식으로 충돌을 해소하고, 충돌 해소를 나타내는 새로운 변경 ID B5 및 변경을 행한 복제본 D(7)을 항목에 할당한다. 시간(2)에서, 복제본 C(1904)는 복제본 C(1904)에 의해 할당된 새로운 변경 ID A4(C3)에 의해 표시된 동일한 충돌을 상이한 방식으로 해소한다. 시간(3)에서, 복제본 D(1902)는 복제본 C의 충돌 해소를 수신한다. 복제본 D(1902)는 이때 이 특정 충돌이 2가지 상이한 방식으로 해소되었다는 것을 인식한다. 그러므로, 본 발명의 몇몇 구현은 항목 IX에 대해 충돌하는 변경들 사이에서 결정론적 해소가 행해졌다는 것을 명시한다. 도 26B에 의해 나타낸 특정 결정론적 해소는 최하위 값 복제 ID를 갖는 변경이 결정론적 결과로서 선택되게 한다. 그러 므로, A가 복제본 B보다 하위 값 복제본 ID이기 때문에, 충돌의 결정론적 해소는 변경 ID A4로 표시된 변경이 되게 선택된다. 그러므로, 복제본 D(1902)는 항목 I에 대한 변경과 관련된 변경 ID를 A4(D7)로 변경한다. 주의할 점은 복제 루프 또는 다른 충돌 문제를 방지하기 위해, 변경을 하는 복제본과 관련된 변경 열거목록(즉, D7)은 원래의 충돌 해소(1908)에서와 결정론적 결과(1906)에서 동일하다는 것이다.
주제가 구조적 특징 및/또는 방법적 액트에 특정된 언어로 설명되었지만, 첨부된 청구범위에 정의된 주제는 반드시 상기 설명된 특별한 특징이나 액트에 제한되는 것이 아니라는 것을 이해할 것이다. 오히려, 상기 설명된 특별한 특징 및 액트는 청구범위를 구현하는 예시적인 형태로 개시된다. 여기에서 설명되고 및/또는 다음의 청구범위에 의한 구현의 정신에 속하는 모든 등가물, 변경 및 변형은 보호되는 것이 바람직하다.
예를 들어, 컴퓨터 소프트웨어 분야에 숙련된 기술자는 여기에서 논의된 예에서 설명된 클라이언트 및/또는 서버 배열, 사용자 인터페이스 스크린 콘텐트 및/또는 데이터 배치가 이 예들에서 묘사된 것보다 더 적거나 더욱 추가된 옵션 또는 특징을 포함하도록 하나 이상의 컴퓨터상에서 다르게 조직될 수 있다는 것을 알 수 있을 것이다.

Claims (20)

  1. 데이터를 동기화하는 방법에 있어서,
    부분 참가자(partial participant)를 제공하는 단계- 상기 부분 참가자는 데이터 저장소 및 지식 저장소를 구비하고, 상기 데이터 저장소는 제1 완전 참가자(first full participant)와의 동기화 프로세스 동안에 검색된 데이터 집합(set of data)을 저장하고, 상기 지식 저장소는 상기 데이터 저장소 내의 데이터에 대한 지식 집합(set of knowledge)을 저장하며, 상기 지식 집합은 상기 제1 완전 참가자가 알고 있는 데이터에 대한 변경을 나타내고, 상기 부분 참가자는 상기 지식 집합을 이해하지 못하며, 상기 부분 참가자는 상기 데이터 저장소 내의 상기 데이터 집합에 대해 상기 부분 참가자가 어떤 변경을 했는지 추적할 책임이 있고, 상기 지식은 참가자 식별자와 상기 참가자 식별자와 연관된 장치에 대해 상기 부분 참가자가 알게 된 마지막 변경의 일련 식별자(a sequence identifier)를 나타내는 벡터 쌍으로서 저장됨 -;
    상기 부분 참가자의 사용자로부터 상기 데이터 저장소 내의 상기 데이터 집합 내의 특정 기록(particular record)을 변경하라는 요청을 수신하는 단계; 및
    상기 사용자로부터 상기 요청을 수신하면 상기 데이터 저장소 내의 상기 특정 기록을 갱신하는 단계- 상기 갱신하는 단계는 상기 변경의 소스를 상기 부분 참가자로서 식별하는 정보를 저장하는 단계를 포함함 -를 포함하는
    데이터 동기화 방법.
  2. 제1항에 있어서,
    상기 부분 참가자는 제2 완전 참가자와 동기화하도록 동작할 수 있는
    데이터 동기화 방법.
  3. 제1항에 있어서,
    상기 부분 참가자는 상기 제1 완전 참가자 상의 핸들러(handler)를 통해 상기 제1 완전 참가자와 동기화되는
    데이터 동기화 방법.
  4. 제1항에 있어서,
    상기 제1 완전 참가자는 퍼스널 컴퓨터인
    데이터 동기화 방법.
  5. 제1항에 있어서,
    상기 지식 집합은 상기 부분 참가자가 또 다른 참가자에 대해 알게 된 마지막 변경을 설명하는 메타데이터를 포함하는
    데이터 동기화 방법.
  6. 제1항에 있어서,
    상기 부분 참가자는 웹 서비스인
    데이터 동기화 방법.
  7. 제1항에 있어서,
    상기 변경의 소스를 식별하는 상기 정보는 버전(version)인
    데이터 동기화 방법.
  8. 제7항에 있어서,
    상기 버전의 제1 부분은 상기 부분 참가자를 고유하게 식별하는 식별자를 포함하고, 상기 버전의 제2 부분은 기록 버전을 나타내는 번호를 포함하는
    데이터 동기화 방법.
  9. 제1항에 있어서,
    상기 변경의 소스를 식별하는 정보는 상기 기록에 대한 고유 식별자, 및 상기 기록이 변경되었을 때를 나타내기 위한 날짜 및 시간 식별자인
    데이터 동기화 방법.
  10. 제1항에 있어서,
    상기 동기화 프로세스 후 상기 제1 완전 참가자가 상기 지식 집합을 갱신한 이후에, 상기 제1 완전 참가자로부터 갱신된 지식 집합을 수신하는 단계를 더 포함하는
    데이터 동기화 방법.
  11. 제1항에 기재된 단계들을 컴퓨터가 실행하게 하기 위한 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 저장 매체.
  12. 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 저장 매체에 있어서,
    상기 컴퓨터 실행가능 명령어들은 컴퓨터로 하여금,
    동기화 엔진을 사용하여 동기화 동작을 실행하라는 요청을 참가자로부터 수신하는 단계; 및
    상기 참가자의 유형을 판정하는 단계- 상기 유형은 완전 참가자 유형, 부분 참가자 유형 및 단순 참가자(simple participant) 유형으로 이루어진 그룹에서 선택됨 -를 수행하게 하고,
    상기 참가자가 단순 참가자 데이터 저장소를 갖고, 지식을 갖지 않는 경우에, 상기 참가자는 상기 단순 참가자 유형으로 판정되고;
    상기 참가자가 부분 참가자 데이터 저장소를 갖고, 지식을 저장하지만 이해하지 못하는 경우에, 상기 참가자는 상기 부분 참가자 유형으로 판정되며;
    상기 참가자가 완전 참가자 데이터 저장소를 갖고, 지식을 저장하며 이해하는 경우에, 상기 참가자는 상기 완전 참가자 유형으로 판정되고;
    상기 동기화 엔진은 상기 참가자의 유형에 대한 로직의 집합을 사용하여 상기 참가자와의 상기 동기화 동작을 실행하고, 상기 지식은, 참가자 식별자와 상기 참가자 식별자와 연관된 장치에 대해 상기 부분 참가자가 알게 된 마지막 변경의 일련 식별자를 나타내는 벡터 쌍으로서 저장되는
    컴퓨터 판독가능 저장 매체.
  13. 제12항에 있어서,
    상기 참가자의 유형이 단순 참가자 유형으로 판정되면, 상기 동기화 엔진은 상기 단순 참가자 데이터 저장소 내의 데이터 집합에 대한 변경을 검출하고 로컬 데이터 저장소 내에 임의의 충돌들을 저장함으로써 상기 단순 참가자 데이터 저장소 내의 데이터 집합을 동기화하도록 동작할 수 있는
    컴퓨터 판독가능 저장 매체.
  14. 제12항에 있어서,
    상기 참가자의 유형이 부분 참가자 유형으로 판정되면, 상기 동기화 엔진은 저장되었지만 이해하지 못하는 지식을 상기 참가자로부터 수신하고, 예외들이 발생하면 상기 참가자 상의 상기 저장되었지만 이해하지 못하는 지식을 갱신하는
    컴퓨터 판독가능 저장 매체.
  15. 제14항에 있어서,
    상기 동기화 엔진은 로컬 복사본을 수정한 다음에 상기 로컬 복사본을 상기 참가자에게 전송함으로써 상기 참가자 상의 상기 저장되었지만 이해하지 못하는 지식을 갱신하는
    컴퓨터 판독가능 저장 매체.
  16. 제12항에 있어서,
    상기 참가자의 유형이 부분 참가자 유형으로 판정되면, 상기 참가자는 상기 참가자 상의 상기 저장되었지만 이해하지 못하는 지식으로 인해 멀티-마스터(multi-master) 양방향 동기화 동작에 참가하도록 동작할 수 있는
    컴퓨터 판독가능 저장 매체.
  17. 제12항에 있어서,
    상기 동기화 엔진은 상기 동기화 동작을 위한 핸들러를 등록하라는 요청을 상기 참가자로부터 수신하는
    컴퓨터 판독가능 저장 매체.
  18. 데이터를 동기화하는 방법에 있어서,
    단순 참가자를 제공하는 단계- 상기 단순 참가자는 데이터 저장소를 구비하나 지식 저장소는 구비하지 않고, 상기 데이터 저장소는 완전 참가자와의 동기화 프로세스 동안에 제공되는 데이터 집합을 저장하도록 동작할 수 있고, 상기 단순 참가자는 상기 데이터 저장소 내의 상기 데이터 집합에 대해 상기 단순 참가자가 어떤 변경을 했는지 추적할 책임이 없음 -;
    상기 단순 참가자의 사용자로부터 상기 데이터 저장소 내의 상기 데이터 집합 내의 특정 기록을 변경하라는 요청을 수신하는 단계;
    상기 사용자로부터 상기 요청을 수신하면 상기 데이터 저장소 내의 상기 특정 기록을 갱신하는 단계;
    완전 참가자와의 동기화 동안, 상기 완전 참가자가 상기 데이터 저장소 내의 상기 특정 기록에 대한 변경을 검색하는 단계;
    상기 완전 참가자와의 동기화 동안, 상기 완전 참가자가 임의의 충돌을 해소하고 그런 다음 상기 단순 참가자의 상기 데이터 저장소를 갱신하는 단계- 지식은 상기 완전 참가자에 의해, 참가자 식별자와 상기 참가자 식별자와 연관된 장치에 대해 부분 참가자가 알게 된 마지막 변경의 일련 식별자를 나타내는 벡터 쌍으로서 저장됨 -
    를 포함하는 데이터 동기화 방법.
  19. 제18항에 기재된 단계들을 컴퓨터가 실행하게 하기 위한 컴퓨터 실행가능 명령어들을 갖는 컴퓨터 판독가능 저장 매체.
  20. 삭제
KR1020087019515A 2006-02-15 2007-01-19 데이터 동기화 방법 및 컴퓨터 판독가능 매체 KR101319767B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/354,677 2006-02-15
US11/354,677 US7756825B2 (en) 2003-07-31 2006-02-15 Synchronization peer participant model
PCT/US2007/001394 WO2007097846A1 (en) 2006-02-15 2007-01-19 Synchronization peer participant model

Publications (2)

Publication Number Publication Date
KR20080113347A KR20080113347A (ko) 2008-12-30
KR101319767B1 true KR101319767B1 (ko) 2013-10-22

Family

ID=38437695

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087019515A KR101319767B1 (ko) 2006-02-15 2007-01-19 데이터 동기화 방법 및 컴퓨터 판독가능 매체

Country Status (15)

Country Link
US (1) US7756825B2 (ko)
EP (1) EP1989646B1 (ko)
JP (1) JP5289063B2 (ko)
KR (1) KR101319767B1 (ko)
CN (1) CN101385030B (ko)
AU (1) AU2007218127B2 (ko)
BR (1) BRPI0706518A2 (ko)
CA (1) CA2634467C (ko)
ES (1) ES2635719T3 (ko)
IL (1) IL192722A0 (ko)
NO (1) NO20083156L (ko)
RU (1) RU2419865C2 (ko)
TW (1) TW200805094A (ko)
WO (1) WO2007097846A1 (ko)
ZA (1) ZA200805394B (ko)

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7739363B1 (en) * 2003-05-09 2010-06-15 Apple Inc. Configurable offline data store
US7401103B2 (en) * 2003-07-31 2008-07-15 Microsoft Corporation Replication protocol for data stores
US8131739B2 (en) 2003-08-21 2012-03-06 Microsoft Corporation Systems and methods for interfacing application programs with an item-based storage platform
US8238696B2 (en) 2003-08-21 2012-08-07 Microsoft Corporation Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system
US7401104B2 (en) * 2003-08-21 2008-07-15 Microsoft Corporation Systems and methods for synchronizing computer systems through an intermediary file system share or device
US8166101B2 (en) 2003-08-21 2012-04-24 Microsoft Corporation Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
US20060242277A1 (en) 2005-03-31 2006-10-26 Tripwire, Inc. Automated change approval
US7689593B2 (en) * 2005-12-30 2010-03-30 Sap Ag Systems and methods for accessing a shared space in a provider-tenant environment
US7917607B2 (en) * 2005-12-30 2011-03-29 Sap Ag Software management systems and methods, including use of such systems and methods in a provider-tenant environment
US7890646B2 (en) * 2006-04-27 2011-02-15 Microsoft Corporation Synchronization orchestration
US20080103977A1 (en) * 2006-10-31 2008-05-01 Microsoft Corporation Digital rights management for distributed devices
US20080104206A1 (en) * 2006-10-31 2008-05-01 Microsoft Corporation Efficient knowledge representation in data synchronization systems
US7933869B2 (en) * 2006-12-29 2011-04-26 Sap Ag Method and system for cloning a tenant database in a multi-tenant system
US8069184B2 (en) * 2006-12-29 2011-11-29 Sap Ag Systems and methods to implement extensibility of tenant content in a provider-tenant environment
US20080162587A1 (en) * 2006-12-29 2008-07-03 Ulrich Auer Server synchronization for maintenance activities
US20080162589A1 (en) * 2006-12-29 2008-07-03 Microsoft Corporation Weakly-consistent distributed collection compromised replica recovery
US7620659B2 (en) * 2007-02-09 2009-11-17 Microsoft Corporation Efficient knowledge representation in data synchronization systems
US8966032B2 (en) * 2007-03-14 2015-02-24 Amdocs Software Systems Limited System and method for propagating personal identification information to communication devices
US20080294701A1 (en) * 2007-05-21 2008-11-27 Microsoft Corporation Item-set knowledge for partial replica synchronization
US8505065B2 (en) * 2007-06-20 2013-08-06 Microsoft Corporation Access control policy in a weakly-coherent distributed collection
US20090006489A1 (en) * 2007-06-29 2009-01-01 Microsoft Corporation Hierarchical synchronization of replicas
US7685185B2 (en) * 2007-06-29 2010-03-23 Microsoft Corporation Move-in/move-out notification for partial replica synchronization
US8090685B2 (en) * 2007-09-14 2012-01-03 Microsoft Corporation Knowledge based synchronization of subsets of data with no move condition
US20090083441A1 (en) 2007-09-24 2009-03-26 Microsoft Corporation Synchronization of web service endpoints in a multi-master synchronization environment
US8095495B2 (en) * 2007-09-25 2012-01-10 Microsoft Corporation Exchange of syncronization data and metadata
JP5090149B2 (ja) * 2007-12-13 2012-12-05 インターナショナル・ビジネス・マシーンズ・コーポレーション データベースを管理する方法、装置及びシステム
US8078749B2 (en) * 2008-01-30 2011-12-13 Microsoft Corporation Synchronization of multidimensional data in a multimaster synchronization environment with prediction
US20090196311A1 (en) * 2008-01-31 2009-08-06 Microsoft Corporation Initiation and expiration of objects in a knowledge based framework for a multi-master synchronization environment
US8185495B2 (en) * 2008-02-01 2012-05-22 Microsoft Corporation Representation of qualitative object changes in a knowledge based framework for a multi-master synchronization environment
US9135321B2 (en) * 2008-02-06 2015-09-15 Microsoft Technology Licensing, Llc Synchronization infrastructure for networked devices, applications and services in a loosely coupled multi-master synchronization environment
US8700301B2 (en) 2008-06-19 2014-04-15 Microsoft Corporation Mobile computing devices, architecture and user interfaces based on dynamic direction information
US20090315766A1 (en) 2008-06-19 2009-12-24 Microsoft Corporation Source switching for devices supporting dynamic direction information
US8467991B2 (en) 2008-06-20 2013-06-18 Microsoft Corporation Data services based on gesture and location information of device
US8135670B2 (en) * 2008-07-22 2012-03-13 International Business Machines Corporation Embedded change logging for data synchronization
US8458128B2 (en) * 2008-08-26 2013-06-04 Microsoft Corporation Minimal extensions required for multi-master offline and collaboration for devices and web services
US9240015B2 (en) * 2009-05-08 2016-01-19 A2Zlogix, Inc. Method and system for synchronizing delivery of promotional material to computing devices
US8872767B2 (en) 2009-07-07 2014-10-28 Microsoft Corporation System and method for converting gestures into digital graffiti
US20110016100A1 (en) * 2009-07-16 2011-01-20 Microsoft Corporation Multiple fidelity level item replication and integration
US8341099B2 (en) * 2010-03-12 2012-12-25 Microsoft Corporation Semantics update and adaptive interfaces in connection with information as a service
US8805924B2 (en) 2010-05-26 2014-08-12 Microsoft Corporation Optimistic concurrency utilizing distributed constraint enforcement
JP5630190B2 (ja) * 2010-10-06 2014-11-26 富士通株式会社 更新管理装置、更新管理方法および更新管理プログラム
US8868500B2 (en) * 2011-01-14 2014-10-21 Apple Inc. Data synchronization
US10395762B1 (en) 2011-06-14 2019-08-27 Merge Healthcare Solutions Inc. Customized presentation of data
US8867807B1 (en) 2011-09-23 2014-10-21 Dr Systems, Inc. Intelligent dynamic preloading and processing
US9836770B2 (en) 2012-02-24 2017-12-05 Ad Persistence, Llc Data capture for user interaction with promotional materials
US8756194B1 (en) * 2012-05-04 2014-06-17 Sencha, Inc. Cloud-based data replication for web applications with replica identifier reassignment feature
EP2898428A4 (en) * 2012-09-18 2016-06-22 Nokia Technologies Oy METHODS, APPARATUSES, AND COMPUTER PROGRAM PRODUCTS FOR PROVIDING SYNCHRONIZATION CONFLICT RESOLUTION PROTOCOL DURING SYNCHRONIZATION BETWEEN MULTIPLE DEVICES
US8635373B1 (en) 2012-09-22 2014-01-21 Nest Labs, Inc. Subscription-Notification mechanisms for synchronization of distributed states
CN104035944B (zh) * 2013-03-08 2018-11-09 南京中兴新软件有限责任公司 文件系统的属性同步控制方法、装置和系统
US20150120662A1 (en) * 2013-10-29 2015-04-30 Microsoft Corporation Synchronizing event history for multiple clients
US10025628B1 (en) 2015-06-26 2018-07-17 Amazon Technologies, Inc. Highly available distributed queue using replicated messages
US11201918B2 (en) * 2020-03-03 2021-12-14 Snap Inc. Minimizing number of synchs
EP4315811A1 (en) * 2021-03-30 2024-02-07 Cira Apps Limited Hub and spoke architecture for cloud-based synchronization
CN113744037B (zh) * 2021-08-16 2023-09-29 同盾科技有限公司 知识联邦中参与方通信方法、装置、电子设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6240416B1 (en) 1998-09-11 2001-05-29 Ambeo, Inc. Distributed metadata system and method

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4078260A (en) * 1976-05-12 1978-03-07 International Business Machines Corporation Apparatus for transposition sorting of equal length records in overlap relation with record loading and extraction
US5185886A (en) * 1989-06-30 1993-02-09 Digital Equipment Corporation Multiple record group rebound sorter
US5893116A (en) * 1996-09-30 1999-04-06 Novell, Inc. Accessing network resources using network resource replicator and captured login script for use when the computer is disconnected from the network
US6405049B2 (en) * 1997-08-05 2002-06-11 Symbol Technologies, Inc. Portable data terminal and cradle
US6493720B1 (en) 1998-01-26 2002-12-10 International Business Machines Corporation Method and system for synchronization of metadata in an information catalog
US6189007B1 (en) * 1998-08-28 2001-02-13 International Business Machines Corporation Method and apparatus for conducting a high performance locking facility in a loosely coupled environment
US6507845B1 (en) * 1998-09-14 2003-01-14 International Business Machines Corporation Method and software for supporting improved awareness of and collaboration among users involved in a task
US6243715B1 (en) * 1998-11-09 2001-06-05 Lucent Technologies Inc. Replicated database synchronization method whereby primary database is selected queries to secondary databases are referred to primary database, primary database is updated, then secondary databases are updated
US6401104B1 (en) * 1999-07-03 2002-06-04 Starfish Software, Inc. System and methods for synchronizing datasets using cooperation among multiple synchronization engines
US6560614B1 (en) * 1999-11-12 2003-05-06 Xosoft Inc. Nonintrusive update of files
JP3963417B2 (ja) * 1999-11-19 2007-08-22 株式会社東芝 データ同期処理のための通信方法および電子機器
US20010042099A1 (en) * 2000-02-02 2001-11-15 Doongo Technologies, Inc. Apparatus and methods for optimizing traffic volume in wireless email communications
US6873987B1 (en) * 2000-05-31 2005-03-29 International Business Machines Corporation Method, system and program products for recovering from failures within a shared nothing distributed computing environment
EP1187421A3 (en) * 2000-08-17 2004-04-14 FusionOne, Inc. Base rolling engine for data transfer and synchronization system
US6876995B1 (en) * 2000-10-04 2005-04-05 Microsoft Corporation Web store events
EP1352343A2 (en) * 2001-01-03 2003-10-15 Synchrologic Inc. A system and method for data synchronization between remote devices
FI114417B (fi) 2001-06-15 2004-10-15 Nokia Corp Datan valitseminen synkronointia varten
JP4149199B2 (ja) * 2002-06-05 2008-09-10 富士通株式会社 携帯端末補助装置、データ同期方法および携帯端末装置
US7636776B2 (en) 2003-07-31 2009-12-22 Microsoft Corporation Systems and methods for synchronizing with multiple data stores
US7440981B2 (en) 2003-07-31 2008-10-21 Microsoft Corporation Systems and methods for replicating data stores
US7512638B2 (en) 2003-08-21 2009-03-31 Microsoft Corporation Systems and methods for providing conflict handling for peer-to-peer synchronization of units of information manageable by a hardware/software interface system
US8166101B2 (en) 2003-08-21 2012-04-24 Microsoft Corporation Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
US7111139B2 (en) 2004-03-02 2006-09-19 Hitachi, Ltd. Data synchronization of multiple remote storage
KR100557192B1 (ko) 2004-04-06 2006-03-03 삼성전자주식회사 서버와 클라이언트간에 데이터 동기화 시 비정상 종료된경우 데이터 전송 방법 및 그 시스템.

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6240416B1 (en) 1998-09-11 2001-05-29 Ambeo, Inc. Distributed metadata system and method

Also Published As

Publication number Publication date
CN101385030A (zh) 2009-03-11
US7756825B2 (en) 2010-07-13
JP2009527055A (ja) 2009-07-23
EP1989646A1 (en) 2008-11-12
BRPI0706518A2 (pt) 2011-03-29
CN101385030B (zh) 2011-11-16
EP1989646B1 (en) 2017-05-10
ZA200805394B (en) 2010-04-28
IL192722A0 (en) 2009-02-11
ES2635719T3 (es) 2017-10-04
RU2008133417A (ru) 2010-02-20
US20060215569A1 (en) 2006-09-28
NO20083156L (no) 2008-08-27
TW200805094A (en) 2008-01-16
KR20080113347A (ko) 2008-12-30
CA2634467A1 (en) 2007-08-30
JP5289063B2 (ja) 2013-09-11
RU2419865C2 (ru) 2011-05-27
EP1989646A4 (en) 2011-11-23
CA2634467C (en) 2014-07-08
WO2007097846A1 (en) 2007-08-30
AU2007218127B2 (en) 2011-03-31
AU2007218127A1 (en) 2007-08-30

Similar Documents

Publication Publication Date Title
KR101319767B1 (ko) 데이터 동기화 방법 및 컴퓨터 판독가능 매체
US7440985B2 (en) Filtered replication of data stores
US7440981B2 (en) Systems and methods for replicating data stores
US10755234B2 (en) System and method for offline synchronization of exception items of shared services for client applications
US7778282B2 (en) Propagation of conflict knowledge
US8769494B2 (en) Globally sound and consistent configuration management for distributed datacenter components
JP4738885B2 (ja) グラフ分析および同期の方法およびシステム
US8412676B2 (en) Forgetting items with knowledge based synchronization
US10303787B2 (en) Forgetting items with knowledge based synchronization
JP2005018505A (ja) クラス抽出方法および装置

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
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160921

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170919

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180918

Year of fee payment: 6