(57)【特許請求の範囲】
【請求項１】
第１のデータベースを第２のデータベースと同期させる方法であって、
前記第１のデータベースに関連付けられたクライアントが、前記第２のデータベースに対する更新指示（１３５）と、前回のデータベース同期処理から得られたマッピング・レコード（１４０）であって、前記前回のデータベース同期処理によって更新されたレコードを示すクライアントレコード識別子およびサーバーレコード識別子と、前回のデータベース同期処理の結果とを対応付けたテーブルを備えた前記マッピング・レコード（１４０）と、今回の同期時刻（１２５）と、前回の同期時刻（１３０）とを含む第１の同期メッセージ（１２０）を前記第１のデータベースから前記第２のデータベースへと送信するステップと、
前記第２のデータベースに関連付けられたサーバーが、前記第１の同期メッセージ（１２０）に応じて前記第２のデータベースを更新するステップと、
前記サーバーが、前記第１のデータベースに対する更新指示（１７５）と、前記第１のメッセージに応じて更新指示を実行した結果（１８０）と、前記第１のメッセージ（１２０）から受信された今回の同期時刻（１６５）とを含む第２の同期メッセージ（１６０）を前記第２のデータベースから前記第１のデータベースへと送信するステップと、
前記クライアントが、前記第２の同期メッセージ（１６０）に応じて前記第１のデータベースを更新するステップと、
前記クライアントが、前記第１のデータベースを更新結果から、今回の同期処理についての新規のマッピング・レコードを生成するステップであって、前記今回の同期処理によって更新されたレコードを示すクライアントレコード識別子およびサーバーレコード識別子と、前記今回の同期処理の結果とを対応付けたテーブルを備えた前記新規のマッピング・レコードを作成するステップと、
前記クライアントが、次回の同期処理中に送信すべく、前記新規のマッピング・レコードを記憶するステップと、
を有する方法。
【請求項２】
前記第１のメッセージを送信するステップにはさらに、
前記クライアントが、前記前回の同期時刻以降に生じた変更の数を決定するステップと、
前記クライアントが、前記前回の同期処理から得られたマッピング・レコードとして送信するものを、前記記憶されているマッピング・レコードの中から少なくとも１つ決定するステップと、
前記クライアントが、前記第２のデータベースについての更新指示を決定すべく、前記決定され記憶されている少なくとも１つのマッピング・レコードと、前記決定された変更の数とを比較するステップと
を有する請求項１に記載の方法。
【請求項３】
前記第２のデータベースを更新するステップは、さらに、前記サーバーが、今回の同期時刻を前回の同期時刻として前記第２のデータベースに記憶するステップを有する請求項１に記載の方法。
【請求項４】
前記第１のデータベースを更新するステップにはさらに、前記クライアントが、前記第２の同期メッセージ（１６０）に含まれている前記第１のデータベースについての更新指示（１７５）に応じて、前記第１のデータベースのレコードを更新するステップを有する請求項１に記載の方法。
【請求項５】
前記第１のデータベースを更新するステップは、さらに、前記クライアントが、前記第２の同期メッセージ（１６０）に応じて、前回の同期時刻を更新するステップを有する請求項４に記載の方法。
【請求項６】
前記新規のマッピング・レコードを記憶するステップは、さらに、前記サーバーが、前記第１の同期メッセージ（１２０）に含まれているマッピング・レコードを消去するステップを有する請求項１に記載の方法。
【請求項７】
第１のデータベースと第２のデータベースとの間で同期を達成するシステムであって、
第２のデータベースに対する更新指示（１３５）と、前回のデータベース同期処理から得られたマッピング・レコード（１４０）であって、前記前回のデータベース同期処理によって更新されたレコードを示すクライアントレコード識別子およびサーバーレコード識別子と、前回のデータベース同期処理の結果とを対応付けたテーブルを備えた前記マッピング・レコード（１４０）と、今回の同期時刻（１２５）と、前回の同期時刻（１３０）とを含む第１の同期メッセージ（１２０）を前記第１のデータベースから前記第２のデータベースへと送信し、
前記第２のメッセージ（１６０）に応じて前記第１のデータベースを更新し、
前記第１のデータベースを更新結果から、今回の同期処理についての新規のマッピング・レコードとして、前記今回の同期処理によって更新されたレコードを示すクライアントレコード識別子およびサーバーレコード識別子と、前記今回の同期処理の結果とを対応付けたテーブルを備えた前記新規のマッピング・レコードを作成するステップと、
次回の同期処理中に送信すべく、第２の同期メッセージ（１６０）に応じて、前記新規のマッピング・レコードを記憶するよう構成されている、前記第１のデータベースに関連するクライアント（１０）と、
前記第１の同期メッセージ（１２０）に応じて前記第２のデータベースを更新し、
前記第１のデータベースに対する更新指示（１７５）と、前記第１のメッセージ（１２０）に応じて更新指示を実行した結果（１８０）と、前記第１のメッセージ（１２０）から受信された今回の同期時刻（１６５）とを含む第２の同期メッセージ（１６０）を前記第２のデータベースから前記第１のデータベースへと送信するよう構成されている、前記第２のデータベースに関連するサーバー（１５）と、
を有するシステム。
【請求項８】
前記クライアント（１０）は、さらに、
前記前回の同期時刻以降に生じた変更の数を決定し、
前記前回の同期処理から得られたマッピング・レコードとして送信すべく、前記記憶されているマッピング・レコードの中から少なくとも１つを決定し、
前記第２のデータベースについての更新指示を決定すべく、前記決定された記憶されている少なくとも１つのマッピング・レコードと、前記決定された変更の数とを比較するよう構成されている
請求項７に記載のシステム。
【請求項９】
前記サーバー（１５）は、さらに、今回の同期時刻を前回の同期時刻として前記第２のデータベースに記憶するよう構成されている請求項７に記載のシステム。
【請求項１０】
前記クライアントは、さらに、前記受信した今回の更新時刻が前記前回の更新時刻より後であると決定するよう構成されている請求項９に記載のシステム。
【請求項１１】
前記クライアントは、さらに、前記第２の同期メッセージに含まれている前記第１のデータベースについての更新指示に応じて、前記第１のデータベースのレコードを更新するよう構成されている請求項７に記載のシステム。
【請求項１２】
前記サーバーは、さらに、前記第１の同期メッセージに含まれているマッピング・レコードを消去するよう構成されている請求項７に記載のシステム。
【発明の詳細な説明】
【０００１】
関連出願
この出願は、２０００年３月１４日に提出された米国仮出願No.60/189について優先権を主張するものであり、この仮出願の開示の全てをここに取り込む。
【０００２】
発明の背景
発明の技術分野
本発明は、データベースの保守に係り、とりわけ、相互に離間して位置するクライアントとサーバーデータベースとを同期させる技術に関する。
【０００３】
関連技術の説明
ネットワーク、特に広域ネットワークが増殖したことにより、例えば、ネットワーク内のクライアントとサーバーなどにおいて、同一のデータベースであるにもかかわらず、複数のバージョンや複数のコピーが存在しうるといった状況が表面化している。同一のデータベース間において、クライアントで作成されたエントリーとサーバーで作成されたエントリーとでは差が生じるため、いずれのバージョンのデータベースも相互かつ周期的に更新される必要がある。この更新により、どのバージョンのデータベースも同一の情報であることが保証される。このプロセスは同期と呼ばれ、最後の同期処理以降に変更されたことを示している情報を、各バージョンのデータベース間で通信するステップが含まれている。
【０００４】
クライアントとサーバーデータベース間の同期手順が実行されている間、同期プロセス中のデータベースに対するユーザーからの入力を防止すべく、各バージョンのデータベースはロックされなければならない。これは、同期プロセス中に加えられた修正は発見できず、もし同期手順中にデータベースがロックされていなければ、同期されたバージョンのデータベース間で相違が生じる危険性がある、という事実による。これはもちろんデータベースへのアクセスを制限することであり、もしユーザーが同期手順中にデータベースへのアクセスを試行すれば、操作の実行を望むユーザーを邪魔することになるかもしれない。このように、データベースの同期処理中にデータベースの継続的更新を可能にするための、何らかの手法が強く望まれている。
【０００５】
さらに、クライアントバージョンのデータベースと、サーバーバージョンのデータベースとの間で、多数のメッセージを送受信することが同期プロセスには要求される。データベース間で送信されるメッセージの数を低減するか、あるいは最適化するいくつかの手法を使用すれば、プロセスをより高速に実行できるようになる。このように、同期プロセスがシステムリソースを利用する時間を短縮することが重要である。データベース間で同期メッセージを送信する際に、無線回線の帯域幅を必要とする無線通信システムのようなシステムでは、この点は特に重要である。
【０００６】
発明の概要
クライアントに位置する第１のデータベースと、サーバーに位置する第２のデータベースとを同期させる方法及びシステムにおいて、本発明は、上記又は他の課題を解決するものである。同期プロセスを開始する際には、クライアントがサーバーに位置する第２のデータベースへと第１の同期メッセージを送信する。第１の同期メッセージは、該データベースの前回の同期処理からのマップアイテム・レコードと、第２のデータベースで実行されるべきアップデートと、今回の同期プロセスでの今回の同期時刻と、最後の同期プロセスの時刻とを含んでいる。
【０００７】
サーバーが第１の同期メッセージを受信すると、第２のデータベースは第１の同期メッセージに応じて更新される。サーバーはクライアントに対し第２の同期メッセージを送信する。前記第２の同期メッセージは、クライアントのデータベースで実行されるアップデートと、前記第１の同期メッセージにおいて要求された変更処理の結果と、前記第１の同期メッセージ内に含まれていた今回の同期時刻とが含まれている。第２の同期メッセージに応答し、クライアントは第２の同期メッセージ内の全アップデートに応じて第１のデータベースを更新する。また、今回の同期プロセス用のマップアイテム・レコードを、次回の同期プロセス中に送信できるようにするため、過去に送信されたマップアイテムを削除する。
【０００８】
詳細な説明
図面のとりわけ図１には、クライアント１０とサーバー１５との間におけるデータベース同期プロセスに関する従来技術が示されている。以下の説明では、クライアント１０とサーバー１５とのデータベースは別のものとされているが、これらは同一のデータベースであるが、バージョンのみが異なるものである点に注意しなければならない。クライアント１０では、最後の同期処理以降にエントリー（変更箇所）２０が生成され、サーバー１５では、最後の同期処理以降にエントリー（変更箇所）２５が生成されたものとする。従って、４つの新規なエントリーが、クライアント１０のデータベースとサーバー１５のデータベースとの間で相互補償されなければならない。同期処理は、３０（時刻２）で開始される。同期処理の間、クライアント１０のデータベースとサーバー１５のデータベースとはロックされ、当該データベースに新規のエントリーが作成されないようにする。
【０００９】
はじめに３５において、クライアント１０は、最後に同期処理が実行された時刻以降にデータベースに対して変更が生じたかどうかを判定しなければならない。最後に同期処理が実行された時刻以降になされた変更の数が決定された後、クライアントはアップデート３８をサーバー１５に送信する。アップデート３８は、例えば、追加、削除、更新、消去、移動、コピーなどの動作指示（オペレーション）と、クライアント１０において変更されたオリジナルのレコードを示しているソースレコード識別子と、サーバー１５において変更の対象となるレコードを識別するターゲットレコード識別子と、変更後のデータを含むレコードデータとを有している。
【００１０】
アップデート３８を受信すると、４０において、サーバー１５はクライアントからの受信と指示に従ってレコードを更新する。この手続には、供給されたレコードデータに対応するターゲットレコードに対して、前述の動作指示により指示されている手法に従って、供給されたレコードデータを処理するステップが含まれている。この情報の全ては、アップデート３８に含まれている。５０において、サーバー１５は前記クライアント１０と最後に同期した時刻（時刻１）以降にデータベースに加えられた変更の数を決定する。時刻３において、付加的な更新処理５５がクライアント１０において試行される。この期間はデータベースがロックされているので、クライアントによる更新は許可されない。
【００１１】
サーバー１５は、前記クライアント１０と最後に同期した時刻（時刻１）以降にデータベースに加えられた変更を決定した後に、アップデートにリザルトメッセージをプラスしてクライアント１０に返信する。アップデートの部分は、前に記述されていた情報（すなわち、動作指示、ソースレコード識別子、ターゲットレコード識別子、レコードデータ）と同一である。リザルトの部分は、前に送信されたアップデートメッセージに応じサーバー１５が動作指示を実行した結果と、最初に要求された変更に関するソースレコード識別子と、サーバーにおいて変更されたレコードに関するターゲットレコード識別子とが含まれている。
【００１２】
サーバー１５からのメッセージ６０に応じて、クライアント１０は時刻４において要求された更新処理６５を実行する。更新処理中、クライアント１０は、サーバーレコード識別子とクライアントレコード識別子との間の対応を表すマッピング・レコードを維持する。サーバー１５とクライアント１０での更新が完了した後、これらのマッピング・レコードはマップアイテム７０として、サーバー１５へと送信される。マップアイテムには、サーバーレコード識別子と、クライアントレコード識別子と、クライアント及びサーバーによってオリジナルに要求された動作指示の実行結果とが含まれ、これらはテーブルに記憶される。マップアイテム７０に応じて、サーバー１５は、マップアイテム・アクノレッジ・メッセージ７５をクライアント１０へと返信する。８０において、クライアントは、マップアイテム・レコードを自己のメモリから削除し、最後の同期時刻を時刻４に設定する。これにより、同期処理が完了する。
【００１３】
次に図２を参照すると、そこにはデータベースのロックを必要としない、本発明に係るデータベース同期処理が例示されている。この本発明は、同期処理中の更新を可能とし、同期処理を完了するのに必要な時間を短縮するものである。はじめに、図２の８５、９０、９５のそれぞれは、３つの異なる同期処理を示していることに注意しなければならない。データベースの最後の同期処理は１００（時刻１）において開始されたものとする。この時刻以降、データベースには４つの変更が追加されたものとする。２つの変更１０５は、クラインアント１０において追加され、他の二つの変更はサーバー１５において追加されたものである。
【００１４】
同期処理の最初である１１５において、クライアント１０は、最後の同期処理が実行された時刻１以降に、クライアントのデータベースに追加された変更の数を決定する。１１６において、クライアント１０は、前回の同期処理からのマップアイテム・レコードの数を決定する。この数は、サーバー１５に送信されるべきものである。クライアントは、１１８において、最後の同期処理以降に追加された変更１０５と、記憶されているマップアイテム・レコードとを比較し、どのアップデートがサーバーにおいて既に追加され、どのアップデートがサーバーにおいて追加されていないのかを決定する。次に、クライアント１０は、第１の同期メッセージ１２０をサーバー１５に送信する。
【００１５】
次に図３を参照すると、第１の同期メッセージには、今回の同期時刻１２５と、前回の同期時刻１３０と、サーバー１５によって実行される更新指示を含むアップデート１３５の部分と、前回の同期処理から決定されたマップアイテム・レコードとを有している。この今回の同期時刻１２５には、今回の同期処理を開始した時（時刻２）の時刻情報が含まれている。前回の同期時刻１３０は、前回の同期処理を開始した点（時刻１）を示している。これにより、前回の同期時刻１３０から今回の同期時刻１２５までの間にデータベースへと追加された変更の全てを特定できる。アップデート１３５には、例えば、追加、削除、更新、消去、移動、コピー、その他などの動作指示と、変更された元のレコードを示すためのソースレコード識別子と、サーバーにおいて変更の対象となるレコードを識別するためのターゲットレコード識別子と、変更後のデータとなるべきレコードデータとが含まれている。マップアイテム・レコード１４０には、前回の同期処理中に更新されたレコードを表すためのサーバーレコード識別子及びクライアントレコード識別子と、前回の同期処理において動作指示を実行した結果とを含んでいる。
【００１６】
図２に戻ると、サーバー１５が、一度、第１の同期メッセージ１２０を受信すると、１４２において、サーバーは、第１の同期メッセージ１２０に含まれている今回の同期時刻１２５が提供された最後の同期時刻１３０よりも後であるかを判定する。後であれば、サーバー１５は、１４４において、受信したマップアイテム・レコード１４０を使用して、サーバーのマッピング・テーブルを更新する。サーバー１５は、次に１４５において、同期メッセージ１２０のアップデート部分１３５により示されているレコードを更新する。サーバーは、１４８において、受信した今回の同期時刻１２５を最後の同期時刻として記憶し、１５０において、サーバーでいくつの変更がなされたかを決定する。変更の数を決定したあと、サーバー１５は第２の同期メッセージ１６０をクライアント１０へと送信する。時刻３において、クライアント１０のデータベースに追加の変更１５５が発生したとする。データベースはロックされていないので、変更１５５はデータベースに追加され、次回の同期処理９０中にサーバーへの更新が実行されることになろう。
【００１７】
次に図４を参照すると、そこには、第２の同期メッセージ１６０が例示されており、第１の同期メッセージにおいてクライアント１０から受信した今回の同期時刻１６５と、サーバーにおいて実行された更新処理の結果を含むリザルト部分１７０と、クライアントにおいてオリジナルに変更されたソースレコードと、サーバー１５において変更されたレコードの識別子となるターゲットレコード識別子とを有している。第２の同期メッセージ１６０は、さらに、クライアントの対応するレコードで実行されるべきもので、サーバーで実行された更新処理を表すアップデート部分１７５を含んでいる。アップデート部分１７５には、例えば、追加、削除、更新、消去、移動、コピー、その他などの動作指示と、オリジナルに変更されたレコードを示すためのソースレコード識別子と、クライアントにおいて変更の対象となるレコードを識別するためのターゲットレコード識別子と、変更後のデータとなるべきレコードデータとが含まれている。
【００１８】
次に、図２において、クライアント１０は、１６８におて、今回の同期時刻１６５が最後の同期時刻よりも後であるかを判定し、後であれば、１８０において、最後の同期時刻を今回の同期時刻へと更新する。クライアント１０は、１８５において、アップデート部分１７５により示されている更新処理を実行し、１９０において、前回の同期処理において記憶されたマップアイテム・レコードに代えて、今回の同期処理８５について新規のマップアイテム・レコードを記憶する。従来技術と相違するのは、同期処理８５についてのマップアイテム・レコードが今回の同期処理８５中で送信されるのではなく、次回の同期処理９０中に送信されることである。これにより、同期処理中に送信することが必要となるメッセージの数が減少し、同期処理に必要となる帯域幅も減少するであろう。
【００１９】
時刻４で開始される同期処理９０は、上述の同期処理８５と実質的に同様に実行される。クライアント１０は、はじめに１９５において、時刻２で開始された最後の同期処理８５以降に追加された変更を特定する。第１の同期メッセージ２００がクライアント１０からサーバー１５へと送信されるが、これには、前回の同期処理８５についてのマップアイテム・レコードなどの前に記述されている情報が含まれている。２０５においてサーバー１５はこの情報によって更新され、受信された今回の同期時刻と、第１の同期メッセージ２００において要求された更新処理の結果とを第２の同期メッセージ２１０に搭載してクライアント１０からサーバー１５へと送信する。注意すべきは、第２の同期メッセージ２１０は、アップデート部分１７５を含んでいないことであり、これは、最後の同期処理８５以降はサーバー１５においてデータベースの変更がなされていないからである。２１２において、クラインアント１０は、今回の同期時刻が最後の同期時刻より後であることを確認し、最後の同期時刻を今回の同期時刻へと一致させるように設定する。２１５において、クライアント１０は、次に、前回の同期処理８５から得られ、既に記憶されていたマップアイテム・レコードを削除し、今回の同期処理９５についての今回のマップアイテム・レコードを記憶する。時刻５で開始された第３の同期処理９５の間に、クライアント１０は、前回の同期時刻（時刻４）以降にたった一つの変更２０５だけがつかされたと判定する。しかしながら、２２５において、変更２０５と、記憶されているマップアイテムとを比較することで、これらの変更のすべては前回の同期処理９０の一部であり、全ての変更は既にサーバー１５へと追加されていることが明らかとなる。第１の同期メッセージ２３０はクライアント１０からサーバー１５へと送信され、これには、今回の同期時刻と、前回の同期時刻と、前回の同期処理９０についてのマップアイテム・レコード１４０とが含まれている。２３５において、サーバー１５は、更新処理は必要がなく、第２の同期メッセージ２４０に今回の同期時刻だけを搭載してクライアント１０へと送信すればよいことを判断する。２４５において、第２の同期メッセージ２４０に応じて、クライアント１０は受信した同期時刻が最後の同期時刻よりも後であるか判定し、最後の同期時刻を今回の同期時刻へと一致するように設定する。２４６において、前回の同期処理９０において送信されたマップアイテム・レコード１４０は削除される。さらなるマップアイテム・レコードは記憶されない。これは、第３の同期処理９５中では更新処理が実行されなかったからである。
【００２０】
クライアント１０とサーバー１５との間で、同期メッセージに今回の同期時刻と最後の同期時刻とを搭載して送信する代わりに、変更カウンタが同期メッセージに搭載されてもよい。変更カウンタは、データベースに含まれているカウンタであり、データベースへと変更が加えられるごとに１つずつ増加するものである。よって、同期時刻を追跡する代わりに、データベースは、データベースに生じた変更の数を追跡すればよく、これにより、全てのデータベースが（例えば）変更０から変更４へと変更したときの同期処理中であっても、データベースをオープンにしておくことが可能となる。
【００２１】
本発明は、クライアントとサーバーとの双方に存在するデータベースを同期させる方法に改善を提供するものであり、同期処理中に当該データベースをロックする必要がないものである。最後の同期処理の開始時刻と今回の同期処理の開始時刻とに関する情報を送信することによってこれらは達成される。同期処理中にデータベースへと加えられた変更を追跡することも可能となる。さらに、上述の方法は、クライアントとサーバー間の回線の通信帯域幅を節約して使用できる。なぜなら、自己の同期処理中にはマップアイテム・レコードを送信せず、その後の同期処理まで保持しておいて、そこで送信するからである。
【００２２】
上述の説明は、本発明を実施するための好ましい実施形態であり、本発明の技術的範囲は上述の実施形態に限定されるものではない。本発明の技術的範囲は添付の請求の範囲によって確定される。
【図面の簡単な説明】
添付の図面とともに、上述の詳細な説明を参照することにより、本発明に係る方法及び装置についてより完全に理解できよう。
【図１】  クライアントとサーバー間における従来の同期プロセスを例示した図である。
【図２】  本発明に係る改善された同期プロセスを例示する図である。
【図３】  第１の同期メッセージを例示する図である。
【図４】  第２の同期メッセージを例示する図である。
【図１】
0004732661.tif 000002
【図２】
0004732661.tif 000003
【図３】
0004732661.tif 000004
【図４】
0004732661.tif 000005