(57)【要約】【課題】クライアントとサーバとの間でデータを同期する場合に、サーバの負荷を低減することができるようにする。【解決手段】クライアント１０はアンカー時点を含む同期要求４１をサーバ２０に送信する。サーバ２０は、アンカー時点からバウンダリ時点までの間に更新されたデータについての変更特徴情報と、アンカー時点より後の変更履歴についての変更特徴情報とを含む同期情報４２をクライアント１０に送信する。クライアント１０は、同期情報４２に基づいてダウンロード要求４３をサーバ２０に送信し、サーバ２０はダウンロード要求４３に応じてダウンロード情報４４をクライアント１０に送信する。クライアント１０は、ダウンロード情報４４に含まれるデータをクライアントデータベース１１に登録する。【選択図】図１
2011054092.tif 000002
【特許請求の範囲】
【請求項１】
サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、
前記サーバは、更新時点を含むデータを記憶する第１データベースにアクセス可能であり、
前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、
前記クライアントは、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶するアンカー時点記憶部と、前記アンカー時点を含む同期要求を前記サーバに送信する同期要求送信部と、を備え、
前記サーバは、前記更新時点が前記アンカー時点よりも後の前記データである更新データを前記第１データベースから検索し、前記各更新データについて前記更新データを示すデータＩＤおよび前記更新データの前記更新時点を含む変更情報を生成する変更情報取得部と、前記変更情報を含む同期情報を前記クライアントに送信する同期情報送信部と、を備え、
前記クライアントは、前記変更情報に対応する前記データのうち、ダウンロードすべきものである取得データを決定するダウンロード決定部と、前記取得データを示すデータＩＤを含むダウンロード要求を前記サーバに送信するダウンロード要求送信部と、を備え、
前記サーバは、前記ダウンロード要求に含まれる前記データＩＤに対応する前記データを前記第１データベースから取得するデータ取得部と、前記取得したデータを含むダウンロード情報を前記クライアントに送信するダウンロード情報送信部と、を備え、
前記クライアントは、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録する更新処理部を備えること、
を特徴とするデータ同期システム。
【請求項２】
請求項１に記載のデータ同期システムであって、
前記ダウンロード決定部は、前記各変更情報について、前記変更情報に含まれる前記データＩＤに対応する前記データに含まれる前記更新時点を前記第２データベースから取得し、前記第２データベースから取得した前記更新時点が前記変更情報に含まれる前記更新時点よりも古い場合には、当該データをダウンロードすることを決定し、前記第２データベースから取得した前記更新時点が前記変更情報に含まれる前記更新時点よりも新しい場合には、ユーザからの設定に応じて、当該データをダウンロードするか否かを決定すること、
を特徴とするデータ同期システム。
【請求項３】
請求項１に記載のデータ同期システムであって、
前記サーバは、前記第１データベースから削除された前記データを示す前記データＩＤおよび削除時点を含む変更履歴を記憶するサーバ変更履歴記憶部と、前記同期要求に含まれる前記アンカー時点よりも後の前記削除時点を含む前記変更履歴を前記サーバ変更履歴記憶部から取得する変更履歴取得部とを備え、
前記同期情報送信部は、前記変更履歴取得部が取得した前記変更履歴を前記同期情報にさらに含め、
前記クライアントは、前記同期情報に含まれる前記変更履歴に対応する前記データを前記第２データベースから削除する削除処理部を備えること、
を特徴とするデータ同期システム。
【請求項４】
請求項１に記載のデータ同期システムであって、
前記サーバは、前記第１データベースから削除されたデータについて、前記削除されたデータを示すデータＩＤおよび削除時点を含む変更履歴を、前記削除時点の新しい順に所定数記憶するサーバ変更履歴記憶部を備え、
前記変更情報取得部は、前記アンカー時点より後の前記削除時点を含む前記変更履歴を前記サーバ変更履歴記憶部から取得し、
前記同期情報送信部は、前記変更情報に加えて、前記サーバ変更履歴記憶部が記憶している前記変更履歴に含まれる最も古い前記削除時点であるバウンダリ時点、および前記取得した変更履歴を前記同期情報に含めて前記クライアントに送信し、
前記クライアントは、
前記同期情報に含まれる前記変更履歴に対応する前記データを前記第２データベースから削除する削除処理部と、
前記アンカー時点が前記バウンダリ時点より前である場合に、前記第２データベースに記憶されている前記データのうち、前記データの前記更新時点が前記バウンダリ時点よりも前であり、かつ、前記データを示すデータＩＤを含む前記変更情報が前記同期情報に含まれていないものを検索し、前記検索した各データについて前記データを示すデータＩＤおよび前記データの前記更新時点を含む陳腐化情報を生成する陳腐化情報取得部と、
を備え、
前記ダウンロード要求送信部は、前記取得データＩＤに加えて、前記陳腐化情報を前記ダウンロード要求に含めて前記サーバに送信し、
前記データ取得部はさらに、前記ダウンロード要求に含まれる前記各陳腐化情報について、前記陳腐化情報に対応する前記データが前記第１データベースに記憶されているか否かを判定し、前記第１データベースに記憶されていないと判定した前記データを示す前記データＩＤを、削除されたデータを示す削除ＩＤとして前記ダウンロード情報に含め、
前記削除処理部は、前記ダウンロード情報に含まれる前記削除ＩＤに対応する前記データを前記第２データベースから削除すること、
を特徴とするデータ同期システム。
【請求項５】
請求項１に記載のデータ同期システムであって、
前記クライアントは、前記同期情報に含まれている前記各変更情報について、前記変更情報に含まれる前記データＩＤに対応する前記データの前記更新時点を前記第２データベースから読み出し、前記読み出した更新時点が前記変更情報に含まれる前記更新時点よりも新しい場合に、前記データＩＤに対応する前記データを前記サーバにアップロードするか前記サーバからダウンロードするかを決定する衝突解消部を備え、
前記ダウンロード要求送信部は、前記衝突解消部がダウンロードすると決定した前記データを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、
前記クライアントは、前記衝突会勝負がアップロードすると決定した前記データを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信する解消要求送信部を備え、
前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録する解消処理部を備えること、
を特徴とするデータ同期システム。
【請求項６】
サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、
前記サーバは、データに更新時点を付帯させて記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、
前記サーバは、前記第１データベースに対するデータの変更履歴を新しい順に所定数のみ記憶するサーバ変更履歴記憶部を備え、
前記サーバ変更履歴記憶部が記憶する前記変更履歴であるサーバ変更履歴は、変更の対象となった前記データを示すデータＩＤと、当該データに付帯されている前記更新時点とを含み、
前記クライアントは、
前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶するアンカー記憶部と、
前記データを取得するための条件および前記アンカー時点を含む同期要求を前記サーバに送信する同期要求送信部と、
前記サーバは、
前記サーバ変更履歴記憶部から、前記同期要求に含まれる前記条件にマッチする前記データに対応する前記サーバ変更履歴のうち、前記更新時点が前記アンカー時点より後のものを取得する変更履歴取得部と、
前記第１データベースから、前記同期要求に含まれる前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点より後であり、かつ前記サーバ変更履歴記憶部に記憶されている最も古い前記更新時点であるバウンダリ時点より前であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む変更情報を生成する変更情報取得部と、
前記バウンダリ時点、前記取得したサーバ変更履歴、および前記変更情報を含む同期情報を前記クライアントに送信する同期情報送信部と、
を備え、
前記クライアントは、
前記同期情報に含まれる前記サーバ変更履歴または前記変更情報に対応する前記データからダウンロードすべきものを決定するダウンロード決定部と、
前記第２データベースから、前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点から前記バウンダリ時点までの間であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む陳腐化情報を生成する陳腐化情報取得部と、
前記決定したデータを示す取得データＩＤおよび前記陳腐化情報を含むダウンロード要求を前記サーバに送信するダウンロード要求送信部と、
を備え、
前記サーバは、
前記ダウンロード要求に含まれる前記陳腐化情報に対応する前記データのうち、前記更新時点が前記陳腐化情報に含まれる前記更新時点よりも新しいものと、前記取得データＩＤに対応する前記データとを前記第１データベースから取得するデータ取得部と、
前記取得したデータを含むダウンロード情報を前記クライアントに送信するダウンロード情報送信部と、
を備え、
前記クライアントは、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録する更新処理部を備えること、
を特徴とするデータ同期システム。
【請求項７】
請求項６に記載のデータ同期システムであって、
前記サーバ変更履歴にはさらに、データの変更がデータの追加、更新または削除のいずれであったかを示す変更種別情報が含まれ、
前記クライアントが、前記同期情報の受信に応じて、前記同期情報に含まれる前記サーバ変更履歴のうち、前記変更種別情報が削除を示すものについて、前記サーバ変更履歴に含まれる前記データＩＤが示す前記データを前記第２データベースから削除する削除処理部を備えること、
を特徴とするデータ同期システム。
【請求項８】
請求項６に記載のデータ同期システムであって、
前記データ取得部は、前記ダウンロード要求に含まれる前記陳腐化情報のうち、前記陳腐化情報に含まれる前記データＩＤに対応する前記データが前記第１データベースに登録されていないものについて、前記陳腐化情報に含まれる前記データＩＤを含む削除情報を前記ダウンロード情報に設定し、
前記クライアントは、前記ダウンロード情報に前記削除情報が含まれている場合に、前記削除情報に含まれる前記データＩＤに対応する前記データを前記第２データベースから削除する削除処理部を備えること、
を特徴とするデータ同期システム。
【請求項９】
請求項６に記載のデータ同期システムであって、
前記データには、前記データの内容に基づいて生成される、前記条件に前記データがマッチするか否かを判定するための情報であるカラムがさらに付帯され、
前記サーバ変更履歴には、データの変更がデータの追加、更新または削除のいずれであったかを示す変更種別情報と、前記データに付帯される前記カラムとがさらに含まれ、
前記変更履歴取得部は、前記サーバ変更履歴のうち、前記カラムが前記同期要求に含まれる前記条件にマッチし、かつ前記更新時点が前記アンカー時点より後のものを取得し、
前記変更情報取得部は、前記第１データベースに記憶されている前記データのうち、前記データに付帯される前記カラムが前記同期要求に含まれる前記条件にマッチするとともに、前記更新時点が前記アンカー時点より後であり、かつ前記バウンダリ時点より前であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤ、前記データに付帯される前記更新時点、および前記データに含まれる前記カラムを前記変更情報に設定し、
前記陳腐化情報取得部は、前記第２データベースに記憶されるデータのうち、前記カラムが前記条件にマッチし、かつ前記更新時点が前記アンカー時点から前記バウンダリ時点までの間であるものを検索すること、
を特徴とするデータ同期システム。
【請求項１０】
請求項６に記載のデータ同期システムであって、
前記データには、前記データの内容に基づいて生成される、前記クライアントにおいて前記データをダウンロードすべきか否かを決定するための情報であるヒントがさらに付帯され、
前記サーバ変更履歴には、データの変更がデータの追加、更新または削除のいずれであったかを示す変更種別情報と、前記データの付帯される前記ヒントとがさらに含まれ、
前記変更情報取得部は、前記検索した各データについて、前記データに付帯される前記ヒントをさらに前記変更情報に含め、
前記ダウンロード決定部は、前記サーバ変更履歴または前記変更情報に含まれる前記ヒントに基づいて前記ダウンロードすべきデータを決定すること、
を特徴とするデータ同期システム。
【請求項１１】
請求項１０に記載のデータ同期システムであって、
前記ダウンロード決定部は、前記サーバ変更履歴または前記変更情報に含まれる前記ヒントを出力し、ユーザが選択した前記出力したヒントに対応する前記データを、前記ダウンロードすべきデータとして決定すること、
を特徴とするデータ同期システム。
【請求項１２】
請求項６に記載のデータ同期システムであって、
前記データには前記更新時点が付帯され、
前記サーバは、前記第１データベースに対する操作が行われるごとに大きくなる数値を前記更新時点として生成する時点生成部を備え、
前記第１データベースに書き込まれる際に、前記データには前記時点生成部が生成した前記更新時点が付帯されること、
を特徴とするデータ同期システム。
【請求項１３】
請求項６に記載のデータ同期システムであって、
前記データには前記更新時点が付帯され、
前記サーバは、前記第１データベースに対する操作が行われる際に、前記サーバにおけるタイムスタンプを取得し、前記取得したタイムスタンプに、前記データの識別情報を連結した値を前記更新時点として生成する時点生成部を備え、
前記第１データベースに書き込まれる際に、前記データには前記時点生成部が生成した前記更新時点が付帯されること、
を特徴とするデータ同期システム。
【請求項１４】
請求項６に記載のデータ同期システムであって、
前記クライアントは、前記第２データベースにおけるデータの変更履歴を記憶するクライアント変更履歴記憶部を備え、
前記クライアント変更履歴記憶部が記憶する前記変更履歴であるクライアント変更履歴は、変更の対象となった前記データを示す前記データＩＤと、前記データに付帯されている前記更新時点とを含み、
前記同期要求送信部は、前記条件にマッチする前記データに対応する前記クライアント変更履歴を前記クライアント変更履歴記憶部から取得し、前記取得したクライアント変更履歴を前記同期要求に設定して前記サーバに送信し、
前記サーバは、前記同期要求に含まれる前記クライアント変更履歴のそれぞれについて、前記クライアント変更履歴に含まれる前記データＩＤに対応する、前記第１データベースが記憶する前記データに付帯されている前記更新時点が、前記クライアント変更履歴に含まれている前記更新時点よりも後である場合、前記第１データベースが記憶する前記データに付帯される前記更新時点および前記データＩＤを含む衝突情報を生成する衝突検知部を備え、
前記同期情報送信部は、前記衝突情報をさらに含む前記同期情報を前記クライアントに送信し、
前記クライアントは、前記衝突情報に含まれる前記データＩＤに対応する前記データを、前記サーバにアップロードするか前記サーバからダウンロードするかを決定する衝突解消部を備え、
前記ダウンロード要求送信部は、前記衝突解消部がダウンロードすると決定した前記データを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、
前記クライアントは、前記衝突解消部がアップロードすると決定した前記データを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信する解消要求送信部を備え、
前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録する解消処理部を備えること、
を特徴とするデータ同期システム。
【請求項１５】
請求項１４に記載のデータ同期システムであって、
前記データにはさらに、前記データに所定のアルゴリズムを適用して求められるデータであるキーが付帯され、
前記サーバ変更履歴および前記クライアント変更履歴にはそれぞれ前記キーが含まれ、
前記サーバは、前記第１データベースに記憶されている前記データのうち、前記キーが前記同期要求に含まれる前記クライアント変更履歴のいずれかに含まれる前記キーと一致するものを検索し、前記検索したデータを示す前記データＩＤを含む重複情報を生成する重複検知部を備え、
前記同期情報送信部は、前記重複情報をさらに含む前記同期情報を前記クライアントに送信し、
前記クライアントは、前記重複情報に含まれる前記データＩＤに対応する前記データのうち、削除すべきものを決定する重複解消部を備え、
前記解消要求送信部は、前記重複解消部が削除すべきと決定した前記データを示す前記データＩＤを含む解消情報をさらに前記解消要求に含めて前記サーバに送信し、
前記解消処理部はさらに、前記解消要求に含まれる前記解消情報に含まれる前記データＩＤに対応する前記データを前記第１データベースから削除すること、
を特徴とするデータ同期システム。
【請求項１６】
請求項１４に記載のデータ同期システムであって、
前記データには前記データＩＤが付帯されており、
前記データＩＤには、前記クライアントにおいて一意な識別情報であるローカルＩＤと、前記サーバおよび前記クライアントの両方において一意な識別情報であるグローバルＩＤとが含まれ、
前記クライアントは、
前記クライアントにおいて前記データが作成された場合に、前記作成されたデータに前記ローカルＩＤを割り当てるローカルＩＤ割当部と、
前記作成されたデータに割り当てられた前記ローカルＩＤのうち、前記グローバルＩＤが割り当てられていないものである未取得ＩＤを記憶する未取得ＩＤ記憶部と、
を備え、
前記同期要求送信部はさらに、前記未取得ＩＤ記憶部に記憶されている前記未取得ＩＤを含めて前記同期要求を前記サーバに送信し、
前記サーバは、前記同期要求に含まれている前記未取得ＩＤに対応する前記グローバルＩＤを前記第１データベースから検索し、前記未取得ＩＤに対応する前記グローバルＩＤがある場合には、当該対応するグローバルＩＤを前記第１データベースから取得し、前記取得したグローバルＩＤおよび前記未取得ＩＤを含むＩＤ情報を生成し、前記ローカルＩＤに対応する前記グローバルＩＤがない場合には、新たに前記グローバルＩＤを割り当て、前記割り当てたグローバルＩＤおよび前記ローカルＩＤを含むＩＤ情報を生成するグローバルＩＤ取得部を備え、
前記同期情報送信部はさらに、前記ＩＤ情報を含めて前記同期情報を前記クライアントに送信し、
前記クライアントは、前記同期情報に含まれている前記ＩＤ情報のそれぞれについて、前記ＩＤ情報に含まれる前記未取得ＩＤに対応する前記データを前記第１データベースから検索し、前記検索したデータに付帯される前記データＩＤに、前記ＩＤ情報に含まれる前記グローバルＩＤを設定するグローバルＩＤ登録部を備えること、
を特徴とするデータ同期システム。
【請求項１７】
サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、
前記サーバは、更新時点を含むデータを記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、
前記クライアントは、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶し、前記アンカー時点を含む同期要求を前記サーバに送信し、
前記サーバは、前記更新時点が前記アンカー時点よりも後の前記データである更新データを前記第１データベースから検索し、前記各更新データについて前記更新データを示すデータＩＤおよび前記更新データの前記更新時点を含む変更情報を生成し、前記変更情報を含む同期情報を前記クライアントに送信し、
前記クライアントは、前記変更情報に対応する前記データのうち、ダウンロードすべきものである取得データを決定し、前記取得データを示すデータＩＤを含むダウンロード要求を前記サーバに送信し、
前記サーバは、前記ダウンロード要求に含まれる前記データＩＤに対応する前記データを前記第１データベースから取得し、前記取得したデータを含むダウンロード情報を前記クライアントに送信し、
前記クライアントは、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録すること、
を特徴とするデータ同期方法。
【請求項１８】
請求項１７に記載のデータ同期方法であって、
前記クライアントは、前記同期情報に含まれている前記各変更情報について、前記変更情報に含まれる前記データＩＤに対応する前記データの前記更新時点を前記第２データベースから読み出し、前記読み出した更新時点が前記変更情報に含まれる前記更新時点よりも新しい場合に、前記データＩＤに対応する前記データを前記サーバにアップロードするか前記サーバからダウンロードするかを決定し、
前記クライアントは、ダウンロードすると決定した前記データを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、
前記クライアントは、アップロードすると決定した前記データを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信し、
前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録すること、
を特徴とするデータ同期方法。
【請求項１９】
サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、
前記サーバは、データに更新時点を付帯させて記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、
前記サーバは、前記第１データベースに対するデータの変更履歴を新しい順に所定数のみ記憶しており、
前記サーバが記憶する前記変更履歴であるサーバ変更履歴は、変更の対象となった前記データを示すデータＩＤと、当該データに付帯されている前記更新時点とを含み、
前記クライアントが、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶し、
前記クライアントが、前記データを取得するための条件および前記アンカー時点を含む同期要求を前記サーバに送信し、
前記サーバが、前記同期要求に含まれる前記条件にマッチする前記データに対応する前記サーバ変更履歴のうち、前記更新時点が前記アンカー時点より後のものを取得し、
前記サーバが、前記第１データベースから、前記同期要求に含まれる前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点より後であり、かつ前記サーバが記憶している前記サーバ変更履歴の前記更新時点のうち最も古いものであるバウンダリ時点より前である前記データを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む変更情報を生成し、
前記サーバが、前記バウンダリ時点、前記取得したサーバ変更履歴、および前記変更情報を含む同期情報を前記クライアントに送信し、
前記クライアントが、前記同期情報に含まれる前記サーバ変更履歴または前記変更情報に対応する前記データからダウンロードすべきものを決定し、
前記クライアントが、前記第２データベースから、前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点から前記バウンダリ時点までの間であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む陳腐化情報を生成し、
前記クライアントが、前記決定したデータを示す取得データＩＤおよび前記陳腐化情報を含むダウンロード要求を前記サーバに送信し、
前記サーバが、前記ダウンロード要求に含まれる前記陳腐化情報に対応する前記データのうち、前記更新時点が前記陳腐化情報に含まれる前記更新時点よりも新しいものと、前記取得データＩＤに対応する前記データとを前記第１データベースから取得し、
前記サーバが、前記取得したデータを含むダウンロード情報を前記クライアントに送信し、
前記クライアントが、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録すること、
を特徴とするデータ同期方法。
【請求項２０】
請求項１９に記載のデータ同期方法であって、
前記クライアントは、前記第２データベースにおけるデータの変更履歴を記憶しており、
前記クライアントが記憶する前記変更履歴であるクライアント変更履歴は、変更の対象となった前記データを示す前記データＩＤと、前記データに付帯されている前記更新時点とを含み、
前記クライアントは、前記条件にマッチする前記データに対応する前記クライアント変更履歴を取得し、前記取得したクライアント変更履歴を前記同期要求に設定して前記サーバに送信し、
前記サーバは、前記同期要求に含まれる前記クライアント変更履歴のそれぞれについて、前記クライアント変更履歴に含まれる前記データＩＤに対応する、前記第１データベースが記憶する前記データに付帯されている前記更新時点が、前記クライアント変更履歴に含まれている前記更新時点よりも後である場合、前記第１データベースが記憶する前記データに付帯される前記更新時点および前記データＩＤを含む衝突情報を生成し、
前記サーバは、前記衝突情報をさらに含む前記同期情報を前記クライアントに送信し、
前記クライアントは、前記衝突情報に含まれる前記データＩＤに対応する前記データを、前記サーバにアップロードするか前記サーバからダウンロードするかを決定し、
前記クライアントは、前記ダウンロードすると決定したデータを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、
前記クライアントは、前記アップロードすると決定したデータを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信し、
前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録すること、
を特徴とするデータ同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ同期システムおよびデータ同期方法に関する。
【背景技術】
【０００２】
携帯電話などのクライアントがサーバとの間でデータを同期することが行われている。クライアントは定期的に変更されたデータの有無を問い合わせ、更新されたデータがある場合にはそのデータをダウンロードする。従来、サーバは変更履歴を残すことにより、データの変更の有無を管理していた。例えば、特許文献１では、第２のデータベースの更新履歴を保存し、更新履歴の件数が閾値よりも大きいときに同期を開始することで、一度のデータ同期で大量の情報が送受信されることのないようにしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−８６８００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、携帯電話などのクライアントが常にサーバと通信可能になっているとは限らず、サーバとクライアントとの間の通信が不能である時間が長い場合には、可能になるまでの間の全ての変更履歴を記憶しておく必要があるし、また、サーバが複数のクライアントと通信を行う場合には、クライアントごとにどこまでを同期したのか管理しておく必要があった。
【０００５】
本発明は、このような背景を鑑みてなされたものであり、クライアントとサーバとの間でデータを同期する場合にサーバの負荷を低減することのできるデータ同期システムおよびデータ同期方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するための本発明の主たる発明は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、前記サーバは、更新時点を含むデータを記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、前記クライアントは、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶するアンカー時点記憶部と、前記アンカー時点を含む同期要求を前記サーバに送信する同期要求送信部と、を備え、前記サーバは、前記更新時点が前記アンカー時点よりも後の前記データである更新データを前記第１データベースから検索し、前記各更新データについて前記更新データを示すデータＩＤおよび前記更新データの前記更新時点を含む変更情報を生成する変更情報取得部と、前記変更情報を含む同期情報を前記クライアントに送信する同期情報送信部と、を備え、前記クライアントは、前記変更情報に対応する前記データのうち、ダウンロードすべきものである取得データを決定するダウンロード決定部と、前記取得データを示すデータＩＤを含むダウンロード要求を前記サーバに送信するダウンロード要求送信部と、を備え、前記サーバは、前記ダウンロード要求に含まれる前記データＩＤに対応する前記データを前記第１データベースから取得するデータ取得部と、前記取得したデータを含むダウンロード情報を前記クライアントに送信するダウンロード情報送信部と、を備え、前記クライアントは、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録する更新処理部を備えることとする。
【０００７】
また、本発明のデータ同期システムでは、前記ダウンロード決定部は、前記各変更情報について、前記変更情報に含まれる前記データＩＤに対応する前記データに含まれる前記更新時点を前記第２データベースから取得し、前記第２データベースから取得した前記更新時点が前記変更情報に含まれる前記更新時点よりも古い場合には、当該データをダウンロードすることを決定し、前記第２データベースから取得した前記更新時点が前記変更情報に含まれる前記更新時点よりも新しい場合には、ユーザからの設定に応じて、当該データをダウンロードするか否かを決定するようにしてもよい。
【０００８】
また、本発明のデータ同期システムでは、前記サーバは、前記第１データベースから削除された前記データを示す前記データＩＤおよび削除時点を含む変更履歴を記憶するサーバ変更履歴記憶部と、前記同期要求に含まれる前記アンカー時点よりも後の前記削除時点を含む前記変更履歴を前記サーバ変更履歴記憶部から取得する変更履歴取得部とを備え、前記同期情報送信部は、前記変更履歴取得部が取得した前記変更履歴を前記同期情報にさらに含め、前記クライアントは、前記同期情報に含まれる前記変更履歴に対応する前記データを前記第２データベースから削除する削除処理部を備えるようにしてもよい。
【０００９】
また、本発明のデータ同期システムでは、前記サーバは、前記第１データベースから削除されたデータについて、前記削除されたデータを示すデータＩＤおよび削除時点を含む変更履歴を、前記削除時点の新しい順に所定数記憶するサーバ変更履歴記憶部を備え、前記変更情報取得部は、前記アンカー時点より後の前記削除時点を含む前記変更履歴を前記サーバ変更履歴記憶部から取得し、前記同期情報送信部は、前記変更情報に加えて、前記サーバ変更履歴記憶部が記憶している前記変更履歴に含まれる最も古い前記削除時点であるバウンダリ時点、および前記取得した変更履歴を前記同期情報に含めて前記クライアントに送信し、前記クライアントは、前記同期情報に含まれる前記変更履歴に対応する前記データを前記第２データベースから削除する削除処理部と、前記アンカー時点が前記バウンダリ時点より前である場合に、前記第２データベースに記憶されている前記データのうち、前記データの前記更新時点が前記バウンダリ時点よりも前であり、かつ、前記データを示すデータＩＤを含む前記変更情報が前記同期情報に含まれていないものを検索し、前記検索した各データについて前記データを示すデータＩＤおよび前記データの前記更新時点を含む陳腐化情報を生成する陳腐化情報取得部と、を備え、前記ダウンロード要求送信部は、前記取得データＩＤに加えて、前記陳腐化情報を前記ダウンロード要求に含めて前記サーバに送信し、前記データ取得部はさらに、前記ダウンロード要求に含まれる前記各陳腐化情報について、前記陳腐化情報に対応する前記データが前記第１データベースに記憶されているか否かを判定し、前記第１データベースに記憶されていないと判定した前記データを示す前記データＩＤを、削除されたデータを示す削除ＩＤとして前記ダウンロード情報に含め、前記削除処理部は、前記ダウンロード情報に含まれる前記削除ＩＤに対応する前記データを前記第２データベースから削除するようにしてもよい。
【００１０】
また、本発明のデータ同期システムでは、前記クライアントは、前記同期情報に含まれている前記各変更情報について、前記変更情報に含まれる前記データＩＤに対応する前記データの前記更新時点を前記第２データベースから読み出し、前記読み出した更新時点が前記変更情報に含まれる前記更新時点よりも新しい場合に、前記データＩＤに対応する前記データを前記サーバにアップロードするか前記サーバからダウンロードするかを決定する衝突解消部を備え、前記ダウンロード要求送信部は、前記衝突解消部がダウンロードすると決定した前記データを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、前記クライアントは、前記衝突会勝負がアップロードすると決定した前記データを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信する解消要求送信部を備え、前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録する解消処理部を備えるようにしてもよい。
【００１１】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、前記サーバは、データに更新時点を付帯させて記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、前記サーバは、前記第１データベースに対するデータの変更履歴を新しい順に所定数のみ記憶するサーバ変更履歴記憶部を備え、前記サーバ変更履歴記憶部が記憶する前記変更履歴であるサーバ変更履歴は、変更の対象となった前記データを示すデータＩＤと、当該データに付帯されている前記更新時点とを含み、前記クライアントは、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶するアンカー記憶部と、前記データを取得するための条件および前記アンカー時点を含む同期要求を前記サーバに送信する同期要求送信部と、前記サーバは、前記サーバ変更履歴記憶部から、前記同期要求に含まれる前記条件にマッチする前記データに対応する前記サーバ変更履歴のうち、前記更新時点が前記アンカー時点より後のものを取得する変更履歴取得部と、前記第１データベースから、前記同期要求に含まれる前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点より後であり、かつ前記サーバ変更履歴記憶部に記憶されている最も古い前記更新時点であるバウンダリ時点より前であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む変更情報を生成する変更情報取得部と、前記バウンダリ時点、前記取得したサーバ変更履歴、および前記変更情報を含む同期情報を前記クライアントに送信する同期情報送信部と、を備え、前記クライアントは、前記同期情報に含まれる前記サーバ変更履歴または前記変更情報に対応する前記データからダウンロードすべきものを決定するダウンロード決定部と、前記第２データベースから、前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点から前記バウンダリ時点までの間であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む陳腐化情報を生成する陳腐化情報取得部と、前記決定したデータを示す取得データＩＤおよび前記陳腐化情報を含むダウンロード要求を前記サーバに送信するダウンロード要求送信部と、を備え、前記サーバは、前記ダウンロード要求に含まれる前記陳腐化情報に対応する前記データのうち、前記更新時点が前記陳腐化情報に含まれる前記更新時点よりも新しいものと、前記取得データＩＤに対応する前記データとを前記第１データベースから取得するデータ取得部と、前記取得したデータを含むダウンロード情報を前記クライアントに送信するダウンロード情報送信部と、を備え、前記クライアントは、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録する更新処理部を備えることとする。
【００１２】
また、本発明のデータ同期システムでは、前記サーバ変更履歴にはさらに、データの変更がデータの追加、更新または削除のいずれであったかを示す変更種別情報が含まれ、前記クライアントが、前記同期情報の受信に応じて、前記同期情報に含まれる前記サーバ変更履歴のうち、前記変更種別情報が削除を示すものについて、前記サーバ変更履歴に含まれる前記データＩＤが示す前記データを前記第２データベースから削除する削除処理部を備えるようにしてもよい。
【００１３】
また、本発明のデータ同期システムでは、前記データ取得部は、前記ダウンロード要求に含まれる前記陳腐化情報のうち、前記陳腐化情報に含まれる前記データＩＤに対応する前記データが前記第１データベースに登録されていないものについて、前記陳腐化情報に含まれる前記データＩＤを含む削除情報を前記ダウンロード情報に設定し、前記クライアントは、前記ダウンロード情報に前記削除情報が含まれている場合に、前記削除情報に含まれる前記データＩＤに対応する前記データを前記第２データベースから削除する削除処理部を備えるようにしてもよい。
【００１４】
また、本発明のデータ同期システムでは、前記データには、前記データの内容に基づいて生成される、前記条件に前記データがマッチするか否かを判定するための情報であるカラムがさらに付帯され、前記サーバ変更履歴には、データの変更がデータの追加、更新または削除のいずれであったかを示す変更種別情報と、前記データに付帯される前記カラムとがさらに含まれ、前記変更履歴取得部は、前記サーバ変更履歴のうち、前記カラムが前記同期要求に含まれる前記条件にマッチし、かつ前記更新時点が前記アンカー時点より後のものを取得し、前記変更情報取得部は、前記第１データベースに記憶されている前記データのうち、前記データに付帯される前記カラムが前記同期要求に含まれる前記条件にマッチするとともに、前記更新時点が前記アンカー時点より後であり、かつ前記バウンダリ時点より前であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤ、前記データに付帯される前記更新時点、および前記データに含まれる前記カラムを前記変更情報に設定し、前記陳腐化情報取得部は、前記第２データベースに記憶されるデータのうち、前記カラムが前記条件にマッチし、かつ前記更新時点が前記アンカー時点から前記バウンダリ時点までの間であるものを検索するようにしてもよい。
【００１５】
また、本発明のデータ同期システムでは、前記データには、前記データの内容に基づいて生成される、前記クライアントにおいて前記データをダウンロードすべきか否かを決定するための情報であるヒントがさらに付帯され、前記サーバ変更履歴には、データの変更がデータの追加、更新または削除のいずれであったかを示す変更種別情報と、前記データの付帯される前記ヒントとがさらに含まれ、前記変更情報取得部は、前記検索した各データについて、前記データに付帯される前記ヒントをさらに前記変更情報に含め、前記ダウンロード決定部は、前記サーバ変更履歴または前記変更情報に含まれる前記ヒントに基づいて前記ダウンロードすべきデータを決定するようにしてもよい。
【００１６】
また、本発明のデータ同期システムでは、前記ダウンロード決定部は、前記サーバ変更履歴または前記変更情報に含まれる前記ヒントを出力し、ユーザが選択した前記出力したヒントに対応する前記データを、前記ダウンロードすべきデータとして決定するようにしてもよい。
【００１７】
また、本発明のデータ同期システムは、前記データには前記更新時点が付帯され、前記サーバは、前記第１データベースに対するデータの変更が行われるごとに大きくなる数値を前記更新時点として生成する時点生成部を備え、前記第１データベースに書き込まれる際に、前記データには前記時点生成部が生成した前記更新時点が付帯されるようにしてもよい。
【００１８】
また、本発明のデータ同期システムでは、前記データには前記更新時点が付帯され、前記サーバは、前記第１データベースに対するデータの変更が行われる際に、前記サーバにおけるタイムスタンプを取得し、前記取得したタイムスタンプに、前記データの識別情報を連結した値を前記更新時点として生成する時点生成部を備え、前記第１データベースに書き込まれる際に、前記データには前記時点生成部が生成した前記更新時点が付帯されるようにしてもよい。
【００１９】
また、本発明のデータ同期システムでは、前記クライアントは、前記第２データベースにおけるデータの変更履歴を記憶するクライアント変更履歴記憶部を備え、前記クライアント変更履歴記憶部が記憶する前記変更履歴であるクライアント変更履歴は、変更の対象となった前記データを示す前記データＩＤと、前記データに付帯されている前記更新時点とを含み、前記同期要求送信部は、前記条件にマッチする前記データに対応する前記クライアント変更履歴を前記クライアント変更履歴記憶部から取得し、前記取得したクライアント変更履歴を前記同期要求に設定して前記サーバに送信し、前記サーバは、前記同期要求に含まれる前記クライアント変更履歴のそれぞれについて、前記クライアント変更履歴に含まれる前記データＩＤに対応する、前記第１データベースが記憶する前記データに付帯されている前記更新時点が、前記クライアント変更履歴に含まれている前記更新時点よりも後である場合、前記第１データベースが記憶する前記データに付帯される前記更新時点および前記データＩＤを含む衝突情報を生成する衝突検知部を備え、前記同期情報送信部は、前記衝突情報をさらに含む前記同期情報を前記クライアントに送信し、前記クライアントは、前記衝突情報に含まれる前記データＩＤに対応する前記データを、前記サーバにアップロードするか前記サーバからダウンロードするかを決定する衝突解消部を備え、前記ダウンロード要求送信部は、前記衝突解消部がダウンロードすると決定した前記データを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、前記クライアントは、前記衝突解消部がアップロードすると決定した前記データを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信する解消要求送信部を備え、前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録する解消処理部を備えるようにしてもよい。
【００２０】
また、本発明のデータ同期システムでは、前記データにはさらに、前記データにはさらに、前記データに所定のアルゴリズムを適用して求められるデータであるキーが付帯され、前記サーバ変更履歴および前記クライアント変更履歴にはそれぞれ前記キーが含まれ、前記サーバは、前記第１データベースに記憶されている前記データのうち、前記キーが前記同期要求に含まれる前記クライアント変更履歴のいずれかに含まれる前記キーと一致するものを検索し、前記検索したデータを示す前記データＩＤを含む重複情報を生成する重複検知部を備え、前記同期情報送信部は、前記重複情報をさらに含む前記同期情報を前記クライアントに送信し、前記クライアントは、前記重複情報に含まれる前記データＩＤに対応する前記データのうち、削除すべきものを決定する重複解消部を備え、前記解消要求送信部は、前記重複解消部が削除すべきと決定した前記データを示す前記データＩＤを含む解消情報をさらに前記解消要求に含めて前記サーバに送信し、前記解消処理部はさらに、前記解消要求に含まれる前記解消情報に含まれる前記データＩＤに対応する前記データを前記第１データベースから削除するようにしてもよい。
【００２１】
また、本発明のデータ同期システムでは、前記データには前記データＩＤが付帯されており、前記データＩＤには、前記クライアントにおいて一意な識別情報であるローカルＩＤと、前記サーバおよび前記クライアントの両方において一意な識別情報であるグローバルＩＤとが含まれ、前記クライアントは、前記クライアントにおいて前記データが作成された場合に、前記作成されたデータに前記ローカルＩＤを割り当てるローカルＩＤ割当部と、前記作成されたデータに割り当てられた前記ローカルＩＤのうち、前記グローバルＩＤが割り当てられていないものである未取得ＩＤを記憶する未取得ＩＤ記憶部と、を備え、前記同期要求送信部はさらに、前記未取得ＩＤ記憶部に記憶されている前記未取得ＩＤを含めて前記同期要求を前記サーバに送信し、前記サーバは、前記同期要求に含まれている前記未取得ＩＤに対応する前記グローバルＩＤを前記第１データベースから検索し、前記未取得ＩＤに対応する前記グローバルＩＤがある場合には、当該対応するグローバルＩＤを前記第１データベースから取得し、前記取得したグローバルＩＤおよび前記未取得ＩＤを含むＩＤ情報を生成し、前記ローカルＩＤに対応する前記グローバルＩＤがない場合には、新たに前記グローバルＩＤを割り当て、前記割り当てたグローバルＩＤおよび前記ローカルＩＤを含むＩＤ情報を生成するグローバルＩＤ取得部を備え、前記同期情報送信部はさらに、前記ＩＤ情報を含めて前記同期情報を前記クライアントに送信し、前記クライアントは、前記同期情報に含まれている前記ＩＤ情報のそれぞれについて、前記ＩＤ情報に含まれる前記未取得ＩＤに対応する前記データを前記第１データベースから検索し、前記検索したデータに付帯される前記データＩＤに、前記ＩＤ情報に含まれる前記グローバルＩＤを設定するグローバルＩＤ登録部を備えるようにしてもよい。
【００２２】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、前記サーバは、更新時点を含むデータを記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、前記クライアントは、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶し、前記アンカー時点を含む同期要求を前記サーバに送信し、前記サーバは、前記更新時点が前記アンカー時点よりも後の前記データである更新データを前記第１データベースから検索し、前記各更新データについて前記更新データを示すデータＩＤおよび前記更新データの前記更新時点を含む変更情報を生成し、前記変更情報を含む同期情報を前記クライアントに送信し、前記クライアントは、前記変更情報に対応する前記データのうち、ダウンロードすべきものである取得データを決定し、前記取得データを示すデータＩＤを含むダウンロード要求を前記サーバに送信し、前記サーバは、前記ダウンロード要求に含まれる前記データＩＤに対応する前記データを前記第１データベースから取得し、前記取得したデータを含むダウンロード情報を前記クライアントに送信し、前記クライアントは、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録することとする。
【００２３】
また、本発明のデータ同期方法では、前記クライアントは、前記同期情報に含まれている前記各変更情報について、前記変更情報に含まれる前記データＩＤに対応する前記データの前記更新時点を前記第２データベースから読み出し、前記読み出した更新時点が前記変更情報に含まれる前記更新時点よりも新しい場合に、前記データＩＤに対応する前記データを前記サーバにアップロードするか前記サーバからダウンロードするかを決定し、前記クライアントは、ダウンロードすると決定した前記データを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、前記クライアントは、アップロードすると決定した前記データを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信し、前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録するようにしてもよい。
【００２４】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、前記サーバは、データに更新時点を付帯させて記憶する第１データベースにアクセス可能であり、前記クライアントは、前記サーバから取得したデータを記憶する第２データベースにアクセス可能であり、前記サーバは、前記第１データベースに対するデータの変更履歴を新しい順に所定数のみ記憶しており、前記サーバが記憶する前記変更履歴であるサーバ変更履歴は、変更の対象となった前記データを示すデータＩＤと、当該データに付帯されている前記更新時点とを含み、前記クライアントが、前記サーバから最後に前記データを取得した時点であるアンカー時点を記憶し、前記クライアントが、前記データを取得するための条件および前記アンカー時点を含む同期要求を前記サーバに送信し、前記サーバが、前記同期要求に含まれる前記条件にマッチする前記データに対応する前記サーバ変更履歴のうち、前記更新時点が前記アンカー時点より後のものを取得し、前記サーバが、前記第１データベースから、前記同期要求に含まれる前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点より後であり、かつ前記サーバが記憶している前記サーバ変更履歴の前記更新時点のうち最も古いものであるバウンダリ時点より前である前記データを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む変更情報を生成し、前記サーバが、前記バウンダリ時点、前記取得したサーバ変更履歴、および前記変更情報を含む同期情報を前記クライアントに送信し、前記クライアントが、前記同期情報に含まれる前記サーバ変更履歴または前記変更情報に対応する前記データからダウンロードすべきものを決定し、前記クライアントが、前記第２データベースから、前記条件にマッチする前記データのうち、前記更新時点が前記アンカー時点から前記バウンダリ時点までの間であるものを検索し、前記検索した各データについて、前記データを示す前記データＩＤおよび前記データに付帯される前記更新時点を含む陳腐化情報を生成し、前記クライアントが、前記決定したデータを示す取得データＩＤおよび前記陳腐化情報を含むダウンロード要求を前記サーバに送信し、前記サーバが、前記ダウンロード要求に含まれる前記陳腐化情報に対応する前記データのうち、前記更新時点が前記陳腐化情報に含まれる前記更新時点よりも新しいものと、前記取得データＩＤに対応する前記データとを前記第１データベースから取得し、前記サーバが、前記取得したデータを含むダウンロード情報を前記クライアントに送信し、前記クライアントが、前記ダウンロード情報に含まれる前記データを前記第２データベースに登録することとする。
【００２５】
また、本発明のデータ同期方法では、前記クライアントは、前記第２データベースにおけるデータの変更履歴を記憶しており、前記クライアントが記憶する前記変更履歴であるクライアント変更履歴は、変更の対象となった前記データを示す前記データＩＤと、前記データに付帯されている前記更新時点とを含み、前記クライアントは、前記条件にマッチする前記データに対応する前記クライアント変更履歴を取得し、前記取得したクライアント変更履歴を前記同期要求に設定して前記サーバに送信し、前記サーバは、前記同期要求に含まれる前記クライアント変更履歴のそれぞれについて、前記クライアント変更履歴に含まれる前記データＩＤに対応する、前記第１データベースが記憶する前記データに付帯されている前記更新時点が、前記クライアント変更履歴に含まれている前記更新時点よりも後である場合、前記第１データベースが記憶する前記データに付帯される前記更新時点および前記データＩＤを含む衝突情報を生成し、前記サーバは、前記衝突情報をさらに含む前記同期情報を前記クライアントに送信し、前記クライアントは、前記衝突情報に含まれる前記データＩＤに対応する前記データを、前記サーバにアップロードするか前記サーバからダウンロードするかを決定し、前記クライアントは、前記ダウンロードすると決定したデータを示す前記データＩＤをさらに含む前記ダウンロード要求を前記サーバに送信し、前記クライアントは、前記アップロードすると決定したデータを前記第２データベースから読み出し、読み出した前記データを含む解消要求を前記サーバに送信し、前記サーバは、前記解消要求に含まれている前記データを前記第１データベースに登録するようにしてもよい。
【００２６】
その他本願が開示する課題やその解決方法については、発明の実施形態の欄および図面により明らかにされる。
【発明の効果】
【００２７】
本発明によれば、クライアントとサーバとの間でデータを同期する場合にサーバの負荷を低減することができる。
【図面の簡単な説明】
【００２８】
【図１】通信システムの全体構成を示す図である。
【図２】クライアント１０のハードウェア構成を示す図である。
【図３】サーバ２０のハードウェア構成を示す図である。
【図４】クライアント１０のソフトウェア構成を示す図である。
【図５】クライアントレコードの構成例を示す図である。
【図６】アンカー記憶部１３２の構成例を示す図である。
【図７】第１の実施形態に係る同期要求４１の構成例を示す図である。
【図８】第１の実施形態に係る同期情報４２の構成例を示す図である。
【図９】ダウンロード要求４３の構成例を示す図である。
【図１０】ダウンロード情報の構成例を示す図である。
【図１１】サーバ２０のソフトウェア構成を示す図である。
【図１２】サーバレコードの構成例を示す図である。
【図１３】サーバ変更履歴の構成例を示す図である。
【図１４】第１の実施形態に係るデータの同期処理の流れを説明する図である。
【図１５】第１の実施形態に係る同期要求４１の作成処理の流れを示す図である。
【図１６】第１の実施形態に係る同期要求４１への対応処理の流れを示す図である。
【図１７】アンカー時点が時点ｔ１であった場合の変更履歴および変更特徴情報の関係を説明する図である。
【図１８】アンカー時点が時点ｔ５であった場合の変更履歴および変更特徴情報の関係を説明する図である。
【図１９】第１の実施形態に係る同期情報４２への対応処理の流れを示す図である。
【図２０】第１の実施形態に係るダウンロード要求４３の対応処理の流れを説明する図である。
【図２１】第１の実施形態に係るダウンロード情報４４の対応処理の流れを示す図である。
【図２２】クライアント１０において実行される適用処理の流れを示す図である。
【図２３】第２の実施形態に係るクライアント１０のソフトウェア構成を示す図である。
【図２４】第２の実施形態に係るクライアントレコードの構成例を示す図である。
【図２５】クライアント変更履歴の構成例を示す図である。
【図２６】重複記憶部１３６の構成例を示す図である。
【図２７】クライアント変更検知部１１０による処理の流れを示す図である。
【図２８】ステップＳ４０７に示す重複判定処理の流れを示す図である。
【図２９】ステップＳ４０８に示す変更履歴登録処理の流れを示す図である。
【図３０】第２の実施形態に係る同期要求４１の構成例を示す図である。
【図３１】第２の実施形態に係る同期情報４２の構成例を示す図である。
【図３２】解消要求４５の構成例を示す図である。
【図３３】解消結果情報４６の構成例を示す図である。
【図３４】第２の実施形態に係るサーバ２０のソフトウェア構成を示す図である。
【図３５】第２の実施形態に係るサーバレコードの構成例を示す図である。
【図３６】第２の実施形態に係るデータの同期処理の流れを説明する図である。
【図３７】第２の実施形態に係る同期要求の作成処理の流れを示す図である。
【図３８】第２の実施形態に係る同期要求への対応処理の流れを示す図である。
【図３９】サーバ２０において実行されるＧＵＩＤの割当処理の流れを示す図である。
【図４０】サーバ２０において実行される衝突および重複の検知処理の流れを示す図である。
【図４１】第２の実施形態に係る同期情報４２への対応処理の流れを示す図である。
【図４２】クライアント１０において実行されるＧＵＩＤの割当処理
【図４３】第２の実施形態に係るダウンロード情報４４への対応処理の流れを示す図である。
【図４４】クライアント１０において実行される衝突解消処理の流れを示す図である。
【図４５】クライアント１０において実行される重複解消処理の流れを示す図である。
【図４６】解消要求４５に対応する処理の流れを示す図である。
【図４７】解消結果情報４６に対応する処理の流れを示す図である。
【発明を実施するための形態】
【００２９】
＝＝全体構成＝＝
図１は、本発明の一実施形態に係る通信システムの全体構成を示す図である。本実施形態の通信システムは、クライアント１０およびサーバ２０を含んで構成される。クライアント１０およびサーバ２０はそれぞれ通信ネットワーク３０に接続されており、クライアント１０およびサーバ２０は通信ネットワーク３０を介して通信可能になっている。本実施形態の通信システムは、サーバ２０とクライアント１０との間のデータの同期を行うものである。
【００３０】
サーバ２０は、例えば、パーソナルコンピュータやワークステーションなどのコンピュータである。サーバ２０は、データを記憶するデータベースを備える（以下、サーバ２０が備えるデータベースを「サーバデータベース２１」という。本発明の「第１データベース」に該当する。）。サーバ２０が管理するデータは、例えば、写真などの画像データや、電話帳などのデータなどである。サーバ２０では、サーバデータベース２１に対する変更履歴が最新の所定数個のみ記録される。所定数を越えた変更履歴は古いものから順に削除されていくものとする。
【００３１】
クライアント１０は、例えば、携帯電話端末やＰＤＡ（Personal Data Assistant）、パーソナルコンピュータなどのコンピュータである。クライアント１０も、データを記憶するデータベースを備えている（以下、クライアントが備えるデータベースを「クライアントデータベース１１」という。本発明の「第２データベース」に該当する。）。クライアントデータベース１１とサーバデータベース２１とが同期される。
【００３２】
本実施形態では、各データには、最後に更新された時点（以下、「更新時点」という。データが新しく作成されたときにも、作成された時点が更新時点にも設定されるものとする。）が付帯され、データの新古は更新時点の比較により行うものとする。本実施形態において、データの作成や更新、削除（以下、データの作成、更新および削除をまとめてデータの「変更」という。）がなされた時点とは、サーバ２０におけるサーバデータベース２１に対して行われた変更が何番目に行われたものであったかを表す値であるものとする。すなわち、サーバ２０においては１時点につき１つのデータのみが変更の対象となるものとし、サーバ２０において、サーバデータベース２１に対するデータの変更が行われる度に、時点を表す値がインクリメントしていくものとする。
【００３３】
＝＝ハードウェア構成＝＝
図２は、クライアント１０のハードウェア構成を示す図である。クライアント１０は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、通信インタフェース１０４、入力装置１０５、および出力装置１０６を備えている。
【００３４】
記憶装置１０３は、各種のデータやプログラムを記憶する、例えば、ハードディスクドライブやフラッシュメモリ、ＣＤ−ＲＯＭドライブなどである。ＣＰＵ１０１は、記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより各種の機能を実現する。通信インタフェース１０４は、通信ネットワーク３０に接続するためのインタフェースである。通信インタフェース１０４は、例えば、イーサネット（登録商標）に接続するためのアダプタ、電話回線網に接続するためのモデム、無線通信網に接続するための無線通信器などである。入力装置１０５は、クライアント１０を操作するユーザからデータの入力を受け付ける、例えば、キーパッドやタッチパネル、キーボード、マウスなどである。出力装置１０６は、データを出力する、例えば、ディスプレイやプリンタなどである。
【００３５】
図３は、サーバ２０のハードウェア構成を示す図である。サーバ２０は、ＣＰＵ２０１、メモリ２０２、記憶装置２０３、通信インタフェース２０４、入力装置２０５、および出力装置２０６を備えている。
【００３６】
記憶装置２０３は、各種のデータやプログラムを記憶する、例えば、ハードディスクドライブやフラッシュメモリ、ＣＤ−ＲＯＭドライブなどである。ＣＰＵ２０１は、記憶装置２０３に記憶されているプログラムをメモリ２０２に読み出して実行することにより各種の機能を実現する。通信インタフェース２０４は、通信ネットワーク３０に接続するためのインタフェースである。通信インタフェース２０４は、例えば、イーサネット（登録商標）に接続するためのアダプタ、電話回線網に接続するためのモデム、無線通信網に接続するための無線通信器などである。入力装置２０５は、サーバ２０を操作するユーザからデータの入力を受け付ける、例えば、キーボードやマウスなどである。出力装置２０６は、データを出力する、例えば、ディスプレイやプリンタなどである。
【００３７】
＝＝本実施形態の概要＝＝
本実施形態の通信システムでは、クライアント１０とサーバ２０との間でデータが同期される。下記第１の実施形態では、クライアント１０ではデータの更新が行われず、サーバ２０においてのみデータの更新が行われる場合を想定し、下記第２の実施形態では、クライアント１０およびサーバ２０の両方においてデータが更新される場合を想定する。
【００３８】
本実施形態の通信システムでは、クライアント１０が主動的にデータの同期を行う。データの同期の手順は以下のようなものになる。  
（１）クライアント１０とサーバ２０との間で、それぞれにおいて変更されたデータについての情報が交換される。  
（１．１）クライアント１０からサーバ２０へ、クライアント１０において更新されたデータについての情報が送信される。なお、クライアント１０においてデータが更新されない場合には、この手順は省略される。  
（１．２）サーバ２０からクライアント１０へ、サーバ２０において更新されたデータについての情報が送信される。  
（１．３）クライアント１０は、データの競合を検出し、競合を解消する。データの競合とは、データの衝突および重複である。データの衝突とは、クライアント１０およびサーバ２０の両方において同じレコードに対して変更が行われたことをいう。データの重複とは、クライアント１０とサーバ２０との両方で異なるデータを更新したことにより、異なるデータが同一あるいは類似の内容になることをいう。本実施形態では、競合の解消は、競合関係にある２つのデータ（例えば、衝突するクライアント１０のデータおよびサーバ２０のデータ、あるいは、重複する２つのデータ）のいずれかを選択することにより行うものとする。
【００３９】
（２）クライアント１０は、サーバ２０からダウンロードするべきデータをダウンロードする。  
（３）クライアント１０は、サーバ２０に反映すべきデータをサーバ２０にアップロードする。
【００４０】
以上のような手順（１）〜（３）を繰り返すことによりクライアント１０とサーバ２０との間でデータが同期されることになる。なお、上記の手順は順番を変えて実行することもできる。  
以下、詳細に付いて説明する。
【００４１】
＝＝第１の実施形態＝＝
第１の実施形態では、クライアント１０においてデータの更新が行われないものとする。また、第１の実施形態では、サーバ２０において管理されるデータは大量であり、その全てをクライアント１０にダウンロードすることはできないものとする。
【００４２】
第１の実施形態では、クライアント１０が、サーバ２０からサーバ２０において追加、変更、または削除されたデータに関する情報を取得し、その中から必要なデータを選択的にダウンロードするようにしている。すなわち、サーバ２０は、クライアント１０における同期の状況に関する管理を行わず、クライアント１０がユーザに必要なデータを、選択的にダウンロードを行うようにしている。
【００４３】
＝＝クライアント１０のソフトウェア構成＝＝
図４は、第１の実施形態に係るクライアント１０のソフトウェア構成を示す図である。同図に示すように、クライアント１０は、クライアントデータベース１１、フィルタ選択部１１１、同期要求送信部１１２、同期情報受信部１１３、削除処理部１１４、ダウンロード決定部１１５、アンカー更新部１１６、陳腐化情報取得部１１７、ダウンロード要求送信部１１８、ダウンロード情報受信部１１９、更新処理部１２０、クライアントＩＤ記憶部１３１、アンカー記憶部１３２を備えている。なお、フィルタ選択部１１１、同期要求送信部１１２、同期情報受信部１１３、削除処理部１１４、ダウンロード決定部１１５、アンカー更新部１１６、陳腐化情報取得部１１７、ダウンロード要求送信部１１８、ダウンロード情報受信部１１９、更新処理部１２０は、クライアント１０が備えるＣＰＵ１０１が記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより実現される。また、クライアントデータベース１１、クライアントＩＤ記憶部１３１、アンカー記憶部１３２は、クライアント１０が備えるメモリ１０２や記憶装置１０３が提供する記憶領域として実現される。クライアントデータベース１１は、クライアント１０とは異なるコンピュータ（データベースサーバ）により提供されるようにしてもよい。この場合、クライアント１０は、例えば、通信ネットワーク３０を介してデータベースサーバにアクセス可能に接続されるようにする。
【００４４】
クライアントデータベース１１は、サーバ２０から取得したデータを記憶する。図５は、クライアントデータベース１１に記憶されるデータ（以下、「クライアントレコード」ともいう。）の構成例を示す図である。クライアントレコードには、ＧＵＩＤ（Globally Unique IDentifier）、更新時点、更新可能性フラグ、削除可能性フラグ、キー、カラム、ヒント、およびデータの本体が含まれている。
【００４５】
ＧＵＩＤ（本発明の「データＩＤ」および「グローバルＩＤ」に該当する。）は、サーバ２０によりデータに割り当てられる識別情報であり、本実施形態の通信システムにおいて一意な番号である。更新時点は、サーバ２０においてデータが最後に更新された時点を示す。更新可能性フラグは、データがサーバ２０において更新されている可能性があることを示し、削除可能性フラグは、データがサーバ２０において削除されている可能性があることを示す。キーは、クライアントレコードの重複を判定するためのデータであり、データ本体に基づいて作成される。  
キーは、例えば、データ本体がアドレス帳のデータである場合には、電話番号や氏名などの文字列を連結して作成することができ、データ本体が電子メールのデータである場合には、電子メールの名宛人（Ｔｏ）、差出人（Ｆｒｏｍ）、日付（Ｄａｔｅ）、および件名（Ｓｕｂｊｅｃｔ）に設定されている文字列を連結して作成することができる。  
カラムは、データがフィルタ条件を満たすか否かを判定するために用いるものであり、データ本体の一部である。ヒントは、サーバ２０からデータをダウンロードするか否かを決定するための情報である。本実施形態では、ヒントには、データの重要度が含まれているものとするが、例えば、データ本体がアドレス帳のデータである場合には氏名とし、データ本体が電子メールのデータである場合には、電子メールの件名と差出人の文字列を結合したものとして、ユーザがデータの内容を把握することができるようにする。また、ヒントには、例えば、データの重要度やカテゴリ、データサイズ、データ内容の要約など各種のメタデータを含めることもできる。
【００４６】
クライアントＩＤ記憶部１３１は、クライアント１０の識別情報（以下、「クライアントＩＤ」という。）を記憶する。本実施形態では、クライアントＩＤ記憶部１３１には、予めクライアントＩＤが記憶されているものとする。
【００４７】
アンカー記憶部１３２は、最後に同期した時点（以下、「アンカー時点」という。）を記憶する。なお、アンカー時点以後に変更されたデータのみが同期の対象となる。図６は、アンカー記憶部１３２の構成例を示す図である。アンカー記憶部１３２は、サーバ２０に管理されているデータを抽出するための条件（以下、「フィルタ条件」という。）に対応付けてアンカー時点を記憶する。
【００４８】
フィルタ選択部１１１は、サーバ２０からデータを取得する際に用いるフィルタ条件をアンカー記憶部１３２から選択する。フィルタ選択部１１１は、例えば、アンカー記憶部１３２に記憶されているフィルタ条件を一覧出力して、ユーザからフィルタ条件の指定を受け付けるようにしてもよいし、入力装置１０５を介してユーザからフィルタ条件の入力を受け付けるようにしてもよい。
【００４９】
同期要求送信部１１２は、同期を行うためのコマンド（以下、「同期要求４１」という。）をサーバ２０に送信する。図７は、同期要求４１の構成例を示す図である。同期要求４１には、クライアントＩＤ、フィルタ条件およびアンカー時点が設定される。同期要求送信部１１２は、クライアントＩＤ記憶部１３１に記憶されているクライアントＩＤを同期要求４１に設定し、フィルタ選択部１１１が選択したフィルタ条件（以下、「選択フィルタ条件」という。）を同期要求４１に設定する。また同期要求送信部１１２は、選択フィルタ条件に対応するアンカー時点をアンカー記憶部１３２から読み出して、読み出したアンカー時点を同期要求４１に設定する。同期要求送信部１１２は、上記同期要求４１をサーバ２０に送信する。
【００５０】
同期情報受信部１１３は、同期要求４１に応じてサーバ２０から送信される、サーバ２０との間でデータを同期するために必要な情報（以下、「同期情報」という。）をサーバ２０から受信する。図８は、同期情報４２の構成例を示す図である。同期情報４２には、バウンダリ時点、最新履歴時点、変更特徴情報が含まれる。バウンダリ時点は、サーバ２０において管理されている変更履歴の最も古い時点である。最新履歴時点は、サーバ２０において管理されている変更履歴の最も新しい時点である。変更特徴情報は、アンカー時点からバウンダリ時点までの間に作成または更新されたデータについての情報と、サーバ２０において管理されている変更履歴に係るデータについての情報とを含む。  
変更特徴情報に含まれている更新時点は、最後にデータの更新が行われた時点であり、削除フラグは、サーバ２０においてデータが削除されたことを示す。
【００５１】
削除処理部１１４は、クライアントデータベース１１からデータの削除を行う。削除処理部１１４は、同期情報４２に含まれる変更特徴情報のうち、削除フラグが真であるもののそれぞれについて、ＧＵＩＤに対応するデータをクライアントデータベース１１から削除する。なお、削除処理部１１４による削除処理の詳細については後述する。
【００５２】
ダウンロード決定部１１５は、サーバ２０から取得（ダウンロード）すべきデータを決定する。第１の実施形態では、ダウンロードすべきデータとは、クライアントデータベース１１に登録されており、かつ、サーバ２０において更新されているデータ（以下、「更新データ」ともいう。）や、サーバ２０において新しく追加されたデータ（以下、「追加データ」ともいう。）、前回のダウンロード時にはフィルタ条件にマッチしなかったが、サーバ２０において更新されたためにフィルタ条件にマッチするようになったデータ（更新されたことによりフィルタ条件にマッチするようになったことを「フィルタイン」という。）の全てまたは一部である。例えば、ダウンロード決定部１１５は、変更特徴情報のＧＵＩＤに対応するクライアントデータベース１１のデータの更新時点と、変更特徴情報の更新時点とを比較して、変更特徴情報の更新時点の方が新しいデータを更新データと判定することができる。また、ダウンロード決定部１１５は、変更特徴情報のＧＵＩＤに対応するデータがクライアントデータベース１１に登録されていない場合には、そのデータは追加データまたはフィルタインされたデータであると判定することができる。ダウンロード決定部１１５は、例えば、追加データや更新データ、フィルタインされたデータの全てをダウンロードすべきデータとして決定してもよいし、これらのデータに対応する変更特徴情報のヒントを表示し、ユーザからダウンロードすべきデータの指定を受け付けるようにしてもよい。また、ダウンロード決定部１１５は、ヒントにデータサイズが含まれている場合には、クライアントデータベース１１の記憶容量を越えない量のデータをダウンロードすべきデータとして決定することもできる。ダウンロード決定部１１５は、追加データや更新データ、フィルタインされたデータのうち、ヒントやキー、カラムなどが所定の条件を満たすものをダウンロードすべきデータとして決定してもよい。また、クライアントデータベース１１が更新可能である場合には、ダウンロード決定部１１５は、変更特徴情報のＧＵＩＤに対応するクライアントレコードの更新時点が、変更特徴情報の更新時点よりも新しいときには、サーバレコードを優先してダウンロードするようにしてもよいし、クライアントレコードを優先してダウンロードをしないと決定するようにしてもよいし、ユーザにダウンロードするか否かを問い合わせてもよい。ダウンロード可能なデータ数やデータサイズを設定しておき、ダウンロード決定部１１５は、そのデータ数やデータサイズを超えない範囲でダウンロードすべきデータを決定するようにしてもよい。ダウンロード決定部は、例えば、クライアントデータの更新時点やデータサイズなどに応じてクライアントレコードに優先順位を設定し、優先順位の高いものから順に、上記データ数やデータサイズを超えないようにダウンロードすべきデータを決定するようにしてもよい。さらに、ダウンロード決定部１１５がどのようにダウンロードすべきデータを決定するかを指定するポリシーを、メモリ１０２や記憶装置１０３に記憶させておき、ダウンロード決定部１１５は、ポリシーに応じてダウンロードすべきデータを決定するようにすることもできる。
【００５３】
さらに、ダウンロード決定部１１５は、クライアントデータベース１１に登録されているが、サーバ２０においてはフィルタ条件にマッチしないデータ（更新されたことによりフィルタ条件にマッチしなくなったことを「フィルタアウト」という。）の一部または全部をダウンロードすべきデータに含めてもよい。この場合、ダウンロード決定部１１５は、クライアントデータベース１１からフィルタ条件にマッチするデータを検索し、検索したデータのうち、ＧＵＩＤが同期情報４２の変更特徴情報に含まれていないものをフィルタアウトされたデータであると判定することができる。
【００５４】
アンカー更新部１１６は、アンカー記憶部１３２に記憶されるアンカー時点を更新する。同期情報４２の最新履歴時点を選択フィルタ条件に対応するアンカー時点としてアンカー記憶部１３２に登録する。なお、アンカー更新部１１６は、フィルタ選択部１１１が新しくフィルタ条件を作成した場合には、取りうるもっとも小さな値から１を引いた値をアンカー時点として新しく作成されたフィルタ条件に対応付けてアンカー記憶部１３２に登録する。
【００５５】
陳腐化情報取得部１１７は、アンカー時点が同期情報４２に含まれるバウンダリ時点よりも前である場合に、クライアントデータベース１１に記憶されているクライアントレコードのうち、選択フィルタ条件にマッチし、かつ更新時点がバウンダリ時点よりも古いもの（以下、陳腐化データという。）を検索し、検索した陳腐化データについての情報（以下、「陳腐化情報」という。）を作成する。陳腐化情報には、陳腐化データのＧＵＩＤおよび更新時点が設定される。
【００５６】
ダウンロード要求送信部１１８は、サーバ２０からデータを取得するためのコマンド（以下、「ダウンロード要求」という。）をサーバ２０に送信する。図９は、ダウンロード要求４３の構成例を示す図である。ダウンロード要求４３には、ダウンロード決定部１１５が決定したデータのＧＵＩＤを含む情報（以下、「取得情報」という。）が設定される。また、陳腐化情報取得部１１７が陳腐化情報を作成した場合には、陳腐化情報もダウンロード要求４３に設定される。
【００５７】
ダウンロード情報受信部１１９は、ダウンロード要求４３に応じてサーバ２０から送信される、取得情報および陳腐化情報に対応するデータを含む情報（以下、「ダウンロード情報」という。）を受信する。図１０は、ダウンロード情報の構成例を示す図である。ダウンロード情報には、取得ダウンロード情報および陳腐化ダウンロード情報が含まれる。取得ダウンロード情報は、取得情報に対応するデータを含む情報であり、陳腐化ダウンロード情報は、陳腐化情報に対応するデータのうち、サーバ２０において更新されたものを含む情報である。取得ダウンロード情報および陳腐化ダウンロード情報にはそれぞれ、ＧＵＩＤ、更新時点、削除フラグ、キー、カラム、ヒントおよび本体が含まれる。取得情報や陳腐化情報に含まれるＧＵＩＤに対応するデータがサーバ２０において削除されていた場合、削除フラグには真が設定され、キー、カラム、ヒントおよび本体は省略される。
【００５８】
更新処理部１２０は、ダウンロード情報に応じてクライアントデータベース１１を更新する。更新処理部１２０は、ダウンロード情報に含まれている取得ダウンロード情報および陳腐化ダウンロード情報のそれぞれについて、削除フラグが真であれば、ＧＵＩＤに対応するデータをクライアントデータベース１１から削除し、削除フラグが偽であれば、取得ダウンロード情報または陳腐化ダウンロード情報に含まれているＧＵＩＤに対応付けて、更新時点、キー、カラム、ヒント、本体、並びに「偽」の更新可能性フラグおよび削除可能性フラグをクライアントデータベース１１に登録する。なお、更新処理部１２０による更新処理の詳細については後述する。
【００５９】
＝＝サーバ２０のソフトウェア構成＝＝
図１１は、サーバ２０のソフトウェア構成を示す図である。サーバ２０は、ＧＵＩＤ生成部２１０、時点生成部２１１、データベース変更部２１２、同期要求受信部２１３、変更履歴取得部２１４、変更取得部２１５、同期情報送信部２１６、ダウンロード要求受信部２１７、データ取得部２１８、ダウンロード情報送信部２１９、サーバデータベース２１およびサーバ変更履歴記憶部２３１を備えている。
【００６０】
なお、ＧＵＩＤ生成部２１０、時点生成部２１１、およびデータベース変更部２１２は、同期要求受信部２１３、変更履歴取得部２１４、変更取得部２１５、同期情報送信部２１６、ダウンロード要求受信部２１７、データ取得部２１８、ダウンロード情報送信部２１９は、サーバ２０が備えるＣＰＵ２０１が記憶装置２０３に記憶されているプログラムをメモリ２０２に読み出して実行することにより実現される。また、サーバデータベース２１およびサーバ変更履歴記憶部２３１は、サーバ２０が備えるメモリ２０２や記憶装置２０３が提供する記憶領域として実現される。サーバデータベース２１は、サーバ２０とは異なるコンピュータ（データベースサーバ）により提供されるようにしてもよい。この場合、サーバ２０は通信ネットワーク３０を介してデータベースサーバにアクセス可能に接続されるようにする。
【００６１】
サーバデータベース２１は、同期の対象となるデータ（以下、「サーバレコード」という。）を記憶する。図１２は、サーバデータベース２１に記憶されるサーバレコードの構成例を示す図である。サーバレコードには、データを識別するＧＵＩＤ、データの作成時点、データの更新時点、キー、カラム、ヒント、並びにデータの本体が含まれる。
【００６２】
サーバ変更履歴記憶部２３１は、サーバデータベース２１に対する変更履歴（以下、「サーバ変更履歴」という。）を新しい順に所定数のみ記憶する。図１３は、サーバ変更履歴記憶部２３１に記憶されるサーバ変更履歴の構成例を示す図である。サーバ変更履歴には、データを識別するＧＵＩＤ、データの作成時点、データの更新時点、削除フラグ、データのヒント、旧カラムおよび現カラムが含まれる。削除フラグは、データをサーバデータベース２１から削除したことを示す。旧カラムは、当該サーバ変更履歴に係るデータの変更が行われる前のデータのカラムであり、現カラムは、当該変更が行われた後のデータのカラムである。データが新規に追加された場合には、旧カラムおよび現カラムの両方に、追加されたデータの所定の一部が設定される。
【００６３】
ＧＵＩＤ生成部２１０は、ＧＵＩＤを割り当てる。ＧＵＩＤ生成部２１０は、例えば、サーバデータベース２１に新規にサーバレコードが登録される場合に、そのサーバレコードを識別するＧＵＩＤを割り当てる。
【００６４】
時点生成部２１１は、サーバ２０における現在時点を生成する。本実施形態は、時点生成部２１１は、サーバデータベース２１に対するデータの変更が行われるごとにインクリメントされるシリアル値を時点として生成するものとする。
【００６５】
データベース変更部２１２は、サーバデータベース２１に対しデータの変更を行う。  
データベース変更部２１２は、サーバデータベース２１にサーバレコードを追加する場合、時点生成部２１１が生成する時点を作成時点および更新時点のそれぞれに設定してサーバレコードをサーバデータベース２１に追加する。また、データベース変更部２１２は、追加したサーバレコードのＧＵＩＤ、作成時点、更新時点、ヒントを含むサーバ変更履歴を作成し、作成したサーバ変更履歴の削除フラグに「偽」を設定し、旧カラムおよび現カラムのそれぞれに、追加したサーバレコードのカラムを設定してサーバ変更履歴記憶部２３１に登録する。  
データベース変更部２１２は、サーバデータベース２１に記憶されているサーバレコードを更新した場合には、時点生成部２１１が生成する時点をサーバレコードの更新時点に設定する。また、データベース変更部２１２は、更新したサーバレコードのＧＵＩＤ、作成時点、更新時点、ヒントを含むサーバ変更履歴を作成し、作成したサーバ変更履歴の削除フラグに「偽」を設定し、旧カラムに更新前のカラムを設定し、現カラムに更新後のカラムを設定してサーバ変更履歴記憶部２３１に登録する。  
また、データベース変更部２１２は、サーバデータベース２１に記憶されているサーバレコードを削除した場合には、時点生成部２１１が生成する時点、削除したサーバレコードのＧＵＩＤ、作成時点、ヒントを含むサーバ変更履歴を作成し、作成したサーバ変更履歴の削除フラグに「真」を設定し、旧カラムに削除したサーバレコードのカラムを設定してサーバ変更履歴記憶部２３１に登録する。
【００６６】
なお、データベース変更部２１２は、サーバ変更履歴記憶部２３１に記憶されているサーバ変更履歴の数が所定数である場合には、最も更新時点が古いサーバ変更履歴を削除してから、新たなサーバ変更履歴を登録する。
【００６７】
同期要求受信部２１３は、クライアント１０から送信される同期要求４１を受信する。なお、同期要求受信部２１３は、同期要求４１にアンカー時点が設定されていない場合には、アンカー時点を時点として取りうる最も古い値とする。
【００６８】
変更履歴取得部２１４は、変更されたデータに関する情報を取得する。変更履歴取得部２１４は、同期要求４１に含まれている選択フィルタ条件にマッチするサーバ変更履歴をサーバ変更履歴記憶部２３１から検索する。変更履歴取得部２１４は、検索したサーバ変更履歴に含まれているＧＵＩＤ、作成時点、更新時点、削除フラグおよびヒントを含む変更特徴情報を作成する。更新情報取得部２１４は、サーバ変更履歴記憶部２３１に記憶されているサーバ変更履歴の更新時点のうち、最も古いものをバウンダリ時点とし、最も新しいものを最新履歴時点とする。一方、選択フィルタ条件にマッチするサーバ変更履歴がサーバ変更履歴記憶部２３１に記憶されていなかった場合には、更新情報取得部２１４は、サーバデータベース２１に記憶されているサーバレコードの更新時点のうち最も新しいも時点をバウンダリ時点および最新履歴時点とする。
【００６９】
変更取得部２１５は、同期要求４１に含まれているアンカー時点がバウンダリ時点よりも古い場合、サーバデータベース２１から、作成時点がアンカー時点より新しく、かつ更新時点がバウンダリ時点よりも古いサーバレコードを検索し、検索したサーバレコードのＧＵＩＤ、作成時点、更新時点およびヒントを含む変更特徴情報を作成する。
【００７０】
同期情報送信部２１６は、バウンダリ時点、最新履歴時点、変更特徴情報を含む同期情報４２を作成し、作成した同期情報４２をクライアント１０に送信する。
【００７１】
ダウンロード要求受信部２１７は、クライアント１０から送信されるダウンロード要求４３を受信する。
【００７２】
データ取得部２１８は、ダウンロード要求４３に含まれている取得情報を抽出し、抽出した取得情報に含まれているＧＵＩＤのそれぞれについて、ＧＵＩＤが示すサーバレコードをサーバデータベース２１から読み出し、読み出したサーバレコードのＧＵＩＤ、更新時点、「偽」の削除フラグ、カラムおよび本体を含む取得ダウンロード情報を作成する。データ取得部２１８は、取得情報のＧＵＩＤが示すサーバレコードがサーバデータベース２１に記憶されていない場合（サーバデータベース２１から削除されている場合）には、ＧＵＩＤと「真」の削除フラグのみを含む取得ダウンロード情報を作成する。
【００７３】
また、データ取得部２１８は、ダウンロード要求４３に含まれている陳腐化情報を抽出し、抽出した陳腐化情報のそれぞれについて、陳腐化情報に含まれるＧＵＩＤが示すサーバレコードをサーバデータベース２１から読み出し、読み出したサーバレコードの更新時点が陳腐化情報の更新時点よりも新しい場合には、サーバレコードのＧＵＩＤ、更新時点、「偽」の削除フラグ、カラムおよび本体を含む陳腐化ダウンロード情報を作成する。データ取得部２１８は、陳腐化情報のＧＵＩＤが示すサーバレコードがサーバデータベース２１に記憶されていない場合（サーバデータベース２１から削除されている場合）には、ＧＵＩＤと「真」の削除フラグのみを含む陳腐化ダウンロード情報を作成する。
【００７４】
ダウンロード情報送信部２１９は、取得ダウンロード情報および陳腐化ダウンロード情報を含むダウンロード情報を作成し、作成したダウンロード情報をクライアント１０に送信する。
【００７５】
＝＝同期処理の全体像＝＝
図１４は、第１の実施形態に係る通信システムにおいて実行される、データの同期処理の流れを説明する図である。  
クライアント１０は同期要求４１を作成し（Ｓ３１）、作成した同期要求４１をサーバ２０に送信する（Ｓ３２）。サーバ２０は、同期要求４１を受信すると、バウンダリ時点、最新履歴時点、変更特徴情報を含む同期情報４２を作成し（Ｓ３３）、作成した同期情報４２をクライアント１０に送信する（Ｓ３４）。  
クライアント１０は同期情報４２を受信すると、削除フラグが真であるデータをクライアントデータベース１１から削除するとともに、ダウンロードすべきデータを示す取得情報と陳腐化情報とを含むダウンロード要求４３を作成し（Ｓ３５）、作成したダウンロード要求４３をサーバ２０に送信する（Ｓ３６）。サーバ２０は、ダウンロード要求４３を受信すると、取得ダウンロード情報と陳腐化ダウンロード情報とを含むダウンロード情報を作成し（Ｓ３７）、作成したダウンロード情報をクライアント１０に送信する（Ｓ３８）。  
クライアント１０は、ダウンロード情報に含まれている取得ダウンロード情報および陳腐化ダウンロード情報に応じて、クライアントデータベース１１へのデータの登録または削除を行う（Ｓ３９）。  
以下、詳細について説明する。
【００７６】
＝＝同期要求４１の作成処理（Ｓ３１）＝＝
図１５は、クライアント１０において実行される同期要求４１の作成処理の流れを示す図である。  
まず、フィルタ選択部１１１は、フィルタ条件を選択する（Ｓ３１０１）。上述したように、フィルタ選択部１１１は、例えば、ユーザからフィルタ条件の指定を受け付けることによりフィルタ条件を選択する。  
フィルタ選択部１１１は、選択フィルタ条件がアンカー記憶部１３２に記憶されていれば（Ｓ３１０２：ＹＥＳ）、選択フィルタ条件に対応するアンカー時点をアンカー記憶部１３２から読み出す（Ｓ３１０３）。  
一方、選択フィルタ条件がアンカー記憶部１３２に記憶されていない場合には（Ｓ３１０２：ＮＯ）、フィルタ選択部１１１は、アンカー時点に所定の最小値から１を減じた値（本実施形態では「０」とする。）を設定する（Ｓ３１０４）。  
同期要求送信部１１２は、クライアントＩＤ記憶部１３１からクライアントＩＤを読み出し（Ｓ３１０５）、クライアントＩＤ、選択フィルタ条件、およびアンカー時点を含む同期要求４１を作成する（Ｓ３１０６）。  
以上のようにして同期要求４１が作成される。作成された同期要求は同期要求送信部１１２によりサーバ２０に送信される。
【００７７】
＝＝同期要求４１の対応処理（Ｓ３３）＝＝
図１６は、サーバ２０において実行される同期要求４１に対応する処理の流れを示す図である。  
同期情報送信部２１６は、サーバ変更履歴記憶部２３１に登録されているサーバ変更履歴の最も古い更新時点をバウンダリ時点とし（Ｓ３３０１）、最も新しい更新時点を最新履歴時点とし（Ｓ３３０２）、バウンダリ時点と最新履歴時点とを含む同期情報４２を生成する（Ｓ３３０３）。なお、サーバ変更履歴記憶部２３１に変更履歴が登録されていないときには、同期情報送信部２１６は、時点生成部２１１が生成する時点を取得し、取得した時点をバウンダリ時点および最新履歴時点とする。  
変更履歴取得部２１４は、サーバ変更履歴記憶部２３１から、フィルタ条件にマッチするサーバ変更履歴を読み出し、読み出した各サーバ変更履歴について、サーバ変更履歴のＧＵＩＤ、更新時点、削除フラグ、ヒントおよびキーを含む変更特徴情報を作成する（Ｓ３３０４）。変更履歴取得部２１４は、作成した変更特徴情報を同期情報４２に設定する（Ｓ３３０５）。  
同期情報送信部２１６は、同期情報４２に設定された変更特徴情報のうち、更新時点がアンカー時点より後であり、かつ削除フラグが「真」であるもののそれぞれについて、当該変更特徴情報と、当該変更特徴情報と同じＧＵＩＤである他の変更特徴情報とを同期情報４２から削除する（Ｓ３３０６）。  
変更取得部２１５は、サーバデータベース２１から、更新時点がアンカー時点より後であり、かつ更新時点がバウンダリ時点より前であるデータを読み出し、読み出したデータのＧＵＩＤ、更新時点、ヒントおよびキーと、「偽」の削除フラグとを含む変更特徴情報を作成する（Ｓ３３０７）。変更取得部２１５は、作成した変更特徴情報を同期情報４２に設定する（Ｓ３３０８）。  
以上のようにして同期情報４２が作成される。作成された同期情報４２は、同期情報送信部２１６によりクライアント１０に送信される。
【００７８】
＝＝時点と変更履歴の関係＝＝
図１７および図１８は、サーバ変更履歴記憶部２３１が記憶する変更履歴と、変更特徴情報との関係を説明する図である。図１７および図１８では、サーバ変更履歴記憶部２３１には、時点ｔ４〜時点ｔ８の期間についてのみサーバ変更履歴２３１が記憶されており、データａ、ｂ、ｃおよびｄは、それぞれ時点ｔ２、ｔ４、ｔ６およびｔ８において変更されたものとしている。ここで、バウンダリ時点は時点ｔ４となる。
【００７９】
図１７は、アンカー時点が時点ｔ１であった場合を示す図である。この場合、時点ｔ２〜ｔ３の間の期間に更新されたデータａの更新時点ｔ２を含む変更特徴情報と、サーバ変更履歴２３１に係るデータｂ〜ｄの更新時点ｔ４、ｔ６およびｔ８を含む変更特徴情報とが作成されることになる。バウンダリ時点ｔ４より前の、時点ｔ２〜ｔ３の間の期間については、追加および更新されたデータについてのみ変更特徴情報が作成され、削除されたデータについては作成されない。一方、バウンダリ時点ｔ４以後の時点ｔ４〜ｔ８については、追加、更新および削除されたデータのすべてについて変更特徴情報が作成されることになる。
【００８０】
図１８は、アンカー時点が時点ｔ５であった場合を示す図である。この場合、アンカー時点ｔ５がバウンダリ時点ｔ４よりも後であるので、アンカー時点ｔ５より後に変更された全てのデータについて変更特徴情報が作成される。すなわち、図１８の例では、アンカー時点ｔ５よりも後に更新されたデータｃおよびｄについての更新時点ｔ６およびｔ８を含む変更特徴情報が作成されることになる。
【００８１】
＝＝同期情報４２の対応処理（Ｓ３５）＝＝
図１９は、クライアント１０において実行される同期情報４２に対応する処理の流れを示す図である。  
まず、削除処理部１１４は、同期情報４２に含まれている変更特徴情報のうち、削除フラグが真であるもののそれぞれについて、ＧＵＩＤに対応するデータをクライアントデータベース１１から削除する（Ｓ３５０１）。アンカー更新部１１６は、同期情報４２に含まれている最新履歴時点を選択フィルタ条件に対応付けてアンカー記憶部１３２に登録する（Ｓ３５０２）。  
次に、ダウンロード決定部１１５は、空のダウンロード要求４３を作成し（Ｓ３５０３）、同期情報４２に含まれている変更特徴情報に対応するデータのうち、ダウンロードすべきものを決定する（Ｓ３５０４）。上述したように、ダウンロード決定部１１５は、例えば、変更特徴情報に含まれているキーやヒントなどを出力し、ダウンロードすべきデータをユーザに選択させるようにすることができる。なお、ダウンロード決定部１１５はここで、クライアントデータベース１１において選択フィルタ条件にマッチするデータのうち、そのＧＵＩＤが同期情報４２に含まれていないもの（フィルタアウトされたデータ）についても、ダウンロードすべきデータとして決定するようにしてもよい。ダウンロード決定部１１５は、決定したデータのそれぞれについて、データを示すＧＵＩＤを含む取得情報を生成し、生成した取得情報をダウンロード要求４３に追加する（Ｓ３５０５）。
【００８２】
陳腐化情報取得部１１７は、アンカー時点が同期情報４２に含まれているバウンダリ時点よりも前である場合（Ｓ３５０６：ＹＥＳ）、クライアントデータベース１１から、選択フィルタ条件にマッチし、かつ、更新時点がバウンダリ時点よりも前であるデータを検索し（Ｓ３５０７）、検索したデータの削除可能性フラグおよび更新可能性フラグを「真」に設定する（Ｓ３５０８）。  
陳腐化情報取得部１１７は、クライアントデータベース１１から、削除可能性フラグまたは更新可能性フラグが「真」であるデータのリストを取得する（Ｓ３５０９）。陳腐化情報取得部１１７は、リストに含まれるデータのうち、ＧＵＩＤが取得情報に含まれているものをリストから削除する（Ｓ３５１０）。陳腐化情報取得部１１７は、リストに含まれているデータのそれぞれについて、ＧＵＩＤおよび更新時点を設定した陳腐化情報を作成してダウンロード要求４３に追加する（Ｓ３５１１）。  
以上のようにしてダウンロード要求４３が作成される。作成されたダウンロード要求４３は、ダウンロード要求送信部１１８によりサーバ２０に送信される。
【００８３】
＝＝ダウンロード要求４３の対応処理（Ｓ３７）＝＝
図２０は、サーバ２０において実行されるダウンロード要求４３の対応処理の流れを説明する図である。  
データ取得部２１８は、空のダウンロード情報４４を作成し（Ｓ３７０１）、ダウンロード要求４３に含まれている各取得情報について以下の処理を行う。  
データ取得部２１８は、取得情報に含まれるＧＵＩＤに対応するデータをサーバデータベース２１から検索し（Ｓ３７０２）、対応するデータが存在する場合には（Ｓ３７０３：ＹＥＳ）、検索したデータのＧＵＩＤ、更新時点、キー、カラム、ヒントおよび本体と、「偽」の削除フラグとを含む取得ダウンロード情報を作成してダウンロード情報４４に追加する（Ｓ３７０４）。一方、取得情報のＧＵＩＤに対応するデータが存在しない場合は（Ｓ３７０３：ＮＯ）、データ取得部２１８は、取得情報のＧＵＩＤと「真」の削除フラグとを含む取得ダウンロード情報を作成してダウンロード情報４４に追加する（Ｓ３７０５）。
【００８４】
以上の処理を各取得情報について行った後、データ取得部２１８は、ダウンロード要求４３に含まれている各陳腐化情報について以下の処理を行う。  
データ取得部２１８は、陳腐化情報に含まれるＧＵＩＤに対応するデータをサーバデータベース２１から検索し（Ｓ３７０６）、対応するデータが存在する場合（Ｓ３７０７：ＹＥＳ）、当該データの更新時点が陳腐化情報の更新時点よりも新しければ（Ｓ３７０８：ＹＥＳ）、当該データのＧＵＩＤ、更新時点、キー、カラム、ヒントおよび本体と「偽」の削除フラグとを含む陳腐化ダウンロード情報を作成してダウンロード情報４４に追加する（Ｓ３７０９）。一方、陳腐化情報に含まれるＧＵＩＤに対応するデータが存在しない場合には（Ｓ３７０７：ＮＯ）、データ取得部２１８は、陳腐化情報のＧＵＩＤおよび「真」の削除フラグを含む陳腐化ダウンロード情報を作成してダウンロード情報４４に追加する（Ｓ３７１０）。  
以上の処理を各陳腐化情報について繰り返すことで、ダウンロード情報４４が作成される。作成されたダウンロード情報４４は、ダウンロード情報送信部２１９によりクライアント１０に送信される。
【００８５】
＝＝ダウンロード情報４４の対応処理（Ｓ３９）＝＝
図２１は、クライアント１０において実行されるダウンロード情報４４の対応処理の流れを示す図である。  
更新処理部１２０は、ダウンロード情報４４に含まれている陳腐化ダウンロード情報のそれぞれについて、図２２に示す適用処理を行う（Ｓ３９０１）。すなわち、陳腐化ダウンロード情報の削除フラグが「真」であれば（Ｓ３９２１：ＹＥＳ）、削除処理部１１４は、陳腐化ダウンロード情報に含まれているＧＵＩＤに対応するデータをクライアントデータベース１１から削除し（Ｓ３９２２）、削除フラグが「偽」であれば（Ｓ３９２１：ＮＯ）、更新処理部１２０は、陳腐化ダウンロード情報に含まれているＧＵＩＤ、キー、カラム、ヒントおよび本体と、「偽」の更新可能性フラグおよび「偽」の削除可能性フラグとを含むデータを作成してクライアントデータベース１１に登録する（Ｓ３９２３）。なお、ＧＵＩＤが一致するデータがクライアントデータベース１１にすでに登録されている場合には、当該データは上書きされる。
【００８６】
また、更新処理部１２０は、ダウンロード情報４４に含まれている取得ダウンロード情報のそれぞれについて、図２２に示す適用処理を行う（Ｓ３９０２）。すなわち、取得ダウンロード情報に含まれる削除フラグが「真」であれば（Ｓ３９２１：ＹＥＳ）、削除処理部１１４は、取得ダウンロード情報に含まれるＧＵＩＤに対応するデータをクライアントデータベース１１から削除し（Ｓ３９２２）、削除フラグが「偽」であれば（Ｓ３９２１：ＮＯ）、更新処理部１２０は、取得ダウンロード情報に含まれているＧＵＩＤ、キー、カラム、ヒントおよび本体と、「偽」の更新可能性フラグおよび「偽」の削除可能性フラグとを含むデータを作成してクライアントデータベース１１に登録する（Ｓ３９２３）。  
このようにして、ダウンロード情報に応じてクライアントデータベース１１が更新される。  
以上のようにして、選択フィルタにマッチするクライアントレコードとサーバレコードとの同期が行われる。
【００８７】
＝＝第２の実施形態＝＝
次に、第２の実施形態について説明する。第２の実施形態については、第１の実施形態との違いについて主に説明し、第１の実施形態と同じ部分については説明を省略する。  
第２の実施形態では、クライアント１０においてもデータの更新が行われるものとする。したがって、クライアント１０とサーバ２０との両方で同じデータについて異なる内容の更新が行われる衝突が起こり得る。データの衝突は、一般にサーバ２０によって検知されるが、第２の実施形態では、クライアント１０とサーバ２０との両方で衝突を検知するようにしている。また、クライアント１０とサーバ２０との両方で異なるデータを更新したことにより、異なるデータが同一あるいは類似の内容になる重複も起こり得る。第２の実施形態では、重複についても、クライアント１０とサーバ２０との両方で検出するようにしている。第２の実施形態では、キーが一致した場合に、重複が発生したと判定するものとする。
【００８８】
＝＝クライアント１０のソフトウェア構成＝＝
図２３は、第２の実施形態に係るクライアント１０のソフトウェア構成を示す図である。第２の実施形態に係るクライアント１０は、上述した第１の実施形態に係るクライアント１０に加えて、クライアント変更検知部１１０、衝突重複解消決定部１２１、解消要求送信部１２２、解消結果情報受信部１２３、解消処理部１２４、クライアント変更履歴記憶部１３３、未取得ＩＤ記憶部１３４、未検証記憶部１３５、重複記憶部１３６、衝突記憶部１３７を備えている。なお、クライアント変更検知部１１０、衝突重複解消決定部１２１、解消要求送信部１２２、解消結果情報受信部１２３、および解消処理部１２４は、クライアント１０が備えるＣＰＵ１０１が記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより実現される。また、クライアント変更履歴記憶部１３３、未取得ＩＤ記憶部１３４、未検証記憶部１３５、重複記憶部１３６、衝突記憶部１３７は、クライアント１０が備えるメモリ１０２や記憶装置１０３が提供する記憶領域として実現される。
【００８９】
図２４は、第２の実施形態に係るクライアントデータベース１１が記憶するクライアントレコードの構成例を示す図である。同図に示すように、第２の実施形態に係るクライアントレコードには、第１の実施形態に係るクライアントレコードに加えて、ＬＵＩＤ（Local Unique IDentifier）が含まれている。ＬＵＩＤは、クライアント１０においてデータに割り当てられる識別情報であり、クライアント１０において一意な値である。後述するように、第２の実施形態では、データのＧＵＩＤはサーバ２０が割り当てるため、クライアント１０においてデータが作成されたときには、ＧＵＩＤはまだ割り当てられておらず、この時点でデータを識別するために割り当てられるのがＬＵＩＤである。ＬＵＩＤとＧＵＩＤとの対応付け（マッピング）は、同期要求４１および同期情報４２のやり取りにより行われる。  
クライアント変更履歴記憶部１３３は、クライアントデータベース１１に対する変更履歴を記憶する。上述したサーバ変更履歴記憶部２３１には、サーバ変更履歴は新しい順に所定数のみ記憶されるが、クライアント変更履歴記憶部１３３には、アンカー時点より後に行われたクライアントデータベース１１に対する全ての変更についてのクライアント変更履歴が記憶されるものとする。
【００９０】
図２５は、クライアント変更履歴記憶部１３３に記憶されるクライアント変更履歴の構成例を示す図である。クライアント変更履歴には、検知した変更が追加、変更および削除のいずれであったかを示す種別（以下、「変更種別」という。）、変更の対象となったデータを示すＬＵＩＤおよびＧＵＩＤ、更新時点、変更が行われる前のカラム（以下、「旧カラム」ともいう。）、変更が行われた後のカラム（以下、「現カラム」ともいう。）、キー、並びにヒントが含まれる。変更種別は、「追加」「更新」または「削除」のいずれかであるものとする。  
未取得ＩＤ記憶部１３４は、ＧＵＩＤが割り当てられていないＬＵＩＤ（以下、「未取得ＩＤ」という。）を記憶する。未取得ＩＤ記憶部１３４には、クライアントデータベース１１に新しいデータが追加された際に、そのデータに割り当てられたＬＵＩＤが登録される。  
未検証記憶部１３５は、そのデータと重複するデータが存在するか否かの判定を行っていないデータを示すＧＵＩＤを記憶する。本実施形態では、クライアント１０においてデータが変更された場合に、サーバ２０において重複が発生するか否かを問い合わせることはせずに、後述するように、重複はサーバ２０との間のデータの同期時に判定される。そこで、データが変更された場合には、そのデータのＧＵＩＤがデータの変更時から同期時まで未検証記憶部１３５に登録される。
【００９１】
重複記憶部１３６は、２つの重複するデータを管理する。図２６は、重複記憶部１３６の構成例を示す図である。重複記憶部１３６には、第１のデータを示すＬＵＩＤおよびＧＵＩＤと、第１のデータと重複する第２のデータを示すＬＵＩＤおよびＧＵＩＤとが対応付けて登録される。  
衝突記憶部１３７は、衝突するデータを示すＧＵＩＤを記憶する。
【００９２】
クライアント変更検知部１１０は、クライアントデータベース１１に対するデータの変更を検知し、検知に応じてクライアント変更履歴を作成してクライアント変更履歴記憶部１３３に登録する。図２７は、クライアント変更検知部１１０による処理の流れを示す図である。クライアント変更検知部１１０は、クライアントデータベース１１に対する変更を検知した場合、変更が追加または変更である場合には、追加または変更がなされたデータ（以下、「新データ」という。）を取得し、変更が削除または変更である場合には、削除または変更がなされたデータ（以下、「旧データ」という。）を取得して、図２７に示す処理を行う。なお、変更が追加である場合には、新データを旧データとして取り扱うものとする。  
クライアント変更検知部１１０は、変更が追加である場合（Ｓ４０１：ＹＥＳ）、新データにＬＵＩＤを割り当て（Ｓ４０２）、未取得ＩＤ記憶部１３４に、割り当てたＬＵＩＤを登録する（Ｓ４０３）。一方、変更が更新または削除である場合には（Ｓ４０１：ＮＯ）、クライアント変更検知部１１０は、新データからＬＵＩＤおよびＧＵＩＤを取得する（Ｓ４０４）。  
クライアント変更検知部１１０は、変更が追加または更新である場合（Ｓ４０５：ＹＥＳ）、新データの本体に基づいてキーを作成して新キーとし（Ｓ４０６）、重複の判定処理を行う（Ｓ４０７）。  
最後に、クライアント変更検知部１１０は、クライアント変更履歴を登録する変更履歴登録処理を行う（Ｓ４０８）。
【００９３】
図２８は、上記図２７のステップＳ４０７に示す重複判定処理の流れを示す図である。重複判定処理では、クライアント変更検知部１１０は、クライアントデータベース１１に記憶されている全てのデータについて以下の処理を行う。  
クライアント変更検知部１１０は、クライアントレコードのキーが新キー一致しなければ（Ｓ３２１：ＮＯ）、未検証記憶部１３５にＧＵＩＤを登録する（Ｓ３２２）。  
一方、クライアントレコードのキーが新キーと一致する場合（Ｓ３２１：ＹＥＳ）、クライアント変更検知部１１０は、新レコードのＧＵＩＤおよびＬＵＩＤと、クライアントレコードのＧＵＩＤおよびＬＵＩＤとを対応付けて重複記憶部１３６に登録する（Ｓ３２３）。クライアント変更検知部１１０は、新レコードのＧＵＩＤが未検証記憶部１３５に登録されている場合には（Ｓ３２４：ＹＥＳ）、未検証記憶部１３５から新レコードのＧＵＩＤを削除する（Ｓ３２５）。
【００９４】
図２９は、上記図２７のステップＳ４０８に示す変更履歴登録処理の流れを示す図である。  
クライアント変更検知部１１０は、クライアント変更履歴記憶部１３３から、新データのＬＵＩＤまたはＧＵＩＤと一致する変更履歴を検索する（Ｓ４４１）。一致するクライアント変更履歴が存在しなければ（Ｓ４４２：ＮＯ）、クライアント変更検知部１１０は、変更種別、新データのＬＵＩＤ、ＧＵＩＤ、更新時点およびカラム、旧データのカラム、並びに新キーを含むクライアント変更履歴を作成してクライアント変更履歴記憶部１３３に登録する（Ｓ４４３）。  
一方、上記変更履歴が存在する場合には（Ｓ４４２：ＹＥＳ）、クライアント変更検知部１１０は、当該変更が追加または変更であれば（Ｓ４４４：ＮＯ）、検索したクライアント変更履歴の変更種別を、当該変更を示す変更種別（追加または更新）に変更し（Ｓ４４５）、検索したクライアント変更履歴の現カラムに新データのカラムを設定し（Ｓ４４６）、検索したクライアント変更履歴のキーに新キーを設定する（Ｓ３４７）。後述するように、サーバ２０とクライアント１０との間のデータの同期は、クライアント変更履歴に従って行われるため、このようにまだサーバ２０との間で同期がなされていない段階で再度更新等があった場合には、既存のクライアント変更履歴を更新することにより、同期処理の効率を上げることができる。  
変更が削除である場合（Ｓ４４４：ＹＥＳ）、クライアント変更検知部１１０は、新データのＧＵＩＤが設定されていなければ、すなわち新データのＧＵＩＤがｎｕｌｌであれば（Ｓ４４８：ＹＥＳ）、検索したクライアント変更履歴をクライアント変更履歴記憶部１３３から削除する（Ｓ４４９）。つまり、クライアント１０においてデータが作成された後、サーバ２０にアップロードされる前に削除された場合には、クライアント変更履歴を削除することにより、無駄な同期がなされないようにしている。  
新データにＧＵＩＤが設定されている場合、すなわち新レコードのＧＵＩＤがｎｕｌｌでない場合には（Ｓ４４８：ＮＯ）、検索したクライアント変更履歴の変更種別に削除を設定する（Ｓ４５０）。  
以上のようにして、クライアント変更検知部１１０は、クライアントデータベース１１に対する変更を検知すると、クライアント変更履歴を登録する。
【００９５】
次に、第２の実施形態において同期要求送信部１１２が送信する同期要求４１の構成例を図３０に示す。第２の実施形態に係る同期要求には、上述した図７に示す第１の実施形態に係る同期要求に加えて、未取得ＩＤおよび変更特徴情報が含まれる。同期要求送信部１１２は、未取得ＩＤ記憶部１３４に記憶されている未取得ＩＤを同期要求に設定する。また、変更特徴情報はクライアント変更履歴に基づいて作成される情報であり、クライアント変更履歴の変更種別、ＬＵＩＤ、ＧＵＩＤ、更新時点およびキーが含まれる。同期要求送信部１１２は、クライアント変更履歴記憶部１３３から、重複記憶部１３６および衝突記憶部１３７にＧＵＩＤが登録されていないクライアント変更履歴を読み出し、読み出したクライアント変更履歴のそれぞれについて、クライアント変更履歴の変更種別、ＬＵＩＤ、ＧＵＩＤ、更新時点およびキーを含む変更特徴情報を同期要求に設定する。
【００９６】
図３１は、第２の実施形態において同期情報受信部１１３が受信する同期情報４２の構成例を示す図である。第２の実施形態に係る同期情報４２には、上述した図８に示す第１の実施形態に係る同期情報４２に加えて、割当情報が含まれる。割当情報は、未取得ＩＤに対してサーバ２０が割り当てたＧＵＩＤを含む情報である。割当情報には、ＬＵＩＤ、ＧＵＩＤ、更新時点、ステータスが含まれる。更新時点は、ＬＵＩＤに対応するＧＵＩＤが既にサーバ２０で割り当てられていた場合の、データの更新時点である。サーバ２０に未取得ＩＤに対応するデータが記憶されていない場合には更新時点は設定されない。ステータスは、未取得ＩＤに対応するＧＵＩＤが既にサーバ２０に存在するか否かを示す情報である。  
また、第２の実施形態では、同期情報４２に含まれる変更特徴情報は、後述するように、サーバ２０において新たに追加されたデータに加えて、クライアント１０とサーバ２０との間で衝突または重複しているデータに関しても追加される。  
衝突重複解消決定部１２１は、ダウンロード情報４４に含まれるＧＵＩＤが示すデータが衝突または重複する場合に、当該データをサーバ２０に送信するか否かを決定する。本実施形態では、衝突重複解消決定部１２１は、ダウンロード情報４４に含まれるＧＵＩＤが、クライアント変更履歴記憶部１３３、重複記憶部１３６または衝突記憶部１３７に記憶されているか否かにより、衝突または重複が発生しているか否かを判定し、衝突または重複が発生していると判定した場合に、ユーザに、クライアントレコードかサーバレコードのいずれかを選択させるようにする。なお、衝突重複解消決定部１２１は、例えば、クライアントレコードを常に優先するようにして、無条件にクライアントレコードを選択するようにしてもよいし、任意のアルゴリズムを適用して自動的に選択するようにしてもよい。
【００９７】
解消要求送信部１２２は、衝突または重複が発生したデータを解消するように指示するコマンド（以下、「解消要求」という。）をサーバ２０に送信する。図３２は、解消要求４５の構成例を示す図である。解消要求４５には、クライアントＩＤと、衝突重複解消決定部１２１が選択したクライアントレコードまたはサーバレコードのＬＵＩＤ、ＧＵＩＤ、更新時点、削除フラグ、キー、カラム、ヒントおよび本体が設定された解消情報とが含まれる。
【００９８】
解消結果情報受信部１２３は、解消要求に応じてサーバ２０から送信される、衝突または重複の解消処理の結果を示す情報（以下、「解消結果情報」という。）を受信する。図３３は、解消結果情報４６の構成例を示す図である。解消結果情報４６には、重複情報と結果情報とが含まれる。重複情報は、解消要求４５に含まれる解消情報が示すデータについて、サーバ２０において重複が発生した場合に設定される。重複情報には、サーバ２０において重複したデータのＧＵＩＤ、更新時点、キーが設定される。結果情報は、解消要求４５に応じてサーバデータベース２１の更新を行った処理の結果を表す情報であり、ＬＵＩＤ、ＧＵＩＤ、更新時点、削除フラグおよびステータスを含む。  
解消処理部１２４は、解消結果情報４６に応じてクライアントデータベース１１の更新を行う。なお、解消処理部１２４の処理の詳細については後述する。
【００９９】
＝＝サーバ２０のソフトウェア構成＝＝
図３４は、第２の実施形態に係るサーバ２０のソフトウェア構成を示す図である。第２の実施形態に係るサーバ２０は、第１の実施形態に係るサーバ２０に加えて、解消要求受信部２２０、解消処理部２２１、解消結果情報送信部２２２を備えている。なお、解消要求受信部２２０、解消処理部２２１、解消結果情報送信部２２２は、サーバ２０が備えるＣＰＵ２０１が記憶装置２０３に記憶されているプログラムをメモリ２０２に読み出して実行することにより実現される。
【０１００】
図３５は、第２の実施形態に係るサーバデータベース２１が記憶するサーバレコードの構成例を示す図である。同図に示すように、第２の実施形態に係るサーバレコードには、第１の実施形態に係るサーバレコードに加えて、ＬＵＩＤおよび作成者ＩＤが含まれている。ＬＵＩＤは、クライアント１０においてデータに割り当てられる識別情報であり、クライアント１０において一意な番号である。後述するように、第２の実施形態では、データのＧＵＩＤはサーバ２０が割り当てるため、クライアント１０においてデータが作成されたときには、ＧＵＩＤはまだ割り当てられておらず、この時点でデータを識別するために割り当てられるのがＬＵＩＤである。ＬＵＩＤとＧＵＩＤとの対応付け（マッピング）は、同期要求４１および同期情報４２のやり取りにより行われる。作成者ＩＤは、データを最初に作成したクライアント１０のクライアントＩＤであり、サーバレコードの追加時に設定される。
【０１０１】
解消要求受信部２２０は、クライアント１０から解消要求４５を受信する。  
解消処理部２２１は、解消要求４５に応じてサーバデータベース２１を更新する。なお、解消処理部２２１により実行される解消処理の詳細については後述する。  
解消結果情報送信部２２２は、解消処理部２２１による解消処理の結果を示す解消結果情報を作成してクライアント１０に送信する。なお、解消結果情報送信部２２２による解消結果情報の生成処理の詳細については後述する。
【０１０２】
＝＝同期処理の全体像＝＝
図３６は、第２の実施形態に係る通信システムにおいて実行される、データの同期処理の流れを説明する図である。第２の実施形態に係るデータの同期処理では、上述した図１４に示す第１の実施形態に係る同期処理に加えて、ステップＳ５１〜Ｓ５８が行われる。すなわち、クライアント１０は、ダウンロード情報４４に対応する処理（Ｓ３９）を行った後、解消要求４５をサーバ２０に送信し（Ｓ５１）、サーバ２０は、解消要求４５に応じてサーバデータベース２１を更新し（Ｓ５２）、更新の結果を示す結果情報と、更新の際に発生した重複に関する重複情報とを含む解消結果情報４６をクライアント１０に送信する（Ｓ５３）。クライアント１０は、解消結果情報４６に応じてさらにダウンロードすべきデータを決定する処理を行い（Ｓ５４）、ダウンロードすべきデータのＧＵＩＤを設定した取得情報を含むダウンロード要求４３をサーバ２０に送信する（Ｓ５５）。サーバ２０は、ダウンロード要求４３に応じて、指定されているデータをサーバデータベース２１から読み出し（Ｓ５６）、読み出したデータを設定したダウンロード情報４４をクライアント１０に送信する（Ｓ５７）。クライアント１０は、ダウンロード情報４４に含まれているデータをクライアントデータベース１１に登録する（Ｓ５８）。
【０１０３】
＝＝同期要求送信処理（Ｓ３１）＝＝
図３７は、第２の実施形態に係るステップＳ３１における同期要求の作成処理の流れを示す図である。第２の実施形態では、上述した図１５の処理に加えて、ステップＳ３１０６に続き、同期要求送信部１１２は、選択フィルタ条件にマッチするクライアント変更履歴をクライアント変更履歴記憶部１３３から読み出して変更履歴として同期要求４１に設定し（Ｓ３１０７）、未取得ＩＤ記憶部１３４に記憶されている未取得ＩＤを読み出して同期要求４１に設定する（Ｓ３１０８）。  
更新情報と未取得ＩＤとにより、サーバ２０側ではクライアント１０で行われたデータの更新を把握することが可能となる。
【０１０４】
＝＝同期要求に対応する処理（Ｓ３３）＝＝
図３８は、第２の実施形態に係るステップＳ３３における同期要求への対応処理の流れを示す図である。第２の実施形態では、上述した図１６の処理に加えて、ステップＳ３３０８に続き、同期情報送信部２１６は、図３９に示すＧＵＩＤの割当処理を行い（Ｓ３３０９）、図４０に示す衝突および重複の検知処理を行う（Ｓ３３１０）。
【０１０５】
図３９に示すＧＵＩＤの割当処理では、同期情報送信部２１６は、同期要求４１に含まれる各未取得ＩＤについて、以下の処理を行う。  
同期情報送信部２１６は、ＬＵＩＤが未取得ＩＤと一致し、かつ、作成者がクライアントＩＤと一致するサーバレコードをサーバデータベース２１から検索し（Ｓ３３２１）、マッチするサーバレコードが存在する場合（Ｓ３３２２：ＹＥＳ）、サーバレコードのＧＵＩＤをＧとし（Ｓ３３２３）、サーバレコードの更新時点をＴとし（Ｓ３３２４）、ステータスを「存在」とする（Ｓ３３２５）。  
一方、未取得ＩＤにマッチするサーバレコードが存在しない場合（Ｓ３３２２：ＮＯ）、同期情報送信部２１６は、ＧＵＩＤ生成部２１０生成する新たなＧＵＩＤをＧとし（Ｓ３３２６）、時点生成部２１１が生成する新たな時点をＴとし（Ｓ３３２７）、ステータスを「不存在」とする（Ｓ３３２８）。  
同期情報送信部２１６は、ＬＵＩＤ、Ｇ、Ｔおよびステータスを含む割当情報を同期情報４２に追加する（Ｓ３３２９）。  
以上の処理が各未取得ＩＤについて繰り返され、未取得ＩＤに対応するＧＵＩＤが割当情報として同期情報４２に設定される。
【０１０６】
図４０に示す衝突重複の検知処理では、同期情報４２に設定された変更履歴のそれぞれについて以下の処理が行われる。  
変更取得部２１５は、変更履歴にＧＵＩＤが設定されている場合（Ｓ３３４１：ＮＯ）、変更履歴のＧＵＩＤに対応するサーバレコードをサーバデータベース２１から検索し（Ｓ３３４２）、対応するサーバレコードが存在しなければ（Ｓ３３４３：ＮＯ）、ＧＵＩＤおよび「真」の削除フラグを含む変更特徴情報を作成して同期情報４２に追加する（Ｓ３３４４）。  
変更履歴のＧＵＩＤに対応するサーバレコードが存在する場合（Ｓ３３４３：ＹＥＳ）、変更取得部２１５は、変更履歴の更新時点と検索したサーバレコードの更新時点とが一致するか否かを判定し（Ｓ３３４５）、更新時点が一致しなければ（Ｓ３３４５：ＮＯ）、サーバレコードのＧＵＩＤ、更新時点、ヒントおよびキー、並びに「偽」の削除フラグを含む変更特徴情報を作成して同期情報４２に追加する（Ｓ３３４６）。  
一方、更新時点が一致した場合（Ｓ３３４５：ＹＥＳ）、変更履歴の変更種別が「削除」であれば（Ｓ３３４７：ＹＥＳ）、ＧＵＩＤに対応するサーバレコードをサーバデータベース２１から削除する（Ｓ３３４８）。変更種別が「削除」でなければ（Ｓ３３４７：ＮＯ）、変更取得部２１５は、変更履歴に含まれるキーと一致するサーバレコードをサーバデータベース２１から検索し（Ｓ３３４９）、キーと一致するサーバレコードがあれば（Ｓ３３５０：ＹＥＳ）、サーバレコードのＧＵＩＤ、更新時点、ヒントおよびキー並びに「偽」の削除フラグを含む変更特徴情報を作成して同期情報４２に追加する（Ｓ３３５１）。  
以上の処理を同期要求４２に含まれる各変更履歴について行うことにより、衝突または重複したデータについての変更特徴情報が同期情報４２に追加されることになる。
【０１０７】
＝＝同期情報に対応する処理（Ｓ３５）＝＝
図４１は、第２の実施形態に係るステップＳ３５における同期情報４２への対応処理の流れを示す図である。第２の実施形態では、上述した図１９の処理の前に、図４２に示すＧＵＩＤの割当処理（Ｓ３５００）を実行する。
【０１０８】
図４２に示すＧＵＩＤの割当処理では、更新処理部１２０は、同期情報４２に含まれている各割当情報について以下の処理を行う。  
更新処理部１２０は、ＬＵＩＤに対応するクライアントレコードのＧＵＩＤに、割当情報のＧＵＩＤを設定する（Ｓ３５２１）。更新処理部１２０は、割当情報に含まれるステータスが「存在」であった場合（ＬＵＩＤに対応するＧＵＩＤがサーバデータベース２１に既に登録されていた場合）には（Ｓ３５２２）、ＬＵＩＤに対応するクライアントレコードの更新時点に、割当情報の更新時点を設定する（Ｓ３５２３）。  
更新処理部１２０は、変更種別が「追加」であり、かつ、割当情報のＬＵＩＤに対応するクライアント変更履歴をクライアント変更履歴記憶部１３３から削除する（Ｓ３５２４）。また、更新処理部１２０は、割当情報のＬＵＩＤを未取得ＩＤ記憶部１３４から削除する（Ｓ３５２５）。  
以上の処理が各割当情報について行われることで、未取得ＩＤに対応するＧＵＩＤが登録される。
【０１０９】
なお、第２の実施形態において作成されるダウンロード要求４３は第１の実施形態と同じであり、ダウンロード要求４３に対応するサーバ２０による処理（Ｓ３７）も、第１の実施形態と同じである。
【０１１０】
＝＝ダウンロード情報の対応処理（Ｓ３９）＝＝
図４３は、第２の実施形態に係るステップＳ３９におけるダウンロード情報４４への対応処理の流れを示す図である。第２の実施形態では、上述した図２１の処理のステップＳ３９０１を実行した後、ステップＳ３９０２に変えて、ステップＳ３９０３〜Ｓ３９０８を実行する。  
更新処理部１２０は、ダウンロード情報４４に含まれている取得ダウンロード情報のうち、取得ダウンロード情報のＧＵＩＤに対応するクライアント変更履歴がクライアント変更履歴記憶部１３３に記憶されていないものを抽出し（Ｓ３９０３）、抽出した取得ダウンロード情報のそれぞれについて、上述した図２２に示す適用処理を行う（Ｓ３９０４）。すなわち、取得ダウンロード情報に含まれる削除フラグが「真」であれば（Ｓ３９２１：ＹＥＳ）、削除処理部１１４は、取得ダウンロード情報に含まれるＧＵＩＤに対応するクライアントレコードをクライアントデータベース１１から削除し（Ｓ３９２２）、削除フラグが「偽」であれば（Ｓ３９２１：ＮＯ）、更新処理部１２０は、取得ダウンロード情報に含まれているＧＵＩＤ、キー、カラム、ヒントおよび本体と、「偽」の更新可能性フラグおよび「偽」の削除可能性フラグとを含むクライアントレコードをクライアントデータベース１１に登録する（Ｓ３９２３）。  
次に、解消要求送信部１２２は、クライアントＩＤ記憶部１３１に記憶されているクライアントＩＤを設定した解消要求４５を作成する（Ｓ３９０５）。更新処理部１２０は、ダウンロード情報４４に含まれる取得ダウンロード情報のうち、取得ダウンロード情報のＧＵＩＤに対応するクライアント変更履歴がクライアント変更履歴記憶部１３３に記憶されているものを抽出する（Ｓ３９０６）。解消処理部１２４は、図４４に示す衝突解消処理を行い（Ｓ３９０７）、図４５に示す重複解消処理を行う（Ｓ３９０８）。
【０１１１】
図４４に示す衝突解消処理では、上記図４３のステップＳ３９０６において抽出された取得ダウンロード情報のそれぞれについて以下の処理を行う。  
解消処理部１２４は、取得ダウンロード情報に含まれるＧＵＩＤが衝突記憶部１３７に記憶されていれば（Ｓ３９４１）、当該ＧＵＩＤに対応するクライアントレコードをクライアントデータベース１１から読み出し（Ｓ３９４２）、読み出したクライアントレコードと取得ダウンロード情報とのいずれかを選択する（Ｓ３９４３）。解消処理部１２４は、例えば、クライアントレコードおよび取得ダウンロード情報のヒントを出力してユーザに選択させるようにすることができる。  
解消処理部１２４は、クライアントレコードを選択した場合（Ｓ３９４４：ＹＥＳ）、クライアントレコードのＬＵＩＤ、ＧＵＩＤ、更新時点、キー、カラム、ヒントおよび本体を含む解消情報を解消要求４５に追加し（Ｓ３９４５）、取得ダウンロード情報を選択した場合には（Ｓ３９４４：ＮＯ）、取得ダウンロード情報のＧＵＩＤ、更新時点、カラム、ヒントおよび本体を含む解消情報を解消要求４５に追加し（Ｓ３９４６）、クライアントレコードの更新時点、キー、カラム、ヒントおよび本体を、取得ダウンロード情報のものに変更するようにクライアントデータベース１１を更新する（Ｓ３９４７）。解消処理部１２４は、衝突記憶部１３７から上記ＧＵＩＤを削除する（Ｓ３９４８）。
【０１１２】
図４５に示す重複解消処理では、上記図４３のステップＳ３９０６において抽出された取得ダウンロード情報のそれぞれについて以下の処理を行う。  
解消処理部１２４は、取得ダウンロード情報に含まれるＧＵＩＤが重複記憶部１３６に記憶されていれば（Ｓ３９６１）、当該ＧＵＩＤに対応するクライアントレコードをクライアントデータベース１１から読み出し（Ｓ３９６２）、読み出したクライアントレコードと取得ダウンロード情報とのいずれかを選択する（Ｓ３９６３）。解消処理部１２４は、上述した衝突解消処理と同様に、例えば、クライアントレコードおよび取得ダウンロード情報のヒントを出力してユーザに選択させるようにすることができる。  
解消処理部１２４は、クライアントレコードを選択した場合（Ｓ３９６４：ＹＥＳ）、クライアントレコードのＬＵＩＤ、ＧＵＩＤ、更新時点、キー、カラム、ヒントおよび本体を含む解消情報を解消要求４５に追加し（Ｓ３９６５）、取得ダウンロード情報を選択した場合には（Ｓ３９６４：ＮＯ）、取得ダウンロード情報のＧＵＩＤ、更新時点、カラム、ヒントおよび本体を含む解消情報を解消要求４５に追加する（Ｓ３９６６）。解消処理部１２４は、取得ダウンロード情報のＧＵＩＤに対応するＧＵＩＤを重複記憶部１３６から読み出してＧとし（Ｓ３９６７）、クライアントデータベース１１からＧＵＩＤがＧと一致するクライアントレコードを削除する（Ｓ３９６８）。  
解消処理部１２４は、重複記憶部１３６から取得ダウンロード情報のＧＵＩＤに対応するレコードを削除し（Ｓ３９６９）、未検証記憶部１３５から取得ダウンロード情報のＧＵＩＤを削除する（Ｓ３９７０）。
【０１１３】
＝＝解消要求対応（Ｓ５２）＝＝
図４６は、上述した図３６のステップＳ５２においてサーバ２０が実行する、解消要求４５に対応する処理の流れを示す図である。  
解消処理部２２１は、空の解消結果情報４６を作成し（Ｓ５２０１）、解消要求４５に含まれている解消情報のそれぞれについて、以下の処理を行う。  
解消処理部２２１は、解消情報のＧＵＩＤが設定されていない場合には（Ｓ５２０２：ＹＥＳ）、新たに割り当てたＧＵＩＤと、解消情報に設定されているＬＵＩＤ、更新時点、キー、カラム、ヒントおよび本体とを設定したサーバレコードを作成してサーバデータベース２１に登録し（Ｓ５２０３）、ＬＵＩＤ、ＧＵＩＤ、更新時点、「偽」の削除フラグ、および「成功」のステータスを含む結果情報を解消結果情報４６に追加する（Ｓ５２０４）。  
一方、解消情報にＧＵＩＤが設定されている場合（Ｓ５２０２：ＮＯ）、解消処理部２２１は、解消情報のＧＵＩＤに対応するサーバレコードをサーバデータベース２１から検索し（Ｓ５２０５）、当該ＧＵＩＤに対応するサーバレコードが存在しなければ（Ｓ５２０６：ＮＯ）、解消処理部２２１は、解消情報のＧＵＩＤと、「真」の削除フラグおよび「衝突」のステータスとを含む結果情報を解消結果情報４６に追加する（Ｓ５２０７）。  
上記ＧＵＩＤに対応するサーバレコードが存在する場合（Ｓ５２０６：ＹＥＳ）、解消処理部２２１は、サーバレコードの更新時点と解消情報の更新時点とが一致しなければ（Ｓ５２０８：ＮＯ）、サーバレコードのＧＵＩＤおよび更新時点と、「偽」の削除フラグおよび「衝突」のステータスとを含む結果情報を解消結果情報４６に追加する（Ｓ５２０９）。  
解消処理部２２１は、更新時点が一致し（Ｓ５２０８：ＹＥＳ）、解消情報の削除フラグが「真」であれば（Ｓ５２１０：ＹＥＳ）、ＧＵＩＤに対応するサーバレコードをサーバデータベース２１から削除し（Ｓ５２１１）、削除フラグが「偽」であれば（Ｓ５２１０：ＮＯ）、解消処理部２２１は、サーバレコードに、解消情報の更新時点、キー、カラム、ヒントおよび本体を設定するようにサーバデータベース２１を更新する（Ｓ５２１２）。  
解消処理部２２１は、解消情報のＬＵＩＤ、ＧＵＩＤ、更新時点および削除フラグと、「成功」のステータスとを含む結果情報を解消結果情報４６に追加する（Ｓ５２１３）。また、解消処理部２２１は、解消情報のキーに一致するサーバレコードをサーバデータベース２１から検索し（Ｓ５２１４）、一致するサーバレコードが存在する場合（Ｓ５２１５：ＹＥＳ）、検索したサーバレコードのＧＵＩＤおよび更新時点と、「偽」の削除フラグおよび「衝突」のステータスとを含む重複情報を解消結果情報４６に追加する（Ｓ５２１６）。  
以上の処理が各解消情報について行われる。
【０１１４】
＝＝解消結果対応（Ｓ５４）＝＝
図４７は、上述した図３６のステップＳ５４においてクライアント１０が実行する、解消結果情報４６に対応する処理の流れを示す図である。  
解消処理部１２４は、空のダウンロード要求４３を作成し（Ｓ５４０１）、解消結果情報４６に含まれている結果情報のそれぞれについて、以下の処理を行う。  
解消処理部１２４は、結果情報に含まれるＬＵＩＤが未取得ＩＤ記憶部１３４に登録されている場合には（Ｓ５４０２：ＹＥＳ）、当該ＬＵＩＤに対応するクライアントレコードに、結果情報のＧＵＩＤを設定するようにクライアントデータベース１１を更新し（Ｓ５４０３）、未取得ＩＤ記憶部１３４から当該ＬＵＩＤを削除する（Ｓ５４０４）。  
次に、ステータスが「衝突」であれば（Ｓ５４０５：ＹＥＳ）、解消処理部１２４は、結果情報のＧＵＩＤを衝突記憶部１３７に登録し（Ｓ５４０６）、ダウンロード決定部１１５は、当該結果情報のＧＵＩＤが示すデータをダウンロードするか否かを決定する（Ｓ５４０７）。ダウンロード決定部１１５は、例えば、衝突したデータはサーバ２０を優先するものとして、自動的にダウンロードすることを決定してもよいし、クライアントデータを優先するものとして、ダウンロードしないことを決定してもよいし、ユーザにダウンロードするか否かを問い合わせるようにしてもよい。また、結果情報にキーやカラム、ヒントなどを含めるようにしておき、ダウンロード決定部１１５は、キーやカラム、ヒントなどが所定の条件を満たす場合にダウンロードすることを決定するようにしてもよい。ダウンロード決定部１１５は、ダウンロードすると決定した場合には（Ｓ５４０９：ＹＥＳ）、結果情報のＧＵＩＤを含む取得情報を生成してダウンロード要求４３に設定する（Ｓ５４１０）。  
一方、ステータスが「成功」である場合には（Ｓ５４０５：ＮＯ）、解消処理部１２４は、結果情報のＧＵＩＤに対応するクライアント変更履歴をクライアント変更履歴記憶部１３３から削除する（Ｓ５４０８）。  
以上の処理を結果情報のそれぞれについて繰り返した後、ダウンロード決定部１１５は、解消結果情報４６に含まれている重複情報のうち、対応するデータをダウンロードするものを決定し（Ｓ５４１１）、決定した重複情報のＧＵＩＤを含む取得情報を生成してダウンロード要求４３に設定する（Ｓ５４１２）。なお、ダウンロード要求４３に取得情報が設定されなかった場合には、上述した図３６のステップＳ５５〜Ｓ５８の処理を省略するものとする。  
このようにして、選択フィルタにマッチするクライアントレコードとサーバレコードとの同期が行われる。
【０１１５】
以上説明したように、上述した第１および第２の実施形態の通信システムによれば、サーバ２０にサーバ変更履歴が記録されているデータについては、サーバ変更履歴に基づいてクライアント１０がデータの追加、更新または削除を反映することができる。サーバ２０側では、どのクライアント１０についてどのデータが更新されているかなどを管理する必要がない。したがって、サーバ２０においてクライアント１０ごとの状態を管理するコストを低減することができる。よって、サーバ２０を効果的に運用することができる。したがって、１台のサーバ２０に多数のクライアント１０からアクセスされる場合には効果的である。
【０１１６】
また、本実施形態の通信システムでは、フィルタ条件を同期要求に設定して送信することで、サーバ２０においてフィルタ条件にマッチするデータのみを対象として追加や削除、更新を検知することができる。したがって、例えば、サーバ２０においてクライアント１０が記憶しているデータの一覧を管理したり、クライアント１０から記憶しているデータの一覧を送信したりすることなく、フィルタ条件にマッチする一部のデータのみを選択的に同期することが可能となるので、効率的なデータの同期を実現することができる。
【０１１７】
また、一般に、新しいデータほど価値が高いことが多いところ、本実施形態の通信システムによれば、新しいデータについては、大量のデータが格納されるサーバデータベース２１を検索することなく、サーバ変更履歴に基づいて同期を行うことができるので、効率的にデータの同期を行うことができる。つまり、より価値の高いデータについては、より効率的にデータの同期を行うことが可能となる。よって、クライアントとサーバとの間で効果的な同期を行うことができる。
【０１１８】
また、一般に、フィルタアウトされたデータは同期の対象とせず、クライアント１０のデータを削除するような同期が行われることが行われているところ、本実施形態では、クライアント１０が同期の対象とするデータを決定しているため、クライアント１０は、サーバ２０においてフィルタアウトされたデータについても、ダウンロード要求にデータＩＤを指定して、同期の対象とすることができる。クライアント１０においては、クライアントデータベース１１には更新前のデータが記憶されており、クライアント１０のユーザは、クライアントデータベース１１に記憶されているデータに対して興味を有している。本実施形態の通信システムによれば、サーバ２０側でフィルタアウトされたとしても、ユーザの興味範囲に含まれるデータ、すなわちユーザにとって重要度の高いデータを優先的に同期の対象とすることが可能となり、ユーザにとって便利である。また、ユーザの興味範囲に含まれるデータを優先的にダウンロードすることにより、ユーザにとって応答時間を短く感じさせることが期待される。
【０１１９】
また、本実施形態の通信システムでは、サーバ２０において追加や変更されたデータをいきなり送信することがなく、クライアント１０はヒントを参考にして、必要なデータのみをダウンロードすることができる。したがって、例えば、携帯電話などでは、記憶容量が限られ、また通信速度にも限界があり、あまり大量のデータをダウンロードすることができないこともあるが、クライアント１０は、記憶容量や通信速度などの状況に応じてデータを柔軟に取得することが可能となる。
【０１２０】
また、本実施形態の通信システムによれば、アンカー時点が、バウンダリ時点よりも前である場合には、サーバ２０は、アンカー時点からバウンダリ時点までに追加されたデータを検索し、変更特徴情報としてクライアント１０に通知することができる。したがって、サーバ２０においてバウンダリ時点より前のサーバ変更履歴を記録しておかなかったとしても、クライアント１０は、少なくとも追加および更新されたデータを取得することができる。よって、サーバ２０において全ての変更履歴を記憶することなく、データの同期を行うことが可能となるので、データの同期に係るサーバ２０の負荷を抑えることができる。
【０１２１】
また、本実施形態の通信システムによれば、アンカー時点がバウンダリ時点よりも前である場合、クライアント１０からバウンダリ時点より前の更新時点のデータを陳腐化情報としてサーバ２０に送信することで、更新や削除がされていないかどうかをサーバ２０に問い合わせることができる。したがって、変更履歴が存在するデータについての更新に後続して、変更履歴が存在しないデータについても同期を行うようにすることができる。よって、確実なデータの同期を行うことが可能となる。
【０１２２】
また、フィルタ条件を適用する対象となるカラムが更新された場合でも、更新前のカラムを旧カラムとしてサーバ変更履歴記憶部２３１に管理しているので、変更履歴が存在するデータについては、サーバ２０においてデータが更新され、フィルタ条件にマッチしなくなった場合でも、クライアント１０に記憶されているデータを同期することができる。
【０１２３】
また、本実施形態の通信システムでは、サーバ２０は、アンカー時点よりも後に作成され、その後削除されたデータについては、更新情報をクライアント１０に送信しないようにしている。したがって、効率的な同期を行うことができる。
【０１２４】
また、第２の実施形態の通信システムでは、クライアント１０およびサーバ２０の両方でデータが変更された場合でも、クライアント１０において衝突を検知し、クライアント１０で変更されたデータと、サーバ２０で変更されたデータとのいずれかを選択することにより衝突を解消することができる。
【０１２５】
また、クライアント１０では、データの重複を検出し、重複を解消することができる。したがって、同じデータが複数登録されることによるリソースの消費を抑えることができる。
【０１２６】
また、第２の実施形態の通信システムでは、クライアント１０でデータを作成する場合に、クライアント１０はＧＵＩＤを割り当てず、クライアント１０において一意なＬＵＩＤを割り当てるのみで、同期時にシステム内で一意なグローバルＩＤを、サーバ２０が割り当てるようにすることができる。クライアント１０がデータの作成ごとにＧＵＩＤを割り当てる場合には、ＧＵＩＤの割当処理にかかる負荷を無視できないが、第２の実施形態のように、クライアント１０はＬＵＩＤを割り当てればよいので、ＩＤの割り当てにかかる処理負荷を抑えることが可能となる。一方で、ＧＵＩＤの割り当てはサーバ２０に一元化することができるので、確実に一意なＧＵＩＤを容易に割り当てることができる。
【０１２７】
また、第２の実施形態の通信システムでは、クライアント１０とサーバ２０との両方でデータが変更された衝突を検知し、ヒントなどに基づいて衝突を解消した上で同期を行うようにしている。したがって、複数のクライアント１０から同一のデータに対して変更が行われるような状況であっても、適切に同期を行うことができる。
【０１２８】
＝＝変形例＝＝
なお、上述した実施形態では、データの作成時点や更新時点、削除時点などは、サーバデータベース２１に対する変更の順番を表す値であるものとしたが、これに限らず、タイムスタンプを採用してもよい。この場合に、タイムスタンプの単位時間（例えば、ミリ秒、マイクロ秒など）が低く、同一のタイムスタンプに複数の変更が行われる得る場合には、タイムスタンプにデータの識別情報を連結したものを「時点」として採用するようにし、サーバ変更履歴記憶部２３１にサーバ変更履歴を登録するタイミングを少なくとも上記単位時間以上遅らせるようにするようにしてもよい。
【０１２９】
また、上述の実施形態では、説明を簡単にするため、クライアント１０およびサーバ２０は１台ずつであるものとしたが、複数のクライアント１０が１台のサーバ２０に接続する形態としてもよいし、１台のクライアント１０が複数のサーバ２０に接続する形態としてもよいし、複数のクライアント１０が複数のサーバ２０に接続する形態としてもよい。
【０１３０】
また、本実施形態では、クライアントＩＤは予めクライアントＩＤ記憶部１３１に記憶されているものとしたが、これに限らず、例えば、サーバ２０がクライアントＩＤをクライアント１０に割り当て、クライアント１０がサーバ２０から割り当てられたクライアントＩＤを取得してクライアントＩＤ記憶部１３１に登録するようにすることもできる。クライアントＩＤは、例えば、クライアント１０が起動する度に再設定されるようにしてもよい。
【０１３１】
また、本実施形態では、サーバ変更履歴記憶部２３１には、追加、更新および削除に関するサーバ変更履歴が登録されるものとしたが、削除に関するサーバ変更履歴のみを管理するようにしてもよい。この場合、同期要求４１に対応する処理（図１６や図３８）のステップＳ３３０７において、サーバ２０は、サーバデータベース２１からアンカー時点よりも更新時点が後であるサーバレコードのＧＵＩＤや更新時点、ヒント、キーを取得して、変更特徴情報に設定するようにする。削除のみを管理することにより、サーバ変更履歴を管理するリソースを低減することができる。
【０１３２】
また、サーバ変更履歴記憶部２３１を省略するようにすることもできる。この場合、サーバ２０は、アンカー時点より後の更新時点を含むサーバレコードをサーバデータベース２１から検索して変更特徴情報を作成するようにする。クライアント１０は、同期情報４２の対応処理（図１９や図４１）のステップＳ３５０６〜Ｓ３５０８において、全てのクライアントレコードの削除可能性フラグに「真」を設定するようにする。またこの場合にも、削除については、サーバ変更履歴に代えてサーバレコードに削除フラグを設定するようにして履歴を管理するようにてもよい。サーバ２０は、定期的に現在の時点から所定の過去の時点以前のサーバレコードをサーバデータベース２１から削除するようにすることができる。
【０１３３】
また、本実施形態では、同期情報４２には、フィルタ条件に該当する変更特徴情報を全て同期情報４２に含めるものとしたが、同期情報４２に含める変更特徴情報の数を制限するための条件（以下、「リミット条件」という。）を同期要求に含めるようにしてもよい。リミット条件は、例えば、レコードを所定のカラムでソートしたうちのｎ番目から所定数個などと設定することができる。
【０１３４】
また、本実施形態では、フィルタ条件が必ず設定されるものとしたが、フィルタ条件を指定せず、全てのデータを更新対象としてもよい。
【０１３５】
また、本実施形態では、同期情報４２やダウンロード情報４４、解消要求４５などは１回の送信で送られるものとしたが、例えば、複数回に分けて送信するようにしてもよい。
【０１３６】
また、本実施形態では、バウンダリ時点よりも前に追加または更新されたデータについても、変更特徴情報を同期情報４２に含めるようにしたが、同期情報４２にはバウンダリ時点以後のデータについての変更特徴情報のみを含めるようにし、クライアント１０の更新処理部１２０が、アンカー時点がバウンダリ時点よりも前である場合に、バウンダリ時点よりも前に追加または更新されたデータを取得するためのコマンド（以下、「追加更新情報取得要求」という。）にアンカー時点およびバウンダリ時点を設定してサーバ２０に送信するようにし、サーバ２０の変更取得部２１５は、作成時点が追加更新情報取得要求に含まれるアンカー時点よりも後であり、かつ更新時点が追加更新情報取得要求に含まれるバウンダリ時点よりも前であるサーバレコードをサーバデータベース２１から検索して変更特徴情報を作成し、クライアント１０に送信するようにしてもよい。この場合、変更履歴に基づくデータの更新をより優先して処理することが可能となる。
【０１３７】
また、サーバ２０がリセットすることがある場合や、サーバ２０が複数のサーバデータベース２１を管理するような場合には、同期対象となるサーバデータベース２１にＩＤ（以下、「同期ＩＤ」という。）を割り当て、同期要求４１、同期情報４２、ダウンロード要求４３、ダウンロード情報４４、解消要求４５、解消結果情報４６に同期ＩＤを含めるようにしてもよい。この場合、クライアント１０は、同期要求４１やダウンロード要求４３、解消要求４５に設定していた同期ＩＤと、サーバ２０から応答される同期情報４２やダウンロード情報４４、解消結果情報４６に設定されている同期ＩＤとが異なる場合には、クライアント１０は、クライアントデータベース１１に記憶されているデータを全て削除してから、最初から同期処理をやり直すようにしてもよい。
【０１３８】
また、本実施形態では、例えば図１９のステップＳ３５０２などにおいて、同期情報４２に含まれている最新履歴時点でアンカー時点を更新するものとしたが、同期情報４２に含まれている変更特徴情報のうち、ダウンロード決定部１１５がダウンロードすべきと決定したデータに対応するものに含まれる最も新しい更新時点をアンカー時点として選択フィルタ条件に対応付けてアンカー記憶部１３２に登録するようにしてもよい。さらに、同期情報４２を受信したときにはアンカー時点を更新せず、その後ダウンロード要求４３に応じてサーバ２０からダウンロード情報４４を受信し、ダウンロード情報４４に基づいてデータをクライアントデータベース１１に登録するごとに、登録したデータの更新時点をアンカー時点としてアンカー記憶部１３２に登録するようにしてもよい。これにより、例えば、一度にダウンロードを行わず、所定数のデータをダウンロードしてクライアントデータベース１１に登録する処理を複数回繰り返すような場合において、途中でダウンロードが失敗したときには、次回の同期処理において、失敗した時点以後のデータについて同期をやり直すことが可能となる。この場合、同期情報４２に含まれていた全ての変更特徴情報に対応するデータをダウンロードしたときにのみ、同期情報４２に含まれていた最新履歴時点をアンカー時点としてアンカー記憶部１３２に登録するようにしてもよい。
【０１３９】
また、本実施形態では、陳腐化情報取得部１１７は、削除可能性フラグまたは更新可能性フラグが「真」であるクライアントレコードのうち、ＧＵＩＤが取得情報に含まれていないものの全てについて陳腐化情報を作成するものとしたが、これに限らず、削除可能性フラグおよび更新可能性フラグの少なくともいずれかが「真」であるクライアントレコード、すなわちサーバ２０において削除または更新されている可能性があるデータのうち、サーバ２０において削除または更新されているかどうかを調べるべきものを決定し、決定したデータについてのみ陳腐化情報を作成するようにしてもよい。この場合、クライアント１０は、例えば、削除可能性フラグおよび更新可能性フラグの少なくともいずれかが「真」であるクライアントレコードの全てについて陳腐化情報を作成するようにしてもよいし、所定の条件にマッチするクライアントデータについて陳腐化情報を作成するようにしてもよいし、クライアント１０のユーザから指定されたクライアントデータについて陳腐化情報を作成するようにしてもよい。
【０１４０】
また、本実施形態では、ダウンロード決定部１１５がダウンロードしないと決定したデータについては端的にダウンロードを行わないようにしたが、サーバ２０において更新されているデータについては、クライアントレコードに更新されている旨を示すフラグ（以下、「更新フラグ」という。）を設定しておき、次の同期処理のときに、更新フラグが真であるものについてもダウンロードをするように決定するようにすることもできる。この場合、ダウンロード決定部１１５は、例えば、同期情報４２に含まれている変更特徴情報に基づいて追加または更新されているデータを特定するとともに、クライアントデータベース１１から更新フラグが真であるクライアントレコードを検索し、特定したデータと検索したクライアントレコードとの中からダウンロードすべきデータを決定することができる。
【０１４１】
また、ダウンロード決定部１１５がダウンロードしないと決定したデータについて、後からダウンロードするようにしてもよいし、クライアントデータベース１１から削除するようにしてもよい。
【０１４２】
また、クライアントデータベース１１に記憶される古いデータを定期的に削除するようにしてもよい。この場合、クライアント１０は、例えば、１分や５分、１時間などの所定の時間ごとあるいはクライアント１０における処理の負荷が低減したことを検知したときに、クライアントレコードのうち、更新時点が現在の日時よりも所定時間以上前のものをクライアントデータベース１１から削除するようにすることができる。アンカー記憶部１３２が、フィルタ条件とアンカー時点とに対応付けて、これらがアンカー記憶部１３２に登録された日時を記憶しておき、クライアント１０は、登録日時が現在の日時よりも所定時間以上前か否かによりフィルタ条件が古いか新しいかを判断し、古いフィルタ条件にマッチするクライアントレコードのうち、新しいフィルタ条件にマッチしないものを、クライアントデータベース１１から削除するようにすることもできる。
【０１４３】
また、上述の実施形態では、サーバ変更履歴は、変更の種別（追加、更新または削除）を問わず、サーバ２０においてデータが変更される度に１つ作成されるものとしたが、これに限らず、例えば、更新されたデータについて１つのサーバ変更履歴を記録するようにしてもよい。この場合、サーバ変更履歴には、例えば、変更されたデータの項目を、「｛項目＝最新値，直近値，．．．，最古値｝」というリスト表現とするなど、データの各項目について所定数の履歴を設定可能としておく。サーバレコードが更新されるたびに、更新されたサーバレコードのＧＵＩＤに対応するサーバ変更履歴をサーバ変更履歴記憶部２３１から検索し、サーバ変更履歴が存在する場合には、更新されたサーバレコードの最新値を、サーバ変更履歴に含まれる項目の最新値として設定するようにする。項目の履歴のリストが所定数を越えた場合には、最古の値をリストから削除するようにする。このように、同一のサーバレコードについての複数の更新を１つの変更履歴で管理することで、ある１つのサーバレコードの対する更新頻度が高くなった場合にも、そのサーバレコードの更新についてのサーバ変更履歴がサーバ変更履歴記憶部２３１を独占してしまうような状況を回避することができる。したがって、変更履歴の数を有限にしている場合において、サーバレコードの更新頻度が高いときでも、より多くのデータについての変更履歴を管理することができる。よって、有限の変更履歴であっても、サーバ２０におけるデータの変更を確実に管理することが可能となる。
【０１４４】
また、本実施形態では、サーバデータベース２１が、データの本体に加えてキーやカラム、ヒントなども含んだサーバレコードを記憶するものとしたが、データの本体と、そのデータのキーやカラム、ヒントなどのメタ情報とを異なるデータとして記憶するようにしてもよい。例えば、サーバデータベース２１が記憶するサーバレコードには、ＧＵＩＤ、作成時点、更新時点および本体のみが含まれているものとし、サーバ２０は、サーバデータベース２１に記憶されているサーバレコードのそれぞれに対応するＧＵＩＤ、更新時点、キー、カラムおよびヒントを含む情報（以下、「ヘッダデータ」という。）を記憶するヘッダデータベースを備えるようにすることができる。この場合、図１６や図３８に示す同期要求４１への対応処理のステップＳ３３０７において、変更取得部２１５は、ヘッダデータベースから、更新時点がアンカー時点より後であり、かつ更新時点がバウンダリ時点より前であるデータを読み出して、変更特徴情報を作成する。したがって、変更取得部２１５は、サーバデータベース２１にアクセスすることなく、同期要求４１に応じて、アンカー時点からバウンダリ時点までの間に追加や更新がなされたデータを検出することが可能となり、サーバデータベース２１へのアクセスが多いような場合でも、効率的に同期の対象となりうるデータを検出することができる。また、ヘッダデータベースを設けることにより、サーバデータベース２１の構成を変更することなく、ヘッダデータを用いてデータの同期を行うことができる。したがって、例えば、運用中のサーバデータベース２１が存在している場合などにも、容易に運用中のサーバデータベース２１を同期の対象とすることが可能となる。
【０１４５】
また、同様に、クライアント１０が、クライアントデータベース１１とは別に、ヘッダデータを記憶するヘッダデータベースを備えるようにしてもよい。この場合、例えば、クライアント１０において、クライアントデータベース１１を利用するＰＩＭ（Personal Information Manager）アプリケーションなどが動作しているときでも、クライアントデータベース１１の構成を変更することなく、データの同期を行うようにすることが可能となる。
【０１４６】
また、本実施形態では、削除についてのサーバ変更履歴をサーバ変更履歴記憶部２３１に登録するものとしたが、サーバレコードに削除フラグを設定するようにしてもよい。この場合、サーバレコードを削除するときには、サーバレコードの削除フラグを真に設定するとともに、更新時点に現在の時点を設定するようにする。また、定期的に、削除フラグが真に設定されているサーバレコードのうち、サーバレコードの更新時点がバウンダリ時点（サーバ変更履歴記憶部２３１に登録されているサーバ変更履歴の最古の更新時点）よりも古いものをサーバデータベース２１から削除するようにする。変更履歴取得部２１４は、選択フィルタ条件にマッチするサーバ変更履歴をサーバ変更履歴記憶部２３１から検索するとともに、選択フィルタ条件にマッチするサーバレコードのうち削除フラグが真であるものを検索し、検索したサーバ変更履歴およびサーバレコードに基づいて変更特徴情報を作成するようにする。変更履歴取得部２１４は、選択フィルタ条件にマッチするサーバ変更履歴の最も新しい時点と、削除フラグが「真」であるサーバレコードの最も新しい更新時点のうち新しい方を最新履歴時点として決定するようにする。
【０１４７】
また、本実施形態では、サーバ変更履歴は、サーバ変更履歴記憶部２３１にまとめて登録するものとしたが、サーバデータベース２１に登録されるサーバレコードに付帯させて記憶するようにしてもよい。例えば、サーバレコードをオブジェクトとして実装する場合に、サーバレコードのインスタンスごとにサーバ変更履歴をその属性として管理するようにすることができる。この場合、インスタンスごとに所定数のサーバ変更履歴を記憶しておくようにし、所定数を超えるサーバ変更履歴は古い更新時点のものから順に削除されていくようにする。
【０１４８】
また、本実施形態では、図４１（および図１９）に示す同期情報４２の対応処理のステップＳ３５０８において、更新時点がバウンダリ時点よりも前のデータについて、削除可能性フラグおよび更新可能性フラグを真に設定するものとしたが、衝突または重複を検知したためにダウンロードをしなかった時点を考慮するようにしてもよい。この場合、クライアントレコードには、判明しているサーバレコードの更新時点を示す「観測時点」を含めるようにし、例えば、上述した図４４の衝突解消処理や図４５の重複解消処理のループの中で、取得ダウンロード情報に設定されているＧＵＩＤに対応するクライアントレコードがクライアントデータベース１１に存在していれば、対応するクライアントレコードの観測時点に取得ダウンロード情報の更新時点を設定するようにする。また、フィルタ条件にマッチするクライアントレコードの観測時点が、フィルタ条件に対応するアンカー時点よりも前である場合には、クライアントレコードの観測時点をアンカー時点に更新するようにする。さらに、図４１のステップＳ３５０８において更新可能性フラグのみを「真」に設定するようにし、続いてフィルタ条件にマッチし、かつ、観測時点がバウンダリ時点より前であるものを検索し、当該検索したクライアントデータの削除可能性フラグを「真」に設定するようにする。これにより、サーバ２０において削除されていないことが判明している時点より前のデータに削除可能性フラグを設定することがなくなる。これにより、クライアント１０は、削除可能性フラグが「偽」であり、更新可能性フラグが「真」であるクライアントレコードについては、当該クライアントレコードは少なくともサーバで削除はされていないと判断することができる。したがって、例えば、クライアント１０が、クライアントレコードがサーバ２０で削除されていないかどうかをサーバ２０に問い合わせるような場合には、削除可能性フラグが「真」であるクライアントレコードについてのみサーバ２０に問い合わせればよいので、問合わせの対象となるクライアントレコードを絞り込むことができる。また、ダウンロード決定部１１５がダウンロードするデータを決定する場合において、削除可能性フラグに応じて優先順位をつけるようにすることもできる。例えば、１回のダウンロード可能なデータ数に制限があるような場合には、削除可能性フラグが「偽」であるデータを先にダウンロードしたり、逆に、削除可能性フラグが「真」であるデータを先にダウンロードしたりすることができる。
【０１４９】
また、第２の実施形態では、サーバ２０は、同期要求４１に含まれるフィルタ条件にマッチするサーバ変更履歴のみをクライアント１０に応答するものとしたが、これに限らず、例えば、フィルタ条件にマッチしなくても、フィルタ条件に指定された値に類似するものも同期情報４２に設定するようにしてもよい。この場合、サーバ２０は、フィルタ条件にマッチしなかった旨を示すフラグ（以下、「マッチ不明フラグ」という。）をサーバ変更履歴に付帯させて同期情報４２に設定し、クライアント１０は、例えば、マッチ不明フラグが偽であるものについては、ユーザに対して、フィルタ条件にマッチはしないが、マッチする可能性がある旨の提案情報として表示するようにしてもよい。
【０１５０】
また、第２の実施形態では、同期要求４１には、重複記憶部１３６および衝突記憶部１３７にＧＵＩＤが登録されていない全てのクライアント変更履歴に対応する変更特徴情報が含まれるものとしたが、同期要求４１には重複記憶部１３６および衝突記憶部１３７にＧＵＩＤが登録されておらず、かつ、変更種別が「削除」であるクライアント変更履歴に基づく変更特徴情報のみを含めるようにしてもよい。この場合、サーバ２０は、図３６に示すステップＳ３３の同期要求の対応処理（図３８）において、ステップＳ３３１０の衝突重複の検知処理を省略し、変更種別が「削除」以外のクライアント変更履歴については、衝突するものについては、解消処理部１２４によって、図４４のステップ３９４３においてクライアントレコードと、サーバレコードのいずれかを選択した上で、解消要求４５に含められ、衝突しないものについては、解消処理部１２４は、図４３のステップ３９０８の後に、対応するクライアントレコードを解消要求４５に含めるようにする。このようにすることで、サーバ２０において衝突や重複の検出処理を行う処理負荷を軽減することができる。
【０１５１】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【符号の説明】
【０１５２】
１０    クライアント
１１    クライアントデータベース
２０    サーバ
２１    サーバデータベース
３０    通信ネットワーク
４１    同期要求
４２    同期情報
４３    ダウンロード要求
４４    ダウンロード情報
４５    解消要求
４６    解消結果情報
１０１  ＣＰＵ
１０２  メモリ
１０３  記憶装置
１０４  通信インタフェース
１０５  入力装置
１０６  出力装置
１１０  クライアント変更検知部
１１１  フィルタ選択部
１１２  同期要求送信部
１１３  同期情報受信部
１１４  削除処理部
１１５  ダウンロード決定部
１１６  アンカー更新部
１１７  陳腐化情報取得部
１１８  ダウンロード要求送信部
１１９  ダウンロード情報受信部
１２０  更新処理部
１２１  衝突重複解消決定部
１２２  解消要求送信部
１２３  解消結果情報受信部
１２４  解消処理部
１３１  クライアントＩＤ記憶部
１３２  アンカー記憶部
１３３  クライアント変更履歴記憶部
１３４  未取得ＩＤ記憶部
１３５  未検証記憶部
１３６  重複記憶部
１３７  衝突記憶部
２０１  ＣＰＵ
２０２  メモリ
２０３  記憶装置
２０４  通信インタフェース
２０５  入力装置
２０６  出力装置
２１０  ＧＵＩＤ生成部
２１１  時点生成部
２１２  データベース変更部
２１３  同期要求受信部
２１４  変更履歴取得部
２１５  変更取得部
２１６  同期情報送信部
２１７  ダウンロード要求受信部
２１８  データ取得部
２１９  ダウンロード情報送信部
２２０  解消要求受信部
２２１  解消処理部
２２２  解消結果情報送信部
２３１  サーバ変更履歴記憶部
【図１】
2011054092.tif 000003
【図２】
2011054092.tif 000004
【図３】
2011054092.tif 000005
【図４】
2011054092.tif 000006
【図５】
2011054092.tif 000007
【図６】
2011054092.tif 000008
【図７】
2011054092.tif 000009
【図８】
2011054092.tif 000010
【図９】
2011054092.tif 000011
【図１０】
2011054092.tif 000012
【図１１】
2011054092.tif 000013
【図１２】
2011054092.tif 000014
【図１３】
2011054092.tif 000015
【図１４】
2011054092.tif 000016
【図１５】
2011054092.tif 000017
【図１６】
2011054092.tif 000018
【図１７】
2011054092.tif 000019
【図１８】
2011054092.tif 000020
【図１９】
2011054092.tif 000021
【図２０】
2011054092.tif 000022
【図２１】
2011054092.tif 000023
【図２２】
2011054092.tif 000024
【図２３】
2011054092.tif 000025
【図２４】
2011054092.tif 000026
【図２５】
2011054092.tif 000027
【図２６】
2011054092.tif 000028
【図２７】
2011054092.tif 000029
【図２８】
2011054092.tif 000030
【図２９】
2011054092.tif 000031
【図３０】
2011054092.tif 000032
【図３１】
2011054092.tif 000033
【図３２】
2011054092.tif 000034
【図３３】
2011054092.tif 000035
【図３４】
2011054092.tif 000036
【図３５】
2011054092.tif 000037
【図３６】
2011054092.tif 000038
【図３７】
2011054092.tif 000039
【図３８】
2011054092.tif 000040
【図３９】
2011054092.tif 000041
【図４０】
2011054092.tif 000042
【図４１】
2011054092.tif 000043
【図４２】
2011054092.tif 000044
【図４３】
2011054092.tif 000045
【図４４】
2011054092.tif 000046
【図４５】
2011054092.tif 000047
【図４６】
2011054092.tif 000048
【図４７】
2011054092.tif 000049