(57)【特許請求の範囲】
【請求項１】
プロセッサおよび前記プロセッサによる実行のためのプログラムを記憶するメモリを有するクライアントにおいて、
サーバから通信を受信して前記サーバと前記クライアント間で情報を選択的に同期させるステップと、
前記サーバから情報を受信するステップであって、前記情報は第１のデータセットおよび第２のデータセットを含み、
前記第１及び第２のデータセットは、前記サーバで保持されている過去の同期のレコードに基づいて前記サーバにより定められ、
前記第１のデータセットは、前記クライアントに同期されたことがなくかつデータの優先度に応じて選択されたデータアイテムからなり、前記第２のデータセットと異なり、
前記第２のデータセットは、変更オペレーションの時系列に応じて選択された変更オペレーションからなり、前記第１のデータセットと異なり、該変更オペレーションは過去に同期されたデータアイテムに対するデータ変更を継続中であり、該変更は、前記過去の同期のレコードにある以前の同期オペレーションから生じている、ステップと、
前記データの前記優先度に応じて前記クライアントのメモリ内に前記第１のデータセットからの前記データの少なくとも一部分を記憶するステップと、
前記変更オペレーションの前記時系列に応じて前記第２のデータセットからの前記変更オペレーションの少なくとも一部分を行うステップと、
前記クライアントのユーザが、前記クライアントにおいて、前記データの一部分および１つ以上の前記変更オペレーションが行われたデータにアクセスできるようにするステップと、
を含む方法。
【請求項２】
前記クライアントから前記サーバにリクエストを送信して前記クライアントとのデータ同期を開始するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記リクエストは、直近の同期において正常に同期されたデータに対応するデータ範囲に関する情報を含んで前記サーバに、前記クライアントに同期させる次のデータ範囲を通知する、請求項２に記載の方法。
【請求項４】
前記データの前記優先度は、前記サーバにおける優先度決定に基づき、高い優先度のデータが低い優先度のデータより先に受信され、
前記変更オペレーションの前記時系列は、前記サーバにおいて変更オペレーションが発生した時刻に基づき、古い変更が新しい変更より先に受信される、請求項１または２に記載の方法。
【請求項５】
前記データおよび前記変更オペレーションは同時に同期され、重複する、データに対応する変更オペレーションおよびその反対の同期は繰り返されない、請求項１または４に記載の方法。
【請求項６】
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合されたメモリと、
前記メモリに記憶され、前記１つ以上のプロセッサによる実行のために構成された１つ以上のプログラムであって、請求項１乃至５のいずれか１項に記載の方法を行う命令を含む前記１つ以上のプログラムと、
を含むクライアントシステム。
【請求項７】
コンピュータ可読記憶媒体および前記コンピュータ可読記憶媒体に埋め込まれた１つ以上のコンピュータプログラムであって、前記コンピュータプログラムは、コンピュータシステムによって実行されると、前記コンピュータシステムに、請求項１乃至５のいずれか１項に記載の方法を行わせる命令を含む、コンピュータ可読記憶媒体。
【請求項８】
プロセッサおよび前記プロセッサによる実行のためのプログラムを記憶するメモリを有するサーバにおいて、
前記サーバにおいて管理される過去の同期のレコードに基づいて、クライアントに同期されたことがないデータおよび前記クライアントに同期されていない変更オペレーションを特定するステップと、
前記クライアントに通信を送信して前記サーバと前記クライアント間で情報を選択的に同期させるステップと、
前記クライアントに情報を送信するステップであって、前記情報は前記特定されたデータの優先度に応じて前記特定されたデータから選択される第１のデータセットおよび前記変更オペレーションの時系列に応じて前記特定された変更オペレーションから選択される第２のデータセットを含み、前記第１のデータセットは、前記第２のデータセットと異なり、前記第２のデータセットは、前記第１のデータセットと異なり、該変更オペレーションは過去に同期されたデータアイテムに対するデータ変更を継続中であり、該変更は、前記過去の同期のレコードにある以前の同期オペレーションから生じている、ステップと、
同期の終了後、前記レコードを更新して前記クライアントに正常に同期された前記通信に前記データおよび変更オペレーションの一部分を含めるステップと、
を含む方法。
【請求項９】
前記クライアントからリクエストを受信して前記サーバとのデータ同期を開始するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記リクエストは、直近の同期において正常に同期されたデータに対応するデータ範囲に関する情報を含んで前記サーバに、前記クライアントに同期させる次のデータ範囲を通知する、請求項９に記載の方法。
【請求項１１】
前記データの前記優先度は、前記サーバにおける優先度決定に基づき、高い優先度のデータが低い優先度のデータより先に伝送され、
前記変更オペレーションの前記時系列は、前記サーバにおいて前記変更オペレーションが発生した時刻に基づき、古い変更が新しい変更より先に伝送される、請求項８または９に記載の方法。
【請求項１２】
前記データおよび前記変更オペレーションは同時に同期され、重複する、データに対応する変更オペレーションおよびその反対の同期は繰り返されない、請求項８または１１に記載の方法。
【請求項１３】
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合されたメモリと、
前記メモリに記憶され、前記１つ以上のプロセッサによる実行のために構成された１つ以上のプログラムであって、請求項８乃至１２のいずれか１項に記載の方法を行う命令を含む前記１つ以上のプログラムと、
を含むサーバシステム。
【請求項１４】
コンピュータ可読記憶媒体および前記コンピュータ可読記憶媒体に埋め込まれた１つ以上のコンピュータプログラムであって、前記コンピュータプログラムは、コンピュータシステムによって実行されると、前記コンピュータシステムに、請求項８乃至１２のいずれか１項に記載の方法を行わせる命令を含む、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  開示される実施形態は、概して、クライアント‐サーバインタラクションの分野、特にクライアントデバイスとサーバ間のアイテムの同期に関する。
【背景技術】
【０００２】
[0002]  多くのソフトウェアアプリケーション（例えば電子メール）は、クライアントデバイスおよびサーバシステムの両方上で、または、サーバシステムからのサポートを得てクライアントデバイス上で動作するように設計される。これらのアプリケーションは、ユーザがクライアントデバイス上で操作してようとサーバ上で操作していようと関係なく自由にデータを作成し、受信し、送信し、修正することを可能にする。クライアントとサーバ間のデータの同期によって、クライアントおよびサーバに常駐するアプリケーションデータ間に一貫性を維持することが可能となる。同期は、クライアントデバイスは通常ローカルに記憶されたデータを主に使って動作するので、効率の理由から重要である。例えば、電子メールクライアントが、別個の電子メールサーバと通信するポータブルデバイス（例えばラップトップまたはモバイル電話機）上で実行するクライアント‐サーバ電子メールアプリケーションの場合、電子メールアプリケーションデータの同期には、電子メールサーバにおいて受信された電子メールメッセージが電子メールクライアントにダウンロードされ（これはダウンヒル同期と呼ばれる）、クライアントによってローカルに記憶された電子メールデータに対して行われたオペレーションが続いて電子メールサーバにアップロードされる（これはアップヒル同期と呼ばれる）ことが必要である。
【０００３】
[0003]  データ同期は、サーバとクライアントが通信状態を維持する限り、ほぼ連続的にクライアントとサーバ間で作用することができる。しかし、サーバとクライアントが、通信機能停止またはクライアントがオフラインまたは「飛行機」モードで動作する必要によってしばらくの間通信が切断されていた場合、または、クライアントデバイスがサーバに接続するよう新たに設定される場合（この場合、クライアントデバイスは、そのメモリ内にローカルアプリケーションデータはほとんどまたは全く記憶されていない）、同期はより困難となる。このような状況では、通信機能停止時にサーバにおいて受信された大量のデータは、クライアントがサーバに再接続する際にはクライアントに同期されておらず、また、オフラインのクライアントオペレーションもサーバに同期されていない。大量のアプリケーションデータがクライアントにダウンロードされる必要のある、次の起きる同期ステップは、時にクライアントデバイスの「キャッシュのプライミング」と呼ばれる。
【０００４】
[0004]  クライアントデバイスのキャッシュをプライミングする従前のアプローチは不便および／または低速である。これは、クライアントがダウンロードされたアプリケーションデータを用いて動作開始可能となる前にプライミングが完了することを必要とする従前の実施の場合に特に言えることである。このようなキャッシュのプライミング方法は、ローカルに記憶されたデータを使用可能となる前に、ユーザは相当な時間待機しなければならない長いプロセスである。
【０００５】
[0005]  例えば、クライアントデバイスのキャッシュを電子メールアプリケーションデータでプライミングするための１つの従前の実施では、サーバにおいて記憶されている電子メールデータの大部分がまず１つ以上のＣＤに書き込まれ、次にユーザはＣＤからのデータをクライアントデバイス（例えばラップトップ）に物理的にコピーする。他の実施では、クライアントに同期されるべきデータのセットがネットワーク接続を介してダウンロードされる。このことは、通信機能停止によって、長時間かかるダウンヒル同期オペレーションが中断されうることを意味し、クライアントデバイスは、ダウンロードされたデータのいずれも使用できなくなってしまう。
【０００６】
[0006]  ダウンヒル同期の他の実施では、クライアントに同期されるべきデータは、最も古いデータから最も新しいデータの時系列でサーバからダウンロードされる。このことは、クライアントが、同期の完了前にオフラインとなる（そして不完全なデータを使用できる）場合、クライアントデバイスでは最も古いデータのみが利用可能となることを意味し、このことは、特にユーザがもはやサーバに接続できない場合にユーザを苛立たせてしまう。
【０００７】
[0007]  クライアントデバイスは、通常、サーバよりもアプリケーションデータを記憶するために利用可能なメモリが少ないので、クライアントのユーザが各同期後に最も関連のあるデータにすぐアクセスできるように、サーバからクライアントへのデータ（大抵の場合、サーバに記憶された全てのデータのサブセットである）のより望ましい同期方法が好適である。
【発明の概要】
【０００８】
[0008]  幾つかの実施形態では、情報をクライアントに同期させるサーバのための方法は、サーバにおいて、サーバにおいて管理される過去の同期のレコードに基づいて、クライアントに同期されたことがないデータおよびクライアントに同期されていない変更オペレーションのうち少なくとも１つを特定するステップと、通信を送信してサーバとクライアント間で情報を選択的に同期させるステップであって、情報は特定されたデータおよび特定された変更オペレーションを含み、データは高い優先度から低い優先度の順に並べられかつ伝送される、ステップと、情報同期の任意の終了時に、レコードを更新してクライアントに正常に同期された通信にデータおよび変更オペレーションを含めるステップとを含む。
【０００９】
[0009]  他の実施形態では、かかるサーバ方法は、クライアントからリクエストを受信してサーバとのデータ同期を開始するステップをさらに含む。
【００１０】
[0010]  他の実施形態では、かかるサーバ方法は、サーバにおいて変更オペレーションが発生した時刻に基づいた時系列に並べられる変更オペレーションを含み、古い変更は新しい変更より先に伝送される。
【００１１】
[0011]  幾つかの実施形態では、情報をサーバに同期させるクライアント方法は、クライアントデバイスにおいて、リクエストを送信して、サーバに、次の同期を開始するためのデータおよび変更オペレーションの次の範囲を通知するステップと、リクエストに応じて、サーバから通信を受信して、サーバからの情報をクライアントに選択的に同期させるステップであって、情報は、第１の同期機構において、クライアントに前に同期されたことがないサーバにおけるデータを含み、高い優先度から低い優先度の順に受信される第１のデータセットと、第２の同期機構において、クライアントとの最後の同期において同期されなかった変更オペレーションを含み、サーバにおける各変更オペレーションの発生に基づいた時系列に並べられ、古い変更オペレーションが新しい変更オペレーションより先に受信される第２のデータとを含む、ステップと、クライアントのメモリに情報の少なくとも一部分を記憶するステップと、クライアントデバイスのユーザが、情報同期の任意の終了時にメモリに正常に記憶された情報の少なくとも一部分にアクセスしかつ使用できるようにするステップとを含む。
【００１２】
[0012]  幾つかの実施形態では、かかるクライアント方法では、優先度の順は、データのリーセンシーといったクライアントのユーザに対するデータの関連性に応じて並べられ、したがって、関連性の多いデータには高い優先度が与えられ、低い優先度を有する関連性の少ないデータより先にクライアントに伝送される。
【００１３】
[0013]  かかるクライアント方法の幾つかの実施形態では、第１のデータ同期機構および第２のデータ同期機構は互いに独立しているが、第１のデータセットおよび第２のデータセットが同時に同期されるように同時に発生する。
【００１４】
[0014]  さらに他の実施形態では、かかるクライアント方法は、クライアントとの同期ためにサーバにおける次のデータ範囲を特定するようサーバに送信される次の同期リクエストに含めるべくサーバに正常に同期された最後のデータ範囲のレコードをクライアントにおいて維持するステップを含む。
【図面の簡単な説明】
【００１５】
[0015]  本発明の本質と実施形態をより理解するために、以下の実施形態の説明を、以下の図面と共に参照すべきであり、図中、同じ参照番号は全図において対応する部分を指すものである。
【図１】[0016]  図１は、本発明の幾つかの実施形態によるクライアント‐サーバベースのネットワークシステムを示す図である。
【図２】[0017]  図２は、本発明の幾つかの実施形態による、クライアント‐サーバベースのネットワークシステムにおける例示的なサーバのブロック図である。
【図３】[0018]  図３は、本発明の幾つかの実施形態による、サーバと相互に作用する例示的なクライアントのブロック図である。
【図４】[0019]  図４は、本発明の幾つかの実施形態による、サーバにおけるグローバル履歴テーブルに含まれる情報を示す図である。
【図５】[0020]  図５は、本発明の幾つかの実施形態による、クライアントのローカル履歴テーブルに含まれる情報を示す図である。
【図６】[0021]  図６は、本発明の幾つかの実施形態による、サーバとクライアント間の例示的な同期インタラクションスキームを示す図である。
【図７Ａ】[0022]  図７Ａは、本発明の幾つかの実施形態による、サーバとクライアント間の同期開始インタラクションに含まれる情報を示す図である。
【図７Ｂ】[0022]  図７Ｂは、本発明の幾つかの実施形態による、サーバとクライアント間の同期開始インタラクションに含まれる情報を示す図である。
【図８Ａ】[0023]  図８Ａは、本発明の幾つかの実施形態による、サーバとクライアント間の主同期インタラクションに含まれる情報を示す図である。
【図８Ｂ】[0023]  図８Ｂは、本発明の幾つかの実施形態によるサーバとクライアント間の主同期インタラクションに含まれる情報を示す図である。
【図９Ａ】[0024]  図９Ａは、本発明の幾つかの実施形態による、サーバにおける、サーバアイテムとグローバル履歴テーブルとの関係を示す図である。
【図９Ｂ】[0025]  図９Ｂは、本発明の幾つかの実施形態による、クライアントにおける、クライアントアイテムとローカル／クライアント履歴テーブルとの関係を示す図である。
【図９Ｃ】[0026]  図９Ｃは、本発明の幾つかの実施形態による、サーバとクライアント間で同期可能である例示的なデータ形態を示す図である。
【図１０Ａ】[0027]  図１０Ａは、本発明の幾つかの実施形態による、主同期に続く同期開始の概念を説明する図である。
【図１０Ｂ】[0027]  図１０Ｂは、本発明の幾つかの実施形態による、主同期に続く同期開始の概念を説明する図である。
【図１０Ｗ】[0027]  図１０Ｗは、本発明の幾つかの実施形態による、主同期に続く同期開始の概念を説明する図である。
【図１０Ｘ】[0027]  図１０Ｘは、本発明の幾つかの実施形態による、主同期に続く同期開始の概念を説明する図である。
【図１０Ｃ】[0028]  図１０Ｃは、本発明の幾つかの実施形態による、通常の動作条件下での主同期の概念を説明する図である。
【図１０Ｄ】[0028]  図１０Ｄは、本発明の幾つかの実施形態による、通常の動作条件下での主同期の概念を説明する図である。
【図１０Ｙ】[0028]  図１０Ｙは、本発明の幾つかの実施形態による、通常の動作条件下での主同期の概念を説明する図である。
【図１０Ｅ】[0029]  図１０Ｅは、本発明の幾つかの実施形態による、長時間の切断後の主同期の概念を説明する図である。
【図１０Ｆ】[0029]  図１０Ｆは、本発明の幾つかの実施形態による、長時間の切断後の主同期の概念を説明する図である。
【図１０Ｚ】[0029]  図１０Ｚは、本発明の幾つかの実施形態による、長時間の切断後の主同期の概念を説明する図である。
【図１１Ａ】[0030]  図１１Ａは、本発明の幾つかの実施形態による、順方向同期時のサーバとクライアント間の例示的なインタラクションスキームを説明する図である。
【図１１Ｂ】[0031]  図１１Ｂは、本発明の幾つかの実施形態による、クライアントにおける例示的な順方向同期方法を説明するフローチャートである。
【図１１Ｃ】[0032]  図１１Ｃは、本発明の幾つかの実施形態による、サーバにおける例示的な順方向同期方法を説明するフローチャートである。
【図１２Ａ】[0033]  図１２Ａは、本発明の幾つかの実施形態による、逆方向同期時のサーバとクライアント間の例示的なインタラクションスキームを説明する図である。
【図１２Ｂ】[0034]  図１２Ｂは、本発明の幾つかの実施形態による、クライアントにおける例示的な逆方向同期方法を説明するフローチャートである。
【図１２Ｃ】[0035]  図１２Ｃは、本発明の幾つかの実施形態による、サーバにおける例示的な逆方向同期方法を説明するフローチャートである。
【図１３Ａ】[0036]  図１３Ａは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１３Ｂ】[0036]  図１３Ｂは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１３Ｃ】[0036]  図１３Ｃは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１３Ｄ】[0036]  図１３Ｄは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１３Ｘ】[0036]  図１３Ｘは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１３Ｙ】[0036]  図１３Ｙは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１３Ｚ】[0036]  図１３Ｚは、本発明の幾つかの実施形態による、クライアントとサーバ間のアップヒル同期の概念を説明する図である。
【図１４Ａ】[0037]  図１４Ａは、本発明の幾つかの実施形態による、アップヒル同期時のサーバとクライアント間の例示的なインタラクションスキームを説明する図である。
【図１４Ｂ】[0038]  図１４Ｂは、本発明の幾つかの実施形態による、クライアントにおける例示的なアップヒル同期方法を説明するフローチャートである。
【図１４Ｃ】[0039]  図１４Ｃは、本発明の幾つかの実施形態による、サーバにおける例示的なアップヒル同期方法を説明するフローチャートである。
【発明を実施するための形態】
【００１６】
[0040]  本発明は、クライアント‐サーバシステムと、クライアントとサーバ間でのアイテムの、対応する同期方法およびシステムに関する。以下の開示には、クライアントキャッシュのプライミングと、クライアントとサーバ間のデータ交換が並列に生じて、同期済みデータがアクセス可能となる前にローカルキャッシュのプライミングが完了する必要性を解決することを可能にする同期方法およびシステムが記載される。記載される方法およびシステムは、データ同期を伴う任意のクライアント‐サーバアプリケーションに適用可能である。
【００１７】
[0041]  図１は、例示的なクライアント‐サーバベースのネットワークシステムを概略的に示す。クライアント‐サーバベースのネットワークシステムは、サーバ１０２と、通信用のネットワーク１０４と、複数のクライアントデバイス１０６Ａ〜Ｃとを含む。このシステムの通常の実施は、少なくとも１つのサーバと、少なくとも１つの通信ネットワークと、複数のクライアントデバイスとを有することを理解すべきである。異なる構成では、システムは、複数のサーバと、複数のネットワークと、複数のクライアントデバイスとを含んでもよい。
【００１８】
[0042]  幾つかの実施形態では、サーバ１０２とクライアント１０６とを接続するネットワーク１０４は私的ネットワークでも公衆ネットワークでもよく、また、有線でも無線でもよく、データ交換を可能とするようにサーバ１０４とクライアント１０６間の通信を可能にする。幾つかの実施形態では、ネットワークはインターネットであってよい。他の実施形態では、通信ネットワークは私的ネットワークであるかまたはアクセスをあるユーザグループに制限するセキュリティを有してもよい。後者の場合、ネットワークはＬＡＮであってよい。ネットワーク１０４の他の実施形態はさらに、ＷｉＦｉネットワークおよび／またはＷｉＭａｘネットワークを含みうる。ネットワーク１０４の別の実施形態は、セル式電話機およびスマートホンといったモバイルデバイスによるデータの送受信を可能にするセル式ネットワークであってもよい。このようなセル式ネットワークは、有料加入者のみがアクセスを有するので私的ネットワークと見なされうる。
【００１９】
[0043]  クライアントデバイス１０６は様々な形態をとりうる。幾つかの実施形態では、クライアントデバイスは、コンピュータサーバに通信するローカルコンピュータであってよい。他の実施形態では、クライアントデバイスは、携帯情報端末（ＰＤＡ）、スマートホン、またはセル式電話機のいずれかであってよい。クライアントデバイスは、サーバ上でも動作可能なソフトウェアアプリケーションを動作しうるか、または、クライアントデバイスは、サーバ上で動作するアプリケーションバックエンドと協働するアプリケーションフロントエンドを動作しうる。サーバ１０２は、アプリケーションの管理、データ記憶要件、編成、および／または実行に関するオペレーションを行うことができる。この開示の目的のために、クライアント１０６およびサーバ１０２は共に、同期されるべきアプリケーションデータをその中に記憶可能なメモリを含む。サーバおよびクライアントのより詳細な説明を、図２および図３においてそれぞれ記載する。
【００２０】
[0044]  図２は、図１を参照して説明したクライアント‐サーバベースのネットワークシステムにおける例示的なサーバのブロック図である。サーバ２００は、通常、１つ以上の処理ユニット（ＣＰＵ）２０２と、１つ以上のネットワークまたは他の通信インターフェース２０６と、メモリ２０５と、これらのコンポーネントを相互に接続するための１つ以上の通信バス２０４とを含む。メモリ２０５は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、若しくは他のランダムアクセス固体メモリデバイスといった高速ランダムアクセスメモリ、または、磁気ディスク記憶デバイス、光ディスク記憶デバイス、フラッシュメモリデバイス、若しくは他の不揮発性個体記憶デバイスといった不揮発性メモリを含む。メモリ２０５は、ＣＰＵ２０２から離れて配置される１つ以上の記憶デバイスを任意選択的に含んでもよい。
【００２１】
[0045]  幾つかの実施形態では、メモリ２０５は、オペレーティングシステム２０７と、通信モジュール２０８と、サーバアプリケーションモジュール２０９と、サーバ同期モジュール２１０と、データ構造２７０とを含む、プログラム、モジュール、およびデータ構造、または、これらのサブセットを記憶する。これらのコンポーネントの図示する編成は例示的であって、これらのコンポーネントに与えられた機能性の任意の代替の配置または編成を排除するものではないことに留意されたい。他の実施形態は、これらのコンポーネントに与えられた機能を任意の組み合わせに組み合わせてもよく、組み合わせにはこれらのコンポーネントのサブセットまたはスーパーセットも含まれる。このことは、任意のサーバまたはクライアントデバイスを参照して本明細書において説明する任意のおよびあらゆるソフトウェアコンポーネントについても当てはまることである。
【００２２】
[0046]  オペレーティングシステム２０７は、様々な基本的なシステムサービスを処理するための、および、ハードウェア依存タスクを行うための手順を含む。
【００２３】
[0047]  通信モジュール２０８は、サーバアプリケーション２０９を他のサーバまたはクライアントデバイスにインターフェースを介して接続するために用いられる。通信モジュール２０８を用いたインターフェースを介する接続は、１つ以上の通信ネットワークインターフェース２０６（有線または無線）と、インターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク等といった１つ以上の通信ネットワークとによって達成される。
【００２４】
[0048]  アプリケーションモジュール２０９は、様々なクライアント駆動型またはサーバ駆動型アプリケーションを含む。アプリケーションがクライアント駆動型アプリケーションである場合、そのアプリケーションがサーバ上でアクティブであると、そのアプリケーション自体は、クライアントデバイスにおける対応アプリケーションから生じるコマンドによって駆動される。アプリケーションがサーバ駆動型アプリケーションである場合、そのアプリケーションがサーバ上でアクティブであると、サーバ上のそのアプリケーションが、クライアントデバイス上の対応アプリケーションを駆動する。幾つかの実施形態では、アプリケーションは、クライアントとサーバとによって同様に駆動されてよく、セル式電話機といったクライアントデバイスでのオペレーションのために構成および適応されてよく、また、サーバ同期モジュール２１０を含みうる。
【００２５】
[0049]  サーバ同期モジュール２１０は、クライアントおよびサーバ上で動作する、または、（電子メールクライアントおよびサーバアプリケーションの場合のように）クライアントとサーバ間で協働して動作する１つ以上のアプリケーションによって利用されうるデータの同期に用いられる。同期モジュール２１０は、単一のアプリケーションに固有の、または、２つ以上のアプリケーションに対して一般化が可能な同期設定を含みうる。一実施形態では、同期モジュール２１０は、ダウンヒル同期モジュール２２０と、アップヒル同期モジュール２８０と、同期制御２９０とを含む。これらのモジュールの機能は、クライアント上のそれらの機能の対応機能に対応し、対応機能は図３を参照して説明する。
【００２６】
[0050]  同期制御２９０は、通信ネットワークへの接続性、未同期データの検出、またはデータ同期が行われる際にある他の条件に応じてデータ同期のオペレーションを制御するソフトウェアモジュールである。一実施形態では、サーバは、クライアントからの同期リクエストに応えることによって同期を開始するように構成されるが、その反対も可能でありうる。
【００２７】
[0051]  ダウンヒル同期モジュール２２０は、サーバからクライアントに、データと、サーバにおいて生じたデータ変更とを同期させる責任を負っている。換言すれば、このモジュールは、クライアントキャッシュをプライミングし、サーバにおけるデータ変更がクライアントに常駐するデータに確実に反映させる責任を負っている。一実施形態では、ダウンヒル同期は、順方向同期モジュールおよび逆方向同期モジュールと、他のアプリケーションに固有の任意の他の同期モジュールとによって実施される。
【００２８】
[0052]  幾つかの実施形態では、順方向同期モジュール２３０は、サーバにおけるデータ変更をこれらの変更が時系列で生じている最中にモニタリングし、これらの変更を時系列でクライアントに報告する。つまり、順方向同期モジュールは、順方向の時系列で、すなわち、古い更新から新しい更新でクライアントデバイスにデータ更新をダウンロードする。
【００２９】
[0053]  幾つかの実施形態では、逆方向同期モジュール２４０は、優先度またはユーザとの関連性の度合いの順で、既存のデータアイテムをクライアントにダウンロードする。幾つかの実施形態では、優先度は１つ以上の基準に基づいたデータの物理的な編成として定義されてよく、関連性は同期されるべきデータに対するユーザの関心レベルとして定義されてよい。したがって、優先度は、ユーザに対する関連性またはデータの関心レベルを定義する基準に基づいて設定されうる。例えば、特定のデータ更新の優先度または関連性は、同期されるデータのタイプ、データ変更が生じた時刻、または、データ若しくはデータ変更に対するユーザの関心を特徴付けうるデータまたはデータ変更に関連付けられる他の要素に応じて決定されうる。本発明の利点は、幾つかの実施形態において、高い優先度を有するデータアイテムが低い優先度を有するアイテムより先にクライアントにダウンロードされ、クライアントは部分的に同期されたデータを用いてオフラインモードで動作可能であるという点である。この利点により、先行技術とは対照的に、逆方向同期オペレーションがその完了前に中断されても（例えば通信機能停止となった場合、または、ユーザがクライアントデバイスをオフラインにする場合）、ユーザは、１つ以上のアプリケーションに対して最も高い優先度を有するローカルデータを用いて、クライアントデバイスをオフラインモードで依然として使用することが可能となる。幾つかの実施形態では、クライアントとサーバ間で通信が再設定されると、逆方向同期は、中断されたところから継続し、サーバは、逆方向同期が完了するまで、漸次、低い優先度／関連性のデータをダウンロードする。
【００３０】
[0054]  幾つかの実施形態では、逆方向同期オペレーションのためのデータ優先度は、サーバ上に記憶されたオペレーションまたはデータ片の相対経過時間によって決定される。経過時間が短いアイテムほど、更新の優先度が高い。例えば、電子メールアプリケーションの文脈では、電子メールクライアントを有するポータブルデバイスのユーザは、サーバにおいて受信した最新の電子メールメッセージを、デバイスのオフライン使用で利用可能にすることを好む場合がある。この例では、最新のメッセージが最高優先度を有し、それによりこれらの最新メッセージが最初にクライアントデバイスに確実に同期される。他の実施形態では、最高優先度は、特定の送信者（例えばマネジャまたは配偶者）、または、特定の件名（例えば警告）に関連付けられた電子メールデータに割り当てられてもよい。このようにして、本発明の実施形態は、ポータブル電子デバイスのユーザに、ユーザの関心事項に最も関連性のあるまたは最高優先度を有するどのようなサーバデータでもオフライン使用に利用可能となることを可能にする。この優先度の概念は、次に限定されないが、写真、カレンダー、または連絡先情報といったデジタルメディアファイル、または、ドキュメントまたはスプレッドシートといったアプリケーションデータを含む、電子メール以外のアプリケーションのデータにも適用可能である。
【００３１】
[0055]  したがって、幾つかの実施形態では、サーバにおいて生じるデータ変更は、時系列（順方向同期の場合）と、優先度／関連性の順（逆方向同期の場合）の両方でクライアントデバイスに同期される。他の同期モジュール２５０も、他のアプリケーション用に存在してよく、これらのアプリケーション内のデータにカスタマイズされた設定を含みうる。
【００３２】
[0056]  順方向同期および逆方向同期を用いる同じデータ同期機構が、次に限定されないが、イメージ、明白かつ別個の電子メールメッセージを含む電子メール会話、連絡先情報、およびカレンダー情報等を含む他のタイプのデータにも有用でありうる。幾つかの実施形態では、関連性または優先度は、次に限定されないが、編集時刻と、データおよびイメージの編集者と、メッセージの到着時刻と、メッセージの投稿者とを含む１つ以上の基準に基づいて設定されうる。
【００３３】
[0057]  アップヒル同期モジュール２８０は、クライアントにおいて生じたデータ変更をサーバに同期させる責任を負っている。サーバでは、アップヒル同期モジュール２８０は、クライアントのアップヒル同期モジュール（図３を参照して説明する）と相互に作用して、クライアントにおいて生じたデータ変更を取得し、このデータ変更がサーバにおけるデータに確実に反映されるようにする。
【００３４】
[0058]  データモジュール２７０は、サーバアプリケーションモジュール２０９内のアプリケーションによって用いられるデータファイルと、クライアントデバイスとの同期に用いられるデータとを含む。幾つかの実施形態では、データモジュール２７０は、グローバル履歴テーブル２７１と、クライアント固有データを含むクライアントデータ２７３と、アプリケーションデータ２７７のうち少なくとも１つを含みうる。
【００３５】
[0059]  グローバル履歴テーブル２７１は、サーバにおけるデータ変更に関する情報を含む。具体的には、グローバル履歴テーブル内の情報は、クライアントとの順方向同期に用いられうる。幾つかの実施形態では、グローバル履歴テーブル内の情報は時系列に記憶される。
【００３６】
[0060]  クライアントデータ２７３は、サーバと相互に作用する各クライアント、例えばクライアント１  ２７２‐Ａ〜クライアント「ｍ」２７２‐Ｂに固有のデータを含む。各クライアントに対して記憶された固有データには、最後に処理されたサーバ履歴オペレーション識別情報（サーバ履歴ｏｐＩＤ）２７８と、逆方向同期領域２７５と、サーバによって受信確認された最後のクライアント履歴オペレーションＩＤ（クライアント履歴ｏｐＩＤ）２７４とが含まれる。キャッシュされたクライアントデータ２７６は、特定のクライアントに関連付けられた、データと、サーバ上のデータへの変更を含む一方で、他のクライアント固有データ２７９は、同期に用いられる他のデータ（例えば同期設定）を含む。
【００３７】
[0061]  サーバ上の各データアイテムは、一意の識別情報または逆方向同期トークン（ＢＳＴ）を有し、それにより、データを特定しかつ逆方向同期用の同期機構によって優先順位を決めることが可能となる。一意の識別情報によって確実に正しいデータが同期される。ＢＳＴは秩序正しく、したがって、逆方向同期のためのデータアイテムの優先度が設定されうること理解することが重要である。幾つかの実施形態では、一意の識別情報は、特定のデータアイテム（例えば電子メールメッセージ）が作成または受信されたタイムスタンプによって定義されてもよく、それにより、すべてのデータアイテムは時刻によって順序付けられうる。さらに他の実施形態では、各データアイテムのＢＳＴは、他のパラメータと共に少なくとも１つのタイムスタンプを有しうる。これらのパラメータも優先度または関連性を決定するために用いられる。例えば、幾つかの実施形態は、日付とサイズに基づいて優先順位を決定する場合があり、この場合、日付が第一の基準として用いられ、サイズが第二の基準として用いられる。幾つかの実施形態では、タイムスタンプ、および、ラベル、サイズ、送信者等の他の情報を含む多数のパラメータを重み付けするおよび組み合わせるためのアルゴリズムが、逆方向同期のためのデータの順序を決定するために用いられうる。
【００３８】
[0062]  逆方向同期領域２７５は、逆方向同期時にクライアントに同期されたデータの領域を示す。各逆方向同期領域は、２つの逆方向同期トークン（ＢＳＴ）を含む。これらの２つのＢＳＴは、共に、クライアントに同期された、サーバにおけるデータの範囲の開始点と終了点を示す。したがって、１つのＢＳＴが、同期された範囲における最初のデータアイテムを表し、第２のＢＳＴが、同期された範囲における最後のデータアイテムを表す。逆方向同期領域におけるデータは、後続の逆方向同期では省略される。
【００３９】
[0063]  最後に処理されたサーバ履歴オペレーション（ＳＨＯ）ＩＤ２７８は、順方向同期においてクライアントに同期された最後のＳＨＯ  ＩＤである。この最後に処理されたＳＨＯ  ＩＤは、クライアントに最後に同期されたデータ変更を表す。これにより、サーバは、グローバル履歴テーブル２７１内のどのデータ変更がクライアントに同期されており、グローバル履歴テーブルにおいて維持する必要がなくなり除去可能であるのかを判断することができる。したがって、最後に処理されたＳＨＯ  ＩＤ２７８は、順方向同期におけるグローバル履歴テーブルのサイズを編成ししかつ管理するために用いられる。
【００４０】
[0064]  サーバによって受信確認された最後のクライアント履歴オペレーション（ＣＨＯ）ＩＤ２７４は、サーバに同期されたクライアントにおける最後のＣＨＯ  ＩＤを表す。このＣＨＯ  ＩＤは、最後の順方向同期においてサーバに同期されたクライアントにおける最後のデータ変更を表す。これは、さらに、サーバが次にクライアントに接続する際に次の順方向同期のための開始点の役割も果たす。ＳＨＯ  ＩＤと同様に、ＣＨＯ  ＩＤは一意で、クライアントと特別に関連付けられている。例えば、ＣＨＯ  ＩＤは、クライアントにおける電子メールの作成、送信、または修正に関連付けられるタイムスタンプによって表されうる。
【００４１】
[0065]  図３は、サーバと相互に作用する例示的なクライアント３００のブロック図である。クライアント３００は、通常、１つ以上の処理ユニット（ＣＰＵ）３０２と、１つ以上のネットワークまたは他の通信インターフェース３０６と、メモリ３０５と、これらのコンポーネントを相互に接続するための１つ以上の通信バス３０４とを含む。通信バス３０４は、システムコンポーネント間の通信を相互に接続しかつ制御する回路（時にチップセットと呼ばれる）を含みうる。
【００４２】
[0066]  クライアントデバイス３００は、ディスプレイ３９２およびユーザ入力デバイス３９４といった出力デバイスを有するユーザインターフェース３９０を含みうる。ディスプレイ３９２は、アクティブマトリクスディスプレイまたはタッチスクリーンディスプレイ等であってよく、ユーザ入力デバイス３９４は、例えば数字入力キーパッド、ソフトキー、タッチパッド、英数字入力キーパッド、またはタッチスクリーン等の任意の組み合わせを含みうる。メモリ３０５は高速ランダムアクセスメモリを含んでよく、また、さらに、１つ以上の磁気ディスク記憶デバイスといった不揮発性メモリ、中央処理演算ユニット３０２から離れて配置可能なフラッシュメモリといったポータブル記憶デバイスを含んでよい。幾つかの実施形態では、メモリ３０５は、オペレーティングシステム３０１と、通信モジュール３０３と、グラフィックスモジュール３０７と、メモリキャッシュ３０８と、クライアントアプリケーションモジュール３１０と、クライアント同期モジュール３２０と、データ３８０とを含む、プログラム、モジュール、およびデータ構造、またはこれらのサブセットを記憶しうる。
【００４３】
[0067]  オペレーティングシステム３０１は、様々な基本的なシステムサービスを処理するための、および、ハードウェア依存タスクを行うための手順を含む。
【００４４】
[0068]  通信モジュール３０３は、１つ以上の通信ネットワークインターフェース３０６（有線または無線）と、インターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、セル式ネットワーク等といった１つ以上の通信ネットワークとを介して、アプリケーション２０９をサーバに接続する。
【００４５】
[0069]  メモリキャッシュ３０８は、アクティブアプリケーションによるクイックアクセスのために一時的に情報を一時的に記憶する。記憶される情報の例としてはメタデータおよびアプリケーションに固有の他の情報が挙げられる。通常、アプリケーションが非アクティブになると、この情報は消去される。
【００４６】
[0070]  クライアントアプリケーションモジュール３１０は、クライアントデバイス３００上で実行可能な１つ以上のアプリケーションを含む。これらのアプリケーション３１０のうちの幾つかは、サーバ２００と相互に作用して通信、ユーザインターフェース管理、アプリケーションのカスタマイズ化、および、電子メール、カレンダー、携帯電話メール、メディアプレイヤ、またはドキュメント編集若しくはビューイングソフトウェア等を含む特定のクライアントアプリケーションの管理に関するタスクを行うように構成される。クライアントアプリケーションは、動作時、クライアントデバイスによって駆動される。
【００４７】
[0071]  クライアント同期モジュール３２０は、クライアントデバイスまたはサーバ上で独立して動作可能なアプリケーションのデータの同期のために用いられる。クライアント同期モジュール３２０は、単一のアプリケーションに固有の、または、２つ以上のアプリケーションに対して包括的な同期スキームを含みうる。一実施形態では、同期モジュール２１０は、ダウンヒル同期モジュール３２５と、アップヒル同期モジュール３６５と、同期制御３７５とを含む。これらのモジュールの機能は、サーバ上のそれらの機能の対応機能に対応する。
【００４８】
[0072]  同期制御３７５は、通信ネットワークへの接続性、未同期データの検出、またはデータ同期が行われる際にある他の条件に応じてデータ同期のオペレーションを制御する。一実施形態では、クライアントは、サーバに対して同期リクエストを開始するように構成されるが、その反対も可能でありうる。
【００４９】
[0073]  ダウンヒル同期モジュール３２５は、サーバにおいて生じたクライアントデータ変更に同期させる責任を負っている。クライアントにおけるダウンヒル同期モジュール３２５は、（図２を参照して説明した）サーバにおけるその対応モジュールと共に作動して、サーバにおけるデータ変更が、クライアントにあるデータと確実に同期されるようにする。サーバにおける対応モジュールと同様に、ダウンヒル同期は、一実施形態において、順方向同期および逆方向同期を含む。図２を参照して説明したように、順方向同期モジュール３３０は、サーバにおけるデータ変更をこれらの変更が時系列で生じている最中にモニタリングし、これらの変更をクライアントに送信する。クライアントの逆方向同期モジュール３４０は、サーバにおけるデータ変更を、優先度の順でまたはデータ変更の関連性に基づいてモニタリングする。同様に、優先度の順および関連性の度合いは、サーバにおいて用いられた同様の所定基準に基づく。したがって、サーバにおけるデータ変更は、時系列と、優先度の順の両方でクライアントデバイスに同期されうる。他の同期モジュール３５０も、他のアプリケーション用に存在してよく、これらのアプリケーション内のデータにカスタマイズされた設定を含みうる。
【００５０】
[0074]  アップヒル同期モジュール３６５は、サーバにおけるその対応モジュールと同様に、クライアントにおいて生じたデータ変更をサーバに同期させる責任を負っている。クライアントでは、このアップヒル同期モジュール３６５は、サーバと相互に作用して、クライアントにおいて生じたデータ変更を送信し、かつ、サーバがサーバによって処理された最後のＣＨＯ  ＩＤをクライアントに送信して戻す場合に、同じ変更がサーバで確実に反映されるようにする。
【００５１】
[0075]  データモジュール３８０は、アプリケーションモジュール３１０内のアプリケーションによって用いられるデータファイルと、サーバとの同期に用いられるデータとを含む。幾つかの実施形態では、データモジュール３８０は、サーバとのデータ同期のための同期データ３７０と、キャッシュされたデータ３８２と、設定仕様３８４のうちの少なくとも１つを含みうる。
【００５２】
[0076]  同期データ３７０は、ローカル／クライアント履歴テーブル３７４、次の逆方向同期トークン３７２、最上位の同期済みサーバ履歴オペレーション識別情報（ＳＨＯ  ＩＤ）３７８、および幾つかのアプリケーションに固有でありうる他の同期データ３７６といった固有のデータを含む。これらのデータは、特にサーバとのクライアントデバイスの同期に用いられる。
【００５３】
[0077]  ローカル／クライアント履歴テーブル３７４は、クライアントにおけるデータ変更に関する情報を含む。このテーブルにおける各エントリはＣＨＯ  ＩＤを有し、特定のデータオペレーションを表す。具体的には、ローカル／クライアント履歴テーブルにおける情報は、クライアントとのデータのアップヒル同期に用いられる。
【００５４】
[0078]  次の逆方向同期トークン（ＢＳＴ）３７２は、次の逆方向同期の開始点をサーバに通知するために、クライアントから送信される次の同期トークンである。最上位の同期済みＳＨＯ  ＩＤ３７８は、次の順方向同期の開始点をサーバに通知するために、クライアントから送信される。換言すれば、最上位の同期済みＳＨＯは、クライアントに戻される次の変更セット（例えば最上位ＳＨＯ  ＩＤ３７８より大きいＳＨＯ  ＩＤを有する変更）における開始点を表す。
【００５５】
[0079]  他のクライアント固有データ３７６は、包括的なアプリケーションにおける同期、または、特定のアプリケーションのために用いられうる。例えば、様々なアプリケーションが、それぞれのデータ同期のための様々な基準を有しうる。これらの様々な基準は、他のアプリケーションにおける同期に用いられる他のクライアント固有データとして記憶されうる。
【００５６】
[0080]  キャッシュされたデータ３８２は、クライアントに記憶されたデータを表す。これには各種アプリケーションに用いられるデータと、サーバに同期されるべきデータとが含まれうる。
【００５７】
[0081]  設定仕様３８４は、クライアントデバイスに関する特定の設定情報を含む。この情報を用いて、同期、インタラクションのために、かつ、アプリケーションのアクティブ化およびオペレーションにおいてサーバまたは他のデバイスに対してクライアントを特定しうる。例えば、設定仕様に含まれる情報は、次に限定されないが、クライアント識別情報、クライアントのデバイス仕様、そのデータが同期されるべきアプリケーションの識別情報、および同期のための基準等を含みうる。
【００５８】
[0082]  幾つかの実施形態では、データ同期は、１つ以上の独立した同期機構を含む。ダウンヒル同期は、サーバが、サーバにおける同期されていない変更をクライアントに送信する同期であり、アップヒル同期は、クライアントが、同期されていないデータ変更をクライアントからサーバに送信する同期である。幾つかの実施形態では、ダウンヒル同期は、逆方向同期および順方向同期を含む。逆方向同期は、クライアントと今までに同期されたことのないデータ（すなわち、クライアントに反映されていないサーバにおけるデータアイテム）を同期させる一方で、順方向同期は、変更オペレーション（すなわち、先の同期オペレーション以降に生じた進行中のデータ変更）を同期させる。これらの同期機構のそれぞれは、別個で、互いから独立していてよく、また、これらの同期機構は、必要に応じて直列にまたは同時に動作しうる。前にも述べたように、このデータ同期の概念は、電子メール会話、各電子メール会話に含まれる個々のメッセージ、および関連するデータのセット（例えば、イメージ、ドキュメント）に関する同期にも同様に適用可能である。
【００５９】
[0083]  図４は、サーバにおけるグローバル履歴テーブル４０１に含まれる情報を示す図である。グローバル履歴テーブル４０１は、サーバにおけるデータへの変更を示すエントリを含み、順方向同期に用いられる。幾つかの実施形態では、サーバにおけるデータへの各変更４０２は、サーバ履歴オペレーション識別情報（ＳＨＯ  ＩＤ）として知られている一意の識別情報を有する。一実施形態では、サーバデータ変更４０２Ａ〜Ｄ（１番目からｎ番目のサーバデータ変更に対応する）は、最も新しい変更がテーブルの最上位で最も古い変更が最下位にあって時系列に順序付けられうる。したがって、本実施形態では、順序付けは変更オペレーションの発生時刻によって決定される。変更オペレーションの、優先度によって、関連性によって、およびカテゴリまたはタイプによって等、様々な方法での順序付けも可能である。順方向同期時、サーバにおける変更オペレーションは、クライアント履歴テーブルにおける順序に応じてサーバに送信される。
【００６０】
[0084]  図５は、クライアントのローカル履歴テーブルに含まれる情報を示す図である。ローカル／クライアント履歴テーブル５０１は、クライアントにおけるデータへの変更を含み、アップヒル同期に用いられる。各クライアントデータ変更５０２は、クライアント履歴オペレーション識別情報（ＣＨＯ  ＩＤ）として知られる一意の識別情報を有する。一実施形態では、クライアントデータ変更５０２Ａ〜Ｄ（１番目からｎ番目のクライアントデータ変更に対応する）は、最も新しい変更がテーブルの最上位で最も古い変更が最下位にあって時系列に順序付けられうる。サーバにおける対応グローバル履歴テーブル４０１と同様に、クライアント履歴テーブルにおけるアイテムの順序付けは、変更オペレーションの関連性、優先度、およびカテゴリ等に基づいてといったように異なって並べられうる。アップヒル同期時、クライアントは、オペレーションが並べられた順序でクライアントに新しい変更を送信する。
【００６１】
[0085]  図６は、サーバ６０２とクライアント６０４間の例示的な同期インタラクションスキーム６００を示す図である。同期インタラクションスキームの幾つかの実施形態では、同期開始ハンドシェイク６２１がサーバ６０２とクライアント６０４間で行われ、ここでは主同期ハンドシェイク６３１と表される実際のデータ同期プロセスが始められる。同期開始ハンドシェイク６２１は、最初のデータ同期より先に、または、クライアント６０４がサーバ６０２と通信しなかった長時間（例えば、通信ネットワークの圏外、クライアントデバイスの電源が落とされている、クライアントにおけるアプリケーションが終了される、または、デバイスまたはサーバが通信ネットワークから切断される）後に発生しうる。
【００６２】
[0086]  同期開始ハンドシェイク６２１は、データ同期の開始点を設定する役割を果たす。各同期開始ハンドシェイクは、リクエスト６１１とレスポンス６１２を有する。幾つかの実施形態では、リクエスト６１１はクライアントから出され、サーバはリクエストを受信すると、レスポンス６１２を送信する。なお、同期開始は、本開示において提示されているように主同期の一部として組み込まれても、完全になくてもよい。さらに、リクエストはクライアントではなくサーバから出されてもよい。
【００６３】
[0087]  主同期ハンドシェイク６３１は、サーバにおいて同期のためのデータ範囲が設定された後に発生する。同期開始ハンドシェイクと同様に、各主同期は、クライアントから送信されるリクエスト６１３によって開始する。サーバは、リクエスト６１３を受信後に、レスポンス６１５を送信する。幾つかの実施形態では、主同期リクエスト６１３は、サーバに同期されるべき、クライアントからのデータ変更を含み、主同期レスポンス６１５は、クライアントに同期されるべきサーバからの、サーバにおけるデータおよび変更オペレーションを含む。主同期は、長い切断がある場合またはプログラムが終わると終了する（６１７）。
【００６４】
[0088]  図７Ａおよび図７Ｂは、サーバとクライアント間の同期開始ハンドシェイクに含まれる情報を示す図である。記載される情報は、ダウンヒル同期（順方向および逆方向同期）およびアップヒル同期用に含まれる情報を含む。図７Ａは、同期開始リクエスト７１０の一例である。同期開始リクエスト７１０に含まれる情報は、クライアントＩＤ７１１１と、最後の逆方向同期領域７１２と、他のアプリケーション固有データ７１３とを含みうる。
【００６５】
[0089]  クライアントＩＤ７１１は、サーバに対してクライアントを特定し、それにより、サーバは適合するクライアントに対応する情報を検索することができる。最後の逆方向同期領域７１２は、逆方向同期においてクライアントに最後に同期されたサーバからの最後のデータ範囲を含む。逆方向同期領域７１２は、そのデータ範囲の始まりと終わりを画定するために２つの逆方向同期トークン（ＢＳＴ）を含む。各ＢＳＴは、サーバにおける一意のデータを一意に特定する。同期が行われたことがない場合（例えば、最初の同期の試み）、クライアントはデータ範囲を有さないことになる。他の場合（例えば長時間の切断後）では２つのＢＳＴが存在する。他のアプリケーション固有データ７１３は、同期のための特定の設定情報を含みうる。例えばどのアイテムが最初に同期されるかに関する優先度情報、特定のデータ、オブジェクト、またはアイテムの同期用のフィルタ、および、同期のための任意の他の基準が含まれてよい。設定情報は、アプリケーションに固有でありうる。
【００６６】
[0090]  図７Ｂは、クライアントにサーバによって送信される、同期開始リクエスト７１０を受信確認する同期開始レスポンス７６０の図である。同期開始レスポンス７６０に含まれる情報には、サーバによって受信確認された最後のクライアント履歴オペレーション識別情報７６１と、最上位のサーバ履歴オペレーション識別情報７６２と、最上位の逆方向同期トークン７６３と、他のアプリケーション固有データ７６４とが含まれうる。
【００６７】
[0091]  サーバによって受信確認された最後のクライアント履歴オペレーション識別情報（ＣＨＯ  ＩＤ）７６１は、最後のアップヒル同期において、サーバによって受信確認されたまたはサーバに同期された、クライアントからの最後のデータ変更を特定する。このＣＨＯ  ＩＤの目的は、次のアップヒル同期用の新しい範囲の決定においてクライアントを支援することである。
【００６８】
[0092]  最上位のサーバ履歴オペレーション識別情報（ＳＨＯ  ＩＤ）７６２は、直近のサーバデータ変更オペレーションを表し、順方向同期のための次のＳＨＯ  ＩＤの役割も果たす。最上位の逆方向同期トークン（ＢＳＴ）７６３は、クライアントに同期されていない、サーバにおける最高優先度のデータ、オブジェクト、アイテム、またはデータ変更を表す。これはさらに、次の逆方向同期において、同期のための最初のアイテムである。幾つかの実施形態では、同期のためのイベント／データ変更の優先度または関連性は、データ変更のリーセンシー（すなわち発生時刻）、データ変更に関連付けられるアイテムのステータス（例えば、電子メールアプリケーションにおける新しいメッセージは、連絡先更新よりも高いステータス／優先度を有しうる）、および、データ変更に関連付けられるアイテムに関連付けられるラベルまたはタグ（例えば、幾つかの実施形態において、アイテムは「重要」、「至急」、または「常にダウンロード」に対して設定された関連付けられるラベルを有しうる）、または、これらのまたは同様の要素の組み合わせに基づいてよい。他の固有データ７６４は、特定のアプリケーションに関連付けられたデータの同期のための設定情報を含みうる。
【００６９】
[0093]  図８Ａおよび図８Ｂは、サーバとクライアント間の主同期ハンドシェイクに含まれる情報を示す図である。図８Ａは、クライアントによってサーバに送信される主同期リクエスト８１０の図である。幾つかの実施形態では、主同期ハンドシェイクは、同期開始ハンドシェイク後にデータ同期のための情報範囲が設定された直後に発生する。主同期ハンドシェイクは、クライアントとサーバが接続されている限り、同期開始ハンドシェイクが不要となるよう無期限に繰り返されうる。一実施形態では、各主同期リクエスト８１０は、クライアントＩＤ８１１と、クライアントによって処理された最後のサーバ履歴オペレーション（ＳＨＯ）ＩＤ８１２と、サーバに同期させるクライアントデータ変更８１３と、次の逆方向同期トークン（ＢＳＴ）８１４と、他のアプリケーション固有データとを含む。
【００７０】
[0094]  クライアントＩＤ８１１を用いて、データ同期のためのサーバにおける対応データセットを特定する。クライアントによって処理された最後のＳＨＯ  ＩＤ８１２は、クライアントに同期された最後のデータ変更を特定し、クライアントとの順方向同期のための、グローバル履歴テーブルにおける、次のサーバデータ変更セットの決定に役立つ。
【００７１】
[0095]  サーバに同期されるクライアントデータ変更８１３も、クライアントからサーバへの主同期リクエストにて送信される。幾つかの実施形態では、最大数が、アップヒル同期においてサーバに送信されるクライアントデータ変更の数を制限して、同期にかかる時間を短縮する。
【００７２】
[0096]  次のＢＳＴ８１４は、次の逆方向同期が開始すべき場所を表す。長時間の切断がある場合を除いて、逆方向同期はある時点から開始し、すべての関連データが同期されるまで１つの方向において高い優先度から低い優先度で進む。換言すれば、逆方向同期は、ある特定の時点から開始して、サーバにあるデータアイテムセットを同期させることに重点を置いている。したがって、次のＢＳＴ８１４は、通常、同期済みの前に送信された次のＢＳＴ８１４よりも優先度が低い。しかし、サーバから長時間切断されていた後に同期が再開する場合はこれは当てはまらず、次のＢＳＴ８１４は再接続時に優先度が最も高いデータとなる。これは、該次のＢＳＴ８１４は、同期が開始する特定の一意の時点において優先度が最も高いデータアイテムを表すからである。したがって、主同期ハンドシェイクは中断されることなく繰り返される限り、逆方向同期は１つの方向で進み、また、新しい開始点を表す次のＢＳＴ８１４のそれぞれは、それよりも前に送信されたすべての次のＢＳＴ８１４よりも優先度は低い。逆方向同期が一旦終了すると、クライアントとサーバが切断されてふたたび再接続される場合を除いて、逆方向同期は再開されることはない。他のアプリケーション固有データは、１つ以上のアプリケーションに固有の同期のための設定情報を含みうる。
【００７３】
[0097]  図８Ｂは、主同期リクエスト８１０に応えてサーバからクライアントに送信される主同期レスポンス８６０の図である。この主同期レスポンス８６０に含まれる情報には、新しい次のＢＳＴ８６１と、逆方向同期のためのアイテムリスト８６２と、次の最上位ＳＨＯ  ＩＤ８６３と、順方向同期のためのＳＨＯリスト８６８と、サーバによって処理された最後のＣＨＯ  ＩＤ８６５と、更なる未同期の変更があるか否かを示すインジケータ８６６と、他のアプリケーション固有データ８６７とが含まれうる。
【００７４】
[0098]  逆方向同期のためのアイテムリスト８６２は、現在の逆方向同期において同期のためにクライアントに送信された未同期サーバデータアイテムのリストを含む。このアイテムリストは、最高優先度から最低優先度の順にあり、また、データ同期にかかる時間を最小限にするよう最大数に制限されうる。幾つかの実施形態では、これらのアイテムは、サーバにおいて並べられかつ順序付けられ、他の実施形態では、これらのアイテムの順序付けは、アイテムがキューされクライアントに送信される際にリアルタイムで決定される。
【００７５】
[0099]  幾つかの実施形態では、新しい次のＢＳＴ８６１は、逆方向同期のためのリストアイテム８６２における最後のアイテムの後の、次の最高優先度を有する未同期データ、オブジェクト、アイテム、または変更を示す。リスト８６２における全データがサーバからクライアントに正常に同期されたと仮定すると、この新しい次のＢＳＴ８６１は次の逆方向同期の始まりを示す。この新しい次のＢＳＴ８６１は、次の逆方向同期のための次の未同期データ範囲の始まりを特定するために、クライアントがサーバに返信するための提案ＢＳＴである。長い切断の場合、現在の逆方向同期において全データが正常に同期されたと仮定すると、クライアントは、再接続された際にこの新しい次のＢＳＴ８６１を送信しうる。しかし、現在の逆方向同期が中断されて、全データが完全に同期されたわけではない場合、クライアントは、サーバが適切な開始点を決定する代わりに、クライアントによって正常に処理された（またはサーバに正常に同期された）最後のＢＳＴを、サーバに送信するオプションを有する。
【００７６】
[00100]  順方向同期のためのサーバ履歴オペレーション（ＳＨＯ）リスト８６８は、最後の同期以降にサーバデータに対して行われたオペレーションのリストである。このリストは、データに対して行われた変更およびオペレーションを表す。幾つかの実施形態では、これらの変更およびオペレーションは、クライアントに前に同期されたデータへの変更およびオペレーション、新しいデータの受信または作成、または、クライアントに同期されていないデータへの変更およびオペレーション等を示しうる。一実施形態では、これらの変更オペレーションは、データ自体からは別個に特定され、それにより、変更またはオペレーションだけがクライアントに、データとは独立して、同期されることが可能となる。別の実施形態では、変更およびオペレーションを含むデータが同期のために選択されうる。幾つかの実施形態では、このＳＨＯリストは、サーバにおいて並べられかつ順序付けられ、他の実施形態では、アイテムがキューされクライアントに送信される際にリアルタイムで決定される。
【００７７】
[00101]  順方向同期のための新しい最上位の同期済みＳＨＯ  ＩＤ８６３は、クライアントに同期されるデータ変更を表すＳＨＯ  ＩＤのリスト８６８がサーバからクライアントに正常に順方向同期されたと仮定すると、クライアントがサーバとの順方向同期が完了しているとみなす、グローバル履歴テーブルにおける最上位ＳＨＯ  ＩＤを表す。幾つかの実施形態では、この新しい最上位の同期済みＳＨＯ  ＩＤ８６３は、クライアントに実際に同期されたグローバル履歴テーブルにおけるデータ変更でありうる。他の実施形態では、この新しい最上位の同期済みＳＨＯ  ＩＤ８６３は、実際にはクライアントに同期されるデータ変更の範囲の終わりを示すに過ぎないグローバル履歴におけるデータ変更でありうるが、実際にはクライアントに順方向同期されない。
【００７８】
[00102]  この順方向同期の正常完了後、この新しい最上位ＳＨＯ  ＩＤ８６３は、クライアントからサーバに、主同期リクエストにおける処理済みの最上位ＳＨＯ  ＩＤ８１２として返信される。順方向同期が中断されて完了するまで行われなかった場合、クライアントは、次の順方向同期の適切な開始点の決定のために、正常に同期されているＳＨＯ  ＩＤリスト８６８における最上位ＳＨＯ  ＩＤを返信する。この機構の論理的根拠は、クライアントが、クライアントに無関係と既に決定されているオペレーションをリクエストすることを防止することにある。
【００７９】
[00103]  長い切断の場合、現在の順方向同期において全変更オペレーションが正常に同期されたと仮定すると、クライアントは、再接続された際にこの新しいＳＨＯ  ＩＤを送信しうる。順方向同期では、同期が最初に開始された後に変更したものが同期されることを理解すべきである。順方向同期は、逆方向同期のようには終了せず、また、順方向同期は、同期が開始された後に受信または作成されたデータまたは新しいデータへの変更を同期させる。
【００８０】
[00104]  本発明の１つの優れた態様は、逆方向同期と順方向同期とを同時に実施する能力である。この実施によって、データアイテムとデータアイテムへの変更とが、時間において遡ること（逆方向同期）および時間において進むこと（順方向同期）の両方において同時に同期されて、同期プロセスを迅速化し、また、優先度の高いあらゆるデータアイテムおよびデータアイテムへの変更を確実にタイムリーに同期させることが可能となる。
【００８１】
[00105]  サーバによって処理された最後のＣＨＯ  ＩＤ８６５は、サーバにおいて同期された最後のクライアントデータ変更のＣＨＯ  ＩＤである。受信すると、ＣＨＯ  ＩＤ８６５は、次のアップヒル同期を開始するためにクライアント履歴テーブルにおける次の最上位ＣＨＯ  ＩＤから開始するようにクライアントに通知する。別の実施形態では、上述したように、この次の最上位ＣＨＯ  ＩＤはサーバからクライアントに送信されるので、クライアントからの全データ変更がサーバに同期されている場合は、この次の最上位ＣＨＯ  ＩＤは代わりに直接送信されうる。同様に、クライアントデータ変更の最大数を用いて、クライアントからサーバに送信されるアイテム数を制限してデータ同期にかかる時間を最小限にしうる。
【００８２】
[00106]  インジケータ８６６がクライアントに送信されて、未同期でかつ現在の同期に含まれていないサーバにおけるデータ変更があるか否かが示される。幾つかの実施形態では、未同期アイテムが残っている場合、クライアントからの主同期リクエストから始められる主同期プロセスは再びすぐに繰り返される。同期のためのアイテムが残っていない場合、クライアントとサーバは共に次の主同期が発生するまでスタンバイモードに入る。
【００８３】
[00107]  他のアプリケーション固有データ８６７は、特定のアプリケーションにおける同期に用いられるデータを含みうる。
【００８４】
[00108]  図９Ａおよび図９Ｂは、サーバおよびクライアントにおける、様々なデータアイテムリストと、対応する履歴テーブルとの関係をそれぞれ示す図である。図９Ａは、サーバデータ９１０のリストと対応するグローバル履歴テーブル９２０の図である。サーバデータ９１０は、少なくともその一部が、特定のクライアントに記憶されたデータに対応するデータリストを表す。
【００８５】
[00109]  サーバデータリストにおける各データには、一意の識別情報（例えば逆方向同期トークン（ＢＳＴ））が関連付けられており、同じＢＳＴ  ＩＤを有するデータは２つとしてない。ＢＳＴは、一実施形態では日付／タイムスタンプと同じであってよいが、別の実施形態ではＢＳＴは別に定義されてもよい。図では、各ＢＳＴは、アルファベットによって特定され（例えば、アイテムａ、アイテムｂ等）、それぞれ、データを表す。データは、次に限定されないが、テキスト、メディア、グラフィックスを含む任意のアプリケーションに関連してよい。幾つかの実施形態では、電子メールメッセージ、連絡先情報、カレンダー情報等といった様々なタイプのデータを含む１つのデータリストがあってよい。他の実施形態では、１つの異なるタイプのデータをそれぞれ表す様々なリストがあってよい。一実施形態では、全データについて、データに対する全変更を記録する１つのグローバル履歴テーブルがある。他の実施形態では、互いに論理的に仕分けられる様々なデータのための様々なグローバル履歴テーブルがあってよい。換言すれば、１つのパーティションにおけるデータは同じグローバル履歴テーブルを有し、第２のパーティションにおけるデータは違うグローバル履歴テーブルを有することになる。幾つかの実施形態では、データは、データタイプに基づいて異なって仕分けられうる。
【００８６】
[00110]  サーバデータ９１０は、優先度、リーセンシー、関連性、またはカテゴリ等によって任意の順序に並べられうる。例えば、優先度による配列は、データアイテムは１つ以上に基準に基づいて順位付けされていることを意味する。一実施形態では、優先度による配列は、より最近のタイムスタンプを有するデータが古いタイムスタンプを有するデータよりも高く順位付けられるリーセンシーによる配列と似ている。例えば、より最近に受信または作成された電子メールメッセージは、古いメッセージよりも高い優先度を有する。関連性は、クライアントデバイスのユーザによってより望まれるアイテムを意味しうる。例えば、電子メールの文脈では、未読メッセージ、過去１週間内に受信したメッセージ、または、特定の話題に関するメッセージが他人よりもユーザにより関連がありうる。カテゴリは、同じアプリケーションに対してであろうと異なるアプリケーションに対してであろうと、次に限定されないが電子メール情報、カレンダー情報、連絡先情報等といったカテゴリを含む様々なデータグループが同期される前に順位付けられうることを意味する。
【００８７】
[00111]  グローバル履歴テーブル２９０は、サーバデータ９１０に対して行われたサーバ履歴オペレーション（ＳＨＯ）の履歴レコードに対応するエントリを含む。グローバル履歴テーブル９２０における各ＳＨＯは、一意の識別情報を有する。ＳＨＯ  ＩＤは、オペレーションの発生時刻に基づいて、または、特定のルールセットに従って割り当てられうる。データへの変更は、通常、同じデータへの連続した変更が適切に特定できるように時刻に対応する。順方向同期では、データへの変更を処理する様々な方法がある。幾つかの実施形態では、時間において前に進むデータへの変更は個別に処理される。この実施には、関連する全変更を、これらの変更が発生する最中に時系列に処理する必要がある。別の実施形態では、変更を有する全データアイテムのリストが維持され、これらのデータアイテムへの変更は、対応する変更を有するアイテムのリストをサーバから送信することによって、または、そのアイテムのリストへの変更のリストを送信することによって完全に置き換えられうる。アイテムのリストへの変更のリストが送信される場合、互いに関連する変更もそれらの変更が発生する最中に時系列に処理されるべきである。
【００８８】
[00112]  説明のために、グローバル履歴テーブル９２０におけるオペレーションとサーバデータ９１０との関係を、電子メールアプリケーションの文脈において説明する。例えば、ＳＨＯ９２１は、サーバ上の電子メールメッセージであるアイテムｄにラベルが追加されることを示す。同様に、ＳＨＯ９２２およびＳＨＯ９２８も、それぞれサーバ上の電子メールメッセージであるアイテムｆおよびｇにラベルが追加されたことを示す。ＳＨＯ９２３およびＳＨＯ９２７は、それぞれアイテムｊおよびｋによって表されるサーバ上の電子メールメッセージに星印が追加されたことを示す。さらに、ＳＨＯ９２５、９２６における新しいメッセージの受信、および、ＳＨＯ９２９におけるサーバでの招待の受信は、それぞれ、サーバ上の新しいアイテムｏ、ｐ、およびｑを指す。アイテムｍといったサーバ上のメッセージが編集されると、このメッセージへの変更は、ＳＨＯ９２４に記録される。オペレーションは、同期されている同期されていないに関わらず、全データに適用される。オペレーションは、データに対して行われたユーザ変更（例えば、ラベルを追加する、星印を追加する等）、または、固有のシステム変更（例えば、新しく受信した電子メール、アーカイブされた電子メールメッセージ、フィルタリングルール等）も表しうる。
【００８９】
[00113]  図９Ｂは、クライアントデータ９３０のリストとローカル／クライアント履歴テーブル９４０の図である。クライアントデータリスト９３０における各データは、一意の識別情報（例えばトークンＩＤ）を有する。説明のために、クライアントデータリスト９３０にある各アイテムには番号が付される（例えば、アイテム２０２０、アイテム２０２１等）。しかし、実際の実施では、クライアントデータ９３０は、対応するデータが同一であり（例えば、同じＢＳＴ  ＩＤ）かつ同じ情報を含む、サーバデータ９１０における少なくともサブセットのデータに対応する。同期されたクライアントデータ９３０は、全オペレーションを含めて、通常、サーバ上のデータと全く同じ複製である。クライアントのメモリ容量は、大抵の場合、サーバのメモリ容量ほど大きくはないので、クライアントデータ９３０のリストは、正常に同期された後は、サーバデータ９１０の一部と少なくとも同一である。
【００９０】
[00114]  一実施形態では、クライアントデバイスにおけるクライアントデータの順序付けは任意でどのような順序であってもよい。この実施形態は、クライアントデータがサーバに直接同期されるのではなく、データ変更または変更オペレーションがサーバに同期される場合である。変更オペレーションはデータよりも包括的である。これは、データ変更は、次に限定されないがデータに適用されるデータ作成、データ削除、データ修正等のオペレーションが含まれるからである。したがって、クライアントデータ９３０は、データ同期のために順序付けられなくてよく、また、優先度、リーセンシー、ラベル、関連性、または任意の他の設定可能なカテゴリに基づいて並べられてもよい。
【００９１】
[00115]  クライアント履歴テーブル９４０は、クライアントデータ９３０の少なくとも部分に対して行われたクライアント履歴オペレーション（ＣＨＯ）に関するレコードを維持する。クライアントにおけるＣＨＯは、サーバにおけるＳＨＯとは独立しており、ＣＨＯは、独立したオペレーションを示し、また、互いに直接的には同期されない。しかし、しかし、データへのＣＨＯおよびＳＨＯの効果は、ダウンヒルおよびアップヒル同期によって同期される。
【００９２】
[00116]  説明のために、クライアント履歴テーブル９４０におけるオペレーションとクライアントデータ９３０との関係を、電子メールアプリケーションの文脈において説明する。例えば、クライアント履歴テーブルにおけるＣＨＯ９４２はクライアントにおいて削除されたアイテム２００７を指し、ＣＨＯ９４３はアイテム２０１１に対応する、クライアントでの新しい招待の受信を表し、ＣＨＯ９４４はユーザによって星印が付けられたクライアントにおけるメッセージまたはアイテム２０１８を表し、ＣＨＯ９４５および９４８を介してラベルがクライアントにおけるアイテム２０１７および２０１６にそれぞれ追加され、ＣＨＯ９４６および９４７は、クライアントにおけるアイテム２０２０および２０２１として、新しいメッセージの受信をそれぞれ指す。
【００９３】
[00117]  サーバおよびクライアントの両方での、データの一意の識別情報およびデータ変更またはオペレーションの順序付けは、同期のために重要である。識別情報および順序付けは、データ同期が停止しかつデータ同期が再開されるべき特定の範囲を区別するために重要である。例えば、サーバデータ９１０は、高い優先度を有するデータ（例えばアイテムｓ、ｒ、ｑ）が低い優先度のデータ（例えばアイテムｎ、ｏ、ｐ）よりも先に列挙される優先度の順で並べられる。同様に、グローバル履歴テーブル９２０におけるＳＨＯおよびクライアント履歴テーブル９４０におけるＣＨＯは共に、各オペレーションが行われた時刻の時系列で、後のオペレーションが先のオペレーションより優先されて並べられる。識別情報および順序は、データ同期が停止しかつ再開されるときはいつでも同期のために次の未同期情報範囲を特定するために重要である。
【００９４】
[00118]  図９Ｃは、サーバとクライアント間で同期可能な例示的なデータを示す。図９Ｃに示すデータ９５１は、メタデータ９６０とコンテンツ９６４とを有する。メタデータ９６０は、次に限定されないが一意の識別子９６１と、データタイプ情報９６２と、他の形態の識別情報９６３とを含む。説明のために、データ９５１は、電子メールメッセージ、電子メール会話、連絡先、カレンダーエントリ、またはＪＰＧファイル、ＴＩＦＦファイル、テキストファイル等といった任意の他のデータオブジェクトまたはデータファイルであってよい。一実施形態では、一意の識別子９６１は、データが作成または修正されたときのタイムスタンプ、または、図９Ａおよび図９Ｂにおいて記載されたようにＢＳＴ  ＩＤと同じであってもよい。
【００９５】
[00119]  データはさらに、そのデータタイプ識別情報９６２に基づいてカテゴリ化され、データ同期のプロセスにおいて優先順位が決められるまたは順序付けられる。例えば、データは、連絡先エントリ、メッセージ、カレンダーエントリ、ドキュメント、テキストファイル、イメージファイル等として分類されうる。同様に、ラベル、属性、フラグ等といった他の識別情報９６３もデータ同期において優先順位を決めるまたは順序付けるための追加の条件として用いられうる。例示説明のために、電子メールの文脈において、ラベルは、システムまたはユーザによって割り当てられ、また、次に限定されないが、全未読メッセージ、ゴミ箱、送信メッセージ、または、仕事、レジャー、スポーツ等といった他のユーザ定義のカテゴリを含みうる。
【００９６】
[00120]  コンテンツ９６４は、データの残りの部分を形成し、電子メールの場合、コンテンツはメッセージの本文であってよい。連絡先の場合、コンテンツは名前、電話番号、住所、電子メールアドレス等の連絡先における様々なフィールドを含みうる。カレンダーエントリの場合、コンテンツは予約時間、予約件名、および当該予約に関連付けられた任意の情報を含みうる。
【００９７】
[00121]  上述したように、データ同期は、幾つかの実施形態では、３つの異なるプロセスとして説明されうる。各プロセスは別個で互いに独立して動作する。１つの好適な実施形態では、これらのプロセスは、データ同期の速度を増加すべく同時に動作する。他の実施形態では、各プロセスは、一度に１つが、一度に２つが、必要に応じて任意の並びで、優先度の順にまたは任意の適切な設定で別個のアクティブにされうる。これらのプロセスのそれぞれを以下に別個に説明するが、これらの３つを全て組み合わせて、図７および図８における同期開始および主同期ハンドシェイクの文脈において記載されるように一緒に適用可能であることを理解すべきである。
【００９８】
[00122]  順方向および逆方向同期の両方を組み込むダウンヒル同期は、図１０Ａ〜図１０Ｆに記載される。逆方向同期の個別のプロセスは、図１１Ａ〜図１１Ｃに記載され、順方向同期の個別のプロセスは、図１２Ａ〜図１２Ｃに記載される。アップヒル同期は、図１３および図１４に記載される。例示説明のために、同期プロセスは、電子メールアプリケーションの文脈において説明されるが、他のアプリケーションにも同様に適用可能でありうることを理解すべきである。
【００９９】
[00123]  図１０Ａ〜図１０Ｂ、図１０Ｗ、および図１０Ｘは、サーバとクライアントとの間のダウンヒル同期の開始を記載する。図１０Ａは、長時間の切断後またはサーバとクライアントとの間で同期が行われたことがない場合に、データ同期が再開する前の状態にあるサーバデータ１０１０Ａのリストとグローバル履歴テーブル１０１０Ｂを示す。点線は、同期開始の始まりにおけるまたは最後の主同期が発生した後の状態を表す。本図では、主同期とは、逆方向および順方向同期が共に行われ、データがサーバからクライアントに同期される場合である。他の実施形態では、主同期は、アップヒル同期の同時のオペレーションも含みうる。
【０１００】
[00124]  サーバデータ１０１０Ａのリストにおける各アイテムは、一意の逆方向同期トークン（ＢＳＴ）を有する。一実施形態では、サーバデータ１０１０Ａのリストは、最高優先度が最上位で（例えばＢＳＴｎ）、最低優先度が最下位（例えばＢＳＴａ）にくる優先度の順で並べられる。データを優先度に仕分けることは、データ同期の開始より先にまたはデータ同期時に行われうる。データは高い優先度から低い優先度の順で同期されて送信される。一実施形態では、優先度の順でのデータの逆方向同期は、開始時点において同期されていなかった全データが正常に同期されるまで１つの方向に進む。本実施形態における逆方向同期は、アプリケーションが終了するまたは長い切断があった場合を除いて、同期点後に追加された同期済みデータには戻らない。本実施形態では、逆方向同期は、データに対して行われた変更オペレーションは同期させない。さらに、逆方向同期の優先度の順序は、関連性、リーセンシー、または他の基準に基づいて並べられうる。
【０１０１】
[00125]  グローバル履歴テーブル１０１０Ｂにおける各データ変更オペレーションは、一意の識別情報（ＳＨＯ  ＩＤ）を有する。幾つかの実施形態では、グローバル履歴テーブル１０１０ＢにおけるＳＨＯは、各ＳＨＯが発生した時刻に応じて時系列に並べられ、したがって、古いオペレーションは最下位に登場し、新しいオペレーションは最上位に登場する。図では、最も古いオペレーションはＳＨＯ１で、最も新しいオペレーションはＳＨＯ１８である。一実施形態では、ＳＨＯによって表されるこれらの変更オペレーションは、グローバル履歴テーブル１０１０Ｂにおいて並べられた順序と同じ順序で順方向同期される。
【０１０２】
[00126]  説明のために、一実施形態では、データ同期（例えば主同期）時に、逆方向同期および順方向同期が共に同時に発生する。今までにデータ同期されたことがなければ、逆方向同期は最高優先度のＢＳＴ（例えばＢＳＴｎ）から開始し、最低優先度（例えばＢＳＴａ）に進み、順方向同期はＳＨＯ１から開始し時系列でＳＨＯ２、…、ＳＨＯ１８に進む。幾つかの実施形態では、最大数のデータおよびＳＨＯが毎回送信される。
【０１０３】
[00127]  図１０Ｗは、データ同期を開始するための同期開始ハンドシェイク時のサーバとクライアント間のハンドシェイクを示す。アップヒル同期に関する情報の部分を除いた図７Ａ、図７Ｂにおける記載と同様である。最初の同期開始ハンドシェイクでは、クライアントは、図１０Ｗのリクエスト１０４７内のクライアントＩＤしか送信しない。サーバは、最上位ＢＳＴ（例えばＢＳＴｎ）とグローバル履歴テーブルにおける最上位ＳＨＯ（例えばＳＨＯ１８）とを含むレスポンス１０４８によって応答する。図１０Ｘによって示すように後続の主同期ハンドシェイクでは、クライアントリクエスト１０５１は、クライアントＩＤと、同期開始レスポンス１０４８から受信したサーバにおける最上位ＢＳＴ（例えばＢＳＴｎ）および最上位ＳＨＯ（例えばＳＨＯ１８）とを含む。サーバは、逆方向同期のためのアイテムＢＳＴｎ、ｍ、ｌ、ｋを含むが、順方向同期のためのアイテムは含まないレスポンス１０５２によって応答する。両方の同期において戻されるアイテム数も、同じまたは異なる所定の最大数によって制限されうる。レスポンス１０５２はさらに、次の主同期のための、新しい次のＢＳＴ（例えばＢＳＴ  Ｊ）と最上位の処理済みＳＨＯ  ＩＤ（例えば、ＳＨＯ１８）とを含む。
【０１０４】
[00128]  図１０Ｂは、最初の主同期後のサーバにおけるデータおよびグローバル履歴テーブルの状態を示す。サーバＢＳＴｎ、ｍ、ｌ、ｋ、変更オペレーションＳＨＯ１８およびＳＨＯ１８より先の他の変更オペレーションは網掛けされ、これらはクライアントにもはや同期される必要がないことを示す。幾つかの実施形態では、サーバは、全データ同期のレコードを維持する。このレコードは、サーバデータリストおよびグローバル履歴テーブルの一部として維持されても、別個に記憶されてもよい。クライアントと正常に同期された、サーバにおけるデータの範囲とサーバにおける変更オペレーションの範囲とを追跡することによって、これらの同じデータ範囲と変更オペレーション範囲は、将来のデータ同期において遭遇した場合に省略される。全データは、ユーザによって削除されるまで記憶されるが、一実施形態では、グローバル履歴テーブルにおける１アイテムは、既存の全クライアントに同期された後に削除されうる。これらの同期済みＳＨＯのオペレーションは、クライアントのローカルデータに組み込まれ、したがって、将来の同期には不要となる。
【０１０５】
[00129]  図１０Ｃ〜図１０Ｄ、図１０Ｙは、クライアントとサーバ間に長い切断がない通常の動作条件下での主同期の概念を説明する図である。幾つかの実施形態では、アプリケーションまたはクライアントとサーバ間の接続がアクティブである限り、主同期は定期的にかつ無期限に継続する。
【０１０６】
[00130]  図１０Ｃは、新しいデータおよび新しい変更オペレーションが最初の主同期後に追加された（点線で示す）、図１０Ｂと同じ、サーバにおけるデータおよびデータ変更オペレーションの状態を示す。例えばＢＳＴｏおよびＢＳＴｐに対応する新しいメッセージが、ＢＳＴｆに関連付けられたメッセージがＳＨＯ２０によって修正される間にサーバに到着する。新しいメッセージＢＳＴｏおよびＢＳＴｐの到着は、グローバル履歴テーブルにおいてそれぞれＳＨＯ１９およびＳＨＯ２１として反映される。同期されているまたはされていないに関わらず、データの追加、削除、および任意のデータの修正方法を表す変更オペレーションの包括性を理解すべきである。換言すれば、グローバル履歴テーブルにおけるデータオペレーションは、サーバデータリストにおける各データの各特徴に対応する。
【０１０７】
[00131]  図１０Ｙに示す第２の主同期プロセスでは、クライアントは、次のＢＳＴ（例えばＢＳＴｊ）とクライアントによって処理された最上位の同期済みＳＨＯ（例えばＳＨＯ１８）とを有するリクエスト１０５３を、サーバに送信する。クライアントリクエスト１０５３に応えて、サーバは、逆方向および順方向同期プロセスにおいてそれぞれサーバデータ（例えばＢＳＴｊ、ｉ、ｈ）およびＳＨＯ（例えばＳＨＯ１９、２０、１１）の次のセットを含む通信１０５４を、クライアントに送信する。さらに、この通信は、サーバ上に未同期データおよび変更オペレーションがあるか否かを示す指示を含み、本実施例におけるように未同期データおよび変更オペレーション（例えばＢＳＴｇおよびＳＨＯ２１）がある場合は、これらもクライアントに送信される。
【０１０８】
[00132]  図１０Ｄは、第２の主同期後の、サーバにおけるデータ１０１０Ａおよびグローバル履歴テーブル１０１０Ｂの状態の図である。同期済みデータ（例えばＢＳＴｈ〜ｐ）と同期済みＳＨＯ（例えばＳＨＯ１８〜２１）のすべては網掛けされる。上述したように、幾つかの実施形態では、同期済みＳＨＯは、データ同期後すぐにまたは所定時刻にグローバル履歴テーブルから削除されてもよい。
【０１０９】
[00133]  図１０Ｅ〜図１０Ｆ、図１０Ｚは、サーバとクライアント間の長い切断後のデータ同期を説明する図である。図１０Ｅは、最後の（例えば第２の）主同期以後にサーバに追加された新しいアイテム（例えばＢＳＴｑ、ｒ）および新しいオペレーション（例えばＳＨＯ２２〜２９）を示し、これは点線で示す。新しいＳＨＯは、古いが未同期のメッセージに対して行われたデータオペレーション（例えばＢＳＴｃに対するオペレーションのためのＳＨＯ２２）と、サーバのリストへの新しいアイテムの追加（例えばＢＳＴｑ、ｒの追加に対応するＳＨＯ２３、２４）と、前に同期されたデータの修正（例えばＢＳＴｌに対するオペレーションのためのＳＨＯ２５）と、未同期データの修正（例えばＢＳＴｕに対するオペレーションのためのＳＨＯ２９）とを含む。
【０１１０】
[00134]  図１０Ｅからは、データ同期を始めるための、サーバに対するクライアントによる同期開始の発生が省略される。幾つかの実施形態では、同期開始は、クライアントＩＤと、当該領域の開始点（例えばＢＳＴｐ）および当該領域の終了点（例えばＢＳＴｈ）によって表される最後に逆方向同期された領域（例えばＢＳＴｐ〜ｈ）とを含むクライアントおよびサーバのオプションのプロセスであってよい。それに応えて、サーバは、サーバからの、最上位ＢＳＴ（例えばＢＳＴｖ）と最上位ＳＨＯ（例えばＳＨＯ２９）とを含む通信によって応答する。
【０１１１】
[00135]  したがって、同期開始に応えて、図１０Ｚに示すように主同期、すなわち、主同期ハンドシェイクが行われる。同期開始後、クライアントは、主同期リクエスト１０５５においてサーバに送信する情報を選択する。主同期は、次の最上位ＢＳＴ（例えばＢＳＴｒ）と最上位の同期済みＳＨＯ（例えばＳＨＯ２１）とを含む。主同期リクエスト１０５５に応えて、サーバは、主同期レスポンス１０５６を介して、アイテムＢＳＴｒ、ｑ、ｇ、ｆを、最後に同期された領域ＢＳＴｐ〜ｈは省略して高い優先度から低い優先度で逆方向同期において、また、ＳＨＯ２２、２３、２４に対応するデータへの時系列変更を、順方向同期において返信する。
【０１１２】
[00136]  幾つかの実施形態では、逆方向および順方向同期プロセスは、効率を維持するために同じデータおよび／または変更オペレーションを２回同期しないことを確実にするために互いのプロセスについて十分な情報を共有する。一実施形態では、このインテリジェンスは、データに対して行われたオペレーションとデータとは別個に区別されることによって可能にされる。例えばアイテム（例えば電子メールメッセージ）がサーバにおけるデータリストに追加されると、対応する追加オペレーションがグローバル履歴テーブルに記録される。同様に、ラベルが追加されるといったように同じ電子メールメッセージが修正されると、ラベルの追加が別個のデータオペレーションとしてグローバル履歴テーブルに登録される。
【０１１３】
[00137]  データおよび変更オペレーションの別個の同期の概念は、少なくとも３つの異なるシナリオによって説明されうる。第一に、電子メールメッセージが、ユーザがラベルを追加した前にまず逆方向同期によって以前に同期されている場合、順方向同期は、メッセージ追加オペレーションは省略するが、ラベル追加オペレーションは同期させる。第二に、電子メールメッセージが前に同期されていない場合、逆方向同期が修正されかつ未同期の電子メールメッセージに到達すると、修正とメッセージ自体の両方が逆方向同期によって同期され、順方向同期はメッセージ追加およびラベル追加オペレーションの両方を省略する。第三に、電子メールメッセージが同期されておらず、データの逆方向同期の前に順方向同期においてメッセージ追加オペレーションに到達すると、未同期および未修正のメッセージがメッセージ追加オペレーションによってまず同期され、データの逆方向同期が省略される。ラベル追加オペレーションは、それがメッセージ追加オペレーションの直後であろうとメッセージ追加オペレーション後にどれだけ時間が経過していようとも、それが発生したときに応じて追加される。
【０１１４】
[00138]  順方向および逆方向同期の同時オペレーションは、高速かつ効率的なデータ同期を確実なものとする。順方向同期は、サーバデータに対して行われた各変更オペレーションが記録されることを可能にする。順方向同期は、サーバにおけるデータに対して行われたデータオペレーションのあらゆる特徴を包括的にカバーすることに重点を置いている。逆方向同期は、サーバにおけるデータを優先度の順に同期させることに関連し、したがって、高い優先度を有するデータは低い優先度を有するデータよりも先にクライアントに同期されることが可能である。逆方向同期は、クライアントデバイスのユーザに最も重要でありうる最高優先度を有する情報を同期させることを目指す一方で、順方向同期は、データに対するオペレーションが同期から確実に取り残されないようにする。これら２つのプロセスは同時に発生し、他方の同期プロセスに関する情報を共有するので、１つのプロセスによって同期されたデータは、もう１つのプロセスによっては同期化されず、各プロセスが他方のプロセスを支援して全データ同期プロセスをより高速かつ効率的にすることを可能にする。さらに、重複するデータおよび変更オペレーションは、１つのオペレーションによって処理され、もう１つのオペレーションによって省略されるので、サーバとクライアント間に長い切断がない限り、逆方向同期完了後短い期間内で、順方向同期が時系列でサーバデータに対する残りの全ての変更オペレーションを同期させる。長い切断がある場合、逆方向同期が行われ、未同期の優先度が高いデータを同期させることを支援し、順方向同期がプロセスにおいて追いつくことを支援する。優先度の高いサーバデータ変更を、このように逆方向同期を介してクライアントに同期させることによって、クライアントが逆方向同期が完了する前にオフラインになってもクライアントのユーザは、様々な実施形態においてどのように優先度が定義されようとも、最高優先度を有するデータがオフラインで使用するために利用可能となる。
【０１１５】
[00139]  順方向および逆方向同期スキームをより理解するために、各同期プロセスを個別に説明する。図１１Ａは、クライアントとサーバ間の例示的な順方向同期インタラクションスキームを説明する。幾つかの実施形態では、アプリケーションが起動される場合またはアプリケーションはアクティブあったが長時間の切断（特定の数分および数時間と予め決められる）がある場合に、同期開始ハンドシェイクによって同期が開始される。
【０１１６】
[00140]  同期開始は、同期のための始点としての役割を果たす。同期開始は同期プロセスを始めるためだけに必要であるが、本実施形態では、同期開始は長い切断の後にも用いられる。上述したように、クライアントは、サーバに対してクライアントを特定するためのクライアントＩＤを含む同期開始リクエスト１１０１をサーバに送信し、順方向同期では、前に同期された範囲におけるアイテムは不要である。サーバは、次の最上位のサーバ履歴オペレーション識別情報（ＳＨＯ  ＩＤ）を含む同期開始レスポンス１１０２によって、クライアントに応答する。このＳＨＯ  ＩＤは、サーバにおけるデータに対して行われた直近のオペレーションを表す。クライアントは、受信したばかりのＳＨＯ  ＩＤかまたは同期開始前にクライアントにある別のＳＨＯ  ＩＤか、どのＳＨＯ  ＩＤをサーバに返信するかを決定する。長い切断の場合、クライアントは、前の順方向同期からもたらされたクライアントにあるＳＨＯ  ＩＤを送信する。
【０１１７】
[00141]  主同期ハンドシェイクは、同期開始ハンドシェイクに続いて発生する。幾つかの実施形態では、主同期は、クライアントからサーバに送信された主同期リクエストによって開始される。他の実施形態では、主同期は、サーバからのリクエストによって、または、全くリクエストがなくても開始されうる。図１１Ａでは、クライアントは、クライアントＩＤと、サーバからクライアントに最大数の「ｘ」個のアイテムを同期させるために、サーバグローバル履歴における開始点を特定する最上位の同期済みＳＨＯ  ＩＤとを含む主同期リクエスト１を送信する（１１０３）。サーバは、主同期リクエスト１（１１０３）におけるＳＨＯ  ＩＤから始まるグローバル履歴テーブルからの最大で「ｘ」個のオペレーションと、新しい最上位の同期済みＳＨＯ  ＩＤと、更なるサーバ変更が残っているかどうかについてのインジケータとを含む主同期レスポンス１によって応答する（１１０４）。別の実施形態では、サーバは十分な情報を維持して、クライアントによって処理済みと既に確認されている変更を送信しないようにしうる。
【０１１８】
[00142]  クライアントとサーバ間に長い切断がない通常の動作条件下では、主同期は、未同期のデータまたは変更オペレーションが残っている限りすぐに繰り返される。これには、前の主同期レスポンス（例えば主同期レスポンス１（１１０４））においてサーバから受信した、次の最上位の同期済みＳＨＯ  ＩＤと、クライアントＩＤと、サーバからの送信のためのアイテムの最大数「ｘ」とを含む主同期リクエスト２をクライアントからサーバに送信すること（１１０５）が含まれる。サーバは、サーバからの「ｘ」個またはそれ以下のオペレーションと、サーバに追加の未同期のオペレーションが残っているかどうかについてのインジケータと、残っている場合にはグローバル履歴テーブルにおける次の未同期オペレーションのＳＨＯ  ＩＤとを含む主同期レスポンス２によって応答する（１１０６）。
【０１１９】
[00143]  主同期リクエストおよびレスポンスハンドシェイクは、サーバに未同期オペレーションがある限り、または、サーバとクライアント間にアクティブな接続がある限り無期限に継続する。サーバに未同期変更オペレーションがなくなると、主同期ハンドシェイクの頻度は少なくされうる。アクティブ同期モードにない場合、クライアントおよびサーバはスタンバイモードに入る（１１０７）。接続中断が所定の時間を超えて続かない限り、主同期ハンドシェイクは、次に限定されないが、固定の間隔またはサーバ上のアクティビティ等を含む多数の所定の基準の１つに基づいて繰り返される（１１０８）。
【０１２０】
[00144]  図１１Ｂは、クライアントにおける例示的な順方向同期方法を説明するフローチャートである。幾つかの実施形態では、クライアントは、クライアントＩＤを有する同期開始リクエストをサーバに送信することによってデータ同期を始める（１１２０）。これに応じて、クライアントは、サーバにおける最上位ＳＨＯ  ＩＤを含む同期開始レスポンスをサーバから受信する（１１２１）。クライアントは、順方向同期を開始するために、前の主同期からのクライアントにあるＳＨＯ  ＩＤかまたはサーバから受信したばかりのＳＨＯ  ＩＤか、どのＳＨＯ  ＩＤをサーバに送信するのかを決定する。クライアントは、クライアントＩＤと、同期オペレーションのためのグローバル履歴テーブルにおける開始点を設定するための、サーバに対する選択されたＳＨＯ  ＩＤと、サーバから送信される「ｘ」個のオペレーションの限度とを含む主同期リクエストを送信する（１１２２）。クライアントは次に、クライアントと以前に同期されていない最大で「ｘ」個のオペレーションと、残っている未同期アイテムについての指示と、次の最上位の未同期ＳＨＯ  ＩＤとを含む主同期レスポンスを、サーバから受信する（１１２３）。主同期レスポンスに基づいて、クライアントは、ステップ１１２４において、未同期アイテムが残っているかどうかを判断する。未同期オペレーションがある場合、クライアントは、ステップ１１２２に示すように別の主同期リクエストを開始する。未同期オペレーションがない場合、クライアントは、ステップ１１２５において、所定の基準によって決定されるように、次の主同期がアクティブにされるまでアイドル状態となる。ステップ１１２６に示されるように、最後の主同期から長い切断がある場合、クライアントは、ステップ１１２０におけるように、同期開始を再び始める。長い切断がない場合、クライアントは、所定の基準に応じて新しい主同期リクエストを始める。
【０１２１】
[00145]  図１１Ｃは、サーバにおける例示的な順方向同期方法を説明するフローチャートである。サーバは、ステップ１１３１において、クライアントＩＤを有する同期開始リクエストをクライアントから受信する。次に、サーバは、ステップ１１３２において、サーバにおけるグローバル履歴テーブル内の最新のＳＨＯ  ＩＤを含む同期開始レスポンスをクライアントに送信する。主同期の始まりにおいて、また、ステップ１１３３において、サーバは、順方向同期の開始点を設定するＳＨＯ  ＩＤと、サーバから送信する最大で「ｘ」個のオペレーションとを有する主同期リクエストを、クライアントから受信する。ステップ１１３４において、サーバは、最後の同期から同期されていない最大で「ｘ」個のオペレーションと、残っている未同期アイテムの指示と、残っている場合は、グローバル履歴テーブルにおける次の未同期ＳＨＯ  ＩＤとを含む主同期レスポンスを、クライアントに送信する。ステップ１１３５において、サーバは、クライアントからの次の主同期リクエストまで待機しかつアイドル状態となる。ステップ１１３６において、クライアントからの主同期リクエストが、所定の継続時間内といった所定条件に合えば、サーバは、ステップ１１３３にあるように、クライアントからの主同期リクエストを受信する。所定条件に合わなければ、ステップ１１３１にあるように、クライアントからの同期開始リクエストを受信する。
【０１２２】
[00146]  図１２Ａは、逆方向同期時のサーバとクライアント間の例示的なインタラクションスキームを説明する図である。幾つかの実施形態では、上述したように、同期開始が、サーバデータ同期プロセスを始めるか、または、長時間にわたってクライアントがサーバから切断されていた後にサーバデータ同期を再開する。クライアントＩＤと、クライアントによって処理された最後の逆方向同期済みデータ範囲とを含む同期開始リクエストが、クライアントからサーバに送信される（１２０１）。サーバは、最上位の逆方向同期トークン（ＢＳＴ）を含む同期開始レスポンスによって応答する（１２０２）。クライアントは、次に、クライアントＩＤと、同期開始レスポンスにおいて受信した最上位ＢＳＴと、同期のための最大数の「ｙ」個のデータアイテムとを含む主同期リクエスト１を、サーバに送信する（１２０３）。これに応じて、クライアントは、高い優先度から低い優先度の順にある最大で「ｙ」個のサーバデータアイテムと、残っている未同期データの指示と、残っている場合には新しい次のＢＳＴとを含む主同期レスポンス１を、サーバから受信する（１２０４）。
【０１２３】
[00147]  サーバとクライアント間のネットワーク接続がアクティブ状態のままであるならば、主同期ハンドシェイクは繰り返される。主同期リクエスト２（１２０５）において、クライアントは、次の未同期サーバデータの範囲を特定する、主同期レスポンス１（１２０３）から受信した次の最上位ＢＳＴと、クライアントＩＤと、最大数の「ｙ」個の未同期サーバデータとを送信する（１２０５）。クライアントは、次に、優先度の順に並べられた最大で「ｙ」個の未同期サーバデータと、残っている未同期データの指示と、残っている場合には、次の最上位の未同期ＢＳＴとを含む主同期レスポンス２を、サーバから受信する（１２０６）。主同期リクエストおよびレスポンスは、逆方向同期のためのデータがなくなるまで継続され、クライアントは、スタンバイモードに入る（１２０７）。主同期プロセスは、固定の間隔といった所定条件が満たされると、繰り返される。
【０１２４】
[00148]  図１２Ｂは、クライアントにおける例示的な逆方向同期方法を説明するフローチャートである。ステップ１２２１において、クライアントは、クライアントＩＤと、未同期領域の開始点と終了点を伝える最初のＢＳＴおよび最後のＢＳＴを有する、クライアントによって処理された最後の同期済み領域とを含む同期開始リクエストを、サーバに送信する。最後の同期済み領域は、リクエストが最初の同期開始である場合は空となる。ステップ１２２２において、クライアントは、最高優先度を有する未同期サーバデータに対応する最上位ＢＳＴを含む同期開始レスポンスを、サーバから受信する。ステップ１２２３において、クライアントは、クライアントＩＤと、同期開始レスポンスにおいて受信した最上位ＢＳＴと、逆方向同期のための最大数の「ｙ」個の未同期サーバデータとを含む主同期リクエストを送信する。ステップ１２２４において、クライアントは、優先度順にある最大数の「ｙ」個の未同期サーバデータと、残っている未同期データアイテムのインジケータと、残っている場合には次の最上位の未同期ＢＳＴとを含む主同期レスポンスを、サーバから受信する。クライアントは次に、ステップ１２２５において、未同期サーバデータが残っているかどうかを判断する。残っている場合、クライアントは、ステップ１２２３にあるように、主同期リクエストを継続する。残っていない場合、クライアントは、所定条件によって決定されるように、次の主同期が発生するまでアイドル状態となる（１２２６）。ステップ１２２７において、クライアントは、最後の主同期から長い切断があるかどうかを判断する。ある場合、クライアントは、ステップ１２２１にあるように、データ同期を再び始めるように同期開始に戻る。ない場合、クライアントは、ステップ１２２３にあるように、主同期を繰り返す。
【０１２５】
[00149]  図１２Ｃは、サーバにおける例示的な逆方向同期方法を説明するフローチャートである。ステップ１２５１において、サーバは、クライアントＩＤと、クライアントによって処理された最後の同期済みデータ領域とを含む同期開始リクエストを、クライアントから受信する。同期済みデータ領域は、そのデータ領域における最初のＢＳＴおよび最後のＢＳＴによって示される。同期済みデータ領域は、リクエストがクライアントの最初の同期開始リクエストである場合は空となる。ステップ１２５２において、サーバにおける最上位ＢＳＴを含む同期開始レスポンスが、クライアントに送信される。ステップ１２５３において、サーバは、クライアントＩＤと、逆方向同期を設定するための最上位ＢＳＴと、サーバからの逆方向同期のための最大数の「ｙ」個のアイテムとを含む主同期リクエストを、クライアントから受信する。ステップ１２５４において、サーバは、優先度の順にある最大で「ｙ」個の未同期データアイテムと、残っている未同期データの指示と、残っている場合には次の未同期データのＢＳＴとを含む主同期レスポンスを、クライアントに送信する。ステップ１２５５において、サーバは、所定条件によって決定されるように次の主同期までアイドル状態となる。ステップ１２５６において、所定の継続時間内にクライアントから主同期リクエストがある場合、サーバは、ステップ１２５３にあるようにクライアントから主同期リクエストを受信する。長時間の切断があった場合、サーバは、ステップ１２５１にあるようにクライアントから同期開始リクエストを受信する。
【０１２６】
[00150]  図１３Ａ〜図１３Ｄ、および図１３Ｘ〜図１３Ｚは、クライアントとサーバ間のアップヒル同期を説明する図である。図１３Ａは、クライアントデータ１３１０Ａのリストと、クライアント履歴テーブル１３１０Ｂを示す。クライアント履歴における各エントリは、クライアントにおけるデータに対して行われたオペレーションを表すクライアント履歴オペレーション（ＣＨＯ）である。幾つかの実施形態では、各ＣＨＯは、クライアントにおけるデータに適用された作成、修正、または削除オペレーションを含むが、サーバからの新しいデータの追加は含まない。一実施形態では、クライアントデータは、サーバにおける全データのサブセットを含む。したがって、サーバは全データの完全なレコードを維持し、クライアントデータはデータの完全セットの一部を含む。他の実施形態では、クライアントにおけるデータセットは、サーバにおけるセットと同じである。
【０１２７】
[00151]  クライアントがサーバに同期したことがない場合、クライアントが長時間サーバから切断されていた場合、または、データを用いるアプリケーションが終了され再度アクティブにされた場合、全同期プロセスを始めるために同期開始ハンドシェイクが用いられる。クライアントがサーバに同期したことがない場合、サーバに同期されるＣＨＯはない。したがって、開始後、クライアントからサーバに送信されるデータ変更はない。クライアントが長期間サーバから切断されていた場合、最後の同期からクライアントにおいてデータ変更が発生したことが考えられる。あるいは、最後の同期が中断されたまたは中断前の最後の同期において全データ変更が同期されたわけではない場合、クライアントには、未同期データ変更が残ったままでありうる。
【０１２８】
[00152]  図１３Ａは、クライアントとサーバ間に長い切断があり、一連のデータ変更オペレーションＣＨＯ２５〜２９がサーバに同期されていない例を示す。点線は、開始時点のデータおよびクライアント履歴テーブルの状態を表す。図は、ＣＨＯ２５はクライアントアイテムｇｇにおけるデータ変更を表し、ＣＨＯ２６はクライアントアイテムｋｋにおけるデータ変更を表し、ＣＨＯ２７はクライアントアイテムｉｉにおけるデータ変更を表し、ＣＨＯ２８はアイテムｏｏにおけるデータ変更を表し、ＣＨＯ２９はクライアントアイテムｐｐにおけるデータ変更を表すことを示す。例示説明のために、各クライアントアイテムは電子メールアプリケーションにおけるメッセージだとすると、各データ変更は、次に限定されないが、クライアントにおける、ラベルの追加、メッセージに星印を付けること、メッセージの削除、メッセージの作成等を含むメッセージに対するオペレーションを表しうる。
【０１２９】
[00153]  図１３Ｘは、同期プロセスを始めるためのクライアントとサーバ間の同期開始ハンドシェイクを説明する図である。クライアントは、サーバに対してクライアントを特定するためのクライアントＩＤを含む同期開始リクエスト１３５１を送信する。サーバは、データ同期の開始点として、（最後のデータ同期において）サーバによって最後に処理された最後のＣＨＯ  ＩＤ（例えばＣＨＯ２４）を含む同期開始レスポンス１３５２によって、クライアントに応答する。幾つかの実施形態では、データ変更は、上述したように、順方向同期と同様に時系列に並べられる。クライアント履歴テーブルの最上位にある新しいアイテムは、高いＣＨＯ  ＩＤ（例えばＣＨＯ２９）を有する一方で、古いアイテムは最下位にあり、低いＣＨＯ  ＩＤ（例えばＣＨＯ２６）を有する。一実施形態では、ＣＨＯ  ＩＤは、データオペレーションが発生した時刻に関連付けられる。
【０１３０】
[00154]  図１３Ｙは、データ同期プロセスにおけるクライアントとサーバ間の主同期ハンドシェイクを説明する図である。同期開始レスポンス１３５２においてＣＨＯ  ＩＤがサーバによって提供されているので、クライアントは、ＣＨＯ２５〜２８によって表されるアイテムｇｇ、ｉｉ、ｋｋ、ｏｏに対応するサーバデータ変更を含む主同期リクエスト１３５３を送信する。幾つかの実施形態では、データ変更はデータから切り離される。これは、データ変更は、データ全体ではなくてデータへの変更オペレーションとして送信されることを意味する。例えば星印がメッセージに追加された場合、または、連絡先の電話番号が変更された場合、または、２つの新しいラベルがメッセージに追加された場合、星印を追加するオペレーション、連絡先に対して新しい電話番号に変更するオペレーション、２つのラベルを追加するオペレーションが、データから独立して送信される。他の実施形態では、修正を含むデータ（例えばアイテムｇｇ、ｉｉ、ｋｋ、ｏｏ）が、サーバにおける対応する未修正のアイテムを置き換えるべくサーバに送信されてもよい。クライアントのリクエストにおいて送信された全ＣＨＯが同期されると、サーバは、クライアントによって提案される次のＣＨＯ（例えばＣＨＯ２８）を含む主同期レスポンス１３５４を、次の同期のための開始点として次の主同期レスポンスにおいてクライアントに返信する。クライアントからの全ＣＨＯがサーバに同期されると、サーバは、主同期レスポンスにおいて最後に同期されたＣＨＯをクライアントに戻すか、または、ＣＨＯ  ＩＤを全く戻さなくてもよい。
【０１３１】
[00155]  図１３Ｂは、最初の主同期後のクライアントデータのリストとクライアント履歴テーブルの図を示す。クライアントにおける網掛けされたアイテム（例えばアイテムｇｇ、ｉｉ、ｋｋ、ｏｏ）は、サーバに同期された変更の影響を受けているデータを表す。ローカル履歴テーブルでは、ＣＨＯ２９は未同期のままである。幾つかの実施形態では、正常に同期されたＣＨＯは、メモリスペースを節約するために削除されて取り除かれてよい。他の実施形態では、同期済みのＣＨＯは短時間の間維持されて、特定の継続時間後にまたはメモリが必要になることにより取り除かれてもよい。
【０１３２】
[00156]  図１３Ｚは、クライアントとサーバ間の第２の主同期ハンドシェイクを示す。クライアントとサーバ間の接続がアクティブであり、長い切断がない通常の動作下では、幾つかの実施形態では、前の主同期が終了すると、クライアントに未同期のデータ変更が残っている場合、新しい主同期がすぐに発生する。主同期ハンドシェイクは、クライアントに未同期アイテムがなくなるまで繰り返される。本実施例では、クライアントは、図１３Ｃに示すように、主同期レスポンス１３５４によって送信された次の最上位ＣＨＯ  ＩＤ（例えばＣＨＯ２９）に従ってアイテムｐｐ、ｄｄ、ｑｑ、およびｍｍに対する変更を表すＣＨＯ２９〜３２と、クライアント履歴テーブルにおける次の最上位の未同期ＣＨＯ（例えば未同期ＣＨＯは残っていないこと）とを含む主同期リクエスト１３５５を、サーバに送信する。順方向同期および逆方向同期と同様に、最大数を用いて、データ同期におけるデータ変更の数を制限し、それにより同期時間を最小限にしうる。この主同期は、クライアントにおける全ＣＨＯがサーバに同期されるまで継続する。例えばＣＨＯ３２の後にはデータ変更がないので、クライアントからサーバへの主同期レスポンス１３５６では、次の最上位ＣＨＯは送信されない。図１３Ｄでは、データ変更ＣＨＯ２９〜３２に対応するアイテムｐｐ、ｄｄ、ｑｑ、およびｍｍは網掛け表示され、これらの変更は、サーバに同期されたことを示している。同期済みのＣＨＯは削除されるので、クライアント履歴テーブル内には未同期ＣＨＯは残らない。
【０１３３】
[00157]  幾つかの実施形態では、データ同期は、クライアントによってではなくサーバによって始められてもよいことは理解すべきである。例えば、サーバは、ある間隔で、クライアントと通信して、クライアントにおいて追加のデータ変更が発生したかどうかを判断してよい。ダウンヒル同期およびアップヒル同期のいずれにおいても、どのデバイスがデータ同期に用いられるかは重要ではない。それよりもむしろ、一方のデバイスから他方のデバイスに送信される通信および情報の方が、開始点を決定し、どのデータ変更が同期されているのかいないのかを区別するために重要である。
【０１３４】
[00158]  図１４Ａは、アップヒル同期時のサーバとクライアント間の例示的なインタラクションスキームを説明する図である。一実施形態では、クライアントは、クライアントＩＤと、クライアントによって最後に処理されたＣＨＯ  ＩＤとを含む同期開始リクエストを、サーバに送信する（１４０１）。サーバは、サーバが処理し、受信確認し、または同期した最上位ＣＨＯ  ＩＤを含む同期開始レスポンスによって応答する（１４０２）。同期開始レスポンス１４０２内の情報に基づいてデータ同期が開始すべき場所を知っていることにより、クライアントは、クライアントＩＤと、最大数の「ｚ」個の未同期ＣＨＯとを含む主同期リクエスト１を、サーバに送信する（１４０３）。サーバは、矢印１４０４において、サーバによって受信確認されたまたは処理された最上位ＣＨＯ  ＩＤを含む主レスポンス１によって応答する（１４０４）。同期は中断されていないと仮定すると、次の最上位ＣＨＯ  ＩＤは、主同期リクエスト１においてサーバがクライアントから受信した最上位の未同期ＣＨＯ  ＩＤと同じである（１４０３）。しかし、中断が発生した場合、サーバは、クライアントによって処理された最後のＣＨＯ  ＩＤを送信し、それにより、サーバは次の同期が開始すべき場所を判断することができる。
【０１３５】
[00159]  主同期２において、クライアントにおける残りの未同期データの同期は、クライアントＩＤと、最大数の「ｚ」個のデータ変更の限度とを含む主同期リクエスト２をクライアントが送信することによって継続する（１４０５）。サーバは、主同期リクエスト２（１４０５）によって示される次の最上位ＣＨＯ  ＩＤ、または、サーバによって処理された／同期された最上位ＣＨＯを含む主同期レスポンス２によって応答する（１４０６）。主同期ハンドシェイクは、クライアントにおける全データ変更がサーバに同期されるまで繰り返され、クライアントおよびサーバは共に、矢印１４０７にあるように、スタンバイモードに切り替わる。クライアントとサーバ間には長時間の切断がないと仮定すると、クライアントデータ変更の同期のための主同期ハンドシェイクは、矢印１４０８にあるように、所定条件または基準に応じて再び始められる。同期開始は、長い切断がある場合またはアプリケーションが終了する場合を除いて再開しない。
【０１３６】
[00160]  図１４Ｂは、クライアントにおける例示的なアップヒル同期方法を説明するフローチャートである。ステップ１４２０において、開始時または長時間の切断後、クライアントは、クライアントＩＤと、クライアントによって受信確認された最後のＣＨＯ  ＩＤとを含む同期開始リクエストを、サーバに送信する。ステップ１４２１において、クライアントは次に、サーバによって処理された最後のＣＨＯ  ＩＤを含んでクライアントに、サーバに対する同期が最後に終了した場所を通知する同期開始レスポンスを、サーバから受信する。ステップ１４２２において、主同期またはデータ同期のプロセス時、クライアントは、クライアントＩＤと、最大で「ｚ」個の未同期データ変更とを含む主同期リクエストを送信する。ステップ１４２３において、クライアントは、クライアントによって前に送信された次の最上位ＣＨＯ  ＩＤかまたはサーバによって受信確認された最後のＣＨＯ  ＩＤのいずれかを含むサーバからの主同期レスポンスを受信する。ステップ１４２４において、クライアントは次に、残っている未同期データ変更があるか否かを判断する。変更が残っている場合、クライアントは、ステップ１４２２に示すように、これらの未同期のデータ変更をクライアントに送信し続ける。変更がもうない場合、クライアントは、ステップ１４２５に示すように、所定基準に応じて次の主同期が発生するまでアイドル状態となる。長い切断がある場合、クライアントは、ステップ１４２０に示すように、同期開始ハンドシェイクによって全プロセスを再開し、長い切断がない場合、クライアントは、ステップ１４２２に示すように、主同期を再開する。
【０１３７】
[00161]  図１４Ｃは、サーバにおける例示的なアップヒル同期方法を説明するフローチャートである。ステップ１４３１において、開始時または長期間の切断後、サーバは、クライアントＩＤと、クライアントによって処理された最後のＣＨＯ  ＩＤとを含む同期開始リクエストを、クライアントから受信する。サーバは次に、ステップ１４３２に示すように、クライアントに対してサーバにおいて受信確認されたまたは同期された最後のＣＨＯ  ＩＤを含む同期開始レスポンスをクライアントに送信して、クライアントが、始めるべき次の未同期データ範囲を判断することを支援する。ステップ１４３３において、サーバは、クライアントＩＤと、最大可能数の「ｚ」個のデータ変更とを含む主同期リクエストを、クライアントから受信する。ステップ１４３４において、全データ変更が正常に同期された場合、サーバは、ステップ１４３３に示すように、クライアントによって示される次の最上位の未同期ＣＨＯ  ＩＤを含む主同期レスポンスを、クライアントに送信する。データ同期が中断された場合、サーバによって処理された最後のＣＨＯ  ＩＤが代わりに送信される。ステップ１４３５において、サーバは、所定条件下におけるクライアントからの次の主同期リクエストまでアイドル状態となる。所定条件を満たす主同期リクエストが受信される場合、ステップ１４３３にあるように、主同期が再開する。受信されない場合、サーバは、ステップ１４３１に示すように、クライアントから同期開始リクエストを受信して、データ同期プロセスを再開する。
【０１３８】
[00162]  説明のための上述の記載は、具体的な実施形態を参照して述べた。しかし、上述の例示的な説明は、包括的であることまたは本発明を開示した具体的な形態に限定することを意図したものではない。多くの修正形態および変更形態が上述の教示内容から可能である。実施形態は、本発明の原理とその実際の適用を最善に説明し、それにより、当業者が、本発明、および、考えられる特定の使用に適するように様々な修正がなされた多様な実施形態を最善に活用できるように選択かつ記載された。
【図１】
0005631886.tif 000002
【図２】
0005631886.tif 000003
【図３】
0005631886.tif 000004
【図４】
0005631886.tif 000005
【図５】
0005631886.tif 000006
【図６】
0005631886.tif 000007
【図７Ａ】
0005631886.tif 000008
【図７Ｂ】
0005631886.tif 000009
【図８Ａ】
0005631886.tif 000010
【図８Ｂ】
0005631886.tif 000011
【図９Ａ】
0005631886.tif 000012
【図９Ｂ】
0005631886.tif 000013
【図９Ｃ】
0005631886.tif 000014
【図１０Ａ】
0005631886.tif 000015
【図１０Ｂ】
0005631886.tif 000016
【図１０Ｃ】
0005631886.tif 000017
【図１０Ｄ】
0005631886.tif 000018
【図１０Ｅ】
0005631886.tif 000019
【図１０Ｆ】
0005631886.tif 000020
【図１０Ｗ】
0005631886.tif 000021
【図１０Ｘ】
0005631886.tif 000022
【図１０Ｙ】
0005631886.tif 000023
【図１０Ｚ】
0005631886.tif 000024
【図１１Ａ】
0005631886.tif 000025
【図１１Ｂ】
0005631886.tif 000026
【図１１Ｃ】
0005631886.tif 000027
【図１２Ａ】
0005631886.tif 000028
【図１２Ｂ】
0005631886.tif 000029
【図１２Ｃ】
0005631886.tif 000030
【図１３Ａ】
0005631886.tif 000031
【図１３Ｂ】
0005631886.tif 000032
【図１３Ｃ】
0005631886.tif 000033
【図１３Ｄ】
0005631886.tif 000034
【図１３Ｘ】
0005631886.tif 000035
【図１３Ｙ】
0005631886.tif 000036
【図１３Ｚ】
0005631886.tif 000037
【図１４Ａ】
0005631886.tif 000038
【図１４Ｂ】
0005631886.tif 000039
【図１４Ｃ】
0005631886.tif 000040