(57)【特許請求の範囲】
【請求項１】
１つ以上のデータ処理装置によって実現される方法であって、前記方法は、
クライアントデバイスからデータベースミューテーションのログを受信することを備え、データベースミューテーションの前記ログは、前記クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、
前記データベースに含まれているエンティティと、
前記エンティティについてのオペレーションと、
前記エンティティについてのクライアントバージョン番号とを指定しており、前記方法はさらに、
データベースミューテーションの前記ログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別することと、
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することと、
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むこととを備える、方法。
【請求項２】
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、
前記コンフリクト解決ポリシーに基づいてリモートデータベースに適用されるであろう前記２つ以上のデータベースミューテーションの第１のデータベースミューテーションを識別することを備える、請求項１に記載の方法。
【請求項３】
前記２つ以上のデータベースミューテーションを折り畳むことは、
前記第１のデータベースミューテーションと、前記第１のデータベースミューテーションの後に起こる前記２つ以上のデータベースミューテーションの他の各データベースミューテーションとを、単一のデータベースミューテーションに折り畳むことを備える、請求項２に記載の方法。
【請求項４】
前記第１のデータベースミューテーションと他の各データベースミューテーションとを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である前記２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを前記単一のデータベースミューテーションに折り畳むことを備える、請求項３に記載の方法。
【請求項５】
折り畳みに適格である前記２つ以上のデータベースミューテーションの各々は、前記コンフリクト解決ポリシーを指定している、請求項１〜３のいずれか１項に記載の方法。
【請求項６】
前記単一のデータベースミューテーションについて、かつ前記ログに含まれている他の各データベースミューテーションについて、
前記データベースのリモートバージョンに問合せて、前記データベースミューテーションによって指定される前記エンティティについてのベースバージョン番号を識別することと、
前記エンティティについての前記クライアントバージョン番号が前記エンティティについての前記ベースバージョン番号と一致するか否かを判断することと、
前記クライアントバージョン番号が前記ベースバージョン番号と一致すると判断したことに応答して、
前記データベースの前記リモートバージョンについて、前記データベースミューテーションによって指定されるオペレーションを実行することと、
前記クライアントデバイスへの応答データを生成することとを備え、前記応答データは前記エンティティについての更新されたベースバージョン番号を含み、
前記クライアントバージョン番号が前記ベースバージョン番号と一致しないと判断したことに応答して、
コンフリクト解決ポリシーに基づいて、前記データベースミューテーションによって指定されるオペレーションが実行されることになるか否かを判断することと、
前記データベースミューテーションによって指定されるオペレーションが実行されることになると判断された場合にのみ、前記データベースの前記リモートバージョンについて、前記データベースミューテーションによって指定されるオペレーションを実行することと、
前記クライアントデバイスへのコンフリクト応答データを生成することとを備え、前記コンフリクト応答データは、前記データベースミューテーションによって指定されるオペレーションが実行されたか否かを指定している、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記クライアントデバイスへの前記コンフリクト応答データは、前記データベースミューテーションによって指定される前記エンティティについて、前記データベースの前記リモートバージョンに記憶される前記エンティティについての現行バージョンを含む、請求項６に記載の方法。
【請求項８】
１つ以上のデータ処理装置と、
命令を格納しているデータ記憶装置とを備えるシステムであって、前記命令は、前記１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
クライアントデバイスからデータベースミューテーションのログを受信することを備え、データベースミューテーションの前記ログは、前記クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、
前記データベースに含まれているエンティティと、
前記エンティティについてのオペレーションと、
前記エンティティについてのクライアントバージョン番号とを指定しており、前記オペレーションはさらに、
データベースミューテーションの前記ログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別することと、
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することと、
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むこととを備える、システム。
【請求項９】
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、
前記コンフリクト解決ポリシーに基づいてリモートデータベースに適用されるであろう前記２つ以上のデータベースミューテーションの第１のデータベースミューテーションを識別することを備える、請求項８に記載のシステム。
【請求項１０】
前記２つ以上のデータベースミューテーションを折り畳むことは、
前記第１のデータベースミューテーションと、前記第１のデータベースミューテーションの後に起こる前記２つ以上のデータベースミューテーションの他の各データベースミューテーションとを、単一のデータベースミューテーションに折り畳むことを備える、請求項９に記載のシステム。
【請求項１１】
前記第１のデータベースミューテーションと他の各データベースミューテーションとを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である前記２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを前記単一のデータベースミューテーションに折り畳むことを備える、請求項１０に記載のシステム。
【請求項１２】
折り畳みに適格である前記２つ以上のデータベースミューテーションの各々は、前記コンフリクト解決ポリシーを指定している、請求項８〜１１のいずれか１項に記載のシステム。
【請求項１３】
前記オペレーションはさらに、
前記単一のデータベースミューテーションについて、かつ前記ログに含まれている他の各データベースミューテーションについて、
前記データベースのリモートバージョンに問合せて、前記データベースミューテーションによって指定される前記エンティティについてのベースバージョン番号を識別することと、
前記エンティティについての前記クライアントバージョン番号が前記エンティティについての前記ベースバージョン番号と一致するか否かを判断することと、
前記クライアントバージョン番号が前記ベースバージョン番号と一致すると判断したことに応答して、
前記データベースの前記リモートバージョンについて、前記データベースミューテーションによって指定されるオペレーションを実行することと、
前記クライアントデバイスへの応答データを生成することとを備え、前記応答データは前記エンティティについての更新されたベースバージョン番号を含み、
前記クライアントバージョン番号が前記ベースバージョン番号と一致しないと判断したことに応答して、
コンフリクト解決ポリシーに基づいて、前記データベースミューテーションによって指定されるオペレーションが実行されることになるか否かを判断することと、
前記データベースミューテーションによって指定されるオペレーションが実行されることになると判断された場合にのみ、前記データベースの前記リモートバージョンについて、前記データベースミューテーションによって指定されるオペレーションを実行することと、
前記クライアントデバイスへのコンフリクト応答データを生成することとを備え、前記コンフリクト応答データは、前記データベースミューテーションによって指定されるオペレーションが実行されたか否かを指定している、請求項８〜１２のいずれか１項に記載のシステム。
【請求項１４】
前記クライアントデバイスへの前記コンフリクト応答データは、前記データベースミューテーションによって指定される前記エンティティについて、前記データベースの前記リモートバージョンに記憶される前記エンティティについての現行バージョンを含む、請求項１３に記載のシステム。
【請求項１５】
命令を含むプログラムであって、前記命令は、１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
クライアントデバイスからデータベースミューテーションのログを受信することを備え、データベースミューテーションの前記ログは、前記クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、
前記データベースに含まれているエンティティと、
前記エンティティについてのオペレーションと、
前記エンティティについてのクライアントバージョン番号とを指定しており、前記オペレーションはさらに、
データベースミューテーションの前記ログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別することと、
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することと、
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むこととを備える、プログラム。
【請求項１６】
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、
前記コンフリクト解決ポリシーに基づいてリモートデータベースに適用されるであろう前記２つ以上のデータベースミューテーションの第１のデータベースミューテーションを識別することを備える、請求項１５に記載のプログラム。
【請求項１７】
前記２つ以上のデータベースミューテーションを折り畳むことは、
前記第１のデータベースミューテーションと、前記第１のデータベースミューテーションの後に起こる前記２つ以上のデータベースミューテーションの他の各データベースミューテーションとを、単一のデータベースミューテーションに折り畳むことを備える、請求項１６に記載のプログラム。
【請求項１８】
前記第１のデータベースミューテーションと他の各データベースミューテーションとを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である前記２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを前記単一のデータベースミューテーションに折り畳むことを備える、請求項１７に記載のプログラム。
【請求項１９】
折り畳みに適格である前記２つ以上のデータベースミューテーションの各々は、前記コンフリクト解決ポリシーを指定している、請求項１５〜１８のいずれか１項に記載のプログラム。
【請求項２０】
前記単一のデータベースミューテーションについて、かつ前記ログに含まれている他の各データベースミューテーションについて、
前記データベースのリモートバージョンに問合せて、前記データベースミューテーションによって指定される前記エンティティについてのベースバージョン番号を識別することと、
前記エンティティについての前記クライアントバージョン番号が前記エンティティについての前記ベースバージョン番号と一致するか否かを判断することと、
前記クライアントバージョン番号が前記ベースバージョン番号と一致すると判断したことに応答して、
前記データベースの前記リモートバージョンについて、前記データベースミューテーションによって指定されるオペレーションを実行することと、
前記クライアントデバイスへの応答データを生成することとを備え、前記応答データは前記エンティティについての更新されたベースバージョン番号を含み、
前記クライアントバージョン番号が前記ベースバージョン番号と一致しないと判断したことに応答して、
コンフリクト解決ポリシーに基づいて、前記データベースミューテーションによって指定されるオペレーションが実行されることになるか否かを判断することと、
前記データベースミューテーションによって指定されるオペレーションが実行されることになると判断された場合にのみ、前記データベースの前記リモートバージョンについて、前記データベースミューテーションによって指定されるオペレーションを実行することと、
前記クライアントデバイスへのコンフリクト応答データを生成することとを備え、前記コンフリクト応答データは、前記データベースミューテーションによって指定されるオペレーションが実行されたか否かを指定している、請求項１５〜１９のいずれか１項に記載のプログラム。
【請求項２１】
前記クライアントデバイスへの前記コンフリクト応答データは、前記データベースミューテーションによって指定される前記エンティティについて、前記データベースの前記リモートバージョンに記憶される前記エンティティについての現行バージョンを含む、請求項２０に記載のプログラム。
【請求項２２】
前記コンフリクト解決ポリシーは、前記データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである、請求項１〜７のいずれか１項に記載の方法。
【請求項２３】
前記コンフリクト解決ポリシーは、前記データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである、請求項８〜１４のいずれか１項に記載のシステム。
【請求項２４】
前記コンフリクト解決ポリシーは、前記データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである、請求項１５〜２０のいずれか１項に記載のプログラム。
【請求項２５】
１つ以上のデータ処理装置によって実現される方法であって、前記方法は、
クライアントデバイス上に記憶されるデータベースミューテーションのログにアクセスすることを備え、データベースミューテーションの前記ログは、前記クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、
前記データベースに含まれているエンティティと、
前記エンティティについてのオペレーションと、
前記エンティティについてのクライアントバージョン番号とを指定しており、前記方法はさらに、
データベースミューテーションの前記ログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別することと、
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することと、
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むこととを備える、方法。
【請求項２６】
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、前記２つ以上のデータベースミューテーションによって指定されるオペレーションの結果が、対応するデータベースエンティティについて前記データベースのリモートバージョン上に記憶される値とは無関係であると判断することを備える、請求項２５に記載の方法。
【請求項２７】
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である前記２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを前記単一のデータベースミューテーションに折り畳むことを備える、請求項２５または２６に記載の方法。
【請求項２８】
折り畳みに適格である前記２つ以上のデータベースミューテーションの各々は、前記コンフリクト解決ポリシーを指定している、請求項２５〜２７のいずれか１項に記載の方法。
【請求項２９】
前記コンフリクト解決ポリシーは、前記データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである、請求項２５〜２８のいずれか１項に記載の方法。
【請求項３０】
データベースミューテーションの折り畳まれたログをデータベースサーバに提供することをさらに備え、データベースミューテーションの前記折り畳まれたログは、折り畳まれなかったデータベースミューテーションの前記ログ内の各ミューテーションと、前記単一のデータベースミューテーションとを含む、請求項２５〜２９のいずれか１項に記載の方法。
【請求項３１】
１つ以上のデータ処理装置と、
命令を格納しているデータ記憶装置とを備えるシステムであって、前記命令は、前記１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
クライアントデバイス上に記憶されるデータベースミューテーションのログにアクセスすることを備え、データベースミューテーションの前記ログは、前記クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、
前記データベースに含まれているエンティティと、
前記エンティティについてのオペレーションと、
前記エンティティについてのクライアントバージョン番号とを指定しており、前記オペレーションはさらに、
データベースミューテーションの前記ログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別することと、
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することと、
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むこととを備える、システム。
【請求項３２】
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、前記２つ以上のデータベースミューテーションによって指定されるオペレーションの結果が、対応するデータベースエンティティについて前記データベースのリモートバージョン上に記憶される値とは無関係であると判断することを備える、請求項３１に記載のシステム。
【請求項３３】
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である前記２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを前記単一のデータベースミューテーションに折り畳むことを備える、請求項３１または３２に記載のシステム。
【請求項３４】
折り畳みに適格である前記２つ以上のデータベースミューテーションの各々は、前記コンフリクト解決ポリシーを指定している、請求項３１〜３３のいずれか１項に記載のシステム。
【請求項３５】
前記コンフリクト解決ポリシーは、前記データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである、請求項３１〜３４のいずれか１項に記載のシステム。
【請求項３６】
前記オペレーションはさらに、
データベースミューテーションの折り畳まれたログをデータベースサーバに提供することを備え、データベースミューテーションの前記折り畳まれたログは、折り畳まれなかったデータベースミューテーションの前記ログ内の各ミューテーションと、前記単一のデータベースミューテーションとを含む、請求項３１〜３５のいずれか１項に記載のシステム。
【請求項３７】
命令を含むプログラムであって、前記命令は、１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
クライアントデバイス上に記憶されるデータベースミューテーションのログにアクセスすることを備え、データベースミューテーションの前記ログは、前記クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、
前記データベースに含まれているエンティティと、
前記エンティティについてのオペレーションと、
前記エンティティについてのクライアントバージョン番号とを指定しており、前記オペレーションはさらに、
データベースミューテーションの前記ログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別することと、
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することと、
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むこととを備える、プログラム。
【請求項３８】
コンフリクト解決ポリシーに基づいて、前記２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、前記２つ以上のデータベースミューテーションによって指定されるオペレーションの結果が、対応するデータベースエンティティについて前記データベースのリモートバージョン上に記憶される値とは無関係であると判断することを備える、請求項３７に記載のプログラム。
【請求項３９】
前記２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である前記２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを前記単一のデータベースミューテーションに折り畳むことを備える、請求項３７または３８に記載のプログラム。
【請求項４０】
折り畳みに適格である前記２つ以上のデータベースミューテーションの各々は、前記コンフリクト解決ポリシーを指定している、請求項３７〜３９のいずれか１項に記載のプログラム。
【請求項４１】
前記コンフリクト解決ポリシーは、前記データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである、請求項３７〜４０のいずれか１項に記載のプログラム。
【請求項４２】
前記オペレーションはさらに、
データベースミューテーションの折り畳まれたログをデータベースサーバに提供することを備え、データベースミューテーションの前記折り畳まれたログは、折り畳まれなかったデータベースミューテーションの前記ログ内の各ミューテーションと、前記単一のデータベースミューテーションとを含む、請求項３７〜４１のいずれか１項に記載のプログラム。
【請求項４３】
１つ以上のデータ処理装置によって実現される方法であって、前記方法は、
クライアントデバイス上に記憶されるデータベースのクライアントバージョンの更新要求を、前記クライアントデバイスから受信することを備え、前記更新要求は、ｉ）前記データベースの前記クライアントバージョンについてのクライアントデータベースバージョン番号と、ii）前記データベースの前記クライアントバージョンに含まれている特定のデータベースエンティティを指定している第１のカーソルとを含み、前記方法はさらに、
前記クライアントデバイスからリモートの前記データベースのリモートバージョンにアクセスすることを備え、前記データベースの前記リモートバージョンは複数のデータベースエンティティを含み、各データベースエンティティは、前記データベースについての前記複数のデータベースエンティティ全体にわたって単調に増加する態様で割当てられるリモートエンティティバージョンを有し、前記方法はさらに、
前記特定のデータベースエンティティと一致するデータベースエンティティで始まるデータベースエンティティの順序付けられたサブセットに含まれている複数の前記データベースエンティティの各々について、
前記データベースエンティティの前記リモートバージョンについてのリモートエンティティバージョン番号と前記クライアントデータベースバージョン番号との比較に基づいて、前記データベースエンティティが更新されたか否かを判断することと、
更新された各データベースエンティティについて、エンティティ更新を前記クライアントデバイスに提供することとを備え、前記方法はさらに、
リモートデータベースバージョン番号を、少なくとも１つのエンティティ更新とともに前記クライアントデバイスに提供することを備え、前記リモートデータベースバージョン番号は、前記データベースの前記リモートバージョン内の最高のリモートエンティティバージョン番号である、方法。
【請求項４４】
１つ以上のデータ処理装置と、
命令を格納しているデータ記憶装置とを備えるシステムであって、前記命令は、前記１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
クライアントデバイス上に記憶されるデータベースのクライアントバージョンの更新要求を、前記クライアントデバイスから受信することを備え、前記更新要求は、ｉ）前記データベースの前記クライアントバージョンについてのクライアントデータベースバージョン番号と、ii）前記データベースの前記クライアントバージョンに含まれている特定のデータベースエンティティを指定している第１のカーソルとを含み、前記オペレーションはさらに、
前記クライアントデバイスからリモートの前記データベースのリモートバージョンにアクセスすることを備え、前記データベースの前記リモートバージョンは複数のデータベースエンティティを含み、各データベースエンティティは、前記データベースについての前記複数のデータベースエンティティ全体にわたって単調に増加する態様で割当てられるリモートエンティティバージョンを有し、前記オペレーションはさらに、
前記特定のデータベースエンティティと一致するデータベースエンティティで始まるデータベースエンティティの順序付けられたサブセットに含まれている複数の前記データベースエンティティの各々について、
前記データベースエンティティの前記リモートバージョンについてのリモートエンティティバージョン番号と前記クライアントデータベースバージョン番号との比較に基づいて、前記データベースエンティティが更新されたか否かを判断することと、
更新された各データベースエンティティについて、エンティティ更新を前記クライアントデバイスに提供することとを備え、前記オペレーションはさらに、
リモートデータベースバージョン番号を、少なくとも１つのエンティティ更新とともに前記クライアントデバイスに提供することを備え、前記リモートデータベースバージョン番号は、前記データベースの前記リモートバージョン内の最高のリモートエンティティバージョン番号である、システム。
【請求項４５】
命令を含むプログラムであって、前記命令は、１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
クライアントデバイス上に記憶されるデータベースのクライアントバージョンの更新要求を、前記クライアントデバイスから受信することを備え、前記更新要求は、ｉ）前記データベースの前記クライアントバージョンについてのクライアントデータベースバージョン番号と、ii）前記データベースの前記クライアントバージョンに含まれている特定のデータベースエンティティを指定している第１のカーソルとを含み、前記オペレーションはさらに、
前記クライアントデバイスからリモートの前記データベースのリモートバージョンにアクセスすることを備え、前記データベースの前記リモートバージョンは複数のデータベースエンティティを含み、各データベースエンティティは、前記データベースについての前記複数のデータベースエンティティ全体にわたって単調に増加する態様で割当てられるリモートエンティティバージョンを有し、前記オペレーションはさらに、
前記特定のデータベースエンティティと一致するデータベースエンティティで始まるデータベースエンティティの順序付けられたサブセットに含まれている複数の前記データベースエンティティの各々について、
前記データベースエンティティの前記リモートバージョンについてのリモートエンティティバージョン番号と前記クライアントデータベースバージョン番号との比較に基づいて、前記データベースエンティティが更新されたか否かを判断することと、
更新された各データベースエンティティについて、エンティティ更新を前記クライアントデバイスに提供することとを備え、前記オペレーションはさらに、
リモートデータベースバージョン番号を、少なくとも１つのエンティティ更新とともに前記クライアントデバイスに提供することを備え、前記リモートデータベースバージョン番号は、前記データベースの前記リモートバージョン内の最高のリモートエンティティバージョン番号である、プログラム。
【請求項４６】
１つ以上のデータ処理装置によって実現される方法であって、前記方法は、
指定されたバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティのカウントを、サーバデバイスから受信することと、
データベースエンティティの前記カウントが、前記指定されたバージョン番号の時点で前記データベースのクライアントバージョンに含まれているエンティティの数を指定しているクライアントエンティティカウント未満であると判断することと、
データベースエンティティの前記カウントが前記クライアントエンティティカウント未満であると判断したことに応答して、前記データベースの前記リモートバージョンに含まれている前記データベースエンティティについてのキーのリストを求める要求を、前記サーバデバイスに送信することと、
前記データベースの前記リモートバージョンに含まれている前記データベースエンティティの適切なサブセットについてのキーの第１のサブセットを、前記サーバデバイスから受信することと、
前記データベースの前記クライアントバージョンに含まれているデータベースエンティティの対応する適切なサブセット内にあり、かつキーの前記第１のサブセットに含まれていないキーを有するいずれのデータベースエンティティも、前記データベースの前記クライアントバージョンから除去することとを備える、方法。
【請求項４７】
１つ以上のデータ処理装置と、
命令を格納しているデータ記憶装置とを備えるシステムであって、前記命令は、前記１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
指定されたバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティのカウントを、サーバデバイスから受信することと、
データベースエンティティの前記カウントが、前記指定されたバージョン番号の時点で前記データベースのクライアントバージョンに含まれているエンティティの数を指定しているクライアントエンティティカウント未満であると判断することと、
データベースエンティティの前記カウントが前記クライアントエンティティカウント未満であると判断したことに応答して、前記データベースの前記リモートバージョンに含まれている前記データベースエンティティについてのキーのリストを求める要求を、前記サーバデバイスに送信することと、
前記データベースの前記リモートバージョンに含まれている前記データベースエンティティの適切なサブセットについてのキーの第１のサブセットを、前記サーバデバイスから受信することと、
前記データベースの前記クライアントバージョンに含まれているデータベースエンティティの対応する適切なサブセット内にあり、かつキーの前記第１のサブセットに含まれていないキーを有するいずれのデータベースエンティティも、前記データベースの前記クライアントバージョンから除去することとを備える、システム。
【請求項４８】
命令を含むプログラムであって、前記命令は、１つ以上のデータ処理装置によって実行されると、前記１つ以上のデータ処理装置にオペレーションを実行させ、前記オペレーションは、
指定されたバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティのカウントを、サーバデバイスから受信することと、
データベースエンティティの前記カウントが、前記指定されたバージョン番号の時点で前記データベースのクライアントバージョンに含まれているエンティティの数を指定しているクライアントエンティティカウント未満であると判断することと、
データベースエンティティの前記カウントが前記クライアントエンティティカウント未満であると判断したことに応答して、前記データベースの前記リモートバージョンに含まれている前記データベースエンティティについてのキーのリストを求める要求を、前記サーバデバイスに送信することと、
前記データベースの前記リモートバージョンに含まれている前記データベースエンティティの適切なサブセットについてのキーの第１のサブセットを、前記サーバデバイスから受信することと、
前記データベースの前記クライアントバージョンに含まれているデータベースエンティティの対応する適切なサブセット内にあり、かつキーの前記第１のサブセットに含まれていないキーを有するいずれのデータベースエンティティも、前記データベースの前記クライアントバージョンから除去することとを備える、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本願は、２０１４年６月２４日に出願され、その内容全体が引用により本明細書に援用されている米国特許出願連続番号第６２／０１６，４５７号についての優先権を米国特許法第１１９条（ｅ）に従って主張する。
【０００２】
背景
本明細書は、リモートデータベースについてミューテーションを処理することに関する。
【背景技術】
【０００３】
データベースは、その中に含まれているデータの処理をサポートする態様で典型的に編成されているデータの集まりである。データベースはデータベースサーバによって管理されることが多く、データベースサーバは、データベース管理者、および／または、ローカルもしくはワイドエリアネットワークを介してデータベースサーバに接続されたデバイスのユーザによる、データベースに含まれているデータへのアクセスおよび当該データの操作を容易にする。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
一般に、本明細書に記載される主題の１つの革新的な局面は、クライアントデバイスからデータベースミューテーションのログを受信するアクションを含む方法であって、データベースミューテーションのログは、クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、データベースに含まれているエンティティと、エンティティについてのオペレーションと、エンティティについてのクライアントバージョン番号とを指定しており、方法はさらに、データベースミューテーションのログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別するアクションと、コンフリクト解決ポリシーに基づいて、２つ以上のデータベースミューテーションが折り畳みに適格であると判断するアクションと、２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むアクションとを含む方法において具体化され得る。本局面の他の実施形態は、コンピュータストレージデバイス上でエンコードされた、本方法のアクションを実行するように構成される、対応するシステム、装置、およびコンピュータプログラムを含む。
【０００５】
これらおよび他の実施形態の各々は、以下の特徴の１つ以上を随意に含み得る。コンフリクト解決ポリシーに基づいて、２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、コンフリクト解決ポリシーに基づいてリモートデータベースに適用されるであろう２つ以上のデータベースミューテーションの第１のデータベースミューテーションを識別することを含み得る。
【０００６】
２つ以上のデータベースミューテーションを折り畳むことは、第１のデータベースミューテーションと、第１のデータベースミューテーションの後に起こる２つ以上のデータベースミューテーションの他の各データベースミューテーションとを、単一のデータベースミューテーションに折り畳むことを含み得る。
【０００７】
第１のデータベースミューテーションと他の各データベースミューテーションとを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことを含み得る。
【０００８】
折り畳みに適格である２つ以上のデータベースミューテーションの各々は、コンフリクト解決ポリシーを指定し得る。コンフリクト解決ポリシーは、データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーであり得る。
【０００９】
オペレーションはさらに、単一のデータベースミューテーションについて、かつログに含まれている他の各データベースミューテーションについて、データベースのリモートバージョンに問合せて、ミューテーションによって指定されるエンティティについてのベースバージョン番号を識別することと、エンティティについてのクライアントバージョン番号がエンティティについてのベースバージョン番号と一致するか否かを判断することと、クライアントバージョン番号がベースバージョン番号と一致すると判断したことに応答して、データベースのリモートバージョンについて、ミューテーションによって指定されるオペレーションを実行することと、クライアントデバイスへの応答データを生成することとを含み得、応答データはエンティティについての更新されたベースバージョン番号を含み、クライアントバージョン番号がベースバージョン番号と一致しないと判断したことに応答して、コンフリクト解決ポリシーに基づいて、ミューテーションによって指定されるオペレーションが実行されることになるか否かを判断することと、ミューテーションによって指定されるオペレーションが実行されることになると判断された場合にのみ、データベースのリモートバージョンについて、ミューテーションによって指定されるオペレーションを実行することと、クライアントデバイスへのコンフリクト応答データを生成することとを含み得、コンフリクト応答データは、ミューテーションによって指定されるオペレーションが実行されたか否かを指定している。
【００１０】
クライアントデバイスへのコンフリクト応答データは、ミューテーションによって指定されるエンティティについて、データベースのリモートバージョンに記憶されるエンティティについての現行バージョンを含み得る。
【００１１】
一般に、本明細書に記載される主題の別の局面は、クライアントデバイス上に記憶されるデータベースミューテーションのログにアクセスするアクションを含む方法であって、データベースミューテーションのログは、クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示しており、各データベースミューテーションは、データベースに含まれているエンティティと、エンティティについてのオペレーションと、エンティティについてのクライアントバージョン番号とを指定しており、方法はさらに、データベースミューテーションのログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションを識別するアクションと、コンフリクト解決ポリシーに基づいて、２つ以上のデータベースミューテーションが折り畳みに適格であると判断するアクションと、２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むアクションとを含む方法において具体化され得る。本局面の他の実施形態は、コンピュータストレージデバイス上でエンコードされた、本方法のアクションを実行するように構成される、対応するシステム、装置、およびコンピュータプログラムを含む。
【００１２】
これらおよび他の実施形態の各々は、以下の特徴の１つ以上を随意に含み得る。コンフリクト解決ポリシーに基づいて、２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、２つ以上のデータベースミューテーションによって指定されるオペレーションの結果が、対応するデータベースエンティティについてデータベースのリモートバージョン上に記憶される値とは無関係であると判断することを含み得る。
【００１３】
２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことを含み得る。
【００１４】
折り畳みに適格である２つ以上のデータベースミューテーションの各々は、コンフリクト解決ポリシーを指定し得る。コンフリクト解決ポリシーは、データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーであり得る。
【００１５】
オペレーションはさらに、データベースミューテーションの折り畳まれたログをデータベースサーバに提供することを含み得、データベースミューテーションの折り畳まれたログは、折り畳まれなかったデータベースミューテーションのログ内の各ミューテーションと、単一のデータベースミューテーションとを含む。
【００１６】
一般に、本明細書に記載される主題の別の局面は、クライアントデバイス上に記憶されるデータベースのクライアントバージョンの更新要求を、クライアントデバイスから受信するアクションを含む方法であって、更新要求は、ｉ）データベースのクライアントバージョンについてのクライアントデータベースバージョン番号と、ii）データベースのクライアントバージョンに含まれている特定のデータベースエンティティを指定している第１のカーソルとを含み、方法はさらに、クライアントデバイスからリモートのデータベースのリモートバージョンにアクセスするアクションを含み、データベースのリモートバージョンは複数のデータベースエンティティを含み、各データベースエンティティは、データベースについての複数のデータベースエンティティ全体にわたって単調に増加する態様で割当てられるリモートエンティティバージョンを有し、方法はさらに、特定のデータベースエンティティと一致するデータベースエンティティで始まるデータベースエンティティの順序付けられたサブセットに含まれている複数のデータベースエンティティの各々について、データベースエンティティのリモートエンティティバージョン番号とクライアントデータベースバージョン番号との比較に基づいて、データベースエンティティが更新されたか否かを判断するアクションと、更新された各データベースエンティティについて、エンティティ更新をクライアントデバイスに提供するアクションとを含み、方法はさらに、リモートデータベースバージョン番号を、少なくとも１つのエンティティ更新とともにクライアントデバイスに提供するアクションを含み、リモートデータベースバージョン番号は、データベースのリモートバージョン内の最高のリモートエンティティバージョン番号である方法において具体化され得る。本局面の他の実施形態は、コンピュータストレージデバイス上でエンコードされた、本方法のアクションを実行するように構成される、対応するシステム、装置、およびコンピュータプログラムを含む。
【００１７】
これらおよび他の実施形態の各々は、以下の特徴の１つ以上を随意に含み得る。データベースエンティティのサブセットは、データベースのリモートバージョン内のすべてのデータベースエンティティを含むとは限らない。データベースエンティティのサブセットは、１つ以上のシステム制約が満たされたことに基づいて動的に求められ得る。
【００１８】
１つ以上のシステム制約は、更新要求について許可される最大処理時間、または更新要求について許可される最大更新サイズを含み得る。
【００１９】
オペレーションはさらに、データベースのクライアントバージョンの第２の更新要求をクライアントデバイスから受信することを含み得、第２の更新要求は、ｉ）エンティティ更新とともにクライアントデバイスに提供されたリモートデータベースバージョン番号と一致する第２のクライアントデータベースバージョン番号と、ii）データベースのクライアントバージョンに含まれており、かつデータベースエンティティの順序付けられたサブセットに含まれている最後のデータベースエンティティの後に順序付けられている第２のデータベースエンティティを指定している第２のカーソルとを含む。
【００２０】
オペレーションはさらに、データベースのリモートバージョンについての三次元テーブルを更新することを含み得、三次元テーブルは、現在の時間より前の予め定められた時間内に起こったデータベースのリモートバージョンに対するすべての更新を指定している。
【００２１】
一般に、本明細書に記載される主題の別の局面は、指定されたバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティのカウントを、サーバデバイスから受信するアクションと、データベースエンティティのカウントが、指定されたバージョン番号の時点でデータベースのクライアントバージョンに含まれているエンティティの数を指定しているクライアントエンティティカウント未満であると判断するアクションと、データベースエンティティのカウントがクライアントエンティティカウント未満であると判断したことに応答して、データベースのリモートバージョンに含まれているデータベースエンティティについてのキーのリストを求める要求を、サーバデバイスに送信するアクションと、データベースのリモートバージョンに含まれているデータベースエンティティの適切なサブセットについてのキーの第１の適切なサブセットを、サーバデバイスから受信するアクションと、データベースのクライアントバージョンに含まれているデータベースエンティティの対応する適切なサブセット内にあり、かつキーの第１の適切なサブセットに含まれていないキーを有するいずれのデータベースエンティティも、データベースのクライアントバージョンから除去するアクションとを含む方法において具体化され得る。本局面の他の実施形態は、コンピュータストレージデバイス上でエンコードされた、本方法のアクションを実行するように構成される、対応するシステム、装置、およびコンピュータプログラムを含む。
【００２２】
これらおよび他の実施形態の各々は、以下の特徴の１つ以上を随意に含み得る。オペレーションはさらに、データベースエンティティの第１のサブセットとは異なるデータベースエンティティの第２のサブセットに含まれているデータベースエンティティの第２のカウントを求める第２の要求を、サーバデバイスに送信することを含み得、第２の要求はデータベースの第２のバージョン番号を指定しており、オペレーションはさらに、第２のバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティの対応する第２のサブセットに含まれているデータベースエンティティの第２のカウントを、サーバデバイスから受信することと、データベースエンティティの第２のカウントが、第２のバージョン番号の時点でデータベースのデータベースエンティティクライアントバージョンの第２のサブセットに含まれているエンティティの第２の数を指定している第２のクライアントエンティティカウント未満であると判断することと、第２のサブセットに含まれているデータベースエンティティについてのキーの第２のリストを求める第２の要求を、サーバデバイスに送信することと、データベースのリモートバージョンに含まれているデータベースエンティティの第３のサブセットについてのキーの第３のサブセットを、サーバデバイスから受信することと、第３のサブセットに対応するデータベースのクライアントバージョンに含まれているデータベースエンティティのサブセット内にあり、かつキーの第３のサブセットに含まれていないキーを有するいずれのデータベースエンティティも、データベースのクライアントバージョンから除去することとを含み得る。
【００２３】
本明細書に記載される主題の特定の実施形態は、以下の利点の１つ以上を達成するために実現され得る。データベースのローカルコピーを記憶しているクライアントデバイスは、クライアントデバイスおよびデータベースサーバの両方についてのオーバーヘッドを減少させつつ、同時にエラーおよび誤ったコンフリクトのリスクを減少させるように設計された態様で、かつ、クライアントデバイスとデータベースサーバとの間のネットワーク通信が頻繁に中断され得る状況において、ローカルコピーを更新し続け、データベースのリモートバージョンに対する変更をコミットすることが可能である。データベースサーバおよびクライアントデバイスはデータベースについての変更ログまたは削除マーカを記憶する必要がないため、変更ログおよび削除マーカを用いる他のデータベース管理方法に比べて、必要なシステムリソースが減少する。
【００２４】
本明細書に記載される主題の１つ以上の実施形態の詳細を添付の図面および以下の説明に示す。主題の他の特徴、局面、および利点は、説明、図面、および請求項から明らかになるであろう。
【００２５】
さまざまな図面における同様の参照番号および名称は同様の要素を示す。
【図面の簡単な説明】
【００２６】
【図１】リモートデータベースミューテーションが処理される例示的な環境のブロック図である。
【図２】リモートデータベースミューテーションを取扱うための例示的なプロセスのデータフローの図である。
【図３Ａ】リモートデータベースミューテーションを取扱うための例示的なプロセスのフロー図である。
【図３Ｂ】リモートデータベースミューテーションを提供するための例示的なプロセスのフロー図である。
【図４】データベース同士を同期させるための例示的なプロセスのデータフローの図である。
【図５】データベース同士を同期させるための例示的なプロセスのフロー図である。
【図６】削除されたデータベースエンティティを検出して取扱うための例示的なプロセスのデータフローの図である。
【図７】削除されたデータベースエンティティを検出して取扱うための例示的なプロセスのフロー図である。
【図８】例示的なデータ処理装置のブロック図である。
【発明を実施するための形態】
【００２７】
詳細な説明
概要
データベースに記憶されるデータに複数のクライアントデバイスがアクセスする必要がある場合、リモートデータベースを用いて、各クライアントデバイスに、同じデータセットへのアクセスが与えられ得る。リモートデータベースに記憶されるデータへのアクセスを頻繁に必要とするクライアントデバイスは、リモートデータベースをホストしているデバイスと通信する必要なしにアクセス可能なクライアントデバイス上にデータベースのローカルコピーを記憶し得る。たとえば、リモートデータベースを用いて個人の電話および電子メール連絡先が記憶され得る。ユーザは、ユーザの連絡先を含むリモートデータベースへのアクセスを各々が有するラップトップコンピュータ、タブレットコンピュータ、およびスマートフォンを使用し得、ユーザのデバイスの各々もユーザの連絡先のローカルコピーを記憶し得る。データベースのローカルコピーは、たとえば、ユーザデバイスによる迅速なアクセスのために、および／またはリモートデータベースとのネットワーク通信が利用可能でない場合にユーザの連絡先にアクセスするために用いられ得る。ユーザが、たとえばローカルデータベース内の連絡先を追加、編集、または削除するなどの変更を加えた場合、当該変更が起こるクライアントデバイスは、データベースの変更がリモートデータベースを用いるユーザの他のデバイス上のローカルデータベースに伝播され得るように、リモートデータベースも更新し得る。
【００２８】
別の例として、リモートデータベースを用いてさまざまな食物についての栄養情報が記憶され得る。ユーザは、スマートフォンなどのクライアントデバイス上に含まれるアプリケーションを用いて、データベースに含まれている情報にアクセスして、たとえばユーザの１日の栄養摂取量を追跡し得る。リモートデータベースのローカルコピーは、たとえば、ネットワーク接続が遅いか利用不可能である場合にデータベースへのアクセスを有するのに有用であり得る。ユーザはさらに、たとえば、ローカルデータベースに新たな食物を追加し、既存の食物についての栄養情報を更新することによって、ローカルデータベースを更新し得る。ローカルデータベースに変更が加えられると、クライアントデバイスおよびデータベースサーバは、たとえば、ユーザがローカルに加えた変更を用いてリモートデータベースを更新し、他のユーザがリモートデータベースに提供した変更を用いてローカルデータベースを更新することによって、連携してデータベース同士を同期させ得る。
【００２９】
クライアントデバイスおよびデータベースサーバは、リモートデータベースと、クライアントデバイス上に記憶されるデータベースのローカルコピーとのデータベース同期化を容易にする。クライアントデバイスによってローカルデータベースに適用されるデータベースミューテーションは、当該ミューテーションをデータベースサーバに提供してリモートデータベースにコミットさせるか適用する前に、クライアントデバイスによって折り畳まれるか併合され得る。ミューテーションを折り畳むことは一般に、クライアントの意図を保存する態様でミューテーションを組合せるか併合することによってミューテーションの数を減らすことを伴う。クライアントデバイスによってデータベースサーバに提供されるデータベースミューテーションはリモートデータベースにコミットされる前にさらに折り畳まれることによって、クライアントの意図を保存して冪等性を保証しつつ時間および計算リソースを節約し得る。ローカルデータベースについてクライアントデバイスによって要求された更新に対する応答は、システムリソースを保存し、要求および応答に必要なネットワーク通信負荷を減少させるように、複数の要求および応答に分割され得る。リモートデータベース上で削除されたデータベースエンティティは、変更ログまたは削除マーカを必要とせずにローカルデータベースと同期されることができる。
【００３０】
たとえば、クライアントデバイスは、クライアントデバイス上に記憶されるデータベースのクライアントバージョンに適用されたデータベースミューテーションのログにアクセスし得る。各データベースミューテーションは、データベースエンティティ、当該エンティティについてのオペレーション、および当該エンティティについてのクライアントバージョン番号を指定している。データベースエンティティは、データベースに含まれている行またはレコードとも称され得る。クライアントデバイスは、同じバージョン番号を有するデータベースエンティティについてのミューテーションを識別し、コンフリクト解決ポリシーに基づいて、当該ミューテーションを折り畳むことができるか否かを判断する。たとえば、ミューテーションの結果がデータベースのリモートバージョンに記憶される値に依存する場合は、同じバージョン番号を有するデータベースエンティティを識別するミューテーションの中には折り畳み不可能なものもある。適格なミューテーションを折り畳んだ後、クライアントデバイスはデータベースミューテーションの折り畳んだログを、データベースのリモートバージョンに適用するためにデータベースサーバに提供する。
【００３１】
データベースサーバは、クライアントデバイスからデータベースミューテーションのログを受信し、該当する場合、クライアントデバイスによって折り畳まれなかった同じクライアントバージョン番号を指定しているデータベースミューテーションを折り畳む。クライアントデバイスと同様に、データベースサーバは同じバージョン番号を有するデータベースエンティティについてのミューテーションを識別し、コンフリクト解決ポリシーに基づいて、ミューテーションを折り畳むことができるか否かを判断する。データベースサーバは、たとえば、データベースのリモートバージョンに記憶される値に依存するデータベースミューテーションの有無について、必要であればリモートデータベースを確認し得る。上述のように、データベースミューテーションを折り畳むことによって、データベースミューテーションのログを処理するのに必要な時間およびシステムリソースが減少し得る。
【００３２】
冪等性はさらに、ミューテーションのために、およびいくつかの実現例ではクライアントデバイスとデータベースサーバとの間の他の通信のために、明白な肯定応答を必要とせずに維持され得る。たとえば、データベースサーバからクライアントデバイスに送信された最新の応答が保存され得、保存された応答と一致する識別子を有する要求を受信すると、保存された応答は、一致する識別子を含んでいた要求を処理することを試みることなく提供され得る。
【００３３】
データベース同士を同期させるために、クライアントデバイスは更新要求をデータベースサーバに送信し得る。当該要求は、クライアントデータベースバージョン番号と、いくつかの実現例では、更新が望まれているエンティティを示すカーソルとを含み得る。データベースサーバは、クライアントの要求とともに提供されたクライアントデータベースバージョン番号以降に更新された任意のエンティティについての更新を、クライアントデバイスに提供する。低いクライアントデバイス帯域幅および他の潜在的なネットワーク問題に対応するために、データベースサーバはデータベース更新を複数のエンティティ範囲に分割して、範囲内の更新をクライアントデバイスに提供し得る。
【００３４】
いくつかの実現例では、リモートデータベースは削除されたデータベースエンティティについて変更ログを維持しないか、または削除マーカを使用しない。削除同士を同期させるため、クライアントデバイスはまず、リモートデータベースに記憶されるエンティティのカウントをデータベースエンティティのローカルカウントと比較する。データベースのローカルバージョン内のデータベースエンティティの方が多い場合、クライアントデバイスは、現在リモートデータベース内にあるエンティティについてのキーのリストを要求する。各キーはエンティティを一意に識別し、クライアントデバイスはキーのリストをローカルデータベースに記憶されるキーと比較して、リモートデータベースから削除されたエンティティを見つける。同期化要求と同様に、データベースサーバはエンティティキーの一部のリストを提供して、範囲内の削除同士を同期させ得る。
【００３５】
これらの特徴およびさらなる特徴を以下により詳細に説明する。
例示的な動作環境
図１は、リモートデータベースミューテーションが処理される例示的な環境１００のブロック図である。ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、インターネット、またはそれらの組合せなどのコンピュータネットワーク１０２が、１つ以上のクライアントデバイス１０４を、１つ以上のデータベースストレージデバイス１０８と通信している１つ以上のデータベースサーバ１０６に接続する。いくつかの実現例では、データベースサーバ１０６は分散処理システムにおいて実現され得、分散処理システムは、分散処理システムに直接および／または間接的に接続されたデータベースストレージデバイスに記憶されるデータベースを管理するために用いられ得る多くのデータプロセッサを含む。クライアントデバイスとデータベースサーバとの間の通信を容易にするために、他のシステムおよびネットワーク構成が用いられてもよい。
【００３６】
データベースサーバ１０６は、たとえばデータベースストレージデバイス１０８内のデータの記憶を管理することができる電子デバイスである。例示的なデータベースサーバには、パーソナルコンピュータ、サーバコンピュータ、およびネットワーク１０２を介してデータを送受信可能な他のデバイスがある。データベースサーバ１０６は典型的に、データベースに記憶されるデータを管理するために、かつデータ分析、記憶、および操作などのタスクを実行するために用いられるデータベースアプリケーションを含む。クライアントデバイス１０４との通信およびネットワーク通信の管理を容易にするために、ロードバランサーまたはアプリケーションサーバなどの他のコンポーネントがデータベースサーバ１０６に含まれてもよいし、またはデバイスサーバ１０６と通信していてもよい。
【００３７】
クライアントデバイス１０４は、データベースミューテーションの送信を含む、ネットワーク１０２を介してデータを要求および受信することができる電子デバイスである。例示的なクライアントデバイス１０４には、パーソナルコンピュータ、モバイル通信デバイス、およびネットワーク１０２を介してデータを送受信可能な他のデバイスがある。クライアントデバイス１０６は典型的に、ネットワーク１０２を介したデータの送受信を容易にする１つ以上のアプリケーションを含む。たとえば、アプリケーションデータを、たとえばデータベースストレージデバイス１０８などに、リモートに記憶するアプリケーションは、たとえばクライアントデバイス上に記憶されるアプリケーションのためのデータベースのクライアントバージョンと、データベースサーバを用いてアクセス可能なデータベースのリモートバージョンとを有し得る。
【００３８】
データベースストレージデバイス１０８は、データベースサーバ１０６がアクセス可能なデータベースデータおよびメタデータを記憶する。データベースサーバ１０６とデータベースストレージデバイス１０８との間の通信は、たとえば、直接通信、内部ネットワーク通信、および／またはネットワーク１０２を通じた通信のいずれかの組合せであり得る。単一のデータベースが１つのデータベースストレージデバイス上に、または複数のデータベースストレージデバイスにわたって記憶されてもよく、単一のデータベースストレージデバイスが複数のデータベースを記憶してもよい。
【００３９】
たとえば、クライアントデバイス１０４からリモートにデータベースストレージデバイス１０８に記憶されているデータベースなどのリモートデータベースは、データベースサーバ１０６によって定期的に更新され得る。データベースサーバ１０６は、データベースサーバ１０６上で実行されるデータベースアプリケーションによって指定されるように、および／またはクライアントデバイス１０４からデータベースミューテーションを受信したことに応答して、データベースを更新し得る。たとえば、クライアントデバイスは、データベースのクライアントのローカルコピーに加えられたクライアントデバイスの変更に基づいてデータベースミューテーションのログまたはキューをデータベースサーバに提供し得る。データベースサーバはデータベースミューテーションのログを用いて、それらを、データベースストレージデバイス上に記憶されるデータベースのリモートバージョンに適用することができる。
【００４０】
データベースのリモートバージョンは、各々がデータベースの各自のクライアントバージョンを有する多くのクライアントデバイスによってアクセスおよび更新され得る。たとえば、アプリケーションはリモートデータベースを用いて、当該アプリケーションを用いる各クライアントデバイスが同じ情報を見ることを保証し得る。１つのクライアントデバイスがリモートデータベースを更新すると、第２のクライアントデバイスは、後で当該リモートデータベースにアクセスしたときにその更新を見ることになる。以下により詳細に記載されるさまざまなコンフリクト解決技術を用いて、複数のクライアントデバイスがデータベース内の同じデータの更新を試みる際に発生するコンフリクトが管理される。
【００４１】
いくつかの実現例では、データベースを更新する際に潜在的なコンフリクトの解決を助けるためにバージョニングが用いられ得る。データベースに記憶される各エンティティは関連付けられたバージョン番号を有し得、各データベースも関連付けられたバージョン番号を有し得る。エンティティバージョン番号はデータベース内で単調に増加する態様で割当てられ得、つまり、各データベースエンティティは一意のバージョン番号を有し、各データベースエンティティに適用されるその後の各ミューテーションによって、ミューテーションしたデータベースエンティティに増加したバージョン番号が割当てられる。いくつかの実現例では、データベースエンティティバージョン番号は、エンティティが挿入、更新等された場合にのみデータベースサーバによって増加する。データベースバージョン番号はデバイス、クライアントまたはサーバに特有であってもよく、いくつかの実現例では、各自のクライアントまたはサーバデータベース内の最高のデータベースエンティティバージョン番号と等しくてもよい。
【００４２】
データベースバージョン、データベースエンティティバージョン、およびコンフリクト解決ポリシーを用いて、データベースのクライアントのバージョンとデータベースのリモートバージョンとの間の潜在的なコンフリクトが解決されて不一致が防止され得る。クライアントデータベースとそれらの各自のリモートデータベースとの間のコンフリクトおよび不一致は、データベースミューテーションの適用、クライアントデータベースの同期化などの、複数の異なるデータベースオペレーション時に、かつ削除されたデータベースエンティティを識別する際に生じて解決され得る。これらのデータベースオペレーションの各々の間のコンフリクトおよび不一致の解決を以下により詳細に説明する。
【００４３】
データベースミューテーションの処理
図２は、リモートデータベースミューテーションを取扱うための例示的なプロセス２００のデータフローである。クライアントデバイス２０２は、データベース２０６のクライアントバージョンをローカルストレージデバイス２０４に記憶する。クライアントデバイス２０２は、データベースミューテーションをクライアントデータベース２０６に定期的に適用し得る。データベースミューテーションは、データベースに記憶されるエンティティに対する変更である。たとえば、データベースエンティティの追加、除去、または更新の各々は、データベースに含まれているエンティティ、当該エンティティについてのオペレーション、および当該エンティティについてのクライアントバージョン番号を指定しているデータベースミューテーションを用いて行なわれる。
【００４４】
データベースミューテーションの例示的なログ２０８は、クライアントデバイス２０２がクライアントデータベース２０６に対して行なったミューテーションのリストを示す。ログ２０８内に示される例示的な各ミューテーションは、エンティティについてのキー、当該エンティティについてのオペレーション、クライアントバージョン番号、およびコンフリクト解決ポリシーを指定している。たとえば、エンティティＡは値ｘを有し、クライアントデバイスはこの値をまず５に変更している。その後ログ２０８において、クライアントデバイス２０２は、同じエンティティＡについて、値ｘを２に、次に再び４に変更している。エンティティＡの各ミューテーションについて、コンフリクト解決ポリシーは「ＭＩＮ（ｘ）」と列挙されており、これは、コンフリクトが発生した場合、ｘについての最小値が勝つことを示す。
【００４５】
例示的なプロセス２００では、データベースサーバ２１０はデータベース内のエンティティのバージョン番号を制御し、クライアントデバイス２０２上で起こるデータベースミューテーションはデータベースエンティティについてのバージョン番号の変更をもたらさず、たとえば、クライアントデータベース２０６内でエンティティＡに３つのミューテーションが適用されているが、バージョン番号は同じ（クライアントバージョン１０）ままである。クライアントデバイス２０２は、ミューテーションをデータベースサーバ２１０に提供する前に、ログ２０８内のどのミューテーションが折り畳まれ得る、または統合され得るかを判断する。
【００４６】
どのミューテーションが折り畳まれ得るかを判断するために、クライアントデバイス２０２は、同じエンティティについての同じクライアントバージョン番号を各々が指定しているログ２０８内の２つ以上のミューテーションを識別する。たとえば、第１、第５および第６のミューテーションはすべて、エンティティＡのクライアントバージョン１０についてのものである。ログ２０８内に指定されたポリシーなどのコンフリクト解決ポリシーを用いて、クライアントデバイス２０２は、識別されたミューテーションを折り畳むことができるか否かを判断する。いくつかの実現例では、デフォルトコンフリクト解決ポリシーが用いられ得る。デフォルト解決ポリシーは、たとえば、データベースサーバ２１０にて記憶される全データベースについてのデフォルトポリシー、または、特定のデータベースに特有であって当該特定のデータベースとともに記憶されるデフォルトポリシーであり得る。
【００４７】
コンフリクトが生じ得るのは、たとえば、エンティティについてのクライアントバージョン番号が、リモートデータベース２１４内の当該エンティティについてのベースバージョン番号と一致しない場合である。コンフリクトが存在する場合、データベースサーバ２１０はコンフリクト解決ポリシーを用いて、コンフリクトしているデータベースミューテーションが適用されるべきか否かを判断する。例示的なコンフリクト解決ポリシーには、コンフリクトがリモートデータベースに有利に解決されることになる「リモート」、コンフリクトがクライアントデバイスのミューテーションに有利に解決されることになる「クライアント」、コンフリクトがエンティティについての最低値をもたらす値を選択することによって解決されることになる「ＭＩＮ」、および、コンフリクトがエンティティについての最高値をもたらす値を選択することによって解決されることになる「ＭＡＸ」がある。上述のポリシーおよびポリシーの名前は例であり、他のポリシー、または同じポリシーについて他の名前が用いられてもよい。
【００４８】
クライアントデバイス２０２はコンフリクト解決ポリシーを用いて、データベースミューテーションが折り畳まれるのに適格であるか否かを判断し得る。いくつかの実現例では、データベースミューテーションは、当該データベースミューテーションによって指定されるオペレーションの結果が、対応するデータベースエンティティについてリモートデータベース２１４上に記憶される値とは無関係である場合に、折り畳みに適格である。たとえば、「リモート」または「クライアント」のコンフリクト解決ポリシーを有するデータベースミューテーションは、それらのポリシーを用いるコンフリクト解決がリモートデータベース２１４に記憶されるいずれの値にも依存しないため、折り畳まれ得る。つまり、コンフリクト解決ポリシーが「リモート」である場合、リモートデータベース２１４内の値に係わらず、コンフリクトは常にリモートデータベース内の値に有利に解決することになり、「クライアント」のコンフリクト解決ポリシーは、リモートデータベース２１４に記憶される値に係わらず、常にクライアントのミューテーションに有利にコンフリクトを解決することになる。
【００４９】
場合によっては、データベースミューテーションによって指定されるオペレーションの結果は、リモートデータベース２１４に記憶される値に依存する。たとえば、ログ２０８内の第５および第６のミューテーションは、エンティティＡについて２つのミューテーションｘ＝２およびｘ＝４と、ＭＩＮ（ｘ）のコンフリクト解決ポリシーとを指定している。クライアントデバイス２０２によって提供されるデータベースミューテーション同士は互いにコンフリクトせず、典型的に順番に適用されるため、ｘは２に、次に４に変更される。しかし、リモートデータベースは２から４の値を記憶し得るため、これら２つのミューテーションは、たとえば最新のデータベースミューテーションなどの単一のデータベースミューテーションであるｘ＝４に折り畳まれ得ない。
【００５０】
一例として、リモートデータベース内のｘの値が３であり、ｘ＝２およびｘ＝４をｘ＝４に折り畳んだ場合、ＭＩＮ（４，３）＝３であるため、コンフリクトによってｘ＝３となる。ミューテーションが折り畳まれなかった場合、ミューテーションｘ＝２とのコンフリクトによってＭＩＮ（２，３）＝２となるため、最終結果はｘ＝４となり、同じログからの複数のミューテーション同士はコンフリクトしないため、最後のミューテーションｘ＝４はコンフリクトせず、ｘは２から４に変更される。
【００５１】
コンフリクト解決ポリシーは、クライアントの意図を保存する態様で解決されることになる。以下の表は、いくつかの例示的な解決ポリシーの場合に折り畳まれ得るミューテーションを列挙している。各ミューテーションは、同じデータベースエンティティおよびバージョン番号についてのものである。表の第１の各ミューテーションは、オペレーションＡ、およびコンフリクト解決ポリシーを含む。表中の第２の各ミューテーションも、オペレーションＢ、および第１のミューテーションとともに折り畳まれ得るコンフリクト解決ポリシーを含む。結果として得られる折り畳まれたミューテーションが表の３番目の列に示されている。
【００５２】
【表１】
0006334009.tif 000002
【００５３】
たとえば、第１のミューテーション「クライアント（Ａ）」の場合、任意のコンフリクトがクライアントに有利に解決することになるか、またはコンフリクトがない。ミューテーションがクライアントに有利に解決した後、その後のミューテーション同士はコンフリクトすることができないため、第２のミューテーションがどのポリシーを指定しているかに係わらず、オペレーションＢが実行されることになる。各ミューテーションの意図を保存している折り畳まれた結果は、「クライアント（Ｂ）」である。同様に、第２のミューテーションが「クライアント（Ｂ）」である場合は、第１のオペレーションまたはポリシーが何であっても違いはない。なぜなら、任意のコンフリクトが第２のミューテーションとともにクライアントおよびオペレーションＢに有利に解決することになるか、またはコンフリクトがないためである。
【００５４】
例示的なプロセス２００では、クライアントデバイス２００はログ２０８に含まれているミューテーションのうちのいくつかを折り畳んでいるため、結果としてデータベースミューテーションの折り畳まれたログ２０９が得られる。クライアントデバイス２０８は、たとえば、エンティティＡについての第１および第５のミューテーションがｘ＝２に折り畳まれるのに適格であると判断する。なぜなら、ＭＩＮ（ｘ）ポリシーを有するｘ＝２が後に続くｘ＝５はリモートデータベースに記憶されるｘの値に依存せず、たとえばＭＩＮ（５，２）＝２であるためである。上述のように、エンティティＡについての第６のミューテーションｘ＝４は併合されることができず、折り畳まれたログ２０９内の別個のミューテーションのままである。
【００５５】
ログ２０８に含まれている第２および第３のミューテーションは、エンティティＢ、クライアントバージョン７についてのものである。クライアントデバイス２０２は、クライアントデバイス２０２、クライアントデータベース２０６、データベースサーバ２１０またはリモートデータベース２１４の１つ以上に記憶され得る「デフォルト」コンフリクト解決ポリシーに基づいて、これらのミューテーションがｘ＝４に折り畳まれるのに適格であると判断する。たとえば「リモート」のデフォルト解決ポリシーは、同じエンティティの同じバージョンについての複数のミューテーションが、この例ではｘ＝４である最後のミューテーションに折り畳まれることを可能にするであろう。エンティティＣについての第４のミューテーションは、ログ２０８内にエンティティＣについてのミューテーションが１つしかないため、折り畳まれていない。
【００５６】
異なる種類のミューテーションは異なる方法で折り畳まれ得る。たとえば、以下の表は、同じエンティティに対して行なわれる、たとえば「挿入」、「更新」、「アップサート」、および「削除」データベースオペレーションなどの、折り畳まれたミューテーションを列挙している。「挿入」は新たなエンティティを挿入するか失敗し、「更新」は既存のエンティティを更新するか失敗し、「アップサート」は新たなエンティティを挿入するか既存のエンティティを更新し、「削除」はエンティティが存在する場合にエンティティを削除する。例の表に示されるように、第２の「挿入」は第１の「挿入」の結果としてエンティティが既に存在している場合は失敗し、折り畳まれたミューテーションとして「＜不正な要求＞」がもたらされる。「更新（Ｂ）」が後に続く第１のミューテーション「挿入（Ａ）」は、単一の「挿入（Ｂ）」ミューテーションに折り畳まれることができる。
【００５７】
【表２】
0006334009.tif 000003
【００５８】
例示的なプロセス２００では、データベースサーバ２１０はデータベースミューテーションの折り畳まれたログ２０９を受信する。データベースサーバ２１０は折り畳まれたログ２０９を受信する必要はなく、いくつかの実現例では、たとえばログ２０８などの折り畳まれていないログがデータベースサーバ２１０によって処理のために受信されてもよい。
【００５９】
データベースサーバ２１０は、折り畳まれたログ２０９内で、同じクライアントバージョン番号を指定しているデータベースミューテーションを識別し、それらのデータベースミューテーションが折り畳みに適格であると判断する。いくつかの実現例では、データベースサーバ２１０は、あるエンティティについて複数のミューテーションが折り畳まれたログ２０９内に存在している場合であっても、当該エンティティについての１つのミューテーションのみがリモートデータベース２１４にコミットされるように、複数のミューテーションを折り畳むことになる。
【００６０】
いくつかの実現例では、データベースサーバ２１０は、コンフリクト解決ポリシーに基づいてリモートデータベース２１４に適用されるであろう１つのミューテーションを識別することによって、同じエンティティの同じクライアントバージョンについての複数のデータベースミューテーションが折り畳みに適格であると判断する。データベースミューテーションは、ｉ）それがコンフリクトを生じさせなかった場合、またはii）コンフリクトがデータベースミューテーションに有利に解決される場合、リモートデータベース２１４に適用されるであろう。上述のように、コンフリクトが生じ得るのは、クライアントデバイス２０２から受信したデータベースミューテーションが、リモートデータベース２１４内のエンティティについてのベースバージョン番号と一致しないエンティティについてのクライアントバージョン番号を指定している場合である。データベースサーバ２１０は、あるエンティティについてのミューテーションがリモートデータベース２１４に適用されるたびに当該エンティティのベースバージョン番号を更新する。エンティティのベースバージョンがクライアントバージョン番号と一致する場合は、コンフリクトは存在しない。一方、エンティティのベースバージョンがクライアントバージョン番号と一致しない場合は、たとえば別のクライアントデバイスからのミューテーションが、折り畳まれたログ２０９に含まれているデータベースミューテーションを適用する前にリモートデータベース２１４に適用されているため、コンフリクトが存在することになる。
【００６１】
リモートデータベース２１４に適用されるであろうミューテーションを識別した後、そのエンティティについての折り畳まれたログ２０９内のすべてのデータベースミューテーションが単一のデータベースミューテーションに折り畳まれることができる。たとえば、あるエンティティについてのすべてのデータベースミューテーションは、そのミューテーションのうちの少なくとも１つが適用されるであろう場合にそのエンティティについての最新のデータベースミューテーションに折り畳まれ得る。なぜなら、オペレーションまたはコンフリクトがクライアントが提供したミューテーションに有利に解決すると、クライアントデバイスによって提供される他のミューテーション同士は互いにコンフリクトすることができず、対応するエンティティについてクライアントによって提供される最後のミューテーションに折り畳まれることができるためである。
【００６２】
例示的なプロセス２００では、折り畳まれたログ２０９の第３および第４のミューテーションはエンティティＡのクライアントバージョン１０を指定している。第３のオペレーションｘ＝２が適用されるであろうとデータベースサーバ２１０が判断する場合は、そのミューテーションは第４のミューテーションｘ＝４に折り畳まれ得る。なぜなら、第４のミューテーションは第３のミューテーションの後であり、第３のミューテーションとコンフリクトすることができないためである。一例として、折り畳まれたログ２０９内のエンティティＡについてのクライアントバージョン番号は１０である。リモートデータベース２１４内のエンティティＡについてのベースバージョンは１３である。たとえば、エンティティＡがデータベースサーバ２１０によって以前に更新されている結果としてバージョン番号同士が一致しないために、コンフリクトが生じる。ＭＩＮ（ｘ）のコンフリクト解決ポリシーによって、コンフリクトは第３のミューテーションｘ＝２に有利に解決する。なぜなら、２はリモートデータベースに記憶されているｘについての値３より小さいためである。第３のミューテーションはリモートデータベース２１４に適用されることになるため、いずれのその後のミューテーションも適用されることになり、これによってデータベースサーバ２１０は、エンティティＡについてのすべてのミューテーションを単一のミューテーションに折り畳むことができる。
【００６３】
たとえば、常にリモートデータベース値に有利に解決するコンフリクトを生じさせるエンティティについての複数のミューテーションなど、あるエンティティについてのミューテーションが適用されないであろう場合は、データサーバ２１０は、上述と同様の態様で当該エンティティについてのすべてのデータベースミューテーションを単一のミューテーションに折り畳み得る。いくつかの実現例では、適用されないであろうミューテーションはデータベースオペレーションのリストから除去され得、データベースサーバ２１０はそれらをリモートデータベース２１４にコミットさせることを試みないことになる。
【００６４】
例示的なプロセス２００では、第２の折り畳まれたログ２１６は、データベースサーバ２１０によって折り畳まれた後のミューテーションを示す。エンティティＢおよびＣについて、第１および第２のミューテーションに対するさらなる折り畳みは不要である。なぜなら、それらは、折り畳まれたログ２０９に含まれていたそれらのエンティティについてのミューテーションに過ぎないためである。
【００６５】
ミューテーションをリモートデータベース２１４にコミットさせる際、データベースサーバ２１０は、デバイスミューテーションのクライアントバージョン番号、または該当する場合、折り畳まれたミューテーションを、リモートデータベース２１４内の対応するエンティティについてのベースバージョンと照合する。データベースミューテーションによって指定されるクライアントバージョン番号がベースバージョン番号と一致する場合は、コンフリクトはなく、データベースミューテーションはリモートデータベース２１４に適用され得る。たとえば、折り畳まれたログ２１６内のエンティティＣについてのミューテーションは、クライアントバージョン番号４およびそのオペレーションｘ＝７を指定している。データベースサーバは、クライアントバージョン番号（４）をリモートデータベース２１４に記憶されるベースバージョン番号（４）と比較し、一致を見つけると、オペレーションｘ＝７が適用され得ると判断し、リモートデータベース内でｘの値を２から７に変更する。
【００６６】
折り畳まれたログ２１６内のエンティティＢを指定しているミューテーションはクライアントバージョン７を有しており、これは、リモートデータベース２１４に記憶されるベースエンティティバージョン（１２）と比較されると、コンフリクトを生じさせる。このミューテーションはコンフリクト解決ポリシーを指定しておらず、コンフリクトの解決はデータベースサーバ２１０デフォルトに従って、または規定されている場合は、リモートデータベース２１４デフォルトに従って行なわれることになる。たとえば、「リモート」のデフォルト解決ポリシーでは、コンフリクトしているミューテーションは適用されないのに対して、「クライアント」のデフォルト解決ポリシーでは、データベースサーバ２１０がコンフリクトしているミューテーションを適用するであろう。
【００６７】
折り畳まれたログ２１６の第３のミューテーションは、エンティティＡのクライアントバージョン１０およびオペレーションｘ＝４を指定している。データベースサーバ２１０は、この折り畳まれたミューテーションがリモートデータベース２１４に適用されるであろうと以前に判断しているため、オペレーションｘ＝２がリモートデータベース２１４に適用される。
【００６８】
データベースサーバ２１０がミューテーションをリモートデータベース２１４に適用すると、影響を受けたエンティティについてのベースエンティティバージョンもリモートデータベース２１４内で更新され得る。たとえば、上記の例ではエンティティＡおよびＣが更新されており、単調に増加する態様でバージョン番号を割当てる際、エンティティＣのベースバージョンが４から１４に更新され得、エンティティＡのベースバージョンが１３から１５に更新され得る。上述の例ではベースバージョン番号を１ずつ増加させているが、エンティティが更新される順序を保存する他の量を用いてベースバージョン番号を増加させてもよい。別の例として、そのバージョン番号が常に増加していることを保証するためにタイムスタンプが用いられてもよい。
【００６９】
データベースサーバ２１０は、データベースミューテーションを処理した後、応答データ２１８をクライアントデバイス２０２に提供する。応答データ２１８は、データベースミューテーションの結果に関連する情報を含み得る。たとえば、応答データ２１８は、更新されたエンティティについて、リモートデータベース２１４内のベースバージョン番号と一致するエンティティについての新たなバージョン番号を含み得る。応答データ２１８は、成功または失敗の表示をさらに含み得る。成功は、ミューテーションがリモートデータベースに必ずしも適用されるとは限らないが受信および処理されたことを示し、失敗は、ミューテーションがデータベースサーバ２１０によって受信されなかった、または処理されなかったことを示す。例示的なプロセス２００では、応答データ２１８は、データベースサーバ２１０に送信される折り畳まれたログ２０９に含まれている各データベースミューテーションについて、ミューテーションの処理の失敗または成功の表示、試みられたミューテーションの適用の結果、および対応するエンティティのベースバージョン番号を示す。いくつかの実現例では、現在の値も提供され得、たとえば、結果２１８は、エンティティＢがリモートデータベース２１４内に７の値を有することを示し得る。いくつかの実現例では、値は結果２１８とともに提供されず、クライアントデバイス２０２は別個のクエリ、または更新要求によって更新を得る。
【００７０】
クライアントデバイス２０２は応答データ２１８を用いて、ログ２０８内に提供されたミューテーションが成功裏に受信、処理、および適用されたか否かを判断し得る。成功した場合、クライアントデバイス２０２はクライアントデータベース２０６内の対応するエンティティのバージョン番号を更新して、応答データ内に提供されている新たなベースバージョンを反映し得る。失敗した場合、クライアントデバイス２０２は新たなミューテーションを送信するか、または、たとえば更新要求において、リモートデータベース２１４からの対応するエンティティについての現在のデータを要求し得る。
【００７１】
いくつかの実現例では、データベースサーバおよびクライアントデバイスは、データベースミューテーションの、およびいくつかの実現例ではデータベースサーバによって受信される他の通信または命令の、冪等性を保証するように設計された態様で動作し得る。たとえば、データベースサーバに送信される命令は、クライアントデバイスによって提供される要求識別子を有し得る。データベースサーバがクライアントデバイスからの要求に応答すると、データベースサーバは応答を記憶し、それを要求識別子と関連付け得る。クライアントデバイスが応答を受信する場合は、その後のいずれの要求にも新たな要求識別子が割当てられることになる。データベースサーバが新たな識別子を有する要求を受信すると、新たな識別子は、以前に与えられた要求がクライアントデバイスによって受信されたという、データベースサーバに対する肯定応答の役割を果たす。クライアントデバイスが応答を受信しない場合は、クライアントデバイスは同じ要求識別子を用いて要求を再試行し得る。クライアントデバイスが要求を変更する場合であっても、同じ要求識別子が用いられる。データベースサーバが、最新に提供された応答と一致する要求識別子を有する要求を受信すると、データベースサーバは新たな要求に対してアクションを取らず、代わりにクライアントデバイスに以前の応答を提供する。応答データは、クライアントデバイスによって受信されると、どの要求が実際に成功したかをクライアントデバイスに対して示す。
【００７２】
例示的なプロセス２００の一部はクライアントデバイス２０２によって実行され得、例示的なプロセス２００の他の一部はデータベースサーバ２１０によって実行され得る。図３Ａおよび図３Ｂの各々は、異なる視点からの例示的なプロセスを示す。図３Ａに示される例示的なプロセスはサーバデバイスによって実行され得るのに対して、図３Ｂに示される例示的なプロセスはクライアントデバイスによって実行され得る。
【００７３】
次に図３Ａを参照して、図３Ａはリモートデータベースミューテーションを取扱うための例示的なプロセス３００のフロー図である。プロセス３００は、上述のデータベースサーバなどのデータ処理装置によって実行され得る。
【００７４】
データベースミューテーションのログがクライアントデバイスから受信される（３０２）。データベースミューテーションのログは、クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示す。各データベースミューテーションは、データベースに含まれているエンティティ、当該エンティティについてのオペレーション、および当該エンティティについてのクライアントバージョン番号を指定している。ミューテーションのログは、任意の数のエンティティについて任意の数のミューテーションを含み得る。
【００７５】
データベースミューテーションのログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションが識別される（３０４）。たとえば、データベースミューテーションのログは、単一のエンティティについての５つの異なるミューテーションを含み得、５つのミューテーションの各々はそのエンティティについての同じクライアントバージョン番号を指定している。
【００７６】
プロセス３００は、コンフリクト解決ポリシーに基づいて、２つ以上のデータベースミューテーションが折り畳みに適格であると判断する（３０６）。いくつかの実現例では、２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、コンフリクト解決ポリシーに基づいてリモートデータベースに適用されるであろう２つ以上のデータベースミューテーションの第１のデータベースミューテーションを識別することを含む。たとえば、同じエンティティについて５つの異なるデータベースミューテーションがある場合、データベースサーバは、当該データベースミューテーションのうちの１つがリモートデータベースに適用されるであろう限り、それらは折り畳みに適格であると判断し得る。データベースミューテーションがリモートデータベースに適用されるであろうと判断するために、データベースサーバは、たとえば、コンフリクトの有無をまず確認し得、コンフリクトがなければミューテーションが適用され、コンフリクトがあれば、当該コンフリクトがデータベースミューテーションまたは現在のリモートデータベース値に有利に解決されるか否かを確認し得る。
【００７７】
いくつかの実現例では、２つ以上のデータベースミューテーションは、当該データベースミューテーションのいずれもリモートデータベースに適用されないであろう場合は折り畳みに適格である。たとえば、コンフリクト、およびリモートデータベース内の値に有利であるコンフリクト解決ポリシーを伴う場合は、データベースミューテーションは折り畳みに適格であると判断され得る。いくつかの実現例では、折り畳みに適格である２つ以上のデータベースミューテーションの各々がコンフリクト解決ポリシーを指定している。いくつかの実現例では、コンフリクト解決ポリシーは、データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである。
【００７８】
２つ以上のデータベースミューテーションが単一のミューテーションに折り畳まれる（３０８）。いくつかの実現例では、２つ以上のデータベースミューテーションを折り畳むことは、第１のデータベースミューテーションと、第１のデータベースミューテーションの後に起こる２つ以上のデータベースミューテーションの他の各データベースミューテーションとを、単一のデータベースミューテーションに折り畳むことを含む。たとえば、折り畳みに適格であるデータベースミューテーションが５つある場合は、５つのデータベースミューテーションのすべてが単一のデータベースミューテーションに折り畳まれ得る。いくつかの実現例では、単一のデータベースミューテーションは、折り畳みに適格である２つ以上のデータベースミューテーションからの最新のデータベースミューテーションである。
【００７９】
いくつかの実現例では、プロセス３００は、単一のデータベースミューテーション、およびログに含まれている他の各データベースミューテーションについて、データベースのリモートバージョンに問合せて、ミューテーションによって指定されるエンティティについてのベースバージョン番号を識別することを含む。たとえば、エンティティについてのベースバージョン番号は、リモートデータベース内のエンティティに対する最新の更新の日付および時間を指定している、データベースサーバが供給したタイムスタンプであり得る。データベースサーバは次に、エンティティについてのクライアントバージョン番号がエンティティについてのベースバージョン番号と一致するか否かを判断し得る。
【００８０】
クライアントバージョン番号がベースバージョン番号と一致すると判断したことに応答して、データベースサーバは、データベースのリモートバージョンについて、ミューテーションによって指定されるオペレーションを実行し、エンティティについての更新されたベースバージョン番号を含むクライアントデバイスへの応答データを生成し得る。たとえば、折り畳まれた、またはそうでないデータベースミューテーションが、リモートデータベースに記憶されるエンティティのベースバージョンと一致するクライアントデータベースバージョン番号を有する場合、コンフリクトが存在しないため、たとえば、クライアントデバイスがエンティティについての更新を最後に受信または提供してからエンティティが更新されていないため、ミューテーションは適用され得る。
【００８１】
クライアントバージョン番号がベースバージョン番号と一致しないと判断したことに応答して、データベースサーバは、コンフリクト解決ポリシーに基づいて、ミューテーションによって指定されるオペレーションが実行されることになるか否かを判断し、オペレーションが実行されることになると判断されたときにのみオペレーションを実行し、ミューテーションによって指定されるオペレーションが実行されたか否かを指定する、クライアントデバイスへのコンフリクト応答データを生成し得る。コンフリクト解決ポリシーは、たとえば、コンフリクトが常にクライアントに有利に解決することになる、常にリモートデータサーバ値に有利に解決することになる、特定の結果に有利に解決することになる、等のポリシーを含む。
【００８２】
いくつかの実現例では、コンフリクト応答データは、ミューテーションによって指定されるエンティティについて、データベースのリモートバージョンに記憶されるエンティティについての現行バージョンを含む。たとえば、データベースミューテーションがコンフリクトし、コンフリクトがリモートデータベース値に有利に解決した場合、リモートデータベース値およびバージョン番号がクライアントデバイスに提供され得る。
【００８３】
図３Ｂは、リモートデータベースミューテーションを提供するための例示的なプロセス３５０のフロー図である。上述のように、プロセス３５０は、上述のクライアントデバイスなどのデータ処理装置によって実行され得る。
【００８４】
クライアントデバイス上に記憶されるデータベースミューテーションのログが、たとえばクライアントデバイスによってアクセスされる（３５２）。データベースミューテーションのログは、クライアントデバイス上に記憶されるデータベースのクライアントバージョンに対して以前に加えられた変更を示す。各データベースミューテーションは、データベースに含まれているエンティティ、当該エンティティについてのオペレーション、および当該エンティティについてのクライアントバージョン番号を指定している。ミューテーションのログは、任意の数のエンティティについて任意の数のミューテーションを含み得る。
【００８５】
データベースミューテーションのログ内で、同じエンティティについての同じクライアントバージョン番号を各々が指定している２つ以上のデータベースミューテーションが識別される（３５４）。たとえば、データベースミューテーションのログは、単一のエンティティについての５つの異なるミューテーションを含み得、５つのミューテーションの各々はそのエンティティについての同じクライアントバージョン番号を指定している。
【００８６】
プロセス３００は、コンフリクト解決ポリシーに基づいて、２つ以上のデータベースミューテーションが折り畳みに適格であると判断する（３５６）。いくつかの実現例では、２つ以上のデータベースミューテーションが折り畳みに適格であると判断することは、２つ以上のデータベースミューテーションによって指定されるオペレーションの結果が、対応するデータベースエンティティについてデータベースのリモートバージョン上に記憶される値とは無関係であると判断することを含む。たとえば、コンフリクトがクライアントに有利に解決することを指定しているコンフリクト解決ポリシーは、そのエンティティについてどの値がリモートデータベースに記憶されているかに依存せず、つまり、対応するミューテーションは折り畳みに適格である。同様に、コンフリクトがリモートデータベースに有利に解決することを指定しているコンフリクト解決ポリシーも、リモート値はたとえどの値であっても同じままであるため、そのエンティティについてリモートデータベースに記憶される値に依存しない。
【００８７】
いくつかの実現例では、折り畳みに適格である２つ以上のデータベースミューテーションの各々がコンフリクト解決ポリシーを指定している。いくつかの実現例では、コンフリクト解決ポリシーは、データベースのリモートバージョンと関連付けられたデフォルトコンフリクト解決ポリシーである。
【００８８】
２つ以上のデータベースミューテーションは単一のミューテーションに折り畳まれる（３０８）。いくつかの実現例では、２つ以上のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことは、折り畳みに適格である２つ以上のデータベースミューテーションからの最新のデータベースミューテーションを単一のデータベースミューテーションに折り畳むことを含む。たとえば、折り畳みに適格であるデータベースミューテーションが５つある場合は、５つのデータベースミューテーションのすべてが単一の最新のデータベースミューテーションに折り畳まれ得る。
【００８９】
いくつかの実現例では、プロセス３５０はさらに、データベースミューテーションの折り畳まれたログをデータベースサーバに提供することを含み、データベースミューテーションの折り畳まれたログは、折り畳まれなかったデータベースミューテーションのログ内の各ミューテーションと、単一のデータベースミューテーションとを含む。いくつかの実現例では、折り畳まれたログは、単一のミューテーションに折り畳まれた複数のミューテーションを含み得る。
【００９０】
リモートデータベースおよびローカルデータベースの同期化
図４は、データベース同士を同期させるための例示的なプロセス４００のデータフローである。この例示的なプロセスでは、クライアントデバイス４０２は、クライアントデータベース４０６をローカルストレージデバイス４０４に記憶する。クライアントデータベース４０６は、データベースサーバ４１０がアクセス可能なデータベースストレージデバイス４１２に記憶されるリモートデータベース４１４のローカルコピーである。他のクライアントデバイスがリモートデータベース４１４に変更を加える状況では、たとえば、クライアントデバイス４０２がオフにされるか、またはそうでなければデータベースサーバ４１４へのアクセスを有さない場合、これらの変更はクライアントデバイス４０２に自動的に提供されない場合がある。
【００９１】
クライアントデバイス４０２は、更新要求または同期化要求をデータベースサーバ４１０に定期的に送信し得る。たとえば４０８ａおよび４０８ｂなどの各要求は、クライアントデータベースバージョン番号を含み、データベースについてのカーソルをさらに含み得る。いくつかの実現例では、クライアントデータベースバージョン番号は、クライアントデータベース４０６内の最高のエンティティバージョン番号と等しい。例示的なデータフロー４００では、最高のエンティティバージョン番号は１０であり、これが第１の要求４０８ａ内でデータベースサーバ４１０に送信される。カーソルは、更新を受信するための開始点の役割を果たすことになる特定のデータベースエンティティを示す論理位置である。例示的なデータフロー４００では、第１の要求４０８ａによって指定されるカーソルは、クライアントデータベースの第１のデータベースエンティティであるエンティティＡを指定している。いくつかの実現例では、カーソルは要求内で指定されず、この場合、データベースサーバ４１０は第１のエンティティからの更新の有無を確認し始め得る。
【００９２】
データベースサーバ４１０は、リモートデータベース４１４にアクセスすることによって更新要求４０８ａを処理し、カーソルに対応するエンティティから始めて、エンティティが更新されたか否かを確認する。データベースエンティティバージョン番号が単調に増加する態様で割当てられる場合は、要求４０８ａ内に提供されるクライアントデータベースバージョン番号よりも高いバージョン番号を有するデータベースエンティティはいずれも更新されているのに対して、クライアントデータベースバージョン番号以下のバージョン番号を有するデータベースエンティティはいずれも更新されていない。例示的なデータフロー４００では、キー１，２，５，７および９に対応するエンティティはすべて更新されている。
【００９３】
更新された各データベースエンティティについて、データベースサーバ４１０は、更新されたエンティティを指定しているデータ、更新された値、およびリモートデータベース４１４内のエンティティのバージョン番号を、クライアントデバイス４０２に提供する。たとえば、例示的なプロセス４００に含まれている更新４１６のうちの１つである第１の更新４２２は、エンティティＡに対する更新を含む。更新４２２は、当該エンティティについてのリモートデータベースバージョン番号１２、および更新された値ａ２を指定している。
【００９４】
いくつかの実現例では、データベースサーバ４１０はリモートデータベース４１４全体の更新の有無を確認せず、かつ更新を提供せず、代わりにデータベースエンティティのサブセットまたは適切なサブセットの更新の有無を確認し、かつ更新を提供する。更新が提供されるデータベースエンティティのサブセットは、たとえば、リモートデータベース４１４および／またはデータベースサーバ４１０によって指定される特定のシステム制約に依存し得る。例示的なシステム制約には、最大処理時間、および／または最大更新サイズ等がある。クライアントデバイス４０２が高速および／または高信頼ネットワークアクセスを有しない場合は、要求を処理する時間および更新に含まれているデータの量を制限することによって、データの損失および／または矛盾を防止することを助けることができる。加えて、大量のデータを含むデータベースは更新の有無を確認するのに長い時間が掛かり得、この時間の間にデータベースミューテーションのバックログが生じ得る。更新の有無が確認された後であるが、更新応答がクライアントデバイス４０２に送信される前に変更されたエンティティによって生じるコンフリクトなどの他の問題が起こる可能性は、要求を処理し、データベースエンティティのサブセットについての更新を提供するシステム制約を用いることによって低下し得る。
【００９５】
例示的なプロセス４００では、データベースサーバが更新の有無を確認したエンティティの第１のサブセット４２０は、キーＡ〜Ｄによって指定されるエンティティを含む。たとえば、データベースサーバ４１０は、時間制限に達する前にデータベース記録のうちの４つについて更新の有無を確認している可能性がある。データベースサーバ４１０によって提供される第１のデータベース更新４２２は、更新された２つのエンティティと、当該エンティティについてのリモートデータベースバージョン番号と、当該エンティティについての更新された値とを示す。加えて、第１の更新４２２は、リモートデータベースバージョン番号２０およびカーソルＤを指定している。リモートデータベースバージョン番号およびカーソルは、第１の更新４２２に含まれているエンティティの第１のサブセット４２０がエンティティＤで終わったこと、および第１のサブセット４２０に含まれているエンティティの各々はリモートデータベースバージョン番号２０の時点で最新であることをクライアントデバイス４０２に対して示す。第１の更新４２２をクライアントデータベース４０６に適用する際、クライアントデバイス４０２は、データベースについてのクライアントバージョン番号が１０であっても、キーＡ〜Ｄによって指定されるエンティティがデータベースバージョン２０の時点で最新であることを示すデータをさらに記憶し得る。なお、クライアントデータベース４０６についてのクライアントバージョン番号は、更新がデータベースエンティティのサブセットについてのみ提供された場合は更新されない。なぜなら、たとえばキーＥ〜Ｊによって指定されるエンティティなどの他のエンティティは依然としてデータベースバージョン１０の時点で最新であるに過ぎないためである。
【００９６】
第１の更新４２２を受信および適用した後、クライアントデバイスは第２の要求４０８ｂをデータベースサーバ４１０に送信し得る。第２の要求４０８ｂは、データベースサーバ４１０が、エンティティＤを除いて、エンティティＤ以降の更新を提供すべきであることを示す更新されたカーソルを含む。第２の要求４０８ｂ内に指定されるクライアントデータベースバージョン番号は依然としてバージョン１０である。なぜなら、クライアントデータベース４０６内のキーＥ〜Ｊと関連付けられたエンティティは依然としてデータベースバージョン１０の時点で最新であるに過ぎないためである。
【００９７】
データベースサーバ４１０は、エンティティＤに続くエンティティ、すなわちエンティティＥで始まる第２のサブセット４３０について更新の有無を確認し始める。例示的なプロセス４００では、データベースサーバ４１０は条件が満たされる前にエンティティＧに到達し、データベースサーバ４１０はエンティティＥ〜Ｇについての更新とともに第２の更新４３２をクライアントデバイス４０２に送信する。第１の更新４２２と第２の更新４３２との間でリモートデータベース４１４に対して変更が加えられているため、リモートデータベースバージョン番号は第２の更新４３２の送信の時点でバージョン２４に増加している。たとえば、エンティティＧは、第１の更新４２２と第２の更新４３２との間でバージョン２０から２１に更新されている。
【００９８】
第２の更新４３２を受信すると、クライアントデバイス４０２は、クライアントデータベース４０６の第２のサブセット４３０に含まれているエンティティを更新する。第２の更新４３２をクライアントデータベース４０６に適用する際、クライアントデバイス４０２は、キーＥ〜Ｇによって指定されるエンティティがデータベースバージョン２４の時点で最新であることを示すデータをさらに記憶し得る。この点で、エンティティＡ〜Ｄは依然としてデータベースバージョン２０の時点で最新であるに過ぎず、エンティティＨ〜Ｊはデータベースバージョン１０の時点で最新である。
【００９９】
第３のサブセット４４０が更新された後、プロセス４００は再び第１のエンティティから続行し得、プロセス４００は複数回繰返され得る。いくつかの実現例では、エンティティのサブセットは動的に調整され得る。つまり、例示的なプロセス４００におけるその後の更新については、データベースサーバ４１０は更新を提供する前にエンティティＡ〜Ｃのみを通過し得る。場合によっては、データサーバ４１０は単一の更新においてすべてのデータベースエンティティを通過し得る。サブセットは、たとえば、システム制約が任意の特定の更新要求について何を許可するのかに基づいて、動的に調整され得る。
【０１００】
いくつかの実現例では、サブセットが併合され得る。たとえば、クライアントデバイス４０２は、クライアントデータベース４０６の２つ以上のサブセットが、各サブセットが同じリモートデータベースバージョン番号の時点で最新である場合に単一のサブセットに併合され得ると判断し得る。２つ以上のサブセットが異なるリモートデータベースバージョン番号の時点で最新である場合は、より低いリモートデータベースバージョン番号が用いられる限り当該サブセットは併合され得る。
【０１０１】
いくつかの実現例では、データベースサーバ４１０は、リモートデータベース４１４について、たとえば三次元テーブルなどの変更ログを更新する。変更ログは、リモートデータベース４１４に対する各更新を予め定められた時間にわたって記憶する。変更ログを用いることによって、データベースサーバ４１０は、現在のデータベースバージョン番号についてのクエリを許可するだけでなく、特定のデータベースバージョン番号の時点での更新についてのクエリを取扱うことができる。これは、たとえば、同じデータベースバージョン番号の時点ですべてのエンティティが最新であるクライアントデータベース４０６を作っているクライアントデバイス４０２によって用いられ得る。
【０１０２】
例示的なプロセス４００では、リモートデータベース４１４は、削除されたエンティティであるエンティティＦを示す空の行を有する。いくつかの実現例では、削除されたエンティティは更新要求の間は検出または説明されず、別個の削除エンティティ要求において取扱われる。いくつかの実現例では、更新４１６は、リモートデータベース全体またはデータベースのサブセットについてのエンティティカウントを含み得る。エンティティカウントは、エンティティが削除されたか否かを判断するために用いられ得る。削除されたエンティティの検出および取扱いを、図６および図７を参照して以下により詳細に説明する。
【０１０３】
図５は、データベース同士を同期させるための例示的なプロセス５００のフロー図である。プロセス５００は、図４を参照して上述したデータベースサーバなどのデータ処理装置によって実行され得る。
【０１０４】
クライアントデバイス上に記憶されるデータベースのクライアントバージョンの更新要求が、クライアントデバイスから受信される（５０２）。当該要求は、ｉ）データベースのクライアントバージョンについてのクライアントデータベースバージョン番号と、ii）データベースのクライアントバージョンに含まれている特定のデータベースエンティティを指定している第１のカーソルとを含む。クライアントデータベースバージョン番号は、たとえば、データベースのクライアントバージョン内のあるエンティティに割当てられた最高のエンティティバージョン番号であり得る。カーソルは、たとえば、データベース内の第１のエンティティから始まり得、クライアントデバイスが更新要求を送信し続けるにつれて更新され得る。
【０１０５】
クライアントデバイスからリモートのデータベースのリモートバージョンがアクセスされる（５０４）。データベースのリモートバージョンはデータベースエンティティを含み、各データベースエンティティは、データベースについてのデータベースエンティティ全体にわたって単調に増加する態様で割当てられるリモートエンティティバージョン番号を有する。たとえば、データベースのリモートバージョンは、インターネットなどのネットワークを介して受信されるクライアントデバイス要求を取扱うための一群のデータベースサーバによって用いられる多くのストレージデバイスのうちの１つであり得る。単調に増加するバージョン番号は、たとえば、エンティティが更新されるたびにデータベースサーバタイムスタンプまたは連続的に増加する整数値を用いて割当てられ得る。
【０１０６】
プロセス５００は、特定のデータベースエンティティと一致するデータベースエンティティで始まるデータベースエンティティの順序付けられたサブセットに含まれている複数のデータベースエンティティの各々について、データベースエンティティが更新されたか否かを判断する（５０６）。この判断は、データベースエンティティのリモートエンティティバージョン番号とクライアントデータベースバージョン番号との比較に基づいて行なわれる。たとえば、データベースサーバは、カーソルによって指定されたエンティティにおいて開始し、リモートデータベースエンティティを順番に通過し、それらが更新されたか否かを判断し得る。リモートエンティティバージョン番号がクライアントデータベースバージョン番号よりも高い場合は、対応するリモートデータベースエンティティは更新されている。リモートエンティティバージョン番号がクライアントデータベースバージョン番号以下である場合は、対応するリモートデータベースエンティティは更新されていない。
【０１０７】
いくつかの実現例では、データベースエンティティのサブセットは、データベースのリモートバージョン内のすべてのデータベースエンティティを含んでいるとは限らない。たとえば、サブセットは、１つのみのデータベースエンティティ、データベースエンティティの半分、または１つを除いてすべてのデータベースエンティティを含み得る。いくつかの実現例では、データベースエンティティのサブセットは、１つ以上のシステム制約が満たされたことに基づいて動的に求められる。たとえば、システム制約は、更新要求について許可される最大処理時間、または更新要求について許可される最大更新サイズを含み得る。各サブセットは動的に求められるため、各々は異なるサイズであり得、それらはデータベース内での反復パス時にサイズ変更され得る。
【０１０８】
更新された各データベースエンティティについて、エンティティ更新がクライアントデバイスに提供される（５０８）。たとえば、データベースエンティティが更新された場合、データベースサーバは当該エンティティについての更新された値および更新されたバージョン番号をクライアントデバイスに提供し得る。
【０１０９】
リモートデータベースバージョン番号が、少なくとも１つのエンティティ更新とともにクライアントデバイスに提供される（５１０）。たとえば、データベースエンティティのサブセットについての各更新はリモートデータベースバージョン番号を含み得、クライアントデバイスはこれを用いて、サブセットがどのリモートデータベースバージョン番号に更新されるかを追跡し得る。
【０１１０】
いくつかの実現例では、プロセス５００は、データベースのクライアントバージョンの第２の更新要求をクライアントデバイスから受信することを含み、第２の更新要求は、ｉ）エンティティ更新とともにクライアントデバイスに提供されたリモートデータベースバージョン番号と一致する第２のクライアントデータベースバージョン番号と、ii）データベースのクライアントバージョンに含まれており、かつデータベースエンティティの順序付けられたサブセットに含まれている最後のデータベースエンティティの後に順序付けられている第２のデータベースエンティティを指定している第２のカーソルとを含む。第２のカーソルは、いくつかの実現例において、更新が提供された最後のエンティティを指定し得る。データベースサーバは、たとえば、開始位置が第１のデータベースエンティティにおいて開始する代わりにカーソルによって指定されることを除いては、第１の更新要求と同じ態様で第２の更新要求を処理し得る。この処理はすべてのデータベースエンティティにわたって繰返され、すべてのデータベースエンティティを通過した後に再び始まり得る。
【０１１１】
いくつかの実現例では、プロセス５００はデータベースのリモートバージョンについての三次元テーブルを更新することを含み、三次元テーブルは、現在の時間より前の予め定められた時間内に起こったデータベースのリモートバージョンに対するすべての更新を指定している。たとえば、三次元テーブルまたは変更ログは、過去５分以内のデータベースに対するすべての変更を記憶することによって、特定のリモートデータベースバージョン番号「の時点で」データベースサーバに要求を送信することを可能にし得る。つまり、クライアントデバイスは連続する更新要求について同じデータベースバージョン番号を指定することによって、すべての更新がデータベースサーバによって提供された場合にデータベースがそのデータベースバージョン番号について一貫していることを保証し得る。
【０１１２】
削除されたデータベースエンティティの取扱い
図６は、削除されたデータベースエンティティを検出して取扱うための例示的なプロセス６００のデータフローである。いくつかの実現例では、エンティティの削除を示すためにデータベースサーバ６１０によって削除マーカは用いられない。加えて、データベースサーバ６１０はリモートデータベースについての変更ログを維持しない場合がある。削除されたエンティティを検出するために、クライアントデバイス６０２はエンティティカウント要求６０８をデータベースサーバ６１０に送信する。いくつかの実現例では、エンティティカウント要求６０８は、たとえば、図４を参照して上述した要求４０８ａなどの更新要求とともに、別の要求に含まれている。要求６０８は、どのデータベースバージョンについてエンティティのカウントが要求されているかを示すデータベースバージョン番号を含み得る。データベースサーバ６１０はカウント要求６０８を受信し、データベースストレージデバイス６１２上に記憶されるリモートデータベース６１４内にどれぐらいの数のエンティティが含まれているかを判断する。
【０１１３】
データベースサーバ６１０は、リモートデータベース６１４内のエンティティのカウント６１６をクライアントデバイスに提供する。いくつかの実現例では、カウントは、別の応答とともに、たとえば、図４を参照して上述した更新４１６などの、同期化オペレーション時にクライアントデバイス６０２に提供される更新とともに提供され得る。例示的なプロセス６００では、データベースサーバ６１０によって提供されるカウント６１６は、９個のエンティティがリモートデータベース６１４に記憶されていることを示す。カウントは例示的なプロセス６００において明示的に要求されているが、クライアントデバイス６０２から送信されるエンティティカウントを求める明示的な要求は不要である。たとえば、エンティティカウントは、データベースミューテーションに対する応答とともに、および／または同期化オペレーション時に送信される更新とともに送信され得る。
【０１１４】
クライアントデバイス６０２は、リモートデータベース６１４内のエンティティのカウント６１６を、ローカルストレージデバイス６０４上に記憶されるクライアントデータベース６０６に記憶されるエンティティのローカルカウントと比較する。リモートデータベース６１４内のエンティティのカウント６１６がローカルカウントと一致する場合は、クライアントデバイス６０２は削除されたエンティティの有無を確認する必要はない。カウント６１６がクライアントデータベース６０６内よりもリモートデータベース６１４内の方がエンティティが少ないことを示す場合は、エンティティはリモートデータベース６１４から削除されており、削除はクライアントデータベース６０６に伝播されていない。
【０１１５】
いくつかの実現例では、リモートデータベースバージョン番号がカウント６１６とともに提供される。クライアントデバイス６０２は、カウントのリモートデータベースバージョン番号およびクライアントデータベースバージョン番号を用いて、同じデータベースバージョン番号についてカウント同士が比較されていることを確認し得る。データベースバージョン番号同士が一致しなかった場合は、データベースサーバによって提供されるカウントはデータベースのクライアントバージョンについて正確でない場合がある。一貫性を維持するために、カウントは同じデータベースバージョン番号について比較され得る。
【０１１６】
カウント同士が一致しないと判断したことに応答して、クライアントデバイス６０２はリスト要求６１８をデータベースサーバ６１０に送信する。リスト要求６１８は、リモートデータベース６１４に記憶されるエンティティについてのすべてのデータベースキーのリストを求める要求である。クライアントデバイス６０２は、たとえば、エンティティの代わりにキーを要求し得る。なぜなら、各キーは対応するエンティティを一意に識別するので、キーはエンティティよりも小さく、削除を検出するのに十分であるためである。いくつかの実現例では、データベースサーバ６１０は、リスト要求６１８に応答して、たとえばキーＡ〜ＥおよびＧ〜Ｊなどの、リモートデータベース６１４に含まれているエンティティについてのすべてのキーのリストを提供する。
【０１１７】
クライアントデバイス６０２は、リストに含まれているキーをクライアントデータベース６０６内のキーと比較して、リモートデータベース６１４から削除されたエンティティを見つけ得る。たとえば、クライアントデータベース６０６に含まれているがキーのリストには含まれていないキーを識別するなど、削除されたエンティティを検出すると、クライアントデバイス６０２はクライアントデータベース６０６から当該エンティティを削除する。上述のように、エンティティカウントおよびキーのリストは同じデータベースバージョン番号についてのものであり得、データベースバージョン番号がクライアントデータベースバージョン番号と一致する場合は、これによって、削除が特定のデータベースバージョン番号の時点で適切に検出されることが保証される。
【０１１８】
いくつかの実現例では、データベースサーバ６１０によって提供されるキーのリスト６２０は、リモートデータベース６１４に含まれているキーの適切なサブセットを含む。図４および図５を参照して上に詳述した同期化プロセスと同様に、リスト要求６１８およびそれに応答して提供される対応するキーのリストは、たとえば上述のような同様のシステム制約に基づいてサブセット内で取扱われ得る。例示的なプロセス６００では、第１のキーのリスト６３２は、たとえばエンティティＡ〜Ｄについてのキーなどの、リモートデータベース６１４に含まれているエンティティの第１のサブセット６３０についてのものである。例示的な第１の応答６３２は、リモートデータベースバージョン番号と、第１のサブセット６３０の最後のエンティティの論理位置を示すカーソルとをさらに含む。いくつかの実現例では、明示的なカーソルは用いられず、クライアントデバイス６０２はカーソルとして応答内に提供される最後のキーに依拠し得る。
【０１１９】
クライアントデバイス６０２は第１の応答６３２を受信すると、第１の応答６３２に含まれているキーがクライアントデータベース６０６にも含まれているか否かを判断し得る。検出された削除エンティティのいずれも、クライアントデータベース６０６から除去されることができる。第１の応答６３２の処理に続いて、クライアントデバイスは、リモートデータベース６１４に含まれている残りのキーのリストを要求する第２のリスト要求６１８を提出し得る。第２の要求は、たとえば、第２の要求が、キーが第１の応答６３２内で提供された最後のエンティティであるエンティティＤの後のキーのリストについてのものであることを指定するカーソルを含み得る。
【０１２０】
例示的なプロセス６００では、データベースサーバ６１０は、データベースエンティティの第２のサブセット６４０についての第２の応答６４２を提供する。第２の応答６４２はキーＥおよびＧを列挙しているが、Ｆは列挙していない。なぜなら、Ｆは、リモートデータベース６１４から削除されたエンティティであるためである。クライアントデバイス６０２は、第２の応答６４２を用いて、エンティティＦが第２の応答６４２において提供されたキーの範囲内にあるが、エンティティＦについてのキーは第２の応答６４２に含まれておらず、エンティティＦはクライアントデータベース６０６に含まれているため、エンティティＦは削除されたと判断する。例示的なプロセス６００は、検出して取扱うべき削除が残っている限り、たとえば、エンティティカウント同士がクライアントデータベース６０６とリモートデータベース６１４との間で一致しない限り、繰返され得る。
【０１２１】
複数のキー範囲がクライアントデバイス６０２に提供される実現例では、各範囲についての各要求および応答は、同じデータベースバージョン番号についてのものであり得る。これによって、特定のエンティティ範囲について、データベースサーバ６１０によって提供されるカウントおよびキーが、クライアントデータベース上の対応するエンティティ範囲と同じデータベースバージョンについてのものであることが保証され得る。たとえば、キーＡ〜Ｄの範囲はデータベースバージョン２０についてのものであり、クライアントデバイスは、データベースバージョン２０の時点で、残りのエンティティＥ〜Ｊについてのキーのリストを要求し得る。この場合、データベースサーバ６１０は、リモートデータベース６１４がデータベースバージョン２０の時点でキーのリストを得るように、短期変更ログ、または三次元テーブルにアクセスし得る。いくつかの実現例では、データベースバージョン２４を指定している第２の応答６４２を受信すると、クライアントデバイスは、クライアントデータベースバージョン番号が２４であることを保証するか、またはキーＥ〜Ｇの範囲がデータベースバージョン２４にあることを保証し得る。そうでない場合、クライアントデバイスは、削除の有無を確認する前にデータベースバージョン２４の時点でエンティティＥ〜Ｇに対する更新を要求することができる。
【０１２２】
図７は、削除されたデータベースエンティティを検出して取扱うための例示的なプロセス７００のフロー図である。プロセス７００は、図６を参照して上述したクライアントデバイスおよび／またはデータベースサーバなどのデータ処理装置によって実行され得る。
【０１２３】
指定されたバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティのカウントが、サーバデバイスから受信される（７０２）。たとえば、データベースエンティティのカウントは、データベースバージョン３００の時点でデータベースのリモートバージョンに９０個のデータベースエンティティが記憶されていることを指定し得る。
【０１２４】
プロセス７００は、データベースエンティティのカウントが、指定されたバージョン番号の時点でデータベースのクライアントバージョンに含まれているエンティティの数を指定しているクライアントエンティティカウント未満であると判断する（７０４）。たとえば、クライアントデバイスは、データベースのクライアントバージョンがデータベースバージョン３００の時点で８５個のデータベースエンティティしか含んでいないと判断し得、これは、５つのデータベースエンティティがデータベースのリモートバージョン上で削除されたことを示す。
【０１２５】
データベースエンティティのカウントがクライアントエンティティカウント未満であると判断したことに応答して、データベースのリモートバージョンに含まれているデータベースエンティティについてのキーのリストを求める要求が、サーバデバイスに送信される（７０６）。いくつかの実現例では、当該要求は、クライアントデバイスがエンティティの削除に関する情報を有する最後のデータベースエンティティを指定しているカーソルを含み得る。カーソルを含まない要求は、たとえば、第１のデータベースエンティティにおいて開始し得る。
【０１２６】
データベースのリモートバージョンに含まれているデータベースエンティティの適切なサブセットについてのキーの第１の適切なサブセットが、サーバデバイスから受信される（７０８）。たとえば、サーバデバイスは、合計８５個のデータベースエンティティの最初の３０個のデータベースエンティティについてのキーのリストを提供した可能性がある。サブセットに含まれているキーの数は、図４および図５を参照して上述したようなサーバ制約に依存し得る。
【０１２７】
データベースのクライアントバージョンに含まれているデータベースエンティティの対応する適切なサブセット内にあり、かつキーの第１の適切なサブセットに含まれていないキーを有するデータベースエンティティのいずれも、データベースのクライアントバージョンから除去される（７１０）。たとえば、データベースのクライアントバージョンが、第１のサブセットによって指定される範囲内にあるが、サーバデバイスによって提供される３０個のデータベースエンティティについてのキーの第１のサブセット内にないキーを有する２つのデータベースエンティティを含む場合は、それら２つのデータベースエンティティはデータベースのクライアントバージョンから除去され得、たとえば、削除されたエンティティとして扱われ得る。なぜなら、それらはもはやデータベースのリモートバージョン上に存在しないためである。
【０１２８】
いくつかの実現例では、プロセス７００は、データベースエンティティの第１のサブセットとは異なるデータベースエンティティの第２のサブセットに含まれているデータベースエンティティの第２のカウントを求める第２の要求を、サーバデバイスに送信することをさらに含み、第２の要求はデータベースの第２のバージョン番号を指定している。第２のサブセットは、たとえば、３０番目（３０番目を除く）または３１番目（３１番目を含む）のエンティティを開始点として指定しているカウント要求内で送信されるカーソルによって指定され得る、データベースエンティティ３１から９０などの、たとえば、第１のサブセットに含まれていないすべてのエンティティであり得る。
【０１２９】
いくつかの実現例では、プロセス７００は、第２のバージョン番号の時点でデータベースのリモートバージョンに含まれているデータベースエンティティの対応する第２のサブセットに含まれているデータベースエンティティの第２のカウントを、サーバデバイスから受信することと、データベースエンティティの第２のカウントが、第２のバージョン番号の時点でデータベースのデータベースエンティティクライアントバージョンの第２のサブセットに含まれているエンティティの第２の数を指定している第２のクライアントエンティティカウント未満であると判断することと、第２のサブセットに含まれているデータベースエンティティについてのキーの第２のリストを求める第２の要求を、サーバデバイスに送信することとを含み得る。第２のカウントは不要であり得、たとえば上述の例では、５つのエンティティの削除が第１のカウントに基づいて検出され、削除エンティティのうちの２つのみが識別されたため、３つの削除エンティティが検出されるのに残っている。しかし、データベースバージョン番号が要求同士の間で変更される場合は、要求同士の間で第２のサブセット内に起こった可能性のあるいずれかの新たな削除を発見するために、第２のサブセットについて新たなカウントを要求する必要があり得る。いくつかの実現例では、たとえば短期変更ログなどの短期変更の三次元テーブルを用いて、特定のデータベースバージョン番号の時点でデータベース全体についての削除検出が取扱われ得る。
【０１３０】
いくつかの実現例では、プロセス７００は、データベースのリモートバージョンに含まれているデータベースエンティティの第３のサブセットについてのキーの第３のサブセットを、サーバデバイスから受信することを含み得る。データベースサーバは、たとえば時間または応答サイズなどの一定のシステム制約内でリモートデータベース内のすべてのキーを読出すことが不可能な場合があるため、データベースサーバによって戻されるキーのサブセットは、再びデータベース内の残りのキー未満であり得、たとえば、リストは３１番目から６５番目のデータベースエンティティについてのキーを含み得る。
【０１３１】
いくつかの実現例では、プロセス７００は、第３のサブセットに対応するデータベースのクライアントバージョンに含まれているデータベースエンティティのサブセット内にあり、かつキーの第３のサブセットに含まれていないキーを有するいずれのデータベースエンティティも、データベースのクライアントバージョンから除去することを含み得る。たとえば、対応するサブセット内の３つのエンティティがキーの第３のサブセットに含まれていないキーを有する場合、それら３つのエンティティはデータベースのクライアントバージョンから削除され得る。上述の例では、たとえば、５つの削除のすべてが識別されているため、プロセス７００はデータベースの残りについてキーを要求することなく終了し得る。
【０１３２】
プロセス７００の一部は繰返され得る。たとえば、クライアントデバイスは、複数のデータベースエンティティ範囲について、リモートデータベースサーバに含まれているデータベースエンティティのリストを要求および受信し得、それらのリストを用いてデータベースのクライアントバージョンから削除エンティティが除去され得る。プロセス７００は、いくつかの実現例において、たとえば、クライアントデータベースエンティティのカウントがリモートデータベースエンティティのカウントと一致するまで、エンティティのリスト要求を送信し続け得る。初めてデータベースを通過した後にカウント同士がまだ一致しない場合、たとえば、削除が更新されている間に別のエンティティが削除される場合は、プロセスは冒頭から続行され得る。
【０１３３】
いくつかの実現例では、たとえば図３Ａ、図３Ｂ、図５および図７に関して上記に別々に説明したプロセスの各々は、全体がまたは一部が他のプロセスと組合せられてもよい。たとえば、更新要求は更新要求とともに提供されてもよく、更新要求はエンティティのカウントまたはリスト要求を含んでもよい。更新要求に対する応答は、更新されたおよび更新されていない両方の、応答に含まれているエンティティのリストを含むことによって、別個の要求および応答を必要とせずにクライアントデバイスが削除エンティティの有無を確認することを可能にしてもよい。要求および応答の他の構成を用いて上述のプロセスを実行してもよい。
【０１３４】
例示的なデータ処理装置
図８は、例示的なデータ処理装置８００のブロック図である。システム８００は、プロセッサ８１０、メモリ８２０、ストレージデバイス８３０および入出力デバイス８４０を含む。コンポーネント８１０、８２０、８３０および８４０の各々はたとえば、システムバス８５０を使用して相互接続され得る。プロセッサ８１０はシステム８００内での実行のための命令を処理することが可能である。１つの実現例において、プロセッサ８１０はシングルスレッドのプロセッサである。別の実現例において、プロセッサ８１０はマルチスレッドのプロセッサである。プロセッサ８１０は、メモリ８２０内またはストレージデバイス８３０上に格納される命令を処理することが可能である。
【０１３５】
メモリ８２０はシステム８００内に情報を格納する。１つの実現例において、メモリ８２０はコンピュータ読取可能媒体である。１つの実現例において、メモリ８２０は揮発性メモリユニットである。別の実現例において、メモリ８２０は不揮発性メモリユニットである。
【０１３６】
ストレージデバイス８３０はシステム８００のためにマスストレージ（mass storage）を提供することが可能である。１つの実現例において、ストレージデバイス８３０はコンピュータ読取可能媒体である。さまざまな異なる実現例において、ストレージデバイス８３０はたとえば、ハードディスクデバイス、光ディスクデバイス、または、何らかの他の大容量ストレージデバイスを含み得る。
【０１３７】
入出力デバイス８４０はシステム８００に対して入出力動作を提供する。１つの実現例において、入出力デバイス８４０は、たとえばイーサネット（登録商標）カード、たとえばＲＳ−２３２ポートのようなシリアル通信デバイス、および／または、たとえば８０２．１１カードのような無線インターフェイスデバイスといった１つ以上のネットワークインターフェイスデバイスを含み得る。別の実現例において、入出力デバイスは、入力データを受信し、かつ、たとえばキーボード、プリンタおよび表示デバイス８６０といった他の入出力デバイスに出力データを送信するように構成されるドライバデバイスを含み得る。しかしながら、モバイルコンピューティングデバイス、モバイル通信デバイス、セットトップボックステレビジョンクライアントデバイスなどといった他の実現例も使用され得る。
【０１３８】
主題の実施形態および本明細書に記載される動作は、デジタル電子回路において、または、本明細書において開示された構造およびそれらの構造等価物を含むコンピュータソフトウェア、ファームウェアまたはハードウェアにおいて、または、それらの１つ以上の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、１つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するためにコンピュータストレージ媒体上でエンコードされたコンピュータプログラム命令の１つ以上のモジュールとして実現され得る。
【０１３９】
コンピュータストレージ媒体は、コンピュータ読取可能ストレージデバイス、コンピュータ読取可能ストレージ基板、ランダムもしくはシリアルアクセスメモリアレイもしくはデバイス、または、それらの１つ以上の組合せであり得るか、または、それらに含まれ得る。さらに、コンピュータストレージ媒体は伝播された信号でないが、コンピュータストレージ媒体は、人工的に生成された伝播された信号においてエンコードされたコンピュータプログラム命令の送信元または宛先であり得る。コンピュータストレージ媒体はさらに、１つ以上の別個の物理コンポーネントまたは媒体（たとえば複数のＣＤ、ディスクまたは他のストレージデバイス）であり得るか、または、これらに含まれ得る。
【０１４０】
本明細書に記載される動作は、１つ以上のコンピュータ読取可能ストレージデバイス上に格納されたデータまたは他の送信元から受信されたデータに対してデータ処理装置によって実行される動作として実現され得る。
【０１４１】
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、システムオンチップ、または前述のもののうちの複数すなわち組合せを含む、データを処理するためのすべての種類の装置、デバイスおよびマシンを包含する。当該装置は、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）といった特定目的論理回路を含み得る。当該装置は、ハードウェアに加えて、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、バーチャルマシン、または、それらの１つ以上の組合せを構成するコードといった、当該コンピュータプログラムについて実行環境を作成するコードをさらに含み得る。装置および実行環境は、ウェブサービス、分散コンピューティングおよびグリッドコンピューティングインフラストラクチャといったさまざまな異なるコンピューティングモデルインフラストラクチャを実現可能である。
【０１４２】
（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプトまたはコードとしても既知である）コンピュータプログラムは、コンパイル型もしくはインタープリタ型言語、宣言型もしくは手続き型言語を含む任意の形態のプログラミング言語で記述され得、スタンドアロンプログラムとして、または、モジュール、コンポーネント、サブルーチン、オブジェクト、もしくは、コンピューティング環境で使用するのに好適な他のユニットとして任意の形態で展開され得る。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、対応する必要があるわけではない。プログラムは、当該プログラムに専用である単一のファイルにおいて、または、複数のコーディネーテッドファイル（coordinated files）（たとえばコードの１つ以上のモジュール、サブプログラムまたは部分を格納するファイル）において、他のプログラムまたはデータ（たとえばマークアップ言語ドキュメントに格納される１つ以上のスクリプト）を保持するファイルの部分に格納され得る。コンピュータプログラムは、１つの場所に位置するか、または、複数の場所にわたって分散され通信ネットワークによって相互接続される１つのコンピュータまたは複数のコンピュータ上で実行されるように展開され得る。
【０１４３】
本明細書に記載されるプロセスおよび論理フローは、入力データに対して動作し出力を生成することによりアクションを実行するよう１つ以上のプログラマブルプロセッサが１つ以上のコンピュータプログラムを実行することによって実行され得る。プロセスおよび論理フローは、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）といった特殊目的論理回路によって実行され得、装置も当該特殊目的論理回路として実現され得る。
【０１４４】
コンピュータプログラムの実行に好適であるプロセッサは、例として汎用マイクロプロセッサおよび特殊目的マイクロプロセッサの両方と、任意の種類のデジタルコンピュータのいずれか１つ以上のプロセッサとを含む。一般に、プロセッサは、リードオンリメモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令に従ってアクションを実行するためのプロセッサと、命令およびデータを格納するための１つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための１つ以上のマスストレージデバイスを含むか、または、当該１つ以上のマスストレージデバイスからデータを受け取るか、当該１つ以上のマスストレージデバイスにデータを転送するか、もしくは、その両方を行うように動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要がない。さらに、コンピュータはたとえば、ほんの数例を挙げると、携帯電話、携帯情報端末（ＰＤＡ）、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム（ＧＰＳ）レシーバ、またはポータブルストレージデバイス（たとえばユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）といった別のデバイスに埋め込まれ得る。コンピュータプログラム命令およびデータを格納するのに好適であるデバイスは、例として、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリ素子といった半導体メモリデバイスと、たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスクと、光磁気ディスクと、ＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクとを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイスを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足され得るか、または、特殊目的論理回路に組み込まれ得る。
【０１４５】
ユーザとのインタラクションを提供するために、本明細書に記載される主題の実施形態は、たとえばＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタといったユーザに対して情報を表示するための表示デバイスと、たとえばマウスまたはトラックボールといったユーザがコンピュータに入力を提供可能であるキーボードおよびポインティングデバイスとを有するコンピュータ上で実現され得る。他の種類のデバイスが同様に、ユーザとのインタラクションを提供するために使用され得る。たとえば、ユーザに提供されるフィードバックは、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックといった任意の形態の感覚フィードバックであり得、また、ユーザからの入力は、音響入力、音声入力、または触覚入力を含む任意の形態で受け取られ得る。さらに、コンピュータは、ユーザが使用するデバイスにドキュメントを送信しユーザが使用するデバイスからドキュメントを受け取ることによって、たとえば、ウェブブラウザから受け取られた要求に応答してユーザのユーザデバイス上のウェブブラウザにウェブページを送信することによって、ユーザとインタラクションし得る。
【０１４６】
本明細書に記載される主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含むコンピューティングシステムにおいて実現され得るか、たとえばアプリケーションサーバといったミドルウェアコンポーネントを含むコンピューティングシステムにおいて実現され得るか、たとえば本明細書に記載される主題の実現例とユーザがインタラクションすることが可能であるグラフィカルユーザーインターフェイスもしくはウェブブラウザを有するユーザコンピュータといったフロントエンドコンポーネントを含むコンピューティングシステムにおいて実現され得るか、または、１つ以上のそのようなバックエンドコンポーネント、ミドルウェアコンポーネントまたはフロントエンドコンポーネントの任意の組合せのコンピューティングシステムにおいて実現され得る。システムのコンポーネントは、たとえば通信ネットワークといったデジタルデータ通信の任意の形態または媒体によって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク（「ＬＡＮ」）と、ワイドエリアネットワーク（「ＷＡＮ」）と、相互ネットワーク（たとえばインターネット）と、ピアツーピアネットワーク（たとえばアドホックピアツーピアネットワーク）とを含む。
【０１４７】
コンピューティングシステムはユーザおよびサーバを含み得る。ユーザとサーバとは一般に互いからリモートであり、典型的には通信ネットワークを通じてインタラクションする。ユーザおよびサーバの関係は、それぞれのコンピュータ上で実行されるとともに互いにユーザサーバ関係を有するコンピュータプログラムによって発生する。いくつかの実施形態において、サーバは、（たとえばユーザデバイスとインタラクションするユーザに対してデータを表示するとともに当該ユーザからユーザ入力を受け取る目的で）ユーザデバイスにデータ（たとえばＨＴＭＬページ）を送信する。ユーザデバイスにて生成されたデータ（たとえばユーザインタラクションの結果）は、サーバにおいてユーザデバイスから受け取られ得る。
【０１４８】
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきでなく、特定の発明の特定の実施形態に特有の特徴の記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴も、単一の実施形態において組合せで実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴も、複数の実施形態において別々にまたは任意の好適なサブコンビネーションで実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載されているとともにそのように最初は請求されている場合があるが、請求される組合せのうちの１つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、サブコンビネーションまたはサブコンビネーションの変形例に関し得る。
【０１４９】
同様に、図において動作は特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきでなく、または、すべての示された動作が実行される必要があると理解されるべきでない。ある状況において、マルチタスキングおよび並列処理が有利であり得る。さらに、上に記載された実施形態におけるさまざまなシステムコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきでなく、記載されたプログラムコンポーネントおよびシステムは一般に、単一のソフトウェアプロダクトに一緒に統合され得るか、または、複数のソフトウェアプロダクトへとパッケージ化され得るということが理解されるべきである。
【０１５０】
したがって、主題の特定の実施形態が記載されている。他の実施形態は添付の請求の範囲内にある。いくつかの場合には、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。さらに、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある実現例において、マルチタスキングおよび並列処理が有利であり得る。
【図１】
0006334009.tif 000004
【図２】
0006334009.tif 000005
【図３Ａ】
0006334009.tif 000006
【図３Ｂ】
0006334009.tif 000007
【図４】
0006334009.tif 000008
【図５】
0006334009.tif 000009
【図６】
0006334009.tif 000010
【図７】
0006334009.tif 000011
【図８】
0006334009.tif 000012