(57)【特許請求の範囲】
【請求項１】
データを記憶するサーバとの間でデータを同期する装置であって、
第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するデータ記憶部と、
前記サーバに記憶されている前記第１及び第２のデータを取得し、取得した前記第１及び第２のデータを前記データ記憶部に登録する同期処理部と、
前記第１のデータの取得に失敗した場合に、前記第２のデータから前記参照情報の設定を解除するとともに、前記第１のデータの取得が失敗したことを示す不整合情報を前記第２のデータに設定するデータ変更部と、
を備えることを特徴とするデータ同期装置。
【請求項２】
請求項１に記載のデータ同期装置であって、
前記同期処理部は、前記第１のデータの取得に成功した場合に、前記不整合情報が設定されている前記第２のデータが前記データ記憶部に登録されているときは、当該第２のデータも前記サーバから取得すること、
を特徴とするデータ同期装置。
【請求項３】
請求項１又は２のいずれかに記載のデータ同期装置であって、
取得に失敗したデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、
前記同期処理部は、前記第１のデータの取得に失敗した場合、前記第１のデータを特定する前記データ特定情報を前記失敗データ記憶部に登録し、
前記データ変更部は、前記失敗データ記憶部に登録されている前記データ特定情報のそれぞれについて、前記データ特定情報に対応する前記参照情報が設定されている前記第２のデータを前記データ記憶部から検索し、検索した前記第２のデータから前記参照情報の設定を解除するとともに、前記不整合情報を設定すること、
を特徴とするデータ同期装置。
【請求項４】
サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、
前記クライアントは、
第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するクライアントデータ記憶部と、
前記クライアントデータ記憶部に記憶されている前記第１及び第２のデータを前記サーバにアップロードするクライアント同期処理部と、
を備え、
前記サーバは、
前記第１及び第２のデータを記憶するサーバデータ記憶部と、
前記クライアントからアップロードされる前記第１及び第２のデータを受信し、受信した前記サーバデータ記憶部に登録するサーバ同期処理部と、
前記第１のデータの受信が失敗した場合に、前記第２のデータから前記参照情報の設定を解除するサーバデータ変更部と、
を備え、
前記クライアント同期処理部は、前記第１のデータのアップロードが失敗した場合、再度前記第１のデータをアップロードし、前記第１のデータの再度のアップロードが成功したときには、前記第１のデータを特定する前記参照情報が設定されている前記第２のデータを前記クライアントデータ記憶部から読み出し、読み出した前記第２のデータを再度前記サーバにアップロードすること、
を特徴とするデータ同期システム。
【請求項５】
請求項４に記載のデータ同期システムであって、
前記データはヘッダ部を含み、前記参照情報は前記ヘッダ部に含まれ、
前記クライアント同期処理部は、前記第１のデータの再度のアップロードが成功したとき、前記第２のデータの前記ヘッダ部のみを再度前記サーバにアップロードすること、
を特徴とするデータ同期システム。
【請求項６】
請求項４又は５のいずれかに記載のデータ同期システムであって、
前記サーバは、アップロードに失敗したデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、
前記サーバ同期処理部は、前記第２のデータに設定されている前記参照情報が示す前記第１のデータを特定する前記データ特定情報が前記失敗データ記憶部に登録されている場合に、当該参照情報の設定を解除すること、
を特徴とするデータ同期システム。
【請求項７】
請求項４乃至６のいずれかに記載のデータ同期システムであって、
前記第１及び第２のデータには更新時点が設定され、
前記クライアントは、
前記サーバに対して最後に前記データをアップロードした時点であるアンカー時点を記憶するアンカー時点記憶部と、
前記第１のデータの再度のアップロードが成功したとき、前記第１のデータを示す前記参照情報が設定されている前記第２のデータを前記クライアントデータ記憶部から検索し、前記検索した第２のデータの前記更新時点を、前記アンカー時点よりも新しい時点に更新する更新時点更新部を備え、
前記クライアント同期処理部は、前記アンカー時点より後の前記更新時点が設定されている前記第１及び第２のデータを前記サーバにアップロードすること、
を特徴とするデータ同期システム。
【請求項８】
請求項７に記載のデータ同期システムであって、
前記クライアントは、アップロードに失敗した前記第１のデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、
前記クライアント同期処理部はさらに、前記失敗データ記憶部に記憶されている前記データ特定情報により特定される前記第１のデータを前記サーバにアップロードすること、
を特徴とするデータ同期システム。
【請求項９】
データを記憶するサーバとの間でデータを同期する方法であって、
第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するデータ記憶部を備えるコンピュータが、
前記サーバに記憶されている前記第１及び第２のデータを取得し、取得した前記第１及び第２のデータを前記データ記憶部に登録し、
前記第１のデータの取得に失敗した場合に、前記第２のデータから前記参照情報の設定を解除するとともに、前記第１のデータの取得が失敗したことを示す不整合情報を前記第２のデータに設定すること、
を特徴とするデータ同期方法。
【請求項１０】
サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、
第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するクライアントデータ記憶部を備える前記クライアントが、前記クライアントデータ記憶部に記憶されている前記第１及び第２のデータを前記サーバにアップロードし、
前記第１及び第２のデータを記憶するサーバデータ記憶部を備える前記サーバが、
前記クライアントからアップロードされる前記第１及び第２のデータを受信し、受信した前記サーバデータ記憶部に登録し、
前記第１のデータの受信が失敗した場合に、前記第２のデータから前記参照情報の設定を解除し、
前記第１のデータのアップロードが失敗した場合、再度前記第１のデータをアップロードし、前記第１のデータの再度のアップロードが成功したときには、前記第１のデータを特定する前記参照情報が設定されている前記第２のデータを前記クライアントデータ記憶部から読み出し、読み出した前記第２のデータを再度前記サーバにアップロードすること、
を特徴とするデータ同期方法。
【請求項１１】
データを記憶するサーバとの間でデータを同期するためのプログラムであって、
第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するデータ記憶部を備えるコンピュータに、
前記サーバに記憶されている前記第１及び第２のデータを取得し、取得した前記第１及び第２のデータを前記データ記憶部に登録するステップと、
前記第１のデータの取得に失敗した場合に、前記第２のデータから前記参照情報の設定を解除するとともに、前記第１のデータの取得が失敗したことを示す不整合情報を前記第２のデータに設定するステップと、
を実行させるためプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ同期装置、データ同期システム、データ同期方法及びプログラムに関する。
【背景技術】
【０００２】
複数のコンピュータの間でデータの同期を取ることが行われている。例えば、携帯電話に記録されている写真や電話帳などのデータをサーバにも同期することにより、データのバックアップを行ったり、複数の機器の間でデータを共有したりされている。データが他のデータに依存をしているなお、データが他のデータを参照している場合があり、そのような場合には、データの関係性を壊さないように同期が行われる。例えば、第１のデータを参照している第２のデータを送信する場合には、第１のデータも送信するようにすることができる（特許文献１参照）。このような同期処理は通常アトミックに処理され、第１のデータの送信が失敗した場合には、第２のデータの送信が成功したか否かにかかわらず、同期処理全体としては失敗したものとされる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−２５３６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、第１のデータの送信が失敗したことにより同期処理全体が失敗とされると、第２のデータの送信が成功していてもその第２のデータを利用することはできなくなってしまう。
【０００５】
本発明は、このような背景を鑑みてなされたものであり、参照関係を有するデータの同期においてデータの可用性を高めることのできる、データ同期装置、データ同期システム、データ同期方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するための本発明の主たる発明は、データを記憶するサーバとの間でデータを同期する装置であって、第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するデータ記憶部と、前記サーバに記憶されている前記第１及び第２のデータを取得し、取得した前記第１及び第２のデータを前記データ記憶部に登録する同期処理部と、前記第１のデータの取得に失敗した場合に、前記第２のデータから前記参照情報の設定を解除するとともに、前記第１のデータの取得が失敗したことを示す不整合情報を前記第２のデータに設定するデータ変更部と、を備えることとする。
【０００７】
また、本発明のデータ同期装置では、前記同期処理部は、前記第１のデータの取得に成功した場合に、前記不整合情報が設定されている前記第２のデータが前記データ記憶部に登録されているときは、当該第２のデータも前記サーバから取得するようにしてもよい。
【０００８】
また、本発明のデータ同期装置は、取得に失敗したデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、前記同期処理部は、前記第１のデータの取得に失敗した場合、前記第１のデータを特定する前記データ特定情報を前記失敗データ記憶部に登録し、前記データ変更部は、前記失敗データ記憶部に登録されている前記データ特定情報のそれぞれについて、前記データ特定情報に対応する前記参照情報が設定されている前記第２のデータを前記データ記憶部から検索し、検索した前記第２のデータから前記参照情報の設定を解除するとともに、前記不整合情報を設定するようにしてもよい。
【０００９】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、前記クライアントは、第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するクライアントデータ記憶部と、前記クライアントデータ記憶部に記憶されている前記第１及び第２のデータを前記サーバにアップロードするクライアント同期処理部と、を備え、前記サーバは、前記第１及び第２のデータを記憶するサーバデータ記憶部と、前記クライアントからアップロードされる前記第１及び第２のデータを受信し、受信した前記サーバデータ記憶部に登録するサーバ同期処理部と、前記第１のデータの受信が失敗した場合に、前記第２のデータから前記参照情報の設定を解除するサーバデータ変更部と、を備え、前記クライアント同期処理部は、前記第１のデータのアップロードが失敗した場合、再度前記第１のデータをアップロードし、前記第１のデータの再度のアップロードが成功したときには、前記第１のデータを特定する前記参照情報が設定されている前記第２のデータを前記クライアントデータ記憶部から読み出し、読み出した前記第２のデータを再度前記サーバにアップロードすることとする。
【００１０】
また、本発明のデータ同期システムでは、前記データはヘッダ部を含み、前記参照情報は前記ヘッダ部に含まれ、前記クライアント同期処理部は、前記第１のデータの再度のアップロードが成功したとき、前記第２のデータの前記ヘッダ部のみを再度前記サーバにアップロードするようにしてもよい。
【００１１】
また、本発明のデータ同期システムでは、前記サーバは、アップロードに失敗したデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、前記サーバ同期処理部は、前記第２のデータに設定されている前記参照情報が示す前記第１のデータを特定する前記データ特定情報が前記失敗データ記憶部に登録されている場合に、当該参照情報の設定を解除するようにしてもよい。
【００１２】
また、本発明のデータ同期システムでは、前記第１及び第２のデータには更新時点が設定され、前記クライアントは、前記サーバに対して最後に前記データをアップロードした時点であるアンカー時点を記憶するアンカー時点記憶部と、前記第１のデータの再度のアップロードが成功したとき、前記第１のデータを示す前記参照情報が設定されている前記第２のデータを前記クライアントデータ記憶部から検索し、前記検索した第２のデータの前記更新時点を、前記アンカー時点よりも新しい時点に更新する更新時点更新部を備え、前記クライアント同期処理部は、前記アンカー時点より後の前記更新時点が設定されている前記第１及び第２のデータを前記サーバにアップロードするようにしてもよい。
【００１３】
また、本発明のデータ同期システムでは、前記クライアントは、アップロードに失敗した前記第１のデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、前記クライアント同期処理部はさらに、前記失敗データ記憶部に記憶されている前記データ特定情報により特定される前記第１のデータを前記サーバにアップロードするようにしてもよい。
【００１４】
また、本発明の他の態様は、データを記憶するサーバとの間でデータを同期する方法であって、第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するデータ記憶部を備えるコンピュータが、前記サーバに記憶されている前記第１及び第２のデータを取得し、取得した前記第１及び第２のデータを前記データ記憶部に登録し、前記第１のデータの取得に失敗した場合に、前記第２のデータから前記参照情報の設定を解除するとともに、前記第１のデータの取得が失敗したことを示す不整合情報を前記第２のデータに設定することとする。
【００１５】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するクライアントデータ記憶部を備える前記クライアントが、前記クライアントデータ記憶部に記憶されている前記第１及び第２のデータを前記サーバにアップロードし、前記第１及び第２のデータを記憶するサーバデータ記憶部を備える前記サーバが、前記クライアントからアップロードされる前記第１及び第２のデータを受信し、受信した前記サーバデータ記憶部に登録し、前記第１のデータの受信が失敗した場合に、前記第２のデータから前記参照情報の設定を解除し、前記第１のデータのアップロードが失敗した場合、再度前記第１のデータをアップロードし、前記第１のデータの再度のアップロードが成功したときには、前記第１のデータを特定する前記参照情報が設定されている前記第２のデータを前記クライアントデータ記憶部から読み出し、読み出した前記第２のデータを再度前記サーバにアップロードすることとする。
【００１６】
また、本発明の他の態様は、データを記憶するサーバとの間でデータを同期するためのプログラムであって、第１のデータと、前記第１のデータを参照する、前記第１のデータを示す参照情報が設定された第２のデータとを記憶するデータ記憶部を備えるコンピュータに、前記サーバに記憶されている前記第１及び第２のデータを取得し、取得した前記第１及び第２のデータを前記データ記憶部に登録するステップと、前記第１のデータの取得に失敗した場合に、前記第２のデータから前記参照情報の設定を解除するとともに、前記第１のデータの取得が失敗したことを示す不整合情報を前記第２のデータに設定するステップと、を実行させることとする。
【００１７】
その他本願が開示する課題やその解決方法については、発明の実施形態の欄及び図面により明らかにされる。
【発明の効果】
【００１８】
本発明によれば、参照関係を有するデータの同期においてデータの可用性を高めることができる。
【図面の簡単な説明】
【００１９】
【図１】本実施形態のデータ同期システムの全体構成を示す図である。
【図２】同期データ４０の構成例を説明する図である。
【図３】クライアント１０及びサーバ２０に用いられる一般的なコンピュータ１１のハードウェア構成例を示す図である。
【図４】クライアント１０のソフトウェア構成例を示す図である。
【図５】同期データ記憶部１３１及び同期データ４０の構成例を示す図である。
【図６】サーバ２０のソフトウェア構成例を示す図である。
【図７】データ同期システムにおける同期処理の流れを説明する図である。
【図８】ダウンロード処理の流れを示す図である。
【図９】衝突の解消処理の流れを示す図である。
【図１０】クライアント１０による同期データ４０の登録処理の流れを示す図である。
【図１１】アップロード処理の流れを示す図である。
【図１２】サーバ２０による同期データ４０の登録処理の流れを示す図である。
【図１３】不整合解消処理の流れを示す図である。
【発明を実施するための形態】
【００２０】
＝＝システム構成＝＝
以下、本発明の一実施形態に係るデータ同期システムについて説明する。図１は、本実施形態のデータ同期システムの全体構成を示す図である。本実施形態のデータ同期システムは、クライアント１０及びサーバ２０を含んで構成される。クライアント１０は、例えばテキストデータや画像データなど各種のデータを管理する、携帯電話やパーソナルコンピュータ、ワークステーション、ＰＤＡ（Personal Digital Assistant）などである。サーバ２０は、例えばクライアント１０が記憶しているデータをバックアップしたり、複数のクライアント１０間でデータを共有したりするために、クライアント１０との間でデータを同期する、例えばパーソナルコンピュータやワークステーションなどである。クライアント１０及びサーバ２０は通信路３０を介して互いに通信可能に接続される。通信路３０は、例えばインターネットやＬＡＮ（Local Area Network）などであり、イーサネット（登録商標）や公衆電話回線、携帯電話回線、無線通信路などにより構成される。
【００２１】
クライアント１０とサーバ２０との間ではデータが同期される。クライアント１０とサーバ２０との間で同期されるデータは、そのデータに関係する他のデータへの参照が設定されることがある。例えば、ファイルがフォルダごとに管理されている場合、ファイルにはフォルダへの参照が設定され、フォルダが階層構造になっている場合には、下位のフォルダには上位のフォルダへの参照が設定される。画像にタグが設定されている場合、画像にはタグへの参照が設定され、また、リレーショナルデータベース管理システム（ＲＤＢＭＳ）においてリレーションが定義されたテーブルのレコードには、他のテーブルのレコードへの参照が設定される。本実施形態のデータ同期システムは、このような参照関係を有するデータを同期することを想定する。
【００２２】
図２は、同期データ４０の構成例を説明する図である。同期データ４０は、ヘッダ部４１及びボディ部４２から構成され、ヘッダ部４１には、当該同期データ４０を特定するための情報（以下、「ＧＵＩＤ４１１（Global Unique IDentification）」という。）が設定され、また当該同期データ４０が参照する他の同期データ４０を示す情報（以下、「参照ＩＤ４１２」という。）が設定可能である。本実施形態では、説明を簡単にするために、クライアント１０とサーバ２０との間で同期されるデータ（以下、「同期データ４０」という。）は、画像を表示するための画像データと、画像に設定するタグを示すタグデータであるものとする。図２の例では、画像データ２のヘッダ部４１には、タグデータ１を示す参照ＩＤ４１２が設定されている。タグデータ１と画像データ２との関係は１対多の関係であり、参照ＩＤ４１２は、画像データ２にのみ設定され、タグデータ１には設定されない。
【００２３】
本実施形態のデータ同期システムは、タグデータ１の同期が失敗しても、画像データ２の同期が成功した場合には、一時的に画像データ２からタグデータ１への参照を解除し、これにより画像データ２自体をユーザから利用可能にするものである。  
以下、詳細について説明する。
【００２４】
＝＝ハードウェア構成＝＝
図３は、クライアント１０及びサーバ２０に用いられる一般的なコンピュータ１１（情報処理装置）のハードウェア構成例を示す図である。コンピュータ１１は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、通信インタフェース１０４、入力装置１０５、出力装置１０６を備える。記憶装置１０３は、各種のデータやプログラムを記憶する、例えばハードディスクドライブやフラッシュメモリなどである。ＣＰＵ１０１は、記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより各種の機能を実現する。通信インタフェース１０４は、例えば通信路３０へのインタフェースであり、イーサネット（登録商標）に接続するためのアダプタや、電話回線網に接続するためのモデム、無線通信路に接続するための無線通信機などである。入力装置１０５は、ユーザからデータの入力を受け付ける、例えばキーボードやマウス、タッチパネル、ボタン、ダイアル、マイクロフォンなどである。出力装置１０６は、ユーザに対してデータを出力する、例えばディスプレイやスピーカ、プリンタなどである。
【００２５】
＝＝クライアント１０＝＝
図４は、クライアント１０のソフトウェア構成例を示す図である。クライアント１０は、同期処理部１１１、ヘッダ変更部１１２、タグデータ記憶１３１、アンカー記憶部１３２、ダウンロード失敗ＩＤ記憶部１３３、及びアップロード失敗ＩＤ記憶部１３４を備える。なお、同期処理部１１１、及びヘッダ変更部１１２は、クライアント１０が備えるＣＰＵ１０１が記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより実現される。同期データ記憶部１３１、アンカー記憶部１３２、ダウンロード失敗ＩＤ記憶部１３３、及びアップロード失敗ＩＤ記憶部１３４は、クライアント１０が備えるメモリ１０２及び記憶装置１０３が提供する記憶領域の一部として実現される。
【００２６】
同期データ記憶部１３１は同期データ４０を記憶する。図５は同期データ記憶部１３１及び同期データ４０の構成例を示す図である。上述したように、同期データ記憶部１３１にはタグデータ１と画像データ２とが同期データ４０として記憶され、同期データ４０は、ヘッダ部４１及びボディ部４２から構成される。ヘッダ部４１には、同期データ４０のＧＵＩＤ４１１と、同期データ４０の作成時点４１３及び更新時点４１４が含まれる。作成時点４１３及び更新時点４１４は、例えば、日時とすることもできるし、データが作成又は更新される度に増加するシリアル値とすることもできる。関係性を有する２つの同期データ４０の一方には、他方の同期データ４０を特定するＧＵＩＤが参照ＩＤ４１２としてヘッダ部４１に含まれる。上述したように、本実施形態では、画像データ２には、参照するタグデータ１のＧＵＩＤが参照ＩＤ４１２としてヘッダ部４１に含まれるが、タグデータ１には、画像データ２への参照ＩＤ４１２は含まれないものとするが、タグデータ１に画像データ２への参照ＩＤ４１２を含めるようにしてもよい。また、参照ＩＤ４１２は複数設定することもできるが、本実施形態では説明を簡単にするため、ヘッダ部４１には１つの参照ＩＤ４１２のみが設定されうるものとする。また、ヘッダ部４１には、不整合ＩＤ４１５が設定可能である。不整合ＩＤ４１５は、後述するように、参照ＩＤ４１２が示すタグデータ１のダウンロードに失敗した場合に、参照ＩＤ４１２に代えて設定される、タグデータ１を示すＧＵＩＤである。
【００２７】
アンカー記憶部１３２は、過去最後に同期処理を行った時点（以下、「アンカー時点」という。）が記憶される。アンカー時点は、日時としてもよいし、同期データ４０が作成されもしくは更新され、又は同期処理が行われる度に増加するシリアル値としてもよい。
【００２８】
ダウンロード失敗ＩＤ記憶部１３３は、サーバ２０からのダウンロードが失敗した同期データ４０のＧＵＩＤを記憶する。アップロード失敗ＩＤ記憶部１３４は、サーバ２０へのアップロードが失敗した同期データ４０のＧＵＩＤを記憶する。
【００２９】
同期処理部１１１は、サーバ２０との間で同期データ４０の同期を行う。本実施形態では、同期処理部１１１は、アンカー時点よりも後にサーバ２０において作成又は更新された同期データ４０をサーバ２０からダウンロードするとともに、アンカー時点よりも後にクライアント１０において作成又は更新された同期データ４０をサーバ２０にアップロードすることにより同期処理を行う。同期データ４０のダウンロードは、同期処理部１１１が、同期データ４０をダウンロードすることを要求するコマンド（以下、「ダウンロード要求」という。）をサーバ２０に送信し、ダウンロード要求に応じてサーバ２０から送信される同期データ４０を受信する。ダウンロード要求には、アンカー時点が設定される。ダウンロード要求にはさらに、ダウンロードする同期データ４０を示すＧＵＩＤを設定することもできる。サーバ２０からは、ダウンロード要求に設定されるアンカー時点よりも後に作成又は更新された同期データ４０が応答され、またダウンロード要求にＧＵＩＤが設定されていれば、そのＧＵＩＤに対応する同期データ４０も応答される。なお、本実施形態では一般的な同期処理に係る処理については説明を省略するが、もちろん同期処理部１１１は一般的な同期処理に係る各種の処理を行うことができる。
【００３０】
同期データ４０のダウンロード及びアップロードは失敗することがある。例えば、通信路３０においてエラーが発生した場合や、同期データ４０を記録する際にエラーが発生した場合、通信量や記憶容量に対する制約が設定されており、ダウンロード又はアップロードされた同期データ４０がこの制約に違反した場合などに、ダウンロードやアップロードが失敗することが考えられる。なお、本実施形態では、説明を簡単にするために、ダウンロード又はアップロードをするべき同期データ４０はクライアント１０とサーバ２０との間でやりとりが行われた上で、通信路３０におけるエラーなどにより同期データ４０の全てを受信することができなかった場合に、ダウンロード又はアップロードが失敗したものとする。
【００３１】
同期処理部１１１は、同期データ４０のダウンロードに失敗した場合には、失敗した同期データ４０のＧＵＩＤをダウンロード失敗ＩＤ記憶部１３３に登録し、同期データ４０のアップロードに失敗した場合には、失敗した同期データ４０のＧＵＩＤをアップロード失敗ＩＤ記憶部１３４に登録する。後述するように、同期処理部１１１は、アップロード失敗ＩＤ記憶部１３３にＧＵＩＤが登録されている同期データ４０については、更新時点がアンカー時点より前であっても再度アップロードを行う。また、同期処理部１１１は、ヘッダ部４１に不整合ＩＤ４１５が設定されている同期データ４０については、更新時点にかかわらず、明示的にその同期データ４０をダウンロードする。なお、同期データ４０の同期処理の詳細については後述する。
【００３２】
ヘッダ変更部１１２は、ある同期データ４０のダウンロードが失敗した場合に、その同期データ４０を参照している他の同期データ４０のヘッダ部４１から参照ＩＤ４１１を削除し、参照ＩＤ４１１に設定されていたＧＵＩＤを不整合ＩＤ４１５としてヘッダ部４１に設定する。ヘッダ変更部１１２は、同期データ４０のダウンロードが成功した場合には、その同期データ４０のＧＵＩＤが不整合ＩＤ４１５として設定されていた同期データ４０について、不整合ＩＤ４１５を削除し、不整合ＩＤ４１５に設定されていたＧＵＩＤを参照ＩＤ４１１として設定する。
【００３３】
また、ヘッダ変更部１１２は、ある同期データ４０のアップロードが成功した場合に、その同期データ４０のＧＵＩＤがアップロード失敗ＩＤ記憶部１３４に登録されている場合には、そのＧＵＩＤが参照ＩＤ４１１として設定されている同期データ４０もアップロードされるように、更新時点４１４をアンカー時点よりも後に設定する。
【００３４】
＝＝サーバ２０＝＝
図６は、サーバ２０のソフトウェア構成例を示す図である。サーバ２０は、同期処理部２１１、ヘッダ変更部２１２、同期データ記憶部２３１、及び失敗ＩＤ記憶部２３２を備える。なお、同期処理部２１１及びヘッダ変更部２１２は、サーバ２０が備えるＣＰＵ１０１が記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより実現される。また、同期データ記憶部２３１及び失敗ＩＤ記憶部２３２は、サーバ２０が備えるメモリ１０２や記憶装置１０３が提供する記憶領域の一部として実現される。
【００３５】
同期データ記憶部２３１は、同期データ４０を記憶する。同期データ記憶部２３１は、上述した図５に示すクライアント１０の同期データ記憶部１３１と同様の構成である。
【００３６】
失敗ＩＤ記憶部２３２は、クライアント１０からのアップロードが失敗した同期データ４０のＧＵＩＤを記憶する。
【００３７】
同期処理部２１１は、クライアント１０との間で同期データ４０の同期を行う。同期処理部２１１は、クライアント１０からダウンロード要求を受信した場合、ダウンロード要求に含まれているアンカー時点よりも作成時点又は更新時点が新しい同期データ４０を同期データ記憶部２３１から検索し、検索した同期データ４０をクライアント１０に送信する。また、同期処理部２１１は、ダウンロード要求にＧＵＩＤが設定されている場合には、そのＧＵＩＤに対応する同期データ４０を同期データ記憶部２３１から読み出してクライアント１０に送信する。
【００３８】
また、同期処理部２１１は、クライアント１０から同期データ４０がアップロードされてきた場合、アップロードされてきた同期データ４０を受信して同期データ記憶部２３１に登録し、当該同期データ４０のＧＵＩＤが失敗ＩＤ記憶部２３２に登録されていた場合には、失敗ＩＤ記憶部２３２から当該ＧＵＩＤを削除する。同期処理部２１１は、同期データ４０のアップロードが失敗した場合には、当該同期データ４０のＧＵＩＤを失敗ＩＤ記憶部２３２に登録する。なお、同期処理部２１１は、一般的な同期処理を行うこともできる。
【００３９】
ヘッダ変更部２１２は、失敗ＩＤ記憶部２３２に記憶されているＧＵＩＤを参照ＩＤ４１２としてヘッダ部４１に含む同期データ４０が同期データ記憶部２３２に登録される場合、当該同期データ４０のヘッダ部４１の参照ＩＤ４１２を削除する。
【００４０】
＝＝同期処理＝＝
以下、本実施形態のデータ同期システムにおける同期データ４０の同期処理について説明する。図７は、データ同期システムにおける同期処理の流れを説明する図である。データ同期システムにおける同期処理では、同期データ４０をサーバ２０からクライアント１０にダウンロードするダウンロード処理を行われ（Ｓ５０１）、クライアント１０において衝突の解消処理が行われ（Ｓ５０２）、クライアント１０においてダウンロードした同期データ４０の登録処理が行われる（Ｓ５０３）。次に、クライアント１０からサーバ２０への同期データ４０のアップロード処理が行われ（Ｓ５０４）、サーバ２０においてアップロードされた同期データ４０の登録処理が行われ（Ｓ５０５）、不整合ＩＤ４１５が設定されている同期データ４０の更新処理（不整合解消処理）が行われる（Ｓ５０６）。最後に、クライアント１０においてアンカー時点が新しい時点（例えば、現時点としてもよいし、ダウンロードまたはアップロードした同期データ４０の作成時点又は更新時点のうち最も新しい時点としてもよい。）に更新される（Ｓ５０７）。
【００４１】
図８は、図７のステップＳ５０１におけるダウンロード処理の流れを示す図である。  
クライアント１０の同期処理部１１１は、アンカー記憶部１３２からアンカー時点を読み出し（Ｓ５２１）、読み出したアンカー時点を設定したダウンロード要求を作成する（Ｓ５２２）。同期処理部１１１は、ダウンロード失敗ＩＤ記憶部１３３に記憶されているＧＵＩＤを読み出してダウンロード要求に設定する（Ｓ５２３）。同期処理部１１１は、同期データ記憶部１３１から、不整合ＩＤ４１５が設定されており、かつ、不整合ＩＤ４１５に設定されたＧＵＩＤがダウンロード失敗ＩＤ記憶部１３３に登録されていない同期データ４０を検索し（Ｓ５２４）、上記の同期データ４０が検索されれば、当該同期データ４０のＧＵＩＤをダウンロード要求に設定する（Ｓ５２５）。同期処理部１１１は、ダウンロード要求をサーバ２０に送信する（Ｓ５２６）。  
サーバ２０の同期処理部２１１は、クライアント１０から受信したダウンロード要求に設定されているアンカー時点よりも後の作成時点４１３又は更新時点４１４が設定されている同期データ４０を同期データ記憶部２３１から読み出し（Ｓ５２７）、読み出した同期データ４０をクライアント１０に送信する（Ｓ５２８）。  
クライアント１０の同期処理部１１１は、サーバ２０から同期データ４０を受信し（Ｓ５２９）、受信に失敗した同期データ４０がある場合には、失敗した同期データ４０のＧＵＩＤをダウンロード失敗ＩＤ記憶部１３３に登録する（Ｓ５３０）。同期処理部１１１は、ダウンロードに成功した同期データ４０のリストを作成し（Ｓ５３１）、ダウンロードに成功した同期データ４０のＧＵＩＤをダウンロード失敗ＩＤ記憶部１３３から削除する（Ｓ５３２）。  
以上のようにして、サーバ２０においてアンカー時点より後に作成又は更新された同期データ４０と、前回ダウンロードに失敗した同期データ４０と、参照先がダウンロードに失敗していた同期データ４０とが、サーバ２０からダウンロードされる。
【００４２】
図９は、図７のステップＳ５０２における衝突の解消処理の流れを示す図である。クライアント１０の同期処理部１１１は、ダウンロードに成功した同期データ４０のそれぞれについて以下の処理を行う。同期処理部１１１は、同期データ４０に衝突が発生していないかいどうかを判定する（Ｓ５４１）。データの衝突とは、データを同期している２つの装置のそれぞれおいてデータが更新されたことをいう。本実施形態では、サーバ２０からダウンロードした同期データ４０更新時点４１４と、同期データ記憶部１３１に記憶されている同期データ４０の更新時点４１４とがともにアンカー時点よりも後である場合に、衝突が検出される。同期処理部１１１は、衝突を検出した場合（Ｓ５４１：ＹＥＳ）、サーバ２０からダウンロードした同期データ４０と、クライアント１０に記憶されている同期データ４０とのどちらを優先するかを決定する（Ｓ５４２）。同期処理部１１１は、例えば、常にサーバ２０又はクライアント１０のどちらかの同期データ４０を優先するようにしてもよいし、更新時点４１４に応じてどちらを優先するか決定してもよいしし、ユーザから指定を受け付けるようにしてもよい。同期処理部１１１は、クライアント１０に記憶されている同期データ４０を優先すると決定した場合（Ｓ５４３：ＹＥＳ）、当該同期データ４０をリストから削除する（Ｓ５４４）。このようにして、クライアント１０において同期データ４０の衝突が解消される。
【００４３】
図１０は、図７のステップＳ５０３における、クライアント１０による同期データ４０の登録処理の流れを示す図である。クライアント１０の同期処理部１１１は、リストに含まれている同期データ４０を同期データ記憶部１３１に登録する（Ｓ５６１）。同期処理部１１１は、ダウンロード失敗ＩＤ記憶部１３３からＧＵＩＤを読み出す（Ｓ５６２）。ヘッダ変更部１１２は、読み出されたＧＵＩＤのそれぞれについて、参照ＩＤ４１２に当該ＧＵＩＤが設定されている同期データ４０に、当該ＧＵＩＤを不整合ＩＤ４１５として設定するとともに（Ｓ５６３）、当該同期データ４０から参照ＩＤ４１２を削除する（Ｓ５６４）ように、同期データ記憶部１３１を更新する。このようにして、同期データ４０のダウンロードの際、ダウンロードされた同期データ４０が同期データ記憶部１３１に登録されるとともに、ダウンロードに失敗した同期データ４０を参照している同期データ４０については、参照ＩＤ４１２が削除されて、代わりに不整合ＩＤ４１５が設定されるようにすることができる。
【００４４】
図１１は、図７のステップＳ５０４における、同期データ４０のアップロード処理の流れを示す図である。  
クライアント１０の同期処理部１１１は、アンカー記憶部１３２からアンカー時点を読み出し（Ｓ５８１）、アンカー時点よりも作成時点４１３又は更新時点４１４が新しい同期データ４０を同期データ記憶部１３１から読み出し（Ｓ５８２）、アップロード失敗ＩＤ記憶部１３４に記憶されているＧＵＩＤに対応する同期データ４０を同期データ記憶部１３１から読み出し（Ｓ５８３）、読み出した同期データ４０をサーバ２０に送信する（Ｓ５８４）。同期処理部１１１は、アップロード失敗ＩＤ記憶部１３４に記憶されているＧＵＩＤを削除し（Ｓ５８５）、送信に失敗した同期データ４０があれば、失敗した同期データ４０のＧＵＩＤをアップロード失敗ＩＤ記憶部１３４に登録する（Ｓ５８６）。  
一方、サーバ２０の同期処理部２１１は、クライアント１０から送信される同期データ４０を受信し（Ｓ５８７）、受信に失敗した同期データ４０があれば、失敗した同期データ４０のＧＵＩＤを失敗ＩＤ記憶部２３２に登録し（Ｓ５８８）、受信に成功した同期データ４０のリストを作成する（Ｓ５８９）。  
以上のようにして、クライアント１０においてアンカー時点より後に作成又は更新された同期データ４０と、前回アップロードに失敗した同期データ４０とがサーバ２０にアップロードされる。
【００４５】
図１２は、図７のステップＳ５０５における、サーバ２０による同期データ４０の登録処理の流れを示す図である。サーバ２０の同期処理部２１１は、リストに含まれている同期データ４０を同期データ記憶部２３１に登録する（Ｓ６０１）。ヘッダ変更部２１２は、失敗ＩＤ記憶部２３２からＧＵＩＤを読み出し（Ｓ６０２）、読み出したＧＵＩＤのそれぞれについて、同期データ記憶部２３１に記憶されている同期データ４０のうち、当該ＧＵＩＤが参照ＩＤ４１２として設定されているものから参照ＩＤ４１２を削除する（Ｓ６０３）。
【００４６】
図１３は、図７のステップＳ５０６における、クライアント１０による不整合解消処理の流れを示す図である。クライアント１０のヘッダ変更部１１２は、不整合ＩＤ４１５が設定されている同期データ４０を同期データ記憶部１３１から検索し（Ｓ６２１）、検索した同期データ４０のそれぞれについて、不整合ＩＤ４１５に設定されているＧＵＩＤがアップロード失敗ＩＤ記憶部１３４に登録されているか否かを判定し（Ｓ６２２）、登録されていなければ（Ｓ６２２：ＮＯ）、不整合ＩＤ４１５に設定されているＧＵＩＤを参照ＩＤ４１２としてヘッダ部４１に設定し（Ｓ６２３）、不整合ＩＤ４１５を削除し（Ｓ６２４）、更新時点４１４をアンカー時点よりも後の時点（例えば現時点）に更新する（Ｓ６２５）。これにより、次のアップロード処理において当該同期データ４０はサーバ２０にアップロードされることになる。サーバ２０ではアップロードに失敗した同期データ４０のヘッダ部４１から参照ＩＤ４１２が削除されているので、このアップロードにより削除された参照ＩＤが復活することになる。
【００４７】
以上説明したように、本実施形態のデータ同期システムによれば、参照関係を有する同期データ４０を同期する際に、参照先の同期データ４０の同期が失敗した場合でも、一時的に参照元の同期データ４０からの参照ＩＤ４１２を削除して、参照関係を解除することができる。一般に関係性を有するデータを同期する場合には、アトミックな同期処理が行われ、参照先のデータの同期が失敗した場合には、参照元のデータの同期も失敗したものとされるが、本実施形態のデータ同期システムによれば、参照先の同期データ４０の同期が失敗した場合でも、参照元の同期データ４０は引き続き利用することが可能となる。したがって、同期データ４０の可用性を高めることができる。
【００４８】
また、本実施形態のデータ同期システムによれば、サーバ２０側では、ダウンロードの失敗について管理する必要がなく、また、アップロードが失敗した場合には、失敗した同期データ４０を参照している同期データ４０から参照ＩＤ４１２を削除するだけでよい。すなわち、サーバ２０は、参照関係の復旧等を考慮する必要がない。したがって、サーバ２０が数多くのクライアント１０との間で同期を行う場合でも、参照関係を管理するためのサーバ２０の負荷を軽減することができる。
【００４９】
なお、本実施形態では、クライアント１０は１台であるものとしたが、もちろん複数のクライアント１０とサーバ２０とが同期を行うようにすることもできる。また、サーバ２０を複数台により構成してもよい。
【００５０】
また、本実施形態では、画像データ及びタグデータのみをクライアント１０及びサーバ２０の間で同期するものとしたが、もちろん、フォルダやリレーショナルデータベース管理システムで管理されるレコードなど、他のデータへの参照ＩＤ４１２を設定可能な各種のデータを同期することも可能である。
【００５１】
また、本実施形態では、タグデータ１と画像データ２とは１対多の関係であるものとしたが、１対１の関係であってもよいし、多対多の関係であってもよい。多対多の関係である場合、参照ＩＤ４１２は、同期データ４０のヘッダ部４１に設定せず、関係性を管理するデータ（以下、「関係性データ」という。）に設定するようにしてもよい。
【００５２】
また、本実施形態では、画像データ２にのみ参照ＩＤ４１２が設定されるものとしたが、タグデータ１にも、画像データ２への参照ＩＤ４１２を設定するようにしてもよい。
【００５３】
また、本実施形態では、説明を簡単にするために、ダウンロード又はアップロードをするべき同期データ４０はクライアント１０とサーバ２０との間でやりとりが行われた上で、通信路３０におけるエラーなどにより同期データ４０を受信できなかった場合に、ダウンロード又はアップロードが失敗したものとしたが、通信路３０におけるエラーに限らず、例えば、同期データ４０を記録する際にエラーが発生した場合、通信量や記憶容量に対する制約が設定されており、ダウンロード又はアップロードされた同期データ４０がこの制約に違反した場合などに、ダウンロードやアップロードの失敗を検出するようにしてもよい。
【００５４】
また、本実施形態では、不整合ＩＤ４１５が設定されていた同期データ４０については、不整合ＩＤ４１５に設定されるＧＵＩＤに対応する同期データ４０のアップロードが成功した場合に、同期データ４０の全体を再度アップロードするものとしたが、ヘッダ部４１のみをアップロッドしてもよい。また、同期データ４０のダウンロード及びダウンロードの際に、ボディ部４２の差異の有無を判定し、差異がある場合には同期データ４０の全体をダウンロード又はアップロードし、差異がない場合にはヘッダ部４１のみをダウンロード又はアップロードするようにしてもよい。さらには、同期データ４０の差分のみをアップロード又はダウンロードするようにすることもできる。
【００５５】
また、本実施形態では、不整合ＩＤ４１５に設定されるＧＵＩＤに対応する同期データ４０のアップロードが成功した場合、更新時点４１４を更新することにより、再度アップロードが行われるようにしたが、図１３のステップＳ６２５を省略し、アップロードを行わないようにしてもよい。
【００５６】
また、本実施形態では、タグデータ１のダウンロードが失敗した場合、そのタグデータ１のＧＵＩＤが参照ＩＤ４１２に設定されている画像データ２のヘッダ４１から、当該参照ＩＤ４１１が削除され、代わりに不整合ＩＤ４１５が設定されるものとしたが、これに限らず、参照ＩＤ４１２を削除せず、また不整合ＩＤ４１５を設定しないようにすることもできる。この場合、例えば、アップロード失敗ＩＤ記憶部１３４に登録されていたＧＵＩＤに対応する同期データ４０のアップロードが成功した場合に、当該ＧＵＩＤを記憶するアップロード成功ＩＤ記憶部を設けるようにし、参照ＩＤ４１２に設定されているＧＵＩＤがアップロード成功ＩＤ記憶部に登録されているものについて、再度アップロードを行うようにしてもよい。
【００５７】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【符号の説明】
【００５８】
１      タグデータ
２      画像データ
１０    クライアント
２０    サーバ
３０    通信路
４０    同期データ
４１    ヘッダ部
４２    ボディ部
１１１  同期処理部
１１２  ヘッダ変更部
１３１  同期データ記憶部
１３２  アンカー記憶部
１３３  ダウンロード失敗ＩＤ記憶部
１３４  アップロード失敗ＩＤ記憶部
２１１  同期処理部
２１２  ヘッダ変更部
２３１  同期データ記憶部
２３２  失敗ＩＤ記憶部
４１１  ＧＵＩＤ
４１２  参照ＩＤ
４１３  作成時点
４１４  更新時点
４１５  不整合ＩＤ
【図１】
0005656722.tif 000002
【図２】
0005656722.tif 000003
【図３】
0005656722.tif 000004
【図４】
0005656722.tif 000005
【図５】
0005656722.tif 000006
【図６】
0005656722.tif 000007
【図７】
0005656722.tif 000008
【図８】
0005656722.tif 000009
【図９】
0005656722.tif 000010
【図１０】
0005656722.tif 000011
【図１１】
0005656722.tif 000012
【図１２】
0005656722.tif 000013
【図１３】
0005656722.tif 000014