(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、第1のデータの送信が失敗したことにより同期処理全体が失敗とされると、第2のデータの送信が成功していてもその第2のデータを利用することはできなくなってしまう。
【0005】
本発明は、このような背景を鑑みてなされたものであり、参照関係を有するデータの同期においてデータの可用性を高めることのできる、データ同期装置、データ同期システム、データ同期方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するための本発明の主たる発明は、データを記憶するサーバとの間でデータを同期する装置であって、第1のデータと、前記第1のデータを参照する、前記第1のデータを示す参照情報が設定された第2のデータとを記憶するデータ記憶部と、前記サーバに記憶されている前記第1及び第2のデータを取得し、取得した前記第1及び第2のデータを前記データ記憶部に登録する同期処理部と、前記第1のデータの取得に失敗した場合に、前記第2のデータから前記参照情報の設定を解除するとともに、前記第1のデータの取得が失敗したことを示す不整合情報を前記第2のデータに設定するデータ変更部と、を備えることとする。
【0007】
また、本発明のデータ同期装置では、前記同期処理部は、前記第1のデータの取得に成功した場合に、前記不整合情報が設定されている前記第2のデータが前記データ記憶部に登録されているときは、当該第2のデータも前記サーバから取得するようにしてもよい。
【0008】
また、本発明のデータ同期装置は、取得に失敗したデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、前記同期処理部は、前記第1のデータの取得に失敗した場合、前記第1のデータを特定する前記データ特定情報を前記失敗データ記憶部に登録し、前記データ変更部は、前記失敗データ記憶部に登録されている前記データ特定情報のそれぞれについて、前記データ特定情報に対応する前記参照情報が設定されている前記第2のデータを前記データ記憶部から検索し、検索した前記第2のデータから前記参照情報の設定を解除するとともに、前記不整合情報を設定するようにしてもよい。
【0009】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期するシステムであって、前記クライアントは、第1のデータと、前記第1のデータを参照する、前記第1のデータを示す参照情報が設定された第2のデータとを記憶するクライアントデータ記憶部と、前記クライアントデータ記憶部に記憶されている前記第1及び第2のデータを前記サーバにアップロードするクライアント同期処理部と、を備え、前記サーバは、前記第1及び第2のデータを記憶するサーバデータ記憶部と、前記クライアントからアップロードされる前記第1及び第2のデータを受信し、受信した前記サーバデータ記憶部に登録するサーバ同期処理部と、前記第1のデータの受信が失敗した場合に、前記第2のデータから前記参照情報の設定を解除するサーバデータ変更部と、を備え、前記クライアント同期処理部は、前記第1のデータのアップロードが失敗した場合、再度前記第1のデータをアップロードし、前記第1のデータの再度のアップロードが成功したときには、前記第1のデータを特定する前記参照情報が設定されている前記第2のデータを前記クライアントデータ記憶部から読み出し、読み出した前記第2のデータを再度前記サーバにアップロードすることとする。
【0010】
また、本発明のデータ同期システムでは、前記データはヘッダ部を含み、前記参照情報は前記ヘッダ部に含まれ、前記クライアント同期処理部は、前記第1のデータの再度のアップロードが成功したとき、前記第2のデータの前記ヘッダ部のみを再度前記サーバにアップロードするようにしてもよい。
【0011】
また、本発明のデータ同期システムでは、前記サーバは、アップロードに失敗したデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、前記サーバ同期処理部は、前記第2のデータに設定されている前記参照情報が示す前記第1のデータを特定する前記データ特定情報が前記失敗データ記憶部に登録されている場合に、当該参照情報の設定を解除するようにしてもよい。
【0012】
また、本発明のデータ同期システムでは、前記第1及び第2のデータには更新時点が設定され、前記クライアントは、前記サーバに対して最後に前記データをアップロードした時点であるアンカー時点を記憶するアンカー時点記憶部と、前記第1のデータの再度のアップロードが成功したとき、前記第1のデータを示す前記参照情報が設定されている前記第2のデータを前記クライアントデータ記憶部から検索し、前記検索した第2のデータの前記更新時点を、前記アンカー時点よりも新しい時点に更新する更新時点更新部を備え、前記クライアント同期処理部は、前記アンカー時点より後の前記更新時点が設定されている前記第1及び第2のデータを前記サーバにアップロードするようにしてもよい。
【0013】
また、本発明のデータ同期システムでは、前記クライアントは、アップロードに失敗した前記第1のデータを特定するデータ特定情報を記憶する失敗データ記憶部を備え、前記クライアント同期処理部はさらに、前記失敗データ記憶部に記憶されている前記データ特定情報により特定される前記第1のデータを前記サーバにアップロードするようにしてもよい。
【0014】
また、本発明の他の態様は、データを記憶するサーバとの間でデータを同期する方法であって、第1のデータと、前記第1のデータを参照する、前記第1のデータを示す参照情報が設定された第2のデータとを記憶するデータ記憶部を備えるコンピュータが、前記サーバに記憶されている前記第1及び第2のデータを取得し、取得した前記第1及び第2のデータを前記データ記憶部に登録し、前記第1のデータの取得に失敗した場合に、前記第2のデータから前記参照情報の設定を解除するとともに、前記第1のデータの取得が失敗したことを示す不整合情報を前記第2のデータに設定することとする。
【0015】
また、本発明の他の態様は、サーバと、前記サーバに通信可能に接続されるクライアントとの間でデータを同期する方法であって、第1のデータと、前記第1のデータを参照する、前記第1のデータを示す参照情報が設定された第2のデータとを記憶するクライアントデータ記憶部を備える前記クライアントが、前記クライアントデータ記憶部に記憶されている前記第1及び第2のデータを前記サーバにアップロードし、前記第1及び第2のデータを記憶するサーバデータ記憶部を備える前記サーバが、前記クライアントからアップロードされる前記第1及び第2のデータを受信し、受信した前記サーバデータ記憶部に登録し、前記第1のデータの受信が失敗した場合に、前記第2のデータから前記参照情報の設定を解除し、前記第1のデータのアップロードが失敗した場合、再度前記第1のデータをアップロードし、前記第1のデータの再度のアップロードが成功したときには、前記第1のデータを特定する前記参照情報が設定されている前記第2のデータを前記クライアントデータ記憶部から読み出し、読み出した前記第2のデータを再度前記サーバにアップロードすることとする。
【0016】
また、本発明の他の態様は、データを記憶するサーバとの間でデータを同期するためのプログラムであって、第1のデータと、前記第1のデータを参照する、前記第1のデータを示す参照情報が設定された第2のデータとを記憶するデータ記憶部を備えるコンピュータに、前記サーバに記憶されている前記第1及び第2のデータを取得し、取得した前記第1及び第2のデータを前記データ記憶部に登録するステップと、前記第1のデータの取得に失敗した場合に、前記第2のデータから前記参照情報の設定を解除するとともに、前記第1のデータの取得が失敗したことを示す不整合情報を前記第2のデータに設定するステップと、を実行させることとする。
【0017】
その他本願が開示する課題やその解決方法については、発明の実施形態の欄及び図面により明らかにされる。
【発明の効果】
【0018】
本発明によれば、参照関係を有するデータの同期においてデータの可用性を高めることができる。
【発明を実施するための形態】
【0020】
==システム構成==
以下、本発明の一実施形態に係るデータ同期システムについて説明する。
図1は、本実施形態のデータ同期システムの全体構成を示す図である。本実施形態のデータ同期システムは、クライアント10及びサーバ20を含んで構成される。クライアント10は、例えばテキストデータや画像データなど各種のデータを管理する、携帯電話やパーソナルコンピュータ、ワークステーション、PDA(Personal Digital Assistant)などである。サーバ20は、例えばクライアント10が記憶しているデータをバックアップしたり、複数のクライアント10間でデータを共有したりするために、クライアント10との間でデータを同期する、例えばパーソナルコンピュータやワークステーションなどである。クライアント10及びサーバ20は通信路30を介して互いに通信可能に接続される。通信路30は、例えばインターネットやLAN(Local Area Network)などであり、イーサネット(登録商標)や公衆電話回線、携帯電話回線、無線通信路などにより構成される。
【0021】
クライアント10とサーバ20との間ではデータが同期される。クライアント10とサーバ20との間で同期されるデータは、そのデータに関係する他のデータへの参照が設定されることがある。例えば、ファイルがフォルダごとに管理されている場合、ファイルにはフォルダへの参照が設定され、フォルダが階層構造になっている場合には、下位のフォルダには上位のフォルダへの参照が設定される。画像にタグが設定されている場合、画像にはタグへの参照が設定され、また、リレーショナルデータベース管理システム(RDBMS)においてリレーションが定義されたテーブルのレコードには、他のテーブルのレコードへの参照が設定される。本実施形態のデータ同期システムは、このような参照関係を有するデータを同期することを想定する。
【0022】
図2は、同期データ40の構成例を説明する図である。同期データ40は、ヘッダ部41及びボディ部42から構成され、ヘッダ部41には、当該同期データ40を特定するための情報(以下、「GUID411(Global Unique IDentification)」という。)が設定され、また当該同期データ40が参照する他の同期データ40を示す情報(以下、「参照ID412」という。)が設定可能である。本実施形態では、説明を簡単にするために、クライアント10とサーバ20との間で同期されるデータ(以下、「同期データ40」という。)は、画像を表示するための画像データと、画像に設定するタグを示すタグデータであるものとする。
図2の例では、画像データ2のヘッダ部41には、タグデータ1を示す参照ID412が設定されている。タグデータ1と画像データ2との関係は1対多の関係であり、参照ID412は、画像データ2にのみ設定され、タグデータ1には設定されない。
【0023】
本実施形態のデータ同期システムは、タグデータ1の同期が失敗しても、画像データ2の同期が成功した場合には、一時的に画像データ2からタグデータ1への参照を解除し、これにより画像データ2自体をユーザから利用可能にするものである。
以下、詳細について説明する。
【0024】
==ハードウェア構成==
図3は、クライアント10及びサーバ20に用いられる一般的なコンピュータ11(情報処理装置)のハードウェア構成例を示す図である。コンピュータ11は、CPU101、メモリ102、記憶装置103、通信インタフェース104、入力装置105、出力装置106を備える。記憶装置103は、各種のデータやプログラムを記憶する、例えばハードディスクドライブやフラッシュメモリなどである。CPU101は、記憶装置103に記憶されているプログラムをメモリ102に読み出して実行することにより各種の機能を実現する。通信インタフェース104は、例えば通信路30へのインタフェースであり、イーサネット(登録商標)に接続するためのアダプタや、電話回線網に接続するためのモデム、無線通信路に接続するための無線通信機などである。入力装置105は、ユーザからデータの入力を受け付ける、例えばキーボードやマウス、タッチパネル、ボタン、ダイアル、マイクロフォンなどである。出力装置106は、ユーザに対してデータを出力する、例えばディスプレイやスピーカ、プリンタなどである。
【0025】
==クライアント10==
図4は、クライアント10のソフトウェア構成例を示す図である。クライアント10は、同期処理部111、ヘッダ変更部112、タグデータ記憶131、アンカー記憶部132、ダウンロード失敗ID記憶部133、及びアップロード失敗ID記憶部134を備える。なお、同期処理部111、及びヘッダ変更部112は、クライアント10が備えるCPU101が記憶装置103に記憶されているプログラムをメモリ102に読み出して実行することにより実現される。同期データ記憶部131、アンカー記憶部132、ダウンロード失敗ID記憶部133、及びアップロード失敗ID記憶部134は、クライアント10が備えるメモリ102及び記憶装置103が提供する記憶領域の一部として実現される。
【0026】
同期データ記憶部131は同期データ40を記憶する。
図5は同期データ記憶部131及び同期データ40の構成例を示す図である。上述したように、同期データ記憶部131にはタグデータ1と画像データ2とが同期データ40として記憶され、同期データ40は、ヘッダ部41及びボディ部42から構成される。ヘッダ部41には、同期データ40のGUID411と、同期データ40の作成時点413及び更新時点414が含まれる。作成時点413及び更新時点414は、例えば、日時とすることもできるし、データが作成又は更新される度に増加するシリアル値とすることもできる。関係性を有する2つの同期データ40の一方には、他方の同期データ40を特定するGUIDが参照ID412としてヘッダ部41に含まれる。上述したように、本実施形態では、画像データ2には、参照するタグデータ1のGUIDが参照ID412としてヘッダ部41に含まれるが、タグデータ1には、画像データ2への参照ID412は含まれないものとするが、タグデータ1に画像データ2への参照ID412を含めるようにしてもよい。また、参照ID412は複数設定することもできるが、本実施形態では説明を簡単にするため、ヘッダ部41には1つの参照ID412のみが設定されうるものとする。また、ヘッダ部41には、不整合ID415が設定可能である。不整合ID415は、後述するように、参照ID412が示すタグデータ1のダウンロードに失敗した場合に、参照ID412に代えて設定される、タグデータ1を示すGUIDである。
【0027】
アンカー記憶部132は、過去最後に同期処理を行った時点(以下、「アンカー時点」という。)が記憶される。アンカー時点は、日時としてもよいし、同期データ40が作成されもしくは更新され、又は同期処理が行われる度に増加するシリアル値としてもよい。
【0028】
ダウンロード失敗ID記憶部133は、サーバ20からのダウンロードが失敗した同期データ40のGUIDを記憶する。アップロード失敗ID記憶部134は、サーバ20へのアップロードが失敗した同期データ40のGUIDを記憶する。
【0029】
同期処理部111は、サーバ20との間で同期データ40の同期を行う。本実施形態では、同期処理部111は、アンカー時点よりも後にサーバ20において作成又は更新された同期データ40をサーバ20からダウンロードするとともに、アンカー時点よりも後にクライアント10において作成又は更新された同期データ40をサーバ20にアップロードすることにより同期処理を行う。同期データ40のダウンロードは、同期処理部111が、同期データ40をダウンロードすることを要求するコマンド(以下、「ダウンロード要求」という。)をサーバ20に送信し、ダウンロード要求に応じてサーバ20から送信される同期データ40を受信する。ダウンロード要求には、アンカー時点が設定される。ダウンロード要求にはさらに、ダウンロードする同期データ40を示すGUIDを設定することもできる。サーバ20からは、ダウンロード要求に設定されるアンカー時点よりも後に作成又は更新された同期データ40が応答され、またダウンロード要求にGUIDが設定されていれば、そのGUIDに対応する同期データ40も応答される。なお、本実施形態では一般的な同期処理に係る処理については説明を省略するが、もちろん同期処理部111は一般的な同期処理に係る各種の処理を行うことができる。
【0030】
同期データ40のダウンロード及びアップロードは失敗することがある。例えば、通信路30においてエラーが発生した場合や、同期データ40を記録する際にエラーが発生した場合、通信量や記憶容量に対する制約が設定されており、ダウンロード又はアップロードされた同期データ40がこの制約に違反した場合などに、ダウンロードやアップロードが失敗することが考えられる。なお、本実施形態では、説明を簡単にするために、ダウンロード又はアップロードをするべき同期データ40はクライアント10とサーバ20との間でやりとりが行われた上で、通信路30におけるエラーなどにより同期データ40の全てを受信することができなかった場合に、ダウンロード又はアップロードが失敗したものとする。
【0031】
同期処理部111は、同期データ40のダウンロードに失敗した場合には、失敗した同期データ40のGUIDをダウンロード失敗ID記憶部133に登録し、同期データ40のアップロードに失敗した場合には、失敗した同期データ40のGUIDをアップロード失敗ID記憶部134に登録する。後述するように、同期処理部111は、アップロード失敗ID記憶部133にGUIDが登録されている同期データ40については、更新時点がアンカー時点より前であっても再度アップロードを行う。また、同期処理部111は、ヘッダ部41に不整合ID415が設定されている同期データ40については、更新時点にかかわらず、明示的にその同期データ40をダウンロードする。なお、同期データ40の同期処理の詳細については後述する。
【0032】
ヘッダ変更部112は、ある同期データ40のダウンロードが失敗した場合に、その同期データ40を参照している他の同期データ40のヘッダ部41から参照ID411を削除し、参照ID411に設定されていたGUIDを不整合ID415としてヘッダ部41に設定する。ヘッダ変更部112は、同期データ40のダウンロードが成功した場合には、その同期データ40のGUIDが不整合ID415として設定されていた同期データ40について、不整合ID415を削除し、不整合ID415に設定されていたGUIDを参照ID411として設定する。
【0033】
また、ヘッダ変更部112は、ある同期データ40のアップロードが成功した場合に、その同期データ40のGUIDがアップロード失敗ID記憶部134に登録されている場合には、そのGUIDが参照ID411として設定されている同期データ40もアップロードされるように、更新時点414をアンカー時点よりも後に設定する。
【0034】
==サーバ20==
図6は、サーバ20のソフトウェア構成例を示す図である。サーバ20は、同期処理部211、ヘッダ変更部212、同期データ記憶部231、及び失敗ID記憶部232を備える。なお、同期処理部211及びヘッダ変更部212は、サーバ20が備えるCPU101が記憶装置103に記憶されているプログラムをメモリ102に読み出して実行することにより実現される。また、同期データ記憶部231及び失敗ID記憶部232は、サーバ20が備えるメモリ102や記憶装置103が提供する記憶領域の一部として実現される。
【0035】
同期データ記憶部231は、同期データ40を記憶する。同期データ記憶部231は、上述した
図5に示すクライアント10の同期データ記憶部131と同様の構成である。
【0036】
失敗ID記憶部232は、クライアント10からのアップロードが失敗した同期データ40のGUIDを記憶する。
【0037】
同期処理部211は、クライアント10との間で同期データ40の同期を行う。同期処理部211は、クライアント10からダウンロード要求を受信した場合、ダウンロード要求に含まれているアンカー時点よりも作成時点又は更新時点が新しい同期データ40を同期データ記憶部231から検索し、検索した同期データ40をクライアント10に送信する。また、同期処理部211は、ダウンロード要求にGUIDが設定されている場合には、そのGUIDに対応する同期データ40を同期データ記憶部231から読み出してクライアント10に送信する。
【0038】
また、同期処理部211は、クライアント10から同期データ40がアップロードされてきた場合、アップロードされてきた同期データ40を受信して同期データ記憶部231に登録し、当該同期データ40のGUIDが失敗ID記憶部232に登録されていた場合には、失敗ID記憶部232から当該GUIDを削除する。同期処理部211は、同期データ40のアップロードが失敗した場合には、当該同期データ40のGUIDを失敗ID記憶部232に登録する。なお、同期処理部211は、一般的な同期処理を行うこともできる。
【0039】
ヘッダ変更部212は、失敗ID記憶部232に記憶されているGUIDを参照ID412としてヘッダ部41に含む同期データ40が同期データ記憶部232に登録される場合、当該同期データ40のヘッダ部41の参照ID412を削除する。
【0040】
==同期処理==
以下、本実施形態のデータ同期システムにおける同期データ40の同期処理について説明する。
図7は、データ同期システムにおける同期処理の流れを説明する図である。データ同期システムにおける同期処理では、同期データ40をサーバ20からクライアント10にダウンロードするダウンロード処理を行われ(S501)、クライアント10において衝突の解消処理が行われ(S502)、クライアント10においてダウンロードした同期データ40の登録処理が行われる(S503)。次に、クライアント10からサーバ20への同期データ40のアップロード処理が行われ(S504)、サーバ20においてアップロードされた同期データ40の登録処理が行われ(S505)、不整合ID415が設定されている同期データ40の更新処理(不整合解消処理)が行われる(S506)。最後に、クライアント10においてアンカー時点が新しい時点(例えば、現時点としてもよいし、ダウンロードまたはアップロードした同期データ40の作成時点又は更新時点のうち最も新しい時点としてもよい。)に更新される(S507)。
【0041】
図8は、
図7のステップS501におけるダウンロード処理の流れを示す図である。
クライアント10の同期処理部111は、アンカー記憶部132からアンカー時点を読み出し(S521)、読み出したアンカー時点を設定したダウンロード要求を作成する(S522)。同期処理部111は、ダウンロード失敗ID記憶部133に記憶されているGUIDを読み出してダウンロード要求に設定する(S523)。同期処理部111は、同期データ記憶部131から、不整合ID415が設定されており、かつ、不整合ID415に設定されたGUIDがダウンロード失敗ID記憶部133に登録されていない同期データ40を検索し(S524)、上記の同期データ40が検索されれば、当該同期データ40のGUIDをダウンロード要求に設定する(S525)。同期処理部111は、ダウンロード要求をサーバ20に送信する(S526)。
サーバ20の同期処理部211は、クライアント10から受信したダウンロード要求に設定されているアンカー時点よりも後の作成時点413又は更新時点414が設定されている同期データ40を同期データ記憶部231から読み出し(S527)、読み出した同期データ40をクライアント10に送信する(S528)。
クライアント10の同期処理部111は、サーバ20から同期データ40を受信し(S529)、受信に失敗した同期データ40がある場合には、失敗した同期データ40のGUIDをダウンロード失敗ID記憶部133に登録する(S530)。同期処理部111は、ダウンロードに成功した同期データ40のリストを作成し(S531)、ダウンロードに成功した同期データ40のGUIDをダウンロード失敗ID記憶部133から削除する(S532)。
以上のようにして、サーバ20においてアンカー時点より後に作成又は更新された同期データ40と、前回ダウンロードに失敗した同期データ40と、参照先がダウンロードに失敗していた同期データ40とが、サーバ20からダウンロードされる。
【0042】
図9は、
図7のステップS502における衝突の解消処理の流れを示す図である。クライアント10の同期処理部111は、ダウンロードに成功した同期データ40のそれぞれについて以下の処理を行う。同期処理部111は、同期データ40に衝突が発生していないかいどうかを判定する(S541)。データの衝突とは、データを同期している2つの装置のそれぞれおいてデータが更新されたことをいう。本実施形態では、サーバ20からダウンロードした同期データ40更新時点414と、同期データ記憶部131に記憶されている同期データ40の更新時点414とがともにアンカー時点よりも後である場合に、衝突が検出される。同期処理部111は、衝突を検出した場合(S541:YES)、サーバ20からダウンロードした同期データ40と、クライアント10に記憶されている同期データ40とのどちらを優先するかを決定する(S542)。同期処理部111は、例えば、常にサーバ20又はクライアント10のどちらかの同期データ40を優先するようにしてもよいし、更新時点414に応じてどちらを優先するか決定してもよいしし、ユーザから指定を受け付けるようにしてもよい。同期処理部111は、クライアント10に記憶されている同期データ40を優先すると決定した場合(S543:YES)、当該同期データ40をリストから削除する(S544)。このようにして、クライアント10において同期データ40の衝突が解消される。
【0043】
図10は、
図7のステップS503における、クライアント10による同期データ40の登録処理の流れを示す図である。クライアント10の同期処理部111は、リストに含まれている同期データ40を同期データ記憶部131に登録する(S561)。同期処理部111は、ダウンロード失敗ID記憶部133からGUIDを読み出す(S562)。ヘッダ変更部112は、読み出されたGUIDのそれぞれについて、参照ID412に当該GUIDが設定されている同期データ40に、当該GUIDを不整合ID415として設定するとともに(S563)、当該同期データ40から参照ID412を削除する(S564)ように、同期データ記憶部131を更新する。このようにして、同期データ40のダウンロードの際、ダウンロードされた同期データ40が同期データ記憶部131に登録されるとともに、ダウンロードに失敗した同期データ40を参照している同期データ40については、参照ID412が削除されて、代わりに不整合ID415が設定されるようにすることができる。
【0044】
図11は、
図7のステップS504における、同期データ40のアップロード処理の流れを示す図である。
クライアント10の同期処理部111は、アンカー記憶部132からアンカー時点を読み出し(S581)、アンカー時点よりも作成時点413又は更新時点414が新しい同期データ40を同期データ記憶部131から読み出し(S582)、アップロード失敗ID記憶部134に記憶されているGUIDに対応する同期データ40を同期データ記憶部131から読み出し(S583)、読み出した同期データ40をサーバ20に送信する(S584)。同期処理部111は、アップロード失敗ID記憶部134に記憶されているGUIDを削除し(S585)、送信に失敗した同期データ40があれば、失敗した同期データ40のGUIDをアップロード失敗ID記憶部134に登録する(S586)。
一方、サーバ20の同期処理部211は、クライアント10から送信される同期データ40を受信し(S587)、受信に失敗した同期データ40があれば、失敗した同期データ40のGUIDを失敗ID記憶部232に登録し(S588)、受信に成功した同期データ40のリストを作成する(S589)。
以上のようにして、クライアント10においてアンカー時点より後に作成又は更新された同期データ40と、前回アップロードに失敗した同期データ40とがサーバ20にアップロードされる。
【0045】
図12は、
図7のステップS505における、サーバ20による同期データ40の登録処理の流れを示す図である。サーバ20の同期処理部211は、リストに含まれている同期データ40を同期データ記憶部231に登録する(S601)。ヘッダ変更部212は、失敗ID記憶部232からGUIDを読み出し(S602)、読み出したGUIDのそれぞれについて、同期データ記憶部231に記憶されている同期データ40のうち、当該GUIDが参照ID412として設定されているものから参照ID412を削除する(S603)。
【0046】
図13は、
図7のステップS506における、クライアント10による不整合解消処理の流れを示す図である。クライアント10のヘッダ変更部112は、不整合ID415が設定されている同期データ40を同期データ記憶部131から検索し(S621)、検索した同期データ40のそれぞれについて、不整合ID415に設定されているGUIDがアップロード失敗ID記憶部134に登録されているか否かを判定し(S622)、登録されていなければ(S622:NO)、不整合ID415に設定されているGUIDを参照ID412としてヘッダ部41に設定し(S623)、不整合ID415を削除し(S624)、更新時点414をアンカー時点よりも後の時点(例えば現時点)に更新する(S625)。これにより、次のアップロード処理において当該同期データ40はサーバ20にアップロードされることになる。サーバ20ではアップロードに失敗した同期データ40のヘッダ部41から参照ID412が削除されているので、このアップロードにより削除された参照IDが復活することになる。
【0047】
以上説明したように、本実施形態のデータ同期システムによれば、参照関係を有する同期データ40を同期する際に、参照先の同期データ40の同期が失敗した場合でも、一時的に参照元の同期データ40からの参照ID412を削除して、参照関係を解除することができる。一般に関係性を有するデータを同期する場合には、アトミックな同期処理が行われ、参照先のデータの同期が失敗した場合には、参照元のデータの同期も失敗したものとされるが、本実施形態のデータ同期システムによれば、参照先の同期データ40の同期が失敗した場合でも、参照元の同期データ40は引き続き利用することが可能となる。したがって、同期データ40の可用性を高めることができる。
【0048】
また、本実施形態のデータ同期システムによれば、サーバ20側では、ダウンロードの失敗について管理する必要がなく、また、アップロードが失敗した場合には、失敗した同期データ40を参照している同期データ40から参照ID412を削除するだけでよい。すなわち、サーバ20は、参照関係の復旧等を考慮する必要がない。したがって、サーバ20が数多くのクライアント10との間で同期を行う場合でも、参照関係を管理するためのサーバ20の負荷を軽減することができる。
【0049】
なお、本実施形態では、クライアント10は1台であるものとしたが、もちろん複数のクライアント10とサーバ20とが同期を行うようにすることもできる。また、サーバ20を複数台により構成してもよい。
【0050】
また、本実施形態では、画像データ及びタグデータのみをクライアント10及びサーバ20の間で同期するものとしたが、もちろん、フォルダやリレーショナルデータベース管理システムで管理されるレコードなど、他のデータへの参照ID412を設定可能な各種のデータを同期することも可能である。
【0051】
また、本実施形態では、タグデータ1と画像データ2とは1対多の関係であるものとしたが、1対1の関係であってもよいし、多対多の関係であってもよい。多対多の関係である場合、参照ID412は、同期データ40のヘッダ部41に設定せず、関係性を管理するデータ(以下、「関係性データ」という。)に設定するようにしてもよい。
【0052】
また、本実施形態では、画像データ2にのみ参照ID412が設定されるものとしたが、タグデータ1にも、画像データ2への参照ID412を設定するようにしてもよい。
【0053】
また、本実施形態では、説明を簡単にするために、ダウンロード又はアップロードをするべき同期データ40はクライアント10とサーバ20との間でやりとりが行われた上で、通信路30におけるエラーなどにより同期データ40を受信できなかった場合に、ダウンロード又はアップロードが失敗したものとしたが、通信路30におけるエラーに限らず、例えば、同期データ40を記録する際にエラーが発生した場合、通信量や記憶容量に対する制約が設定されており、ダウンロード又はアップロードされた同期データ40がこの制約に違反した場合などに、ダウンロードやアップロードの失敗を検出するようにしてもよい。
【0054】
また、本実施形態では、不整合ID415が設定されていた同期データ40については、不整合ID415に設定されるGUIDに対応する同期データ40のアップロードが成功した場合に、同期データ40の全体を再度アップロードするものとしたが、ヘッダ部41のみをアップロッドしてもよい。また、同期データ40のダウンロード及びダウンロードの際に、ボディ部42の差異の有無を判定し、差異がある場合には同期データ40の全体をダウンロード又はアップロードし、差異がない場合にはヘッダ部41のみをダウンロード又はアップロードするようにしてもよい。さらには、同期データ40の差分のみをアップロード又はダウンロードするようにすることもできる。
【0055】
また、本実施形態では、不整合ID415に設定されるGUIDに対応する同期データ40のアップロードが成功した場合、更新時点414を更新することにより、再度アップロードが行われるようにしたが、
図13のステップS625を省略し、アップロードを行わないようにしてもよい。
【0056】
また、本実施形態では、タグデータ1のダウンロードが失敗した場合、そのタグデータ1のGUIDが参照ID412に設定されている画像データ2のヘッダ41から、当該参照ID411が削除され、代わりに不整合ID415が設定されるものとしたが、これに限らず、参照ID412を削除せず、また不整合ID415を設定しないようにすることもできる。この場合、例えば、アップロード失敗ID記憶部134に登録されていたGUIDに対応する同期データ40のアップロードが成功した場合に、当該GUIDを記憶するアップロード成功ID記憶部を設けるようにし、参照ID412に設定されているGUIDがアップロード成功ID記憶部に登録されているものについて、再度アップロードを行うようにしてもよい。
【0057】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。