(57)【要約】  方法は、分散システム（２００）についての変更ログ処理（５００）の初期のインスタンス（３１０）を実行することを含み、変更ログ処理の各インスタンスは、分散システム上で実行されるトランザクション（２０４、２１４）のトランザクション履歴（３１２）を格納するように構成される。当該方法はさらに、対応するトランザクションを実行するためのトランザクション要求（１３８）を受信することと、受信したトランザクション要求（３２２）に基づいて変更ログ負荷を求めることとを含む。当該方法は、変更ログ負荷が閾値負荷を満たす場合、変更ログ処理の少なくとも１つのその後のインスタンスを実行することを含む。変更ログ処理の複数のインスタンスが実行中である場合、当該方法は、変更ログ処理の少なくとも１つのその後のインスタンスの実行を中止することと、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも１つのその後のインスタンスのトランザクション履歴とをマージすることとを含む。
2019511770.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
データ処理ハードウェア（１１２）によって、分散システム（２００）についての変更ログ処理（５００）の初期のインスタンス（３１０）を実行することを備え、前記変更ログ処理（５００）の各インスタンス（３１０）は、前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）のトランザクション履歴（３１２）を、前記データ処理ハードウェア（１１２）と通信しているメモリハードウェア（１１４）上に格納するように構成され、前記方法はさらに、
前記データ処理ハードウェア（１１２）において、前記分散システム（２００）上で対応するトランザクション（２０４、２１４）を実行するためのトランザクション要求（１３８）を受信することと、
前記データ処理ハードウェア（１１２）によって、受信した前記トランザクション要求（１３８）に基づいて変更ログ負荷を求めることと、
前記変更ログ負荷が閾値負荷を満たす場合、前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の少なくとも１つのその後のインスタンス（３１０）を実行することと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の複数のインスタンスが実行中であるか否かを判断することと、
前記変更ログ処理（５００）の複数のインスタンスが実行中である場合、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（３１２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（３１２）とをマージすることとを備える、方法。
【請求項２】
前記メモリハードウェア（１１４）の変更ログキャッシュ（３１０）に各トランザクション履歴（３１２）を格納することをさらに備える、請求項１に記載の方法。
【請求項３】
前記各トランザクション履歴（３１２）を格納することは、
前記データ処理ハードウェア（１１２）によって、前記トランザクション履歴（３１２）をデータストライプにシャードすることと、
各データストライプを複製することと、
前記データストライプおよび複製した前記データストライプを前記メモリハードウェア（１１４）の複数の記憶場所（２５０）に格納することとを備える、請求項２に記載の方法。
【請求項４】
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）を実行した後に前記変更ログ負荷が前記閾値負荷を満たさない場合、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（３１２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（３１２）とをマージすることとをさらに備える、請求項１から３のいずれか１項に記載の方法。
【請求項５】
各トランザクション要求（１３８）を受信したことに応答して、
前記データ処理ハードウェア（１１２）によって実時間を得ることと、
前記データ処理ハードウェア（１１２）によって、前記実時間に基づいて最大コミット時間（ＴＤMax）を求めることとをさらに備え、前記最大コミット時間（ＴＤMax）は、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行を完了する最大時間を指定しており、さらに、
前記最大コミット時間（ＴＤMax）を前記データ処理ハードウェア（１１２）から前記メモリハードウェア（１１４）の少なくとも１つの変更ログキャッシュ（３１０）に通信することを備える、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記実時間から前記最大コミット時間（ＴＤMax）まで通知ロックを設定し、前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＤMax）よりも早い対応するコミット時間を有する完了済のトランザクション（２０４、２１４）について１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを防止する、請求項５に記載の方法。
【請求項７】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記最大コミット時間（ＴＤMax）の終わりに前記通知ロックを解除し、解除された前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＤMax）よりも早い前記対応するコミット時間を有する完了済の各トランザクション（２０４、２１４）について前記１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを許可する、請求項６に記載の方法。
【請求項８】
前記最大コミット時間（ＴＤMax）を通信した後、
前記データ処理ハードウェア（１１２）によって、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることをさらに備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＤMax）を備え、さらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前に各自のコミット時間を備える場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が受付けられることを示すトランザクション結果（３３２）を、前記データ処理ハードウェア（１１２）によって得ることと、
前記トランザクション結果（３３２）を前記データ処理ハードウェア（１１２）から前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記対応するトランザクション（２０４、２１４）と関連付けられた少なくとも１つのミューテーションを記録する、請求項５に記載の方法。
【請求項９】
前記少なくとも１つの変更ログキャッシュ（３１０）は、記録された前記ミューテーションを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は記録された前記ミューテーションを備える、請求項８に記載の方法。
【請求項１０】
前記通知（３５０）は、前記最大コミット時間（ＴＤMax）の前記終わりに前記トランザクション履歴（３１２）の一貫性のあるスナップショットをさらに備え、前記一貫性のあるスナップショットは、前記対応するトランザクション（２０４、２１４）と、前記最大コミット時間（ＴＤMax）よりも早い対応するコミット時間を有するいずれかの完了済のトランザクション（２０４、２１４）とを備える、請求項９に記載の方法。
【請求項１１】
前記最大コミット時間（ＴＤMax）を通信した後、
前記データ処理ハードウェア（１１２）によって、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることをさらに備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＤMax）を備え、さらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前にコミットできない場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が拒絶されることを示すトランザクション結果（３３２）を、前記データ処理ハードウェア（１１２）によって得ることと、
前記トランザクション結果（３３２）を前記データ処理ハードウェア（１１２）から前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション処理が前記最大コミット時間（ＴＤMax）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信した前記実時間と前記最大コミット時間（ＴＤMax）との間の前記トランザクション履歴（３１２）にギャップを作成する、請求項５に記載の方法。
【請求項１２】
前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション履歴（３１２）の前記ギャップを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は前記トランザクション履歴（３１２）の前記ギャップ中にキャッシュミスを備える、請求項１１に記載の方法。
【請求項１３】
前記データ処理ハードウェア（１１２）によって、オフラインイベント（６５０）の後に前記変更ログ処理（５００）の再開を決定することと、
前記データ処理ハードウェア（１１２）上で実行される前記変更ログ処理（５００）において、実時間を得ることと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）が再開すると前記実時間に基づいて現在のシーケンス番号を求めることと、
前記データ処理ハードウェア（１１２）によって、前記現在のシーケンス番号からグローバルな最大コミット時間遅延（ＴＤMax）を待機してから、前記分散システム（２００）上で実行されるいずれかのトランザクション（２０４、２１４）についての前記トランザクション履歴（３１２）を更新することとをさらに備える、請求項１から１２のいずれか１項に記載の方法。
【請求項１４】
前記変更ログ処理（５００）の前記再開の前に前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）は、前記グローバルな最大コミット時間遅延（ＴＣＤMax）内に完了する、請求項１３に記載の方法。
【請求項１５】
マージした前記トランザクション履歴（３１２）を１つ以上のサブスクライブしているウォッチャ（３２２）に送信することをさらに備え、サブスクライブしている各ウォッチャ（３２２）は、前記メモリハードウェア（１１４）上に格納されたデータ（２０２）についての変更通知（３５０）を受信するためのスタンディングクエリ（１３０）を有する、請求項１から１４のいずれか１項に記載の方法。
【請求項１６】
システム（１００）であって、
分散システム（２００）のデータ処理ハードウェア（１１２）と、
前記データ処理ハードウェア（１１２）と通信しているメモリハードウェア（１１４）とを備え、前記メモリハードウェア（１１４）は、前記データ処理ハードウェア（１１２）上で実行されると前記データ処理ハードウェア（１１２）に動作を実行させる命令を格納しており、前記動作は、
分散システム（２００）についての変更ログ処理（５００）の初期のインスタンス（３１０）を実行することを備え、前記変更ログ処理（５００）の各インスタンス（３１０）は、前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）のトランザクション履歴（３１２）を前記メモリハードウェア（１１４）上に格納するように構成され、前記動作はさらに、
前記分散システム（２００）上で対応するトランザクション（２０４、２１４）を実行するためのトランザクション要求（１３８）を受信することと、
受信した前記トランザクション要求（１３８）に基づいて変更ログ負荷を求めることと、
前記変更ログ負荷が閾値負荷を満たす場合、前記変更ログ処理（５００）の少なくとも１つのその後のインスタンス（３１０）を実行することと、
前記変更ログ処理（５００）の複数のインスタンスが実行中であるか否かを判断することと、
前記変更ログ処理（５００）の複数のインスタンスが実行中である場合、
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（１３２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（１３２）とをマージすることとを備える、システム。
【請求項１７】
前記動作はさらに、前記メモリハードウェア（１１４）の変更ログキャッシュ（３１０）に各トランザクション履歴（１３２）を格納することを備える、請求項１６に記載のシステム（１００）。
【請求項１８】
前記各トランザクション履歴（１３２）を格納することは、
前記トランザクション履歴（１３２）をデータストライプにシャードすることと、
各データストライプを複製することと、
前記データストライプおよび複製した前記データストライプを前記メモリハードウェア（１１４）の複数の記憶場所（２５０）に格納することとを備える、請求項１７に記載のシステム（１００）。
【請求項１９】
前記動作はさらに、
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）を実行した後に前記変更ログ負荷が前記閾値負荷を満たさない場合、
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（１３２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（１３２）とをマージすることとを備える、請求項１６から１８のいずれか１項に記載のシステム（１００）。
【請求項２０】
前記動作はさらに、各トランザクション要求（１３８）を受信したことに応答して、
実時間を得ることと、
前記実時間に基づいて最大コミット時間（ＴＣＤMax）を求めることとを備え、前記最大コミット時間（ＴＣＤMax）は、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行を完了する最大時間を指定しており、前記動作はさらに、
前記最大コミット時間（ＴＣＤMax）を前記メモリハードウェア（１１４）の少なくとも１つの変更ログキャッシュ（３１０）に通信することを備える、請求項１６から１９のいずれか１項に記載のシステム（１００）。
【請求項２１】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記実時間から前記最大コミット時間（ＴＣＤMax）まで通知ロックを設定し、前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＣＤMax）よりも早い対応するコミット時間を有する完了済のトランザクション（２０４、２１４）について１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを防止する、請求項２０に記載のシステム（１００）。
【請求項２２】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記最大コミット時間（ＴＣＤMax）の終わりに前記通知ロックを解除し、解除された前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＣＤMax）よりも早い前記対応するコミット時間を有する完了済の各トランザクション（２０４、２１４）について前記１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを許可する、請求項２１に記載のシステム（１００）。
【請求項２３】
前記動作はさらに、前記最大コミット時間（ＴＣＤMax）を通信した後、
前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることを備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＣＤMax）を備え、前記動作はさらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前に各自のコミット時間を備える場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が受付けられることを示すトランザクション結果（３３２）を得ることと、
前記トランザクション結果（３３２）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記対応するトランザクション（２０４、２１４）と関連付けられた少なくとも１つのミューテーションを記録する、請求項２０に記載のシステム（１００）。
【請求項２４】
前記少なくとも１つの変更ログキャッシュ（３１０）は、記録された前記ミューテーションを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は記録された前記ミューテーションを備える、請求項２３に記載のシステム（１００）。
【請求項２５】
前記通知（３５０）は、前記最大コミット時間（ＴＤMax）の前記終わりに前記トランザクション履歴（１３２）の一貫性のあるスナップショットをさらに備え、前記一貫性のあるスナップショットは、前記対応するトランザクション（２０４、２１４）と、前記最大コミット時間（ＴＤMax）よりも早い対応するコミット時間を有するいずれかの完了済のトランザクション（２０４、２１４）とを備える、請求項２４に記載のシステム（１００）。
【請求項２６】
前記動作はさらに、前記最大コミット時間（ＴＤMax）を通信した後、
前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることを備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＤMax）を備え、前記動作はさらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前にコミットできない場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が拒絶されることを示すトランザクション結果（３３２）を得ることと、
前記トランザクション結果（３３２）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション処理が前記最大コミット時間（ＴＤMax）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信した前記実時間と前記最大コミット時間（ＴＤMax）との間の前記トランザクション履歴（１３２）にギャップを作成する、請求項２０に記載のシステム（１００）。
【請求項２７】
前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション履歴（１３２）の前記ギャップを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は前記トランザクション履歴（１３２）の前記ギャップ中にキャッシュミスを備える、請求項２６に記載のシステム（１００）。
【請求項２８】
前記動作はさらに、
オフラインイベントの後に前記変更ログ処理（５００）の再開を決定することと、
実時間を得ることと、
前記変更ログ処理（５００）が再開すると前記実時間に基づいて現在のシーケンス番号を求めることと、
前記現在のシーケンス番号からグローバルな最大コミット時間遅延（ＴＤMax）を待機してから、前記分散システム（２００）上で実行されるいずれかのトランザクション（２０４、２１４）についての前記トランザクション履歴（１３２）を更新することとを備える、請求項１６から２７のいずれか１項に記載のシステム（１００）。
【請求項２９】
前記変更ログ処理（５００）の前記再開の前に前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）は、前記グローバルな最大コミット時間遅延（ＴＤMax）内に完了する、請求項２８に記載のシステム（１００）。
【請求項３０】
前記動作はさらに、マージした前記トランザクション履歴（１３２）を１つ以上のサブスクライブしているウォッチャ（３２２）に送信することを備え、サブスクライブしている各ウォッチャ（３２２）は、前記メモリハードウェア（１１４）上に格納されたデータ（２０２）についての変更通知（３５０）を受信するためのスタンディングクエリ（１３０）を有する、請求項１６から２９のいずれか１項に記載のシステム（１００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、１つ以上のウォッチャが分散システム内でサブスクライブしているデータについての一貫性のある変更通知を当該ウォッチャに提供することに関する。
【背景技術】
【０００２】
背景
分散ストレージシステムは、データストア内の１つ以上のメモリ場所にオーバーレイしているメモリハードウェア上にデータを格納する。ウォッチャはスタンディングクエリ（standing query）を発行して、分散システム上に格納された特定のデータをサブスクライブし、サブスクライブしているデータがミューテーションを受けるといつでも変更通知を受信し得る。たとえば、ライタは書込トランザクションを実行して、分散システム上に格納された特定のデータを修正／ミューテートし得、当該データが修正されると当該データをサブスクライブしているウォッチャに通知される。しかし、分散システムに対する需要が増加すると、多数の変更／書込が同時に起こった場合、分散システムがオーバーランされて変更通知をリアルタイムでストリームすることができなくなる。高需要の期間中は、サブスクリプションを完全にドロップして分散システムに対する負荷を軽減することが知られている。この理由で、順序通りの配信が保証されずに設計されるシステムもあり、順序付けはクライアントに委ねられることが多い。しかし、この結果、サブスクライブしているウォッチャが分散データの一貫性のないスナップショットを受信することになる。さらに、分散システム上に格納されたデータに対する各トランザクションを記録するために変更ログを用いることが知られている。これらの変更ログはデータストアに加えられるすべての変更を記録し、データストア上で読出トランザクションが起こると、変更ログは所与のスナップショットのすべてのデータについてのオン／オフチェックポイントとして機能する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
概要
分散システム上で耐久性のある変更ログを使用すると、当該変更ログを単一のマシン上に時折トランケートすることが一般に必要であるため、トランザクションが実行を待機する間にボトルネックが生じてしまう。したがって、耐久性のある変更ログは、分散システムに対する需要が高い期間中は、その固有のスケーラビリティ限界のために、分散システムによって与えられる分散機能を無効にしてしまう。
【課題を解決するための手段】
【０００４】
本開示の一局面は、トランザクション的に一貫性のある変更通知を作成するための方法を提供する。当該方法は、データ処理ハードウェアによって、分散システムについての変更ログ処理の初期のインスタンスを実行することと、データ処理ハードウェアにおいて、分散システム上で対応するトランザクションを実行するためのトランザクション要求を受信することと、データ処理ハードウェアによって、受信したトランザクション要求に基づいて変更ログ負荷を求めることとを含む。変更ログ処理の各インスタンスは、分散システム上で実行されるトランザクションのトランザクション履歴を、データ処理ハードウェアと通信しているメモリハードウェア上に格納するように構成される。変更ログ負荷が閾値負荷を満たす場合、当該方法は、データ処理ハードウェアによって、変更ログ処理の少なくとも１つのその後のインスタンスを実行することを含む。当該方法はさらに、データ処理ハードウェアによって、変更ログ処理の複数のインスタンスが実行中であるか否かを判断することを含む。変更ログ処理の複数のインスタンスが実行中である場合、当該方法は、データ処理ハードウェアによって、変更ログ処理の少なくとも１つのその後のインスタンスの実行を中止することと、データ処理ハードウェアによって、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも１つのその後のインスタンスのトランザクション履歴とをマージすることとを含む。
【０００５】
本開示の実装例は以下の任意の特徴の１つ以上を含み得る。ある実装例では、当該方法は、メモリハードウェアの変更ログキャッシュに各トランザクション履歴を格納することを含む。各トランザクション履歴を格納することは、データ処理ハードウェアによって、トランザクション履歴をデータストライプにシャードすることと、各データストライプを複製することと、データストライプおよび複製したデータストライプをメモリハードウェアの複数の記憶場所に格納することとを含み得る。変更ログ処理の少なくとも１つのその後のインスタンスを実行した後に変更ログ負荷が閾値負荷を満たさない場合、当該方法は、データ処理ハードウェアによって、変更ログ処理の少なくとも１つのその後のインスタンスの実行を中止することと、データ処理ハードウェアによって、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも１つのその後のインスタンスのトランザクション履歴とをマージすることとを含み得る。
【０００６】
各トランザクション要求を受信したことに応答して、当該方法は、データ処理ハードウェアによって実時間を得ることと、データ処理ハードウェアによって、実時間に基づいて最大コミット時間を求めることと、最大コミット時間をデータ処理ハードウェアからメモリハードウェアの少なくとも１つの変更ログキャッシュに通信することとを含み得る。最大コミット時間は、分散システム上で対応するトランザクションの実行を完了する最大時間を指定し得る。
【０００７】
ある例では、少なくとも１つの変更ログキャッシュは、実時間から最大コミット時間まで通知ロックを設定する。通知ロックは、対応する変更ログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済のトランザクションについて１つ以上のサブスクライブしているウォッチャに通知することを防止し得る。少なくとも１つの変更ログキャッシュは最大コミット時間の終わりに通知ロックを解除し得る。解除された通知ロックは、対応するログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済の各トランザクションについて１つ以上のサブスクライブしているウォッチャに通知することを許可し得る。最大コミット時間を通信した後、当該方法は、データ処理ハードウェアによって、分散システム上で対応するトランザクションの実行をコミットすることを含み得る。ここで、トランザクションは最大コミット時間を含む。その後、当該方法はさらに、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前に各自のコミット時間を含む場合は分散システム上の対応するトランザクションの実行が受付けられることを示すトランザクション結果を、データ処理ハードウェアによって得ることと、トランザクション結果をデータ処理ハードウェアから少なくとも１つの変更ログキャッシュに通信することとを含み得る。
【０００８】
ある例では、受信したトランザクション結果によって、少なくとも１つの変更ログキャッシュは、対応するトランザクションと関連付けられた少なくとも１つのミューテーションを記録する。少なくとも１つの変更ログキャッシュは、記録されたミューテーションをデータ処理ハードウェア上で実行される１つ以上のウォッチャプロキシに通信し得る。各ウォッチャプロキシは、対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得る。通知は記録されたミューテーションを含み得、トランザクション履歴の一貫性のあるスナップショットを任意に含み得る。ここで、通知内の一貫性のあるスナップショットは、対応するトランザクションと、対応するトランザクションのコミット時間よりも早い対応するコミット時間を有するいずれかの完了済のトランザクションとを含む。
【０００９】
ある実装例では、最大コミット時間を通信した後、当該方法は、データ処理ハードウェアによって、分散システム上で対応するトランザクションの実行をコミットすることを含む。ここで、トランザクションは最大コミット時間を含む。その後、当該方法は、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前にコミットできない場合は分散システム上の対応するトランザクションの実行が拒絶されることを示すトランザクション結果を、データ処理ハードウェアによって得ることと、トランザクション結果をデータ処理ハードウェアから少なくとも１つの変更ログキャッシュに通信することとを含み得る。ある例では、受信したトランザクション結果によって、少なくとも１つの変更ログキャッシュは、トランザクション処理が最大コミット時間を少なくとも１つの変更ログキャッシュに通信した実時間と最大コミット時間との間のトランザクション履歴にギャップを作成する。
【００１０】
ある例では、少なくとも１つの変更ログキャッシュは、トランザクション履歴のギャップをデータ処理ハードウェア上で実行される１つ以上のウォッチャプロキシに通信する。各ウォッチャプロキシは、最大コミット時間の終わりに対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得、通知はトランザクション履歴のギャップ中にキャッシュミスを含む。
【００１１】
当該方法はさらに、データ処理ハードウェアによって、オフラインイベントの後に変更ログ処理の再開を決定することと、データ処理ハードウェア上で実行される変更ログ処理において、実時間を得ることとを含み得る。当該方法はさらに、データ処理ハードウェアによって、変更ログ処理が再開すると実時間に基づいて現在のシーケンス番号を求めることと、データ処理ハードウェアによって、現在のシーケンス番号からグローバルな最大コミット時間遅延を待機してから、分散システム上で実行されるいずれかのトランザクションについてのトランザクション履歴を更新することとを含み得る。変更ログ処理の再開の前に分散システム上で実行されるトランザクションは、グローバルな最大コミット時間遅延内に完了し得る。当該方法はさらに、マージしたトランザクション履歴を１つ以上のサブスクライブしているウォッチャに送信することを含み得る。サブスクライブしている各ウォッチャは、メモリハードウェア上に格納されたデータの変更についてのスタンディングクエリを有し得る。
【００１２】
本開示の別の局面は、トランザクション的に一貫性のある変更通知を作成するためのシステムを提供する。当該システムは、分散システムのデータ処理ハードウェアと、データ処理ハードウェアと通信しているメモリハードウェアとを含む。メモリハードウェアは、データ処理ハードウェア上で実行されるとデータ処理ハードウェアに動作を実行させる命令を格納している。当該動作は、分散システムについての変更ログ処理の初期のインスタンスを実行することと、分散システム上で対応するトランザクションを実行するためのトランザクション要求を受信することと、受信したトランザクション要求に基づいて変更ログ負荷を求めることとを含む。変更ログ処理の各インスタンスは、分散システム上で実行されるトランザクションのトランザクション履歴をメモリハードウェア上に格納するように構成される。変更ログ負荷が閾値負荷を満たす場合、当該システムは、変更ログ処理の少なくとも１つのその後のインスタンスを実行することと、変更ログ処理の複数のインスタンスが実行中であるか否かを判断することとを含む。変更ログ処理の複数のインスタンスが実行中である場合、当該システムは、変更ログ処理の少なくとも１つのその後のインスタンスの実行を中止することと、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも１つのその後のインスタンスのトランザクション履歴とをマージすることとを含む。
【００１３】
本局面は以下の任意の特徴の１つ以上を含み得る。ある実装例では、当該動作はさらに、メモリハードウェアの変更ログキャッシュに各トランザクション履歴を格納することを含む。各トランザクション履歴を格納することは、トランザクション履歴をデータストライプにシャードすることと、各データストライプを複製することと、データストライプおよび複製したデータストライプをメモリハードウェアの複数の記憶場所に格納することとを含み得る。当該動作はさらに、変更ログ処理の少なくとも１つのその後のインスタンスを実行した後に変更ログ負荷が閾値負荷を満たさない場合、変更ログ処理の少なくとも１つのその後のインスタンスの実行を中止することと、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも１つのその後のインスタンスのトランザクション履歴とをマージすることとを含み得る。各トランザクション要求を受信したことに応答して、当該動作は、実時間を得ることと、実時間に基づいて最大コミット時間を求めることと、最大コミット時間をメモリハードウェアの少なくとも１つの変更ログキャッシュに通信することとを含み得る。最大コミット時間は、分散システム上で対応するトランザクションの実行を完了する最大時間を指定し得る。
【００１４】
少なくとも１つの変更ログキャッシュは、実時間から最大コミット時間まで通知ロックを設定し得る。通知ロックは、対応する変更ログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済のトランザクションについて１つ以上のサブスクライブしているウォッチャに通知することを防止し得る。少なくとも１つの変更ログキャッシュは最大コミット時間の終わりに通知ロックを解除し得る。解除された通知ロックは、対応する変更ログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済の各トランザクションについて１つ以上のサブスクライブしているウォッチャに通知することを許可し得る。
【００１５】
ある例では、当該動作は、最大コミット時間を通信した後、分散システム上で対応するトランザクションの実行をコミットすることを含む。トランザクションは対応するコミット時間を含む。その後、当該動作は、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前に各自のコミット時間を含む場合は分散システム上の対応するトランザクションの実行が受付けられることを示すトランザクション結果を得ることと、トランザクション結果を少なくとも１つの変更ログキャッシュに通信することとを含む。受信したトランザクション結果によって、少なくとも１つの変更ログキャッシュは、対応するトランザクションと関連付けられた少なくとも１つのミューテーションを記録し得る。少なくとも１つの変更ログキャッシュは、記録されたミューテーションをデータ処理ハードウェア上で実行される１つ以上のウォッチャプロキシに通信し得る。各ウォッチャプロキシは、対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得、通知は記録されたミューテーションを含む。通知は、トランザクション履歴の一貫性のあるスナップショットをさらに含み得る。一貫性のあるスナップショットは、対応するトランザクションと、対応するトランザクションのコミット時間よりも早い対応するコミット時間を有するいずれかの完了済のトランザクションとを含み得る。
【００１６】
ある実装例では、当該動作は、最大コミット時間を通信した後、分散システム上で対応するトランザクションの実行をコミットすることを含む。ここで、トランザクションは最大コミット時間を含む。その後、当該動作はさらに、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前にコミットできない場合は分散システム上の対応するトランザクションの実行が拒絶されることを示すトランザクション結果を得ることと、トランザクション結果を少なくとも１つの変更ログキャッシュに通信することとを含み得る。受信したトランザクション結果によって、少なくとも１つの変更ログキャッシュは、トランザクション処理が最大コミット時間を少なくとも１つの変更ログキャッシュに通信した実時間と最大コミット時間との間のトランザクション履歴にギャップを作成し得る。少なくとも１つの変更ログキャッシュは、トランザクション履歴のギャップをデータ処理ハードウェア上で実行される１つ以上のウォッチャプロキシに通信し得る。各ウォッチャプロキシは、最大コミット時間の終わりに対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得、通知はトランザクション履歴のギャップ中にキャッシュミスを含む。
【００１７】
ある例では、当該動作はさらに、オフラインイベントの後に変更ログ処理の再開を決定することと、実時間を得ることと、変更ログ処理が再開すると実時間に基づいて現在のシーケンス番号を求めることと、現在のシーケンス番号からグローバルな最大コミット時間遅延を待機してから、分散システム上で実行されるいずれかのトランザクションについてのトランザクション履歴を更新することとを含む。変更ログ処理の再開の前に分散システム上で実行されるトランザクションは、グローバルな最大コミット時間遅延内に完了し得る。当該動作はさらに、マージしたトランザクション履歴を１つ以上のサブスクライブしているウォッチャに送信することを含み得、サブスクライブしている各ウォッチャは、メモリハードウェア上に格納されたデータの変更についてのスタンディングクエリを有する。
【００１８】
本開示の１つ以上の実装例の詳細は添付の図面および以下の説明に記述されている。他の局面、特徴、および利点は説明および図面から、ならびに請求項から明らかになるであろう。
【００１９】
さまざまな図中の同様の参照符号は同様の要素を示す。
【図面の簡単な説明】
【００２０】
【図１】分散システムの非一時的なデータストレージへのアクセスをユーザデバイスに提供するための例示的なシステムの概略図である。
【図２】分散ストレージシステムの非一時的なデータストアへのアクセスを１つ以上のユーザデバイスに提供するための例示的なシステムの概略図である。
【図３】スタンディングクエリについてのほぼリアルタイムの通知を提供するための通知システムの例示的なコンポーネントの概略図である。
【図４Ａ】図３の通知システムのバックエンドおよび少なくとも１つの変更ログキャッシュが実行する例示的な動作の概略図である。
【図４Ｂ】図３の通知システムのバックエンドおよび少なくとも１つの変更ログキャッシュが実行する例示的な動作の概略図である。
【図５】例示的な変更ログ処理の概略図である。
【図６】分散システム上で実行される変更ログ処理によって設定されるコミット時間ウィンドウのプロットを示す図である。
【図７】メモリハードウェアと通信している例示的なコンピューティングデバイスの概略図である。
【発明を実施するための形態】
【００２１】
詳細な説明
インメモリ変更ログ、または変更ログキャッシュを有する分散システムは、当該分散システム上で実行されるトランザクションのトランザクション履歴を格納して、ウォッチサブスクリプションをより高速に処理し、それによって当該トランザクションが実行されるとほぼ「リアルタイムの」更新を提供する。したがって、このメモリ上のキャッシングによって、分散システムの多くの（たとえば１，０００個の）マシンにわたって実行されるトランザクションのトランザクション履歴を単一の変更ログキャッシュが格納するので、増加したスケーラビリティが提供される。一般に、分散システム上の所与のデータストアが毎秒処理可能なトランザクションの数は、変更ログキャッシュが毎秒実行し得るタスクの数よりも多い。ファンインポイント（fan-in point）において変更ログキャッシュがデータストアに発行されるすべてのトランザクション要求に対処するためのスループットの減少を軽減するために、実装例は、高需要時に、変更ログキャッシュを、異なるコンピューティングリソース上で実行される複数の変更ログキャッシュ（たとえば変更ログ処理の複数のインスタンス）に動的に分割することを含む。その後、この複数の変更ログキャッシュ、およびそれらの関連付けられたトランザクション履歴が日和見的に互いにマージされて、ファンアウトポイント（fan-out point）において１つ以上のサブスクライブしているウォッチャについてのトランザクション履歴の保証または一貫性が維持され得る。
【００２２】
図１および図２を参照して、ある実装例では、システム１００はユーザ１０２と関連付けられた１つ以上のユーザデバイス１２０ａ〜ｎを含む。ユーザデバイス１２０は、スケーラブルな／弾力性のある非一時的なデータストア１５０を有する分散ストレージシステム２００とネットワーク１３２を介して通信している。ある実装例では、分散ストレージシステム２００は、データストア１５０へのアクセスを管理するコンピューティングデバイス１１２を実行する。ユーザデバイス１２０は、コンピューティングデバイス１１２が書込トランザクション２０４を実行するとデータストア１５０にデータ２０２を書込み、コンピューティングデバイス１１２が読出トランザクション２１４を実行するとデータストア１５０からデータ２０２をウォッチするかまたは読出す。ある例では、コンピューティングデバイス１１２がネットワーク１３２を介してユーザデバイス１２０から書込アクセス要求１２８を受信すると、コンピューティングデバイス１１２は書込トランザクション２０４を実行する。同様に、コンピューティングデバイス１１２がネットワーク１３２を介してユーザデバイス１２０から読出アクセス要求１３０を受信すると、コンピューティングデバイス１１２は読出トランザクション２１４を実行する。ある例では、読出アクセス要求１３０は、ユーザデバイス１２０が新たな読出アクセス要求１３０を繰返し発行する必要なしにデータストア１５０からデータ２０２を一貫してウォッチするかまたは読出すことができるようにする、分散システム２００にわたって一度発行されるスタンディングクエリに対応する。
【００２３】
ある実装例では、分散ストレージシステム２００は、分散システム２００上で実行されるトランザクション２０４のトランザクション履歴３１２（図３）を耐久性のない変更ログキャッシュ（ＣＬＣ）３１０に格納するための変更ログ処理５００を実行する。あるシナリオでは、分散ストレージシステム２００は、分散システム２００が受信する書込アクセス要求１２８の数が増加することによって分散システム２００に対する変更ログ負荷も増加する期間中などの高需要の期間中に、変更ログ処理５００の複数のインスタンスを実行する。ある実装例では、分散システム２００上で実行されるバックエンド３０４が、対応するトランザクション２０４からのミューテートしたデータ２０２の複数のスライスを非耐久状態の複数の耐久性のないＣＬＣ３１０の間でファンインするかまたは分散させ得る。次に、分散システム２００上で実行されるスライスマネージャ３１８が、複数のＣＬＣ３１０からのミューテートしたデータ２０２のスライスをファンアウトするかまたはマージして、対応するトランザクションに関心がある１つ以上のユーザデバイス１２０にデータストア１５０の一貫性のあるスナップショットを提供し得る。
【００２４】
ユーザデバイス１２０は、ネットワーク１３２を介してコンピューティングデバイス１１２と通信可能な任意のコンピューティングデバイスであり得る。ユーザデバイス１２０は、ラップトップ、タブレット、スマートフォン、およびウェアラブルコンピューティングデバイス（たとえばヘッドセットおよび／または時計）などのデスクトップコンピューティングデバイスならびにモバイルコンピューティングデバイスを含むが、これらに限定されない。ユーザデバイス１２０はさらに、ディスプレイ１２２上でグラフィカルユーザインターフェイス（ＧＵＩ）２２２を実行して、分散ストレージシステム２００のデータストア１５０にデータ２０２を書込むおよび／またはデータストア１５０からデータ２０２を読出し得る。ユーザデバイス１２０は、データストア１５０に格納されたデータ２０２の更新／変更／ミューテートを求める書込アクセス要求１２８を送信するライタ３２０（図３）と、データ２０２の変更またはミューテーションが起こるといつでもデータ２０２の取得を求める読出アクセス要求１３０（たとえばスタンディングクエリ）を送信するリーダ３２２（図３）との双方を含み得る。
【００２５】
ネットワーク１３２は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、および／またはインターネットなどの、さまざまな種類のネットワークを含み得る。ネットワーク１３２は長距離ネットワーク（たとえばインターネットまたはＷＡＮ）を表わし得るが、ある実装例では、ネットワーク１３２はローカルエリアネットワーク（ＬＡＮ）などの短距離ネットワークを含む。ある実装例では、ネットワーク１３２は標準的な通信技術および／またはプロトコルを用いる。したがって、ネットワーク１３２は、イーサネット（登録商標）、ワイヤレスフィデリティ（ＷｉＦｉ）（たとえば８０２．１１）、マイクロ波アクセスに関する世界的相互運用（ＷｉＭａｘ）、３Ｇ、ロングタームエボリューション（ＬＴＥ）、デジタル加入者回線（ＤＳＬ）、非同期転送モード（ＡＴＭ）、インフィニバンド（InfiniBand）、ＰＣＩエクスプレスアドバンストスイッチング、ブルートゥース（登録商標）、ブルートゥースローエナジー（ＢＬＥ）等の技術を用いるリンクを含み得る。同様に、ネットワーク１３２上で用いられるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング（ＭＰＬＳ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、シンプルメール転送プロトコル（ＳＭＴＰ）、ファイル転送プロトコル（ＦＴＰ）等を含み得る。ネットワーク１３２上でやり取りされるデータは、ハイパーテキストマークアップ言語（ＨＴＭＬ）、拡張可能マークアップ言語（ＸＭＬ）等を含む技術および／またはフォーマットを用いて表わされ得る。さらに、リンクのすべてまたは一部は、セキュアソケットレイヤ（ＳＳＬ）、トランスポート層セキュリティ（ＴＬＳ）、仮想私設ネットワーク（ＶＰＮ）、インターネットプロトコルセキュリティ（ＩＰｓｅｃ）などの従来の暗号化技術を用いて暗号化され得る。他の例では、ネットワーク１３２は、上述のものの代わりにまたは上述のものに加えて、カスタムおよび／または専用データ通信技術を用いる。
【００２６】
図２を参照して、ある実装例では、分散ストレージシステム２００は疎結合されたメモリホスト１１０、１１０ａ〜ｎ（たとえばコンピュータまたはサーバ）を含む。各メモリホストは、データをキャッシュするために用いられ得るストレージリソース１１４（たとえばメモリハードウェア、メモリハードウェア、フラッシュメモリ、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、および／またはディスク）と通信しているコンピューティングリソース１１２（たとえば１つ以上のプロセッサまたは中央処理装置（ＣＰＵ））を有する。ストレージリソース１１４上に重なっているデータストア１５０（たとえばストレージ抽象化）によって、１つ以上のユーザデバイス１２０、１２０ａ〜ｎによるストレージリソース１１４のスケーラブルな使用が可能になる。ユーザデバイス１２０は、（たとえばリモートプロシージャコール（ＲＰＣ）を介して）ネットワーク１３２を通じてメモリホスト１１０と通信し得る。
【００２７】
ある実装例では、分散ストレージシステム２００は「シングルサイド」であり、ユーザデバイス１２０からのＲＰＣに応答するための任意のサーバジョブが、それらの対応するメモリホスト１１０上で書込トランザクション２０４を実行する際にデータ２０２を書込むまたは読出トランザクション２１４を実行する際にデータ２０２を読出す必要性をなくし、代わりに、専用ハードウェアに依拠して遠隔の書込および読出アクセス要求１２８、１３０をそれぞれ処理し得る。「シングルサイド」とは、メモリホスト１１０上の要求処理の大部分がメモリホスト１１０のＣＰＵ１１２上で実行されるソフトウェアによってではなくハードウェアにおいて行なわれ得る方法を指す。メモリホスト１１０（たとえばサーバ）のプロセッサ１１２に、対応するストレージリソース１１４（たとえば非一時的メモリ）のアクセスをユーザデバイス１２０上で実行されるユーザ処理１２６にエクスポートするサーバ処理１１８を実行させる代わりに、ユーザデバイス１２０はメモリホスト１１０のネットワークインターフェイスコントローラ（ＮＩＣ）１１６を介してストレージリソース１１４に直接アクセスしてもよい。シングルサイドの分散キャッシングシステムに関するさらなる概念および特徴は米国特許第９，１６４，７０２号に見ることができ、当該米国特許の内容全体を引用により本明細書に援用する。
【００２８】
分散ストレージシステム２００は、リモートメモリホスト１１０のメモリハードウェア１１４（たとえばデータストア１５０）にデータ２０２を入れ、ＲＰＣを介して、またはリモートダイレクトメモリアクセス（ＲＤＭＡ）対応のケーブルネットワークインターフェイスコントローラ（ＮＩＣ）１１６を介して、リモートメモリホスト１１０からデータ２０２を取得し得る。ネットワークインターフェイスコントローラ１１６（ネットワークインターフェイスカード、ネットワークアダプタ、またはＬＡＮアダプタとしても知られている）は、コンピューティングデバイス／リソース１１２をネットワーク１３２に接続するコンピュータハードウェアコンポーネントであり得る。メモリホスト１１０ａ〜ｎおよびユーザデバイス１２０の双方は、ネットワーク通信用のネットワークインターフェイスコントローラ１１６を各々が有し得る。メモリホスト１１０のコンピューティングプロセッサ１１２上で実行されるホスト処理１１８は、書込トランザクション２０４を実行して更新されたデータ２０２を書込む際にメモリ場所２５０ａ〜ｎを割当て得る。
【００２９】
ある実装例では、１つ以上のユーザデバイス１２０（たとえばウォッチャ３２２）は、スタンディングクエリと関連付けられた読出アクセス要求１３０を分散システム２００にわたって一度発行して、特定のデータ２０２をサブスクライブする。このスタンディングクエリ（たとえば読出アクセス要求１３０）によって、対応するユーザデバイス１２０（たとえばサブスクライブしているウォッチャ３２２）は、新たな読出アクセス要求１３０を繰返し発行する必要なしにデータストア１５０からデータ２０２を一貫してウォッチするかまたは読出すことができる。したがって、分散システム２００上で書込トランザクション２０４を実行してデータストア１５０内のデータ２０２を修正することを求める書込アクセス要求１３８を分散システム２００が受信するといつでも、分散システム２００は、修正された／ミューテートしたデータ２０２を、データ２０２をサブスクライブしている１つ以上のウォッチャ３２２にストリームする。
【００３０】
ある実装例では、分散システム２００は、更新されたデータ２０２を１つ以上のサブスクライブしているウォッチャ３２２にリアルタイムでストリームし、分散システム２００が所与の時点で現在受信しているトランザクション要求１３８および１４０の数に基づいてスケーラブルである。たとえば、分散システム２００は、分散システム２００が高負荷下にある時に、すなわち分散システム２００が多数の書込要求１３８を受信している時に、データストア１５０内のデータ２０２に対する複数のミューテーションを折畳む一貫性のあるスナップショット（たとえばトランザクション履歴３１２）を所与の時間インスタンスで提供し得る。このスケーラビリティによって、分散システム２００は、可能な限りリアルタイムで、かつ分散システム２００の過負荷のためにウォッチャ３２２へのデータ２０２のストリーミングをドロップする必要なしに、更新されたデータ２０２をサブスクライブしているウォッチャ３２２にストリームすることができる。したがって、書込トランザクション２０４の実行が成功裏に完了すると、ウォッチャ３２２による読出トランザクション２１４は、ウォッチャ３２２が書込トランザクション２０４によって修正されたデータ２０２の最新のコピーを受信するように、データストア１５０の現在の一貫性のある状態を反映している。ウォッチャ３２２は、最後のスナップショットから起こったすべての変更を反映していない場合があるデータの単一の一貫性のあるスナップショットを所与の時間インスタンスで受信する。
【００３１】
図３は、データストア１５０に格納されたデータ２０２をサブスクライブしている１つ以上のウォッチャ３２２に通知３５０を送信するための通知システム３００のコンポーネントの例示的な実装例のブロック図である。本明細書において、ウォッチャ３２２は、データストア１５０内の特定されたデータ２０２の変更が通知３５０としてほぼリアルタイムでウォッチャ３２２にストリームされるようにスタンディングクエリ（たとえば読出アクセス要求１３０）を発行することによって、この特定されたデータ２０２をサブスクライブし得る。通知システム３００は、１つ以上のリモートライタ３２０、３２０ａ〜ｎおよび１つ以上のリモートウォッチャ３２２、３２２ａ〜ｎと関連付けられたリモートユーザデバイス１２０とネットワーク１３２を介して通信している分散システム２００を含む。分散システム２００は、コンピューティングデバイス１１２上で実行されるデータストアバックエンド３０４およびスライスマネージャ３１８と、メモリハードウェア１１４のデータストア１５０とを含む。
【００３２】
ある実装例では、コンピューティングデバイス１１２は変更ログ処理５００についての命令を実行する。変更ログ処理５００は、分散システム２００上で実行されるトランザクション２０４のトランザクション履歴３１２の一部を非耐久状態で格納するためにメモリ１１４内に耐久性のない変更ログキャッシュ（ＣＬＣ）３１０を提供する。データストア１５０内のデータ２０２に加えられるすべての変更を記録する耐久性のある変更ログを用いるのとは対照的に、ＣＬＣ３１０は、コンピューティングデバイス１１２が変更ログ処理の付加的なインスタンスを実行して２つ以上のＣＬＣ３１０ａ〜ｎを提供することによってＣＬＣ３１０をスケールアップまたはスケールダウンできるように、メモリ１１４内でシャード可能である。このように、変更ログ処理５００はさらに、所与の時間における分散システム２００に対する現在の負荷に依存して１つ以上のインスタンスの実行を中止し得る。耐久性のないＣＬＣ３１０によって提供されるスケーラビリティがなければ、各書込トランザクション２０４がデータストア１５０の対応する場所で実行を待機する間、多数の書込要求１２８によってボトルネックが生じることになる。一般に、単一のデータストア１５０は、そのデータストア１５０の変更を記録するための各自のＣＬＣ３１０に割当てられる。しかし、複数のデータストア１５０が同一のＣＬＣ３１０に割当てられてもよい。たとえば、通知システム３００は、各ＣＬＣ３１０が１，０００個のデータストア１５０の変更を記録するように、１００万個のデータストア１５０および１００個のＣＬＣ３１０を含んでもよい。ある例では、付加的なデータストア１５０が追加された場合により多くのＣＬＣ３１０をスケールアップして、分散システム２００に対する負荷の増加に対処することが必要である。
【００３３】
ある例では、コンピューティングデバイス１１２（たとえばデータ処理ハードウェア）は１つ以上のウォッチャプロキシ３１４、３１４ａ〜ｎを実行する。各ウォッチャプロキシは、ウォッチャ３２２の個々のサブスクリプションを監視するためのステートフルマシンを含む。たとえば、各ウォッチャ３２２は各自のウォッチャプロキシ３１４と１対１の接続を有する。したがって、各ウォッチャプロキシ３１４は、各自のウォッチャ３２２と、対応するウォッチャプロキシ３１４にミューテーションまたはキャッシュミスを提供する１つ以上のＣＬＣ３１０との間で多重化する。キャッシュミスが起こるシナリオでは、ウォッチャプロキシ３１４はバックエンド７００にクエリ３５２を送ってデータストア２０２からデータ２０２を取出し得る／取得し得る。
【００３４】
ある実装例では、バックエンド３０４は、新たな書込トランザクション２０４がデータストア１５０内のデータ２０２の更新をコミットするたびに、ＣＬＣ３１０に格納されたトランザクション履歴３１２を更新するためのトランザクション処理を実行する。トランザクション処理は、ファンイン段階３０１においてＣＬＣ３１０を使用して、順序付けられた変更ログ（たとえばトランザクション履歴３１２）のキャッシュを維持し得る。ある例では、トランザクション処理は、ＣＬＣ３１０が維持する順序付けられた変更ログのキャッシュをデータ２０２のストライプにシャードし、データ２０２の各ストライプを複製し、データストライプおよび複製したデータストライプをメモリハードウェア１１４上の複数の記憶場所２５０に格納する。バックエンド３１０がリモートライタ３２０から書込アクセス要求１２８を受信すると、バックエンド３０４は実時間クロック３１６から実時間（ＴＴ）を得て、ＴＴに基づいて最大コミット時間ＴＤMaxを求め得る。ＴＤMaxは、分散システム２００上で対応する書込トランザクション２０４の実行をコミットする最大時間を指定する。たとえば、ＴＤMaxは、分散システム２００が対応するトランザクション２０４をコミットする上限制限時間を実施する。これによって、分散システム２００は、分散システム２００がＴＤMaxまでにトランザクション２０４をコミットできない場合は対応するトランザクション２０４を打切る。
【００３５】
ある例では、ファンイン段階３０１において、バックエンド３０４は準備ロックメッセージ３３０をＣＬＣ３１０に送信してから、書込トランザクション２０４を実行して（たとえば書込をコミットして）データストア１５０内のデータ２０２を修正／ミューテート／変更する。準備ロックメッセージ３３０は対応するペンディングトランザクション２０４のＴＤMaxを含み、準備ロックメッセージ３３０によってＣＬＣ３１０はコミット時間ウィンドウ６１０（図６）の間は通知ロックを設定する。ここで、コミット時間ウィンドウ６１０は、ＣＬＣ３１０が準備ロックメッセージ３３０を受信するＴＴからＴＤMaxまでの時間ウィンドウに対応する。通知ロックは、ＣＬＣ３１０が、ＴＤMaxよりも早くペンディングトランザクションの開始よりも遅い対応するコミット時間を有するいずれの完了済のトランザクション２０４についても、コミット時間ウィンドウ６１０中に１つ以上のウォッチャ３２２に通知することを防止する。本明細書において「コミット時間」という用語は、対応する書込トランザクション２０４の実行が完了する時間を指す。バックエンド３０４は、準備ロックメッセージ３３０をＣＬＣ３１０に送信した後、書込トランザクション２０４の実行をコミットしてデータストア１５０内のデータ２０２を更新する。
【００３６】
ある実装例では、バックエンド３０４は、対応するトランザクション２０４がコミットしてトランザクション結果３３２をＣＬＣ３１０に提供した後に、トランザクション結果３３２を得る。ある例では、トランザクション結果３３２は、対応するトランザクション２０４がＴＤMaxにまたはＴＤMaxの前にコミット時間を含む場合は対応するトランザクション２０４の実行が受付けられることを示す。これらの例では、トランザクション結果３３２は、対応するトランザクション２０４から生じるデータ２０２の少なくとも１つのミューテーションも含み得る。他の例では、トランザクション結果３３２は、対応するトランザクション２０４が失敗した場合は、またはそうでなければデータストア１５０がＴＤMaxまでに対応するトランザクションを完了する／コミットすることができない場合は、対応するトランザクション２０４の実行が拒絶されることを示す。したがって、本明細書において、トランザクション結果３３２がトランザクション２０４が「拒絶される」ことを示しているとは、ＴＤMaxの前に公的に打切られたために結果が分かっているトランザクション２０４を指す場合もあるし、トランザクション２０４がＴＤMaxまでにコミットしなかったために、トランザクション２０４が完了したか否かの結果が不明なトランザクション２０４を指す場合もある。
【００３７】
バックエンド３０４は、書込トランザクション２０４をコミットした後に解放ロックメッセージ３３４をＣＬＣ３１０に提供し得る。解放ロックメッセージ３３４は対応するトランザクション２０４のトランザクション結果３３２を含み、解放ロックメッセージ３３４によってＣＬＣ３１０は通知ロックを解放／解除する。たとえば、ＣＬＣ３１０は、解放ロックメッセージ３３４を受信すると通知ロックを直ちに解除し得る。トランザクション結果３３２が対応するトランザクションが受付けられることを示す実装例では、解放ロックメッセージ３３４によってＣＬＣ３１０は、対応するトランザクション２０４と関連付けられたデータ２０２の少なくとも１つのミューテーションを記録する。逆に、解放ロックメッセージ３３４によってＣＬＣ３１０は、対応するトランザクション２０４のコミット時間ウィンドウ６１０中のトランザクション履歴３１２にギャップを作成する。ＣＬＣ３１０が作成するギャップは、トランザクション２０４がギャップ中はペンディングであったが、トランザクション２０４が完全にコミットされたか否かの結果は不明であることを示す。
【００３８】
ある実装例では、１つ以上のウォッチャプロキシ３１４は、トランザクション処理のファンアウト段階３０２において実行されて、ＣＬＣ３１０からトランザクション履歴３１２を受信する。トランザクション履歴３１２は、対応するトランザクション２０４についての最古の準備ロックメッセージよりも早い対応するコミット時間を有する分散システム２００上で実行されるいずれかのトランザクション２０４を含む。ある例では、ＣＬＣ３１０は、データ２０２のミューテーションをトランザクション履歴３１２に記録し、トランザクション履歴３１２をウォッチャプロキシ３１４に提供することによって、対応するトランザクション２０４が受付けられた場合はデータ２０２の少なくとも１つのミューテーションを通信する。これらの例では、各ウォッチャプロキシ３１４は通知３５０内にデータ２０２のミューテーションを含み、通知３５０を各自のサブスクライブしているウォッチャ３２２に提供する。他の例では、ＣＬＣ３１０は、対応するトランザクション２０４が拒絶された場合は、ギャップを有するトランザクション履歴３１２をウォッチャプロキシ３１４に提供し、これによって、各ウォッチャプロキシ３１４は通知３５０内のキャッシュミスをプッシュし、通知３５０を各自のサブスクライブしているウォッチャ３２２に提供する。ここで、キャッシュミスは、トランザクション履歴３１２のギャップ中にペンディングであるトランザクション２０４の不明の結果を反映している。ある例では、ウォッチャプロキシ３１４は、バックエンド３０４にクエリ３５２を送ってトランザクション履歴３１２のギャップ中のデータストア１５０のスナップショットを得て、ペンディングトランザクション２０４の結果を求め、その結果を各自のサブスクライブしているウォッチャ３２２に提供する。逆に、対応するトランザクション２０４がＴＤMaxの前に公的に打切られたために拒絶される場合は、対応するトランザクション２０４はトランザクション履歴３１２から単に省略される。さらに、新たなウォッチャ３２２が分散システム２００に接続すると、ウォッチャ３２２がデータストア１５０の一貫性のあるスナップショットを受信するように、対応するウォッチャプロキシ３１４が、ウォッチャ３２２と関連付けられたスタンディングクエリ１３０に影響を与えるデータストア１５０のすべての変更を統合し得る。
【００３９】
データストア１５０にコミットされるトランザクション２０４の数が増加して、単一のＣＬＣ３１０ではすべてのミューテーションを記録するのに十分なスループットを有していない状況では、データ２０４のミューテーションは複数のＣＬＣ３１０の間でスライスに分割され得る。ある実装例では、スライスマネージャ３１８は、ミューテートしたデータ２０４の１つ以上のそれぞれのスライスを各々が含む複数のＣＬＣ３１０からのトランザクション履歴３１２をマージして、１つ以上のウォッチャ３２２からの所与のスタンディングクエリ（たとえば読出アクセス要求１３０）を満たす。
【００４０】
図４Ａおよび図４Ｂは、分散システム２００のバックエンド３０４および少なくとも１つの変更ログキャッシュ３１０が実行する例示的な動作を示すダイヤグラム４００ａ、４００ｂを提供する。ダイヤグラム４００ａ、４００ｂは図３の通知システム３００を参照して説明され得る。縦のｙ軸は、上から下に向かって増加する時間を示す。時間１において、バックエンド３０４はリモートライタ３２０からトランザクション要求（たとえば書込アクセス要求１２８）を受信する。リモートライタ３２０は、書込トランザクション２０４を実行してメモリハードウェア１１４上でデータストア１５０に格納されたデータ２０２をミューテートすることを求めるトランザクション要求１３８を送信し得る。時間２において、バックエンド３０４は対応するトランザクション２０４をペンディング中として割当てる。ここで、バックエンド３０４は実時間クロック３１６からＴＴを得て、対応するトランザクション２０４のＴＤMaxを求める。バックエンド３０４は、ＴＤMaxを含む準備ロックメッセージ３３０を作成し得る。
【００４１】
時間３において、バックエンド３０４は準備ロックメッセージ３３０をＣＬＣ３１０に送信し、時間４において、ＣＬＣ３１０は準備ロックメッセージ３３０を受信したことに応答して実時間クロック３１６からＴＴを取出す。時間５において、ＣＬＣ３１０は、準備ロックメッセージ３３０が（たとえば時間３で）呼出されるＴＴと、対応するトランザクション２０４のＴＤMaxとの間のコミット時間ウィンドウ６１０の間は通知ロックを設定する。通知ロックは、ＣＬＣ３１０が、コミット時間ウィンドウ６１０内に対応するそのフォール（fall）を有するいずれの完了済のトランザクション２０４についても、１つ以上のウォッチャ３２２に通知することを防止する。続いて、時間６において、バックエンド３０４は対応するトランザクション２０４の実行をコミットして、データストア１５０内のデータ２０２を変更（たとえばミューテート）する。
【００４２】
時間７において、データストア１５０はコミット時間をバックエンド３０４に戻し、バックエンド３０４は戻されたコミット時間に基づいてトランザクション結果３３２を得る。図４Ａは、時間７において戻されたコミット時間がＴＤMaxにまたはＴＤMaxの前に起こって、対応するトランザクション２０４が受付けられることを示すトランザクション結果３３２を提供することを示す。このシナリオでは、時間８において、バックエンド３０４はトランザクション２０４が受付けられることをライタ３２０に通知し、時間９において、対応するトランザクション２０４から生じるデータ２０２の少なくとも１つのミューテーションをＣＬＣ３１０に提供する。時間１０において、ＣＬＣは通知ロックを解放／解除し、データ２０２の少なくとも１つのミューテーションを記録する。時間８においてトランザクション２０４が受付けられることをライタ３２０に通知することによって、ライタ３２０には、ライタ３２０がトランザクション２０４の結果をサブスクライブしているウォッチャ３２２として見ることができる前に、書込トランザクション２０４が成功したことが通告される。しかし、他のシナリオでは、バックエンド３０４は、ＣＬＣが時間１０においてデータ２０２の少なくとも１つのミューテーションを記録すると、時間１０においてトランザクションが受付けられることをライタ３２０に通知してもよい。これらのシナリオでは、データ２０２の少なくとも１つのミューテーションは、ライタ３２０の呼出が戻される前に記録されることが保証される。
【００４３】
一方、図４Ｂは、対応するトランザクション２０４がＴＤMaxまでに完了／コミットできなかったために、またはトランザクション２０４がＴＤMaxの前に公的に打切られたために、対応するトランザクション２０４が拒絶されるシナリオを示す。たとえば、時間７において、データストア１５０は、トランザクション２０４がＴＤMaxまでにコミットできなかったために拒絶されることを示す、またはトランザクション２０４がＴＤMaxの前に公的に打切られたために拒絶されることを示すトランザクション結果３３２をバックエンド３０４に戻し得る。時間８において、バックエンド３０４はトランザクション２０４が拒絶されることをリモートライタ３２０に通知し、時間９において、バックエンド３０４は解放ロックメッセージ３３４をＣＬＣ３１４に送信する。ここで、解放ロックメッセージ３３４は、対応するトランザクション２０４が拒絶されたことを示すトランザクション結果３３２を含み、ＣＬＣ３１０に通知ロックを解放するように通告する。時間１０において、ＣＬＣ３１０は、コミット時間ウィンドウ６１０の間に予め設定された通知ロックを解除し、拒絶された対応するトランザクション２０４と関連付けられたギャップを作成する。より具体的には、ＣＬＣ３１０は、コミット時間ウィンドウ６１０中のトランザクション履歴３１２に、すなわち、準備ロックメッセージ３３０が呼出されるＴＴ（たとえば時間３）と、対応するトランザクション２０４のＴＤMaxとの間のトランザクション履歴３１２にギャップを作成し得る。したがって、ＣＬＣ３１０が作成するギャップは、トランザクション２０４が当該ギャップ中はペンディングであったが、トランザクション２０４が完了したか否かの結果は不明であることを示す。
【００４４】
図５は、分散システム２００に対する現在の変更ログ負荷（たとえば需要）に基づいてスケーラビリティを提供するために分散システム２００上で実行される例示的な変更ログ処理５００を提供する。変更ログ処理５００は図３の通知システム３００を参照して説明することができる。データ処理ハードウェア（たとえばコンピューティングデバイス１１２）は変更ログ処理５００の初期のインスタンスを実行して、初期の耐久性のないＣＬＣ３１０ａを提供する。ＣＬＣ３１０ａは、分散システム２００上で実行されるトランザクション（たとえば書込トランザクション２０４）のトランザクション履歴３１２を、データ処理ハードウェアと通信しているメモリハードウェア１１４上に格納するように構成される。したがって、各ＣＬＣ３１０（たとえば変更ログ処理５００の各インスタンス）は、順序付けられた変更ログのキャッシュを維持する役割を果たす。
【００４５】
ファンイン段階３０１において、バックエンド３０４は、対応するトランザクション２０４を実行するためのトランザクション要求１２８（たとえば書込アクセス要求）をリモートライタ３２０から受信したことに応答して、準備ロックメッセージ３３０をＣＬＣ３１０ａに送信する。ここで、ＣＬＣ３１０ａは、ＴＤMaxまでにはコミットすることが保証されている、まだコミットしていない対応するトランザクション２０４のエントリをトランザクション履歴３１２（たとえば変更ログ）に記録することによって、各準備ロックメッセージ３３０を処理する。バックエンド３０４が複数のトランザクション要求１２８を受信すると、ＣＬＣ３１０ａが複数の準備ロックメッセージ３３０を処理しなければならないため、ＣＬＣ３１０ａに対する変更ログ負荷が増加する。ある例では、データストア１５０が毎秒処理可能なコミットの数は、各ＣＬＣ３１０がスループットの減少を経験する前に同時に処理可能な準備ロックメッセージ３３０の数よりも多い。たとえば、ＣＬＣ３１０ａはキャッシングパフォーマンスが劣化する前に毎秒１０，０００個の入力される準備ロックメッセージ３３０を処理可能であり得るのに対して、データストア１５０は毎秒３００，０００個のコミットを処理可能である。したがって、変更ログ負荷が閾値負荷を満たす（たとえば超える）場合、ＣＬＣ３１０ａには、入力される準備ロックメッセージ３３０の処理に対処するスループットが欠如している場合がある。この結果、入力される準備ロックメッセージ３００は、対応するＣＬＣ３１０での処理を待機している間にボトルネックになり得る。ここで、閾値負荷は、ＣＬＣ３１０ａがキャッシングパフォーマンスの劣化を経験することなく処理可能な１秒当たりの準備ロックメッセージ３３０の最大数に対応する。データ処理ハードウェアは、所与の時間に受信したトランザクション要求（たとえば書込アクセス要求１２８）の数に基づいて変更ログ負荷を求め得る。
【００４６】
動作５０２において、バックエンド３０４は、対応するトランザクション２０４の実行が成功した場合、ミューテートしたデータ２０２を含むデータストア１５０からトランザクション結果３３２を得る。上述のように、ＣＬＣ３１０ａは、変更ログ負荷が閾値負荷を満たす場合はデータストア１５０で起こるすべての変更を記録できない場合がある。変更ログ負荷が閾値負荷を満たす場合、メモリハードウェア１１４内のトランザクション履歴３１２のキャッシングにスケーラビリティを提供するために、データ処理ハードウェアは、動作５０４において、トランザクション結果３３２からのミューテートしたデータ２０２を複数のスライス２０２ａ〜ｄに分割し、変更ログ処理５００の少なくとも１つのその後のインスタンスを実行する。これによって、ミューテートしたデータ２０２のスライス２０２ａ〜ｄを格納するための少なくとも１つのその後の耐久性のないＣＬＣ３１０ｂ〜ｄが提供される。初期のＣＬＣ３１０ａと同様に、その後の各ＣＬＣ３１０ａ〜ｄは、分散システム２００上で実行されるトランザクションの対応するトランザクション履歴３１２を格納するように構成される。たとえば、図５は、データ処理ハードウェアが動作５０４において変更ログ処理５００の３つのその後のインスタンスを実行して複数のＣＬＣ３１０ａ、３１０ｂ、３１０ｃ、３１０ｄを提供することを示す。データ処理ハードウェアは「スライサ」コンポーネントを実装して変更ログ負荷を監視し、過負荷のためにミューテートしたデータ２０２を複数のスライス２０２ａ〜ｄに分割することを決定し得る。
【００４７】
ファンアウト段階３０２において、各ＣＬＣ３１０ａ〜ｄ、たとえば分散システム２００上で実行される変更ログ処理５００の各インスタンスは、対応するトランザクション履歴３１２ａ、３１２ｂ、３１２ｃ、３１２ｄを分散システム２００上で実行されるスライスマネージャ３１８に提供し得る。ここで、各トランザクション履歴３１２ａ〜ｄは、受付けられた対応するトランザクション２０４についてのミューテートしたデータ２０２の１つ以上のスライス２０２ａ〜ｄを示す。
【００４８】
動作５０６において、変更ログ処理の複数のインスタンス（たとえば複数のＣＬＣ３１０ａ〜ｄ）が実行中である場合、スライスマネージャ３１８は変更ログ処理５００の少なくとも１つのその後のインスタンスの実行を中止し、変更ログ処理５００の初期のインスタンス（たとえばＣＬＣ３１０ａ）のトランザクション履歴３１２と、変更ログ処理５００の少なくとも１つのその後のインスタンス（たとえばＣＬＣ３１０ｂ〜ｄ）のトランザクション履歴３１２とに含まれているミューテートしたデータ２０２のスライス２０２ａ〜ｄをマージする。上述のように、データ処理ハードウェアは「スライサ」コンポーネントを実装して、変更ログ負荷の軽負荷のためにミューテートしたデータ２０２のスライス２０２ａ〜ｄをマージすることを決定し得る。たとえば、図５は、複数のＣＬＣ３１０ａ〜ｄからのトランザクション履歴３１２ａ〜ｄがスライスマネージャ３１８内にファンアウトし、スライスマネージャ３１８が複数のＣＬＣ３１０ａ〜ｄのトランザクション履歴３１２からのデータスライス２０２ａ〜ｄをマージして、サブスクライブしているウォッチャ３２２に、トランザクション履歴３１２の一貫性のあるスナップショットを所与の時間インスタンスで提供することを示す。ここで、トランザクション履歴３１２の一貫性のあるスナップショットは、受付けられる対応するトランザクション２０４についてのミューテートしたデータ２０２の１つ以上のバッチ、および／または拒絶される対応するトランザクション２０４についてのトランザクション履歴３１２のギャップの１つ以上のバッチを提供し得る。動作５０８において、１つ以上のウォッチャプロキシ３１４は、サブスクライブしている各ウォッチャ３２２に、トランザクション履歴３１２の一貫性のあるスナップショットを含む通知３５０を所与の時間インスタンスで送信する。トランザクション履歴にギャップがある場合、ウォッチャプロキシ３１４は対応するリモートウォッチャ３２２にキャッシュミスを提供する。ウォッチャプロキシ３１４は、ファンアウト段階３０２において変更ログ処理５００の複数のインスタンスが実行中であるか否かを判断し得る。
【００４９】
ある実装例では、１つ以上のウォッチャプロキシ３１４は、トランザクション履歴３１２の一貫性のあるスナップショットに含まれているミューテートしたデータ２０２のバッチごとに所与の時間インスタンスで再開トークンをウォッチャ３２２に提供する。再開トークンは全タスクにわたってグローバルに有効であり、再開トークンが将来用いられ得るように永続する。再開トークンは、クライアントに送信される現在の変更状態を表わす範囲および関連付けられたタイムスタンプを含み得る。したがって、再開トークンを用いると、ウォッチャ３２２が分散システムから一時的に切断されて、再接続されると、分散システム２００が一時的に切断されたウォッチャ３２２のすべての状態を失った場合でもウォッチャ３２２がウォッチャプロキシ３１４から通知３５０を効率的に受信する能力が提供され得る。
【００５０】
図６は、新たな書込トランザクション２０４がデータストア１５０内のデータ２０２の更新にコミットするたびに少なくとも１つのＣＬＣ３１０に格納されたトランザクション履歴３１２を更新するために、分散システム２００上でデータ処理ハードウェア（たとえばコンピューティングデバイス１１２）が実行する変更ログ処理５００のプロット６００を示す。横のｘ軸は分散システム２００の実時間を示しており、実時間のグローバルシーケンス番号は左から右に増加する。縦の破線６０１〜６０７は実時間中のそれぞれのグローバルシーケンス番号を示す。
【００５１】
分散システム２００上で対応する第１のトランザクション２０４ａを実行するための第１のコミット時間ウィンドウ６１０ａが、対応するＣＬＣ３１０によって縦の破線６０１と６０３との間に設定される。ここで、第１のコミット時間ウィンドウ６１０ａは第１の最大コミット時間ＴＣMax_1と関連付けられており、ＴＣMax_1は、第１のトランザクション２０４ａがＴＣMax_1の後はコミットしないことを保証している。図６は、実時間が縦の破線６０３において１３と等しいときにＴＣMax_1が第１のコミットウィンドウ６１０ａの境界を付けていること、および実時間が縦の破線６０１において４と等しいときにデータ処理ハードウェアが第１のトランザクション２０４ａをコミットすることを示す。
【００５２】
同様に、分散システム２００上で対応する第２のトランザクション２０４ｂを実行するための第２のコミット時間ウィンドウ６１０ｂが、対応するＣＬＣ３１０によって縦の破線６０２と６０４との間に設定される。ここで第２のコミット時間ウィンドウ６１０ｂは第２の最大コミット時間ＴＣMax_2と関連付けられており、ＴＣMax_2は、第２のトランザクション２０４ｂがＴＣMax_2の後はコミットしないことを保証している。図６は、実時間が縦の破線６０４において２１と等しいときにＴＣMax_2が第２のコミット時間ウィンドウ６１０ｂの境界を付けていること、および実時間が縦の破線６０２において１２と等しいときにデータ処理ハードウェアが第２のトランザクション２０４ｂをコミットすることを示す。第１および第２のコミット時間ウィンドウ６１０ａ、６１０ｂと関連付けられたＣＬＣ３１０は同一でもよいし、異なっていてもよい。
【００５３】
第１のトランザクション２０４ａの実行は、第１のＴＣMax_1よりも早いコミット時間で完了する。たとえば、図６は、第１のトランザクション２０４ａのコミット時間が９と等しいのに対して、第１のＴＣMax_1は１３と等しいことを示す。第１のトランザクション２０４ａは、より早い準備ロック時間を有する別のペンディングトランザクション２０４によってロックアウトされないため、データ処理ハードウェアは、実時間が９と等しいときにコミット時間を受信するとトランザクション履歴３１２の第１の一貫性のあるスナップショットを即座に取り得る。第２のトランザクション２０４ｂはトランザクション履歴３１２の第１の一貫性のあるスナップショットの前に縦の破線６０２において実行をコミットするが、第２のトランザクション２０４ｂは第１の一貫性のあるスナップショットが終わるまでは完全には完了しない。たとえば、第２のトランザクション２０４ｂは１８と等しいコミット時間を含む。したがって、第１の一貫性のあるスナップショットは、第１のトランザクション２０４ａと関連付けられているが第２のトランザクション２０４ｂとは関連付けられていないいずれかのミューテーションを含む。
【００５４】
図６が第２のＴＣMax_2よりも早い対応するコミット時間を含む第２のトランザクション２０４ｂをさらに示すように、第２のトランザクション２０４ｂは、より早い準備ロック時間を有する別のペンディングトランザクション２０４によってロックアウトされないため、データ処理ハードウェアは、１８と等しい対応するコミット時間においてトランザクション履歴３１２の第２の一貫性のあるスナップショットを取る。ここで、第２の一貫性のあるスナップショットは、コミット時間ウィンドウ６１０ａ、６１０ｂの双方と関連付けられたトランザクション履歴をマージして、第１および第２のトランザクション２０４ａ、２０４ｂの双方と関連付けられたミューテーションを含む。データ処理ハードウェアは少なくとも１つのウォッチャプロキシ３１４を実行して、第２の一貫性のあるスナップショット内のトランザクション履歴のマージを提供し得る。
【００５５】
ある実装例では、データ処理ハードウェアは、オフラインイベント６５０の後に変更ログ処理５００の再開を決定する。たとえば、図６は、オフラインイベント６５０が縦の破線６０５において起こり、続いて変更ログ処理５００が実時間が３０と等しい縦の下線６０６において再開するまで起こることを示す。変更ログキャッシュは耐久状態を有さないため、オフラインイベント６５０の前に変更ログキャッシュによって予め保持されている状態はいずれも、変更ログ処理５００が再開する時までには無くなっている。ある例では、データ処理ハードウェアはグローバルな最大コミット時間遅延ＴＣＤMaxに依拠して、変更ログ処理５００の再開後のトランザクション履歴３１２のすべてのその後のスナップショットが一貫性があるように分散システム２００上で実行されるすべてのトランザクション２０４が完了することを保証する。換言すれば、ＴＣＤMaxは、変更ログ処理５００の再開前にコミットするトランザクション２０４はいずれもＴＣＤMaxの終わりまでには完了していることを保証する期間である。データ処理ハードウェアは、変更ログ処理が再開すると実時間に基づいて現在のシーケンス番号を求める。たとえば、現在のシーケンス番号は、変更ログ処理５００が再開するときの縦の破線６０６において３０と等しい。その後、データ処理ハードウェアは現在のシーケンス番号（たとえば縦の破線６０６）からＴＣＤMaxを待機してから、分散システム上で実行されるトランザクション２０４のトランザクション履歴３１２を更新する。本明細書において、実時間（ＴＴ）は、所与のシステム上の実時間の測定が実際の時間に対応するように時間を有効に離散化する。したがって、ＴＴは、現在時刻が確率的にＴＴの下限（TTnow_lowerbound）とＴＴの上限（TTnow_upperbound）との間の間隔内にあることを示す間隔を規定する。この結果、ＴＴの値を直接準備することができず、第１の実時間（ＴＴ１）がTT2_lowerboundである後に第２の実時間（ＴＴ２）におけるイベントが起こった条件はTT1_upperboundよりも大きい。図６は、ＴＣＤMaxが２０と等しく、縦の破線６０６と６０７との間に起こっていることを示す。したがって、ＴＣＤMaxが２０と等しい場合、データ処理ハードウェアは、実時間が５０と等しい縦の破線６０７になってからトランザクション履歴３１２を更新する。
【００５６】
ある例では、第３のコミット時間ウィンドウ６１０ｃが、実時間が２５と等しいときに対応するＣＬＣ３１０によって設定され、オフラインイベント６５０は第３のコミット時間ウィンドウ６１０ｃ中に起こる。第３のコミット時間ウィンドウ６１０ｃはオフラインイベント６５０の発生前に既知の第３のＴＣMax_3で終了するが、対応するＣＬＣ３１０は、縦の破線６０５と６０６との間のオフラインイベント６５０の結果として、第３のコミット時間ウィンドウ６１０ｃと関連付けられた対応するトランザクション２０４の状態を失う。したがって、変更ログ処理５００の間、ウォッチャプロキシ３１４はＴＣＤMaxを待機してから、第３のコミット時間ウィンドウ６１０ｃと関連付けられた対応するトランザクション２０４を含むトランザクション履歴３１２の一貫性のあるスナップショットを提供する。トランザクション履歴３１２にギャップがある場合は、ウォッチャプロキシ３１４はギャップの時間範囲中にデータストアから一貫性のある状態を取出す。
【００５７】
ある実装例では、第４のコミット時間ウィンドウ６１０ｄが、対応するＣＬＣ３１０によって再開イベントの後に設定され、ＴＣＤMaxの終わりの前に起こる第４のＴＣMax_4を含む。第４のコミット時間ウィンドウ６１０ｄと関連付けられた対応するトランザクションが第４のＴＣMax_4までに成功裏にコミットすると仮定すると、ＴＣＤMaxの終わりのトランザクション履歴３１２の一貫性のあるスナップショットは、両方のコミット時間ウィンドウ６１０ｃ、６１０ｄと関連付けられたトランザクション履歴をマージして、それらの対応するトランザクション２０４と関連付けられたミューテーションを含む。対照的に、ＴＣＤMax中に開始するがＴＣＤMaxの後に終了する第５のコミット時間ウィンドウ６１０ｅと関連付けられた対応するトランザクション２０４は、ＴＣＤMaxの終わりに一貫性のあるスナップショットには含まれない。第５のコミット時間ウィンドウ６１０ｄと関連付けられた第５のＴＣMax_5はＴＣＤMaxの後に起こるためである。
【００５８】
図７は、コンピューティングリソース１１２およびデータストア１５０などの、本文書に記載されるシステムおよび方法を実装するために用いられ得る例示的なコンピューティングデバイス７００の概略図である。コンピューティングデバイス７００は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなどの、さまざまな形態のデジタルコンピュータを表わすことを意図している。ここに示すコンポーネント、それらの接続および関係、ならびにそれらの機能は例示に過ぎないことが意図されており、本文書に記載されるおよび／または請求される本発明の実装例を限定することを意図していない。
【００５９】
コンピューティングデバイス７００は、プロセッサ７１０（すなわちデータ処理ハードウェア）と、メモリ７２０と、記憶装置７３０と、メモリ７２０および高速拡張ポート７５０に接続している高速インターフェイス／コントローラ７４０と、低速バス７７０および記憶装置７３０に接続している低速インターフェイス／コントローラ６６０とを含む。コンポーネント７１０、７２０、７３０、７４０、７５０および７６０の各々はさまざまなバスを用いて相互に接続されており、共通のマザーボード上にまたは他の態様で適宜搭載され得る。プロセッサ７１０は、コンピューティングデバイス７００内で実行される命令を処理可能であり、この命令には、ＧＵＩのためのグラフィック情報を高速インターフェイス７４０に結合されているディスプレイ７８０などの外部入出力デバイス上に表示するためにメモリ７２０内または記憶装置７３０上に記憶されている命令が含まれる。他の実装例では、複数のプロセッサおよび／または複数のバスが、複数のメモリおよび複数種類のメモリとともに適宜用いられ得る。また、複数のコンピューティングデバイス７００が接続され得、各デバイスは（たとえば、サーババンク、ブレードサーバ群、またはマルチプロセッサシステムとして）必要な動作の一部を提供する。
【００６０】
メモリ７２０は、情報を非一時的にコンピューティングデバイス７００内に記憶する。メモリ７２０は、コンピュータ読取可能媒体、揮発性メモリユニット、または不揮発性メモリユニットであり得る。非一時的メモリ７２０は、コンピューティングデバイス７００が使用するプログラム（たとえば命令のシーケンス）またはデータ（たとえばプログラム状態情報）を一時的にまたは永続的に記憶するために用いられる物理デバイスであり得る。不揮発性メモリの例として、フラッシュメモリおよび読取専用メモリ（ＲＯＭ）／プログラマブルＲＯＭ（ＰＲＯＭ）／消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）／電子的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））（たとえば、ブートプラグラムなどのファームウェアに典型的に用いられる）およびディスクまたはテープが挙げられるが、これらに限定されない。揮発性メモリの例として、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、相変化メモリ（ＰＣＭ）が挙げられるが、これらに限定されない。
【００６１】
記憶装置７３０は、コンピューティングデバイス７００に大容量記憶を提供可能である。ある実装例では、記憶装置７３０はコンピュータ読取可能媒体である。さまざまな異なる実装例では、記憶装置６３０は、フロッピー（登録商標）ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくは他のコンフィギュレーションにおけるデバイスを含む一連のデバイスであり得る。さらなる実装例では、コンピュータプログラムプロダクトが情報担体において有形に具体化される。コンピュータプログラムプロダクトは、実行されると上述のような１つ以上の方法を実行する命令を含む。情報担体は、メモリ７２０、記憶装置７３０、またはプロセッサ７１０上のメモリなどの、コンピュータ読取可能媒体または機械読取可能媒体である。
【００６２】
高速コントローラ７４０はコンピューティングデバイス７００のための帯域幅集約的な動作を管理するのに対して、低速コントローラ７６０はより低い帯域幅集約的な動作を管理する。そのような機能の割当ては例示に過ぎない。ある実装例では、高速コントローラ７４０はメモリ７２０、ディスプレイ７８０に（たとえばグラフィックスプロセッサまたはアクセラレータを介して）、およびさまざまな拡張カード（図示せず）を受付け得る高速拡張ポート７５０に結合される。ある実装例では、低速コントローラ７６０は記憶装置７３０および低速拡張ポート６７０に結合される。さまざまな通信ポート（たとえばＵＳＢ、ブルートゥース（登録商標）、イーサネット（登録商標）、無線イーサネット）を含み得る低速拡張ポート７７０は、キーボード、ポインティングデバイス、スキャナ、またはスイッチもしくはルータなどのネットワーキングデバイスなどの１つ以上の入出力デバイスに、たとえばネットワークアダプタを介して結合され得る。
【００６３】
コンピューティングデバイス７００は、図に示すように多数の異なる形態で実装され得る。たとえば、コンピューティングデバイス７００は標準的なサーバ７００ａとしてもしくはそのようなサーバ７００ａ群内で複数回、ラップトップコンピュータ７００ｂとして、またはラックサーバシステム７００ｃの一部として実装され得る。
【００６４】
ある実装例では、コンピューティングリソース１１２を実装するコンピューティングデバイス７００は、（たとえばメモリ７２０内の）データストア１５０と通信している。（データ処理ハードウェア７１０上で実行される）コンピューティングリソース１１２は分散システム２００についての変更ログ処理５００の初期のインスタンス３１０を実行し、変更ログ処理５００の各インスタンス３１０は、コンピューティングリソース１１２と通信しているメモリハードウェア７２０上に、分散システム２００上で実行されるトランザクション２０４（たとえば書込トランザクション）のトランザクション履歴３１２を格納するように構成される。コンピューティングリソース１１２はトランザクション要求１３８を受信し、受信したトランザクション要求１３８に基づいて変更ログ負荷を求め得る。ある例では、コンピューティングリソース１１２は、変更ログ負荷が閾値負荷を満たした場合は変更ログ処理５００の少なくとも１つのその後のインスタンス３１０を実行し、変更ログ処理５００の複数のインスタンスが実行中であるか否かを判断する。変更ログ処理５００の複数のインスタンスが実行中である場合、コンピューティングリソース１１２は変更ログ処理５００の少なくとも１つのその後のインスタンスの実行を中止し、変更ログ処理５００の初期のインスタンス３１０のトランザクション履歴と、変更ログ処理５００の少なくとも１つのその後のインスタンス３１０のトランザクション履歴とをマージし得る。ある例では、コンピューティングリソース１１２は、マージしたトランザクション履歴を反映する一貫性のあるスナップショットを、ミューテートしたデータをサブスクライブしているすべてのウォッチャ３２２に提供する。
【００６５】
ソフトウェアアプリケーション（すなわちソフトウェアリソース１１０ｓ）は、コンピューティングデバイスにタスクを実行させるコンピュータソフトウェアを指す場合がある。ある例では、ソフトウェアアプリケーションは「アプリケーション」、「アプリ」または「プログラム」と称される場合がある。アプリケーションの例として、システム診断アプリケーション、システム管理アプリケーション、システム保守アプリケーション、ワードプロセッシングアプリケーション、スプレッドシートアプリケーション、メッセージングアプリケーション、メディアストリーミングアプリケーション、ソーシャルネットワーキングアプリケーション、およびゲーミングアプリケーションが挙げられるが、これらに限定されない。
【００６６】
非一時的メモリ１１０ｈｍは、コンピューティングデバイス１１０ｈｃが使用するプログラム（たとえば命令のシーケンス）またはデータ（たとえばプログラム状態情報）を一時的にまたは永続的に格納するために用いられる物理デバイスであり得る。非一時的メモリ１１０ｈｍは揮発性および／または不揮発性のアドレス指定可能な半導体メモリであり得る。不揮発性メモリの例として、フラッシュメモリおよび読取専用メモリ（ＲＯＭ）／プログラマブルＲＯＭ（ＰＲＯＭ）／消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）／電子的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））（たとえば、ブートプラグラムなどのファームウェアに典型的に用いられる）が挙げられるが、これらに限定されない。揮発性メモリの例として、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、相変化メモリ（ＰＣＭ）およびディスクまたはテープが挙げられるが、これらに限定されない。
【００６７】
ここに記載されるシステムおよび技法の各種実装は、デジタル電子回路および／もしくは光回路、集積回路、専用に設計されたＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、ならびに／またはその組み合わせで実現できる。これら各種実装は、少なくとも１つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および／または解釈可能な１つ以上のコンピュータプログラムでの実装を含むことができ、それは、専用または汎用目的でもよく、ストレージシステム、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスに対して、データおよび命令を受信し、データおよび命令を送信するように結合される。
【００６８】
これらのコンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている）は、プログラマブルプロセッサのための機械命令を含んでおり、高レベル手続き型および／またはオブジェクト指向プログラミング言語で、および／またはアセンブリ／機械言語で実装され得る。本明細書において「機械読取可能媒体」および「コンピュータ読取可能媒体」という用語は、機械命令および／またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラムプロダクト、非一時的なコンピュータ読取可能媒体、装置および／またはデバイス（たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス（ＰＬＤ））を指し、機械命令を機械読取可能信号として受信する機械読取可能媒体を含む。「機械読取可能信号」という用語は、機械命令および／またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【００６９】
本明細書に記載される主題および機能的動作の実装例は、デジタル電子回路で実装されてもよく、または本明細書に開示される構造およびそれらの構造的等価物を含むコンピュータソフトウェア、ファームウェアもしくはハードウェアで実装されてもよく、またはそれらのうちの１つ以上の組み合わせで実装されてもよい。さらに、本明細書に記載される主題は、１つ以上のコンピュータプログラムプロダクトとして、すなわちデータ処理装置によって実行するため、またはデータ処理装置の動作を制御するためにコンピュータ読取可能媒体上で符号化されるコンピュータプログラム命令の１つ以上のモジュールとして実装されてもよい。コンピュータ読取可能媒体は、機械読取可能記憶装置、機械読取可能記憶基板、メモリデバイス、機械読取可能伝播信号に影響を及ぼす物質の組成、またはそれらのうちの１つ以上の組み合わせであってもよい。「データ処理装置」、「コンピューティングデバイス」および「コンピューティングプロセッサ」という用語は、データを処理するためのすべての装置、デバイスおよび機械を包含しており、一例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。当該装置は、ハードウェアに加えて、当該コンピュータプログラムのための実行環境を作り出すコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの１つ以上の組み合わせを構成するコードを含み得る。伝播信号は、人工的に生成される信号、たとえば好適な受信機装置に送信される情報を符号化するために生成される機械生成電気信号、光信号または電磁信号である。
【００７０】
コンピュータプログラム（アプリケーション、プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプトまたはコードとしても知られている）は、コンパイラ型言語またはインタープリタ型言語を含む任意の形態のプログラミング言語で書込まれてもよく、スタンドアロンのプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットとしてなどの任意の形態で配備されてもよい。コンピュータプログラムは、ファイルシステム内のファイルに必ずしも対応していない。プログラムは、他のプログラムまたはデータ（たとえばマークアップ言語文書で格納された１つ以上のスクリプト）を保持するファイルの一部に格納されてもよく、当該プログラムに専用の単一のファイルに格納されてもよく、または複数の調整されたファイル（たとえば１つ以上のモジュール、サブプログラム、またはコードの一部を格納するファイル）に格納されてもよい。コンピュータプログラムは、１つのコンピュータで、または、一箇所に位置するかもしくは複数の箇所にわたって分散されて通信ネットワークによって相互に接続されている複数のコンピュータ上で実行されるように配備されてもよい。
【００７１】
本明細書に記載される処理および論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように１つ以上のコンピュータプログラムを実行する１つ以上のプログラマブルプロセッサによって実行され得る。また、処理および論理フローは、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）などの特殊用途論理回路によって実行されてもよく、装置も、当該特殊用途論理回路として実装されてもよい。
【００７２】
コンピュータプログラムの実行に適したプロセッサは、一例として、汎用マイクロプロセッサおよび特殊用途マイクロプロセッサを両方とも含み、任意の種類のデジタルコンピュータの任意の１つ以上のプロセッサを含む。一般に、プロセッサは、読取専用メモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信することになる。コンピュータの必須の要素は、命令を実行するためのプロセッサ、ならびに命令およびデータを格納するための１つ以上のメモリデバイスである。一般に、コンピュータは、データを格納するための１つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクまたは光ディスクも含み、または、当該１つ以上の大容量記憶装置からデータを受信するもしくは当該１つ以上の大容量記憶装置にデータを転送するように、もしくは受信も転送もするように動作可能に結合されることになる。しかし、コンピュータはこのようなデバイスを有する必要はない。さらに、コンピュータは、別のデバイス、たとえば数例を挙げると、携帯電話、携帯情報端末（ＰＤＡ）、携帯型オーディオプレーヤ、全地球測位システム（ＧＰＳ）受信機に埋込まれてもよい。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例として、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリデバイスなどの半導体メモリデバイス、たとえば内蔵ハードディスクまたは取外し可能なディスクなどの磁気ディスク、光磁気ディスク、ならびにＣＤ  ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む。プロセッサおよびメモリは、特殊用途論理回路によって補完されてもよく、または特殊用途論理回路に組込まれてもよい。
【００７３】
ユーザとの対話を提供するために、本開示の１つ以上の局面は、情報をユーザに表示するための表示装置、たとえばＣＲＴ（陰極線管）、ＬＣＤ（液晶表示）モニタまたはタッチスクリーンと、任意にユーザが入力をコンピュータに提供することができるようにするキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールとを有するコンピュータ上で実装され得る。ユーザとの対話を提供するために他の種類のデバイスも使用してもよい。たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含む任意の形態で受信されてもよい。また、コンピュータは、ユーザが使用するデバイスにドキュメントを送り、ユーザが使用するデバイスからドキュメントを受信することによって、たとえばウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送ることによって、ユーザと対話し得る。
【００７４】
本開示の１つ以上の局面は、たとえばデータサーバとしてのバックエンドコンポーネントを含むコンピューティングシステムにおいて実装されてもよく、またはミドルウェアコンポーネント、たとえばアプリケーションサーバを含むコンピューティングシステムにおいて実装されてもよく、またはフロントエンドコンポーネント、たとえばユーザが本明細書に記載される主題の実装例と対話できるようにするグラフィカルユーザインターフェースまたはウェブブラウザを含むクライアントコンピュータを含むコンピューティングシステムにおいて実装されてもよく、または１つ以上のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントまたはフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムにおいて実装されてもよい。システムの構成要素は、任意の形態または媒体のデジタルデータ通信、たとえば通信ネットワークによって相互に接続され得る。通信ネットワークの例として、ローカルエリアネットワーク（「ＬＡＮ」）および広域ネットワーク（「ＷＡＮ」）、インターネットワーク（たとえばインターネット）、ならびにピアツーピアネットワーク（たとえばアドホックピアツーピアネットワーク）が挙げられる。
【００７５】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントとサーバは一般に互いに離れており、典型的には通信ネットワークを介して対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって生じる。ある実装例では、サーバは、（たとえば、クライアントデバイスと対話するユーザにデータを表示して、クライアントデバイスと対話するユーザからユーザ入力を受信する目的で）データ（たとえばＨＴＭＬページ）をクライアントデバイスに送信する。（たとえばユーザ対話の結果として）クライアントデバイスで生成されたデータは、サーバにおいてクライアントデバイスから受信され得る。
【００７６】
本明細書は多くの具体例を含んでいるが、これらは、本開示または請求され得るものの範囲を限定するものとして解釈されるべきではなく、むしろ本開示の特定の実装例に特有の特徴の説明であると解釈されるべきである。また、別々の実装例の文脈において本明細書に記載されている特定の特徴は、単一の実装例において組み合わせて実装されてもよい。逆に、単一の実装例の文脈において記載されているさまざまな特徴は、複数の実装例において別々に、または任意の好適な下位の組合せで実装されてもよい。さらに、特徴は特定の組み合わせで作用するものとして上記され、さらにはそのようなものとして最初は請求され得るが、請求されている組み合わせからの１つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、請求されている組み合わせは、下位の組合せまたは下位の組合せの変形例に向けられてもよい。
【００７７】
同様に、動作は特定の順序で図示されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序もしくはシーケンシャルな順序で実行されなければならないと理解されるべきではなく、または、望ましい結果を達成するために、すべての示されている動作が実行されなければならないと理解されるべきではない。特定の状況では、マルチタスク処理および並列処理が有利な場合がある。さらに、上記の実施形態におけるさまざまなシステム構成要素の分離は、すべての実施形態においてこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に単一のソフトウェアプロダクトに一体化されてもよく、または複数のソフトウェアプロダクトにパッケージングされてもよいことが理解されるべきである。
【００７８】
多数の実装例が記載されてきた。しかし、本開示の精神および範囲から逸脱することなくさまざまな修正がなされ得ることが理解されるであろう。したがって、他の実装例は、以下の請求項の範囲内にある。たとえば、請求項に記載されている動作は、異なる順序で実行されて、依然として望ましい結果を達成することができる。
【図１】
2019511770.tif 000003
【図２】
2019511770.tif 000004
【図３】
2019511770.tif 000005
【図４Ａ】
2019511770.tif 000006
【図４Ｂ】
2019511770.tif 000007
【図５】
2019511770.tif 000008
【図６】
2019511770.tif 000009
【図７】
2019511770.tif 000010
【手続補正書】
【提出日】平成30年10月16日(2018.10.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
データ処理ハードウェア（１１２）によって、分散システム（２００）についての変更ログ処理（５００）の初期のインスタンス（３１０）を実行することを備え、前記変更ログ処理（５００）の各インスタンス（３１０）は、前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）のトランザクション履歴（３１２）を、前記データ処理ハードウェア（１１２）と通信しているメモリハードウェア（１１４）上に格納するように構成され、前記方法はさらに、
前記データ処理ハードウェア（１１２）において、前記分散システム（２００）上で対応するトランザクション（２０４、２１４）を実行するためのトランザクション要求（１３８）を受信することと、
前記データ処理ハードウェア（１１２）によって、受信した前記トランザクション要求（１３８）に基づいて変更ログ負荷を求めることと、
前記変更ログ負荷が閾値負荷を満たす場合、前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の少なくとも１つのその後のインスタンス（３１０）を実行することと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の複数のインスタンスが実行中であるか否かを判断することと、
前記変更ログ処理（５００）の複数のインスタンスが実行中である場合、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（３１２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（３１２）とをマージすることとを備える、方法。
【請求項２】
前記メモリハードウェア（１１４）の変更ログキャッシュ（３１０）に各トランザクション履歴（３１２）を格納することをさらに備える、請求項１に記載の方法。
【請求項３】
前記各トランザクション履歴（３１２）を格納することは、
前記データ処理ハードウェア（１１２）によって、前記トランザクション履歴（３１２）をデータストライプにシャードすることと、
各データストライプを複製することと、
前記データストライプおよび複製した前記データストライプを前記メモリハードウェア（１１４）の複数の記憶場所（２５０）に格納することとを備える、請求項２に記載の方法。
【請求項４】
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）を実行した後に前記変更ログ負荷が前記閾値負荷を満たさない場合、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（３１２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（３１２）とをマージすることとをさらに備える、請求項１から３のいずれか１項に記載の方法。
【請求項５】
各トランザクション要求（１３８）を受信したことに応答して、
前記データ処理ハードウェア（１１２）によって実時間を得ることと、
前記データ処理ハードウェア（１１２）によって、前記実時間に基づいて最大コミット時間（ＴＤMax）を求めることとをさらに備え、前記最大コミット時間（ＴＤMax）は、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行を完了する最大時間を指定しており、さらに、
前記最大コミット時間（ＴＤMax）を前記データ処理ハードウェア（１１２）から前記メモリハードウェア（１１４）の少なくとも１つの変更ログキャッシュ（３１０）に通信することを備える、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記実時間から前記最大コミット時間（ＴＤMax）まで通知ロックを設定し、前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＤMax）よりも早い対応するコミット時間を有する完了済のトランザクション（２０４、２１４）について１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを防止する、請求項５に記載の方法。
【請求項７】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記最大コミット時間（ＴＤMax）の終わりに前記通知ロックを解除し、解除された前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＤMax）よりも早い前記対応するコミット時間を有する完了済の各トランザクション（２０４、２１４）について前記１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを許可する、請求項６に記載の方法。
【請求項８】
前記最大コミット時間（ＴＤMax）を通信した後、
前記データ処理ハードウェア（１１２）によって、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることをさらに備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＤMax）を備え、さらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前に各自のコミット時間を備える場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が受付けられることを示すトランザクション結果（３３２）を、前記データ処理ハードウェア（１１２）によって得ることと、
前記トランザクション結果（３３２）を前記データ処理ハードウェア（１１２）から前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記対応するトランザクション（２０４、２１４）と関連付けられた少なくとも１つのミューテーションを記録する、請求項５に記載の方法。
【請求項９】
前記少なくとも１つの変更ログキャッシュ（３１０）は、記録された前記ミューテーションを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は記録された前記ミューテーションを備える、請求項８に記載の方法。
【請求項１０】
前記通知（３５０）は、前記最大コミット時間（ＴＤMax）の前記終わりに前記トランザクション履歴（３１２）の一貫性のあるスナップショットをさらに備え、前記一貫性のあるスナップショットは、前記対応するトランザクション（２０４、２１４）と、前記最大コミット時間（ＴＤMax）よりも早い対応するコミット時間を有するいずれかの完了済のトランザクション（２０４、２１４）とを備える、請求項９に記載の方法。
【請求項１１】
前記最大コミット時間（ＴＤMax）を通信した後、
前記データ処理ハードウェア（１１２）によって、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることをさらに備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＤMax）を備え、さらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前にコミットできない場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が拒絶されることを示すトランザクション結果（３３２）を、前記データ処理ハードウェア（１１２）によって得ることと、
前記トランザクション結果（３３２）を前記データ処理ハードウェア（１１２）から前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション処理が前記最大コミット時間（ＴＤMax）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信した前記実時間と前記最大コミット時間（ＴＤMax）との間の前記トランザクション履歴（３１２）にギャップを作成する、請求項５に記載の方法。
【請求項１２】
前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション履歴（３１２）の前記ギャップを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は前記トランザクション履歴（３１２）の前記ギャップ中にキャッシュミスを備える、請求項１１に記載の方法。
【請求項１３】
前記データ処理ハードウェア（１１２）によって、オフラインイベント（６５０）の後に前記変更ログ処理（５００）の再開を決定することと、
前記データ処理ハードウェア（１１２）上で実行される前記変更ログ処理（５００）において、実時間を得ることと、
前記データ処理ハードウェア（１１２）によって、前記変更ログ処理（５００）が再開すると前記実時間に基づいて現在のシーケンス番号を求めることと、
前記データ処理ハードウェア（１１２）によって、前記現在のシーケンス番号からグローバルな最大コミット時間遅延（ＴＤMax）を待機してから、前記分散システム（２００）上で実行されるいずれかのトランザクション（２０４、２１４）についての前記トランザクション履歴（３１２）を更新することとをさらに備える、請求項１から１２のいずれか１項に記載の方法。
【請求項１４】
前記変更ログ処理（５００）の前記再開の前に前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）は、前記グローバルな最大コミット時間遅延（ＴＣＤMax）内に完了する、請求項１３に記載の方法。
【請求項１５】
マージした前記トランザクション履歴（３１２）を１つ以上のサブスクライブしているウォッチャ（３２２）に送信することをさらに備え、サブスクライブしている各ウォッチャ（３２２）は、前記メモリハードウェア（１１４）上に格納されたデータ（２０２）についての変更通知（３５０）を受信するためのスタンディングクエリ（１３０）を有する、請求項１から１４のいずれか１項に記載の方法。
【請求項１６】
システム（１００）であって、
分散システム（２００）のデータ処理ハードウェア（１１２）と、
前記データ処理ハードウェア（１１２）と通信しているメモリハードウェア（１１４）とを備え、前記メモリハードウェア（１１４）は、前記データ処理ハードウェア（１１２）上で実行されると前記データ処理ハードウェア（１１２）に動作を実行させる命令を格納しており、前記動作は、
分散システム（２００）についての変更ログ処理（５００）の初期のインスタンス（３１０）を実行することを備え、前記変更ログ処理（５００）の各インスタンス（３１０）は、前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）のトランザクション履歴（３１２）を前記メモリハードウェア（１１４）上に格納するように構成され、前記動作はさらに、
前記分散システム（２００）上で対応するトランザクション（２０４、２１４）を実行するためのトランザクション要求（１３８）を受信することと、
受信した前記トランザクション要求（１３８）に基づいて変更ログ負荷を求めることと、
前記変更ログ負荷が閾値負荷を満たす場合、前記変更ログ処理（５００）の少なくとも１つのその後のインスタンス（３１０）を実行することと、
前記変更ログ処理（５００）の複数のインスタンスが実行中であるか否かを判断することと、
前記変更ログ処理（５００）の複数のインスタンスが実行中である場合、
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（１３２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（１３２）とをマージすることとを備える、システム。
【請求項１７】
前記動作はさらに、前記メモリハードウェア（１１４）の変更ログキャッシュ（３１０）に各トランザクション履歴（１３２）を格納することを備える、請求項１６に記載のシステム（１００）。
【請求項１８】
前記各トランザクション履歴（１３２）を格納することは、
前記トランザクション履歴（１３２）をデータストライプにシャードすることと、
各データストライプを複製することと、
前記データストライプおよび複製した前記データストライプを前記メモリハードウェア（１１４）の複数の記憶場所（２５０）に格納することとを備える、請求項１７に記載のシステム（１００）。
【請求項１９】
前記動作はさらに、
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）を実行した後に前記変更ログ負荷が前記閾値負荷を満たさない場合、
前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の実行を中止することと、
前記変更ログ処理（５００）の前記初期のインスタンス（３１０）の前記トランザクション履歴（１３２）と、前記変更ログ処理（５００）の前記少なくとも１つのその後のインスタンス（３１０）の前記トランザクション履歴（１３２）とをマージすることとを備える、請求項１６から１８のいずれか１項に記載のシステム（１００）。
【請求項２０】
前記動作はさらに、各トランザクション要求（１３８）を受信したことに応答して、
実時間を得ることと、
前記実時間に基づいて最大コミット時間（ＴＣＤMax）を求めることとを備え、前記最大コミット時間（ＴＣＤMax）は、前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行を完了する最大時間を指定しており、前記動作はさらに、
前記最大コミット時間（ＴＣＤMax）を前記メモリハードウェア（１１４）の少なくとも１つの変更ログキャッシュ（３１０）に通信することを備える、請求項１６から１９のいずれか１項に記載のシステム（１００）。
【請求項２１】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記実時間から前記最大コミット時間（ＴＣＤMax）まで通知ロックを設定し、前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＣＤMax）よりも早い対応するコミット時間を有する完了済のトランザクション（２０４、２１４）について１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを防止する、請求項２０に記載のシステム（１００）。
【請求項２２】
前記少なくとも１つの変更ログキャッシュ（３１０）は前記最大コミット時間（ＴＣＤMax）の終わりに前記通知ロックを解除し、解除された前記通知ロックは、前記対応する変更ログキャッシュ（３１０）が、前記最大コミット時間（ＴＣＤMax）よりも早い前記対応するコミット時間を有する完了済の各トランザクション（２０４、２１４）について前記１つ以上のサブスクライブしているウォッチャ（３２２）に通知することを許可する、請求項２１に記載のシステム（１００）。
【請求項２３】
前記動作はさらに、前記最大コミット時間（ＴＣＤMax）を通信した後、
前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることを備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＣＤMax）を備え、前記動作はさらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前に各自のコミット時間を備える場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が受付けられることを示すトランザクション結果（３３２）を得ることと、
前記トランザクション結果（３３２）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記対応するトランザクション（２０４、２１４）と関連付けられた少なくとも１つのミューテーションを記録する、請求項２０に記載のシステム（１００）。
【請求項２４】
前記少なくとも１つの変更ログキャッシュ（３１０）は、記録された前記ミューテーションを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は記録された前記ミューテーションを備える、請求項２３に記載のシステム（１００）。
【請求項２５】
前記通知（３５０）は、前記最大コミット時間（ＴＤMax）の前記終わりに前記トランザクション履歴（１３２）の一貫性のあるスナップショットをさらに備え、前記一貫性のあるスナップショットは、前記対応するトランザクション（２０４、２１４）と、前記最大コミット時間（ＴＤMax）よりも早い対応するコミット時間を有するいずれかの完了済のトランザクション（２０４、２１４）とを備える、請求項２４に記載のシステム（１００）。
【請求項２６】
前記動作はさらに、前記最大コミット時間（ＴＤMax）を通信した後、
前記分散システム（２００）上で前記対応するトランザクション（２０４、２１４）の実行をコミットすることを備え、前記トランザクション（２０４、２１４）は前記最大コミット時間（ＴＤMax）を備え、前記動作はさらに、
前記対応するトランザクション（２０４、２１４）が前記最大コミット時間（ＴＤMax）にまたは前記最大コミット時間（ＴＤMax）の前にコミットできない場合は前記分散システム（２００）上の前記対応するトランザクション（２０４、２１４）の実行が拒絶されることを示すトランザクション結果（３３２）を得ることと、
前記トランザクション結果（３３２）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信することとを備え、受信した前記トランザクション結果（３３２）によって、前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション処理が前記最大コミット時間（ＴＤMax）を前記少なくとも１つの変更ログキャッシュ（３１０）に通信した前記実時間と前記最大コミット時間（ＴＤMax）との間の前記トランザクション履歴（１３２）にギャップを作成する、請求項２０に記載のシステム（１００）。
【請求項２７】
前記少なくとも１つの変更ログキャッシュ（３１０）は、前記トランザクション履歴（１３２）の前記ギャップを前記データ処理ハードウェア（１１２）上で実行される１つ以上のウォッチャプロキシ（３１４）に通信し、各ウォッチャプロキシ（３１４）は、前記最大コミット時間（ＴＤMax）の終わりに前記対応するトランザクション（２０４、２１４）の各自のサブスクライブしているウォッチャ（３２２）に通知（３５０）を提供するように構成され、前記通知（３５０）は前記トランザクション履歴（１３２）の前記ギャップ中にキャッシュミスを備える、請求項２６に記載のシステム（１００）。
【請求項２８】
前記動作はさらに、
オフラインイベントの後に前記変更ログ処理（５００）の再開を決定することと、
実時間を得ることと、
前記変更ログ処理（５００）が再開すると前記実時間に基づいて現在のシーケンス番号を求めることと、
前記現在のシーケンス番号からグローバルな最大コミット時間遅延（ＴＤMax）を待機してから、前記分散システム（２００）上で実行されるいずれかのトランザクション（２０４、２１４）についての前記トランザクション履歴（１３２）を更新することとを備える、請求項１６から２７のいずれか１項に記載のシステム（１００）。
【請求項２９】
前記変更ログ処理（５００）の前記再開の前に前記分散システム（２００）上で実行されるトランザクション（２０４、２１４）は、前記グローバルな最大コミット時間遅延（ＴＤMax）内に完了する、請求項２８に記載のシステム（１００）。
【請求項３０】
前記動作はさらに、マージした前記トランザクション履歴（１３２）を１つ以上のサブスクライブしているウォッチャ（３２２）に送信することを備え、サブスクライブしている各ウォッチャ（３２２）は、前記メモリハードウェア（１１４）上に格納されたデータ（２０２）についての変更通知（３５０）を受信するためのスタンディングクエリ（１３０）を有する、請求項１６から２９のいずれか１項に記載のシステム（１００）。
【請求項３１】
コンピュータによって実行されるプログラムであって、前記プログラムは、前記コンピュータに、請求項１から１５のいずれか１項に記載の方法を実行させる、プログラム。
【国際調査報告】
2019511770.tif 000011
2019511770.tif 000012
2019511770.tif 000013