IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ セールスフォース ドット コム インコーポレイティッドの特許一覧

特表2022-534509データベース変更ストリームのキャッシュ技術
<>
  • 特表-データベース変更ストリームのキャッシュ技術 図1
  • 特表-データベース変更ストリームのキャッシュ技術 図2
  • 特表-データベース変更ストリームのキャッシュ技術 図3
  • 特表-データベース変更ストリームのキャッシュ技術 図4
  • 特表-データベース変更ストリームのキャッシュ技術 図5
  • 特表-データベース変更ストリームのキャッシュ技術 図6
  • 特表-データベース変更ストリームのキャッシュ技術 図7
  • 特表-データベース変更ストリームのキャッシュ技術 図8
  • 特表-データベース変更ストリームのキャッシュ技術 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-08-01
(54)【発明の名称】データベース変更ストリームのキャッシュ技術
(51)【国際特許分類】
   G06F 16/23 20190101AFI20220725BHJP
   G06F 12/0875 20160101ALI20220725BHJP
【FI】
G06F16/23
G06F12/0875 100
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021570723
(86)(22)【出願日】2020-05-07
(85)【翻訳文提出日】2022-01-24
(86)【国際出願番号】 US2020031773
(87)【国際公開番号】W WO2020242740
(87)【国際公開日】2020-12-03
(31)【優先権主張番号】16/428,562
(32)【優先日】2019-05-31
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース ドット コム インコーポレイティッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】バスジェガー,ベンジャミン
(72)【発明者】
【氏名】スグロイ,マイケル
【テーマコード(参考)】
5B175
5B205
【Fターム(参考)】
5B175CA09
5B205MM01
(57)【要約】
データベース変更ストリームを処理するためのキャッシュ技術に関する技術が開示される。コンピュータシステムのキャッシュモジュールは、データベーステーブルに対する変更を示す複数のレコードを含む変更ストリームからの変更レコードを受信することができる。変更ストリームは、複数のシャードに対する変更レコードを含むことができ、1つ以上の変更レコード及び更新された位置インジケータを要求するために、複数のシャードのうち1つ以上についての1つ以上の位置インジケータを提供することによりアクセス可能である。キャッシュモジュールは、キャッシュモジュールが構成されている1つ以上のシャードのセットに対する変更について、閾値グループサイズまでの変更レコードのグループを各々が含む1つ以上のキャッシュエントリを記憶することができる。コンピュータシステムの変更プロセッサモジュールは、受信した位置インジケータを提供することにより変更ストリームの部分を要求することができる。変更プロセッサモジュールは、キャッシュモジュールから、提供した位置インジケータにマッチするキャッシュエントリからの1つ以上のキャッシュされた変更レコードを受信することができる。
【特許請求の範囲】
【請求項1】
コンピュータシステムのキャッシュモジュールにより、変更ストリームからの変更レコードを受信するステップであり、前記変更ストリームは、データベーステーブルに対する変更を示す複数のレコードを含み、
前記変更ストリームは、複数のシャードに対する変更レコードを含み、前記変更ストリームは、1つ以上の変更レコード及び更新された位置インジケータを要求するために、前記複数のシャードのうち1つ以上についての1つ以上の位置インジケータを提供することによりアクセス可能である、ステップと、
前記キャッシュモジュールにより、前記キャッシュモジュールが構成されている1つ以上のシャードのセットに対する変更について、閾値グループサイズまでの変更レコードのグループを各々が含む1つ以上のキャッシュエントリを記憶するステップと、
前記コンピュータシステムの変更プロセッサモジュールにより、前記変更ストリームの部分を要求するステップであり、前記要求するステップは、受信した位置インジケータを提供することを含む、ステップと、
前記変更プロセッサモジュールにより、前記キャッシュモジュールから、前記提供した位置インジケータにマッチするキャッシュエントリからの1つ以上のキャッシュされた変更レコードを受信するステップと、
を含む方法。
【請求項2】
マルチテナントアダプタモジュールにより、前記変更プロセッサモジュールからテナントベースの要求を受信するステップと、
前記マルチテナントアダプタモジュールにより、前記テナントベースの要求を、前記データベーステーブルを維持するデータベースシステムによりサポートされる要求に変換するステップであり、前記マルチテナントアダプタモジュールは、前記データベーステーブルを使用して複数の異なるテナントのためのフィールドを記憶する、ステップと、
をさらに含む請求項1に記載の方法。
【請求項3】
前記コンピュータシステムにより、複数のテナントのための変更レコードを処理することに基づいて複数のテナントチェックポイントを決定するステップと、
前記コンピュータシステムにより、前記複数のテナントチェックポイントに基づいて組み合わせられたチェックポイントを決定するステップと、
前記組み合わせられたチェックポイントを記憶するステップと、
をさらに含む請求項2に記載の方法。
【請求項4】
前記キャッシュモジュール及び前記変更プロセッサモジュールは、ストリームプロセスに含まれ、当該方法は、前記コンピュータシステムにより実行される複数の異なるストリームプロセスを使用して前記変更ストリームにアクセスするステップをさらに含む、請求項1に記載の方法。
【請求項5】
前記コンピュータシステムにより、前記変更プロセッサモジュールによりハンドリングされる前記変更ストリームの1つ以上のシャードに関連してデータベースシステムのリーステーブルに前記変更プロセッサモジュールのアドレスを記憶するステップであり、前記データベースシステムは前記データベーステーブル及び前記変更ストリームを維持する、ステップ、をさらに含み、
前記受信した位置インジケータは、前記記憶されたアドレスに基づいて別のモジュールにより転送される、
請求項1に記載の方法。
【請求項6】
前記コンピュータシステムのポーリングモジュールにより、位置インジケータを使用して前記変更ストリームをポーリングするステップであり、前記位置インジケータは、前記変更ストリームにおける1つ以上のシャードについてのシャード識別子と、各シャードについてのシーケンス番号とを含む、ステップと、
前記ポーリングに応答して、1つ以上の新しい変更レコード及び更新された位置インジケータを受信するステップと、
前記キャッシュモジュールにより、前記1つ以上の新しい変更レコードを1つ以上のキャッシュエントリに記憶するステップと、
をさらに含む請求項1に記載の方法。
【請求項7】
前記キャッシュエントリと前記提供した位置インジケータとの間の前記マッチは、前記位置インジケータに含まれるシャード識別子及びシーケンス番号に基づいており、前記キャッシュエントリは、1つ以上のシャード識別子と前記1つ以上のシャード識別子に対応する1つ以上のシーケンス番号とを有するタグ値を含む、請求項1に記載の方法。
【請求項8】
動作を実行するためにコンピューティングデバイスにより実行可能な命令を記憶させた非一時的コンピュータ読取可能媒体であって、前記動作は、
キャッシュモジュールにより、変更ストリームからの変更レコードを受信することであり、前記変更ストリームは、データベーステーブルに対する変更を示す複数のレコードを含み、
前記変更ストリームは、複数のシャードに対する変更レコードを含み、前記変更ストリームは、1つ以上の変更レコード及び更新された位置インジケータを要求するために、前記複数のシャードのうち1つ以上についての1つ以上の位置インジケータを提供することによりアクセス可能である、ことと、
前記キャッシュモジュールにより、前記キャッシュモジュールが構成されている1つ以上のシャードのセットに対する変更について、閾値グループサイズまでの変更レコードのグループを各々が含む1つ以上のキャッシュエントリを記憶することと、
変更プロセッサモジュールにより、前記変更ストリームの部分を要求することであり、前記要求することは、受信した位置インジケータを提供することを含む、ことと、
前記変更プロセッサモジュールにより、前記キャッシュモジュールから、前記提供した位置インジケータにマッチするキャッシュエントリからの1つ以上のキャッシュされた変更レコードを受信することと、
を含む、非一時的コンピュータ読取可能媒体。
【請求項9】
前記動作は、
マルチテナントアダプタモジュールにより、前記変更プロセッサモジュールからテナントベースの要求を受信することと、
前記マルチテナントアダプタモジュールにより、前記テナントベースの要求を、前記データベーステーブルを維持するデータベースシステムによりサポートされる要求に変換することであり、前記マルチテナントアダプタモジュールは、前記データベーステーブルを使用して複数の異なるテナントのためのフィールドを記憶する、ことと、
をさらに含む、請求項8に記載の非一時的コンピュータ読取可能媒体。
【請求項10】
前記動作は、
複数のテナントのための変更レコードを処理することに基づいて複数のテナントチェックポイントを決定することと、
前記複数のテナントチェックポイントに基づいて組み合わせられたチェックポイントを決定することと、
前記組み合わせられたチェックポイントを記憶することと、
をさらに含む、請求項9に記載の非一時的コンピュータ読取可能媒体。
【請求項11】
前記動作は、
前記変更プロセッサモジュールによりハンドリングされる前記変更ストリームの1つ以上のシャードに関連してデータベースシステムのリーステーブルに前記変更プロセッサモジュールのアドレスを記憶することであり、前記データベースシステムは前記データベーステーブル及び前記変更ストリームを維持する、こと、をさらに含み、
前記受信した位置インジケータは、前記記憶されたアドレスに基づいて別のモジュールにより転送される、請求項8に記載の非一時的コンピュータ読取可能媒体。
【請求項12】
前記動作は、
ポーリングモジュールにより、位置インジケータを使用して前記変更ストリームをポーリングすることであり、前記位置インジケータは、前記変更ストリームにおける1つ以上のシャードについてのシャード識別子と、各シャードについてのシーケンス番号とを含む、ことと、
前記ポーリングに応答して、1つ以上の新しい変更レコード及び更新された位置インジケータを受信することと、
前記キャッシュモジュールにより、前記1つ以上の新しい変更レコードを1つ以上のキャッシュエントリに記憶することと、
をさらに含む、請求項8に記載の非一時的コンピュータ読取可能媒体。
【請求項13】
前記キャッシュエントリと前記提供した位置インジケータとの間の前記マッチは、前記位置インジケータに含まれるシャード識別子及びシーケンス番号に基づいており、前記キャッシュエントリは、1つ以上のシャード識別子と前記1つ以上のシャード識別子に対応する1つ以上のシーケンス番号とを有するタグ値を含む、請求項8に記載の非一時的コンピュータ読取可能媒体。
【請求項14】
システムであって、
キャッシュモジュールであり、
変更ストリームからの変更レコードを受信し、前記変更ストリームは、データベーステーブルに対する変更を示す複数のレコードを含み、
前記変更ストリームは、複数のシャードに対する変更レコードを含み、前記変更ストリームは、1つ以上の変更レコード及び更新された位置インジケータを要求するために、前記複数のシャードのうち1つ以上についての1つ以上の位置インジケータを提供することによりアクセス可能であり、
前記キャッシュモジュールが構成されている1つ以上のシャードのセットに対する変更について、閾値グループサイズまでの変更レコードのグループを各々が含む1つ以上のキャッシュエントリを記憶する
ように構成されたキャッシュモジュールと、
変更プロセッサモジュールであり、
前記変更ストリームの部分を要求し、前記要求することは、受信した位置インジケータを提供することを含み、
前記キャッシュモジュールから、前記提供した位置インジケータにマッチするキャッシュエントリからの1つ以上のキャッシュされた変更レコードを受信する
ように構成された変更プロセッサモジュールと、
を含むシステム。
【請求項15】
方法の請求項1乃至7のうちいずれか1項を実行する手段を含む装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、データベースシステムに関し、より具体的には、データベーステーブルに対する変更ストリームの処理に関する。
【背景技術】
【0002】
いくつかのデータベースシステムは、データベーステーブルに対する変更を示す変更レコードのストリームを生成する。変更ストリームは、複数の異なるアプリケーションにより処理されることがあり、変更レコードの処理に対してタイミング制約がある場合がある。変更ストリームへのアクセス数が増加するとき、性能は従来の実装では劣化する可能性がある。
【図面の簡単な説明】
【0003】
図1】いくつかの実施形態による、キャッシュを含む一例示的なデータベース変更ストリーム処理システムを示すブロック図である。
図2】いくつかの実施形態による、変更ストリームを処理するストリームプロセスの一例示的な処理層を示すブロック図である。
図3】いくつかの実施形態による、ウェブプロセスとストリームプロセスとの間の例示的な相互作用を示すブロック図である。
図4】いくつかの実施形態による、一例示的なキャッシュ実装を示すブロック図である。
図5】いくつかの実施形態による、変更レコードが取り出されたときのキャッシュエントリに対する例示的な追加を示すブロック図である。
図6】いくつかの実施形態による、変更ストリームのためにキャッシュを使用する一例示的な方法を示すフロー図である。
図7】いくつかの実施形態による、複数のテナントからのチェックポイントに基づく組み合わせられた変更ストリームチェックポイントを生成する技術を示すブロック図である。
図8】いくつかの実施形態による、キャッシュを使用してデータベーステーブルに対する変更ストリームを処理する方法を示すフロー図である。
図9】いくつかの実施形態による、一例示的なコンピューティングデバイスを示すブロック図である。
【発明を実施するための形態】
【0004】
本開示は、「1つの実施形態」又は「一実施形態」への参照を含む。フレーズ「1つの実施形態において」又は「一実施形態において」の出現は、必ずしも同じ実施形態を参照するわけではない。特定の特徴、構造、又は特性が、本開示と矛盾しない任意の適切な方法で組み合わせられてもよい。
【0005】
本開示において、異なるエンティティ(これは「ユニット」、「回路」、他のコンポーネント等と様々に呼ばれることがある)は、1つ以上のタスク又は動作を実行するように「構成され」るものとして説明又は請求されることがある。この定式化-[1つ以上のタスクを実行する]ように構成された[エンティティ]-は、本明細書において、構造(すなわち、電子回路などの物理的な何らかのもの)を参照するために使用される。より具体的には、この定式化は、この構造が、動作中に1つ以上のタスクを実行するように配置されていることを示すために使用される。構造は、その構造が現在動作していないとしても、何らかのタスクを実行する「ように構成され」ているということができる。「変更ストリームレコードをキャッシュするように構成されたキャッシュモジュール」は、例えば、問題のコンピュータシステムが現在使用されていない(例えば、それに電源が接続されていない)としても、動作中にこの機能を実行するための、プロセッサ、ネットワークインターフェース、プログラム命令を有するメモリ等を有するコンピュータシステムをカバーすることを意図している。したがって、あるタスクを実行する「ように構成されている」と説明又は記載されたエンティティは、タスクを実施するために実行可能なプログラム命令を記憶するデバイス、回路、メモリ等などの何か物理的なものを参照する。このフレーズは、本明細書において、無形の何らかのものを参照するためには使用されない。
【0006】
用語「ように構成される」は、「ように構成可能である」を意味することを意図するものではない。例えば、プログラムされていないFPGAは、何らかの特定の機能を実行する「ように構成されている」とみなされないであろうが、その機能を実行する「ように構成可能で」あり得、プログラミングの後に該機能を実行する「ように構成され」得る。
【0007】
別記の特許請求の範囲において、構造が1つ以上のタスクを実行する「ように構成されている」と記載することは、その請求項要素について35USC§112(f)を援用しないことを明確に意図している。したがって、出願された本出願における請求項のいずれも、ミーンズプラスファンクション要素を有するものとして解釈されることを意図していない。出願人が手続き中にセクション112(f)を援用することを希望する場合、出願人は、[機能を実行する]「ための手段」(means for)の構成を用いて請求項要素を記載する。
【0008】
本明細書で用いられるとき、用語「第1」、「第2」等は、それらが先行する名詞のラベルとして使用され、別段具体的に示されない限り、いかなるタイプの順序付け(例えば、空間的、時間的、論理的など)も意味しない。例えば、複数のユーザアカウントを有するコンピューティングシステムにおいて、用語「第1」及び「第2」のユーザアカウントは、任意のユーザを参照するために使用することができる。言い換えれば、「第1」及び「第2」のユーザアカウントは、例えば、最初の2つの作成されたユーザアカウントに限定されない。本明細書で用いられるとき、用語「又は」は、排他的な又はとしてでなく、包括的な又はとして用いられる。例えば、フレーズ「x、y、又はzのうちの少なくとも1つ」は、x、y、及びzのうちのいずれか1つ、並びにそれらの任意の組み合わせ(例えば、zを除くx及びy、又はx、y、及びz)を意味する。
【0009】
本明細書で用いられるとき、用語「に基づく」は、決定に影響する1つ以上のファクタを記述するために使用される。この用語は、さらなるファクタが決定に影響し得る可能性を排除するものではない。すなわち、決定は、専ら指定されたファクタに基づき、あるいは指定されたファクタ及び他の指定されていないファクタに基づくことができる。フレーズ「Bに基づいてAを決定する」について考える。このフレーズは、BがAを決定するために使用されるファクタであること、又はそれがAの決定に影響することを規定している。このフレーズは、Aの決定がCなどの何らかの他のファクタにさらに基づき得ることを排除するものではない。このフレーズは、Aが専らBに基づいて決定される実施形態をカバーすることも意図している。したがって、本明細書で用いられるとき、フレーズ「に基づく」は、本明細書で使用されるように、フレーズ「に少なくとも部分的に基づく」と同義的である。
【0010】
様々な大容量データベースアプリケーションにおいて、複数のプロセスが同じデータベーステーブルにアクセスすることがある。いくつかの実施形態において、変更ストリームは、データベーステーブルに対する変更のシーケンスを反映し、データベーステーブルに対する更新に基づいて様々なタスクを実行するために1つ以上の変更プロセッサモジュールによりアクセスされ得る。一例として、システムは、データベースシステムにアクセスするウェブクラスタ及びストリームクラスタ(例えば、各々が1つ以上のJava(登録商標)プロセスを含み得る)を実施することができる。ウェブプロセスは、ユーザからの外部変更要求をハンドリングすることができ、一方、ストリームプロセスは、内部更新をハンドリングすることができる。外部変更要求の一例は、ユーザが自身のオンラインショッピングカートにアイテムを置くことであり、一方、内部変更の一例は、ユーザのショッピングカートに置かれたアイテムに基づいて在庫詳細を更新することである。
【0011】
大容量のアプリケーションでは、性能とコストが重要な設計上の考慮事項であり得る。いくつかの実施形態において、変更ストリームキャッシュは、特定のプロセスに関連づけられた変更ストリームからの変更レコードをキャッシュするために実施される。例えば、変更ストリームはシャードされ(sharded)てもよく、変更ストリームに含まれるシャードの一部分のみをハンドリングするためにプロセスが割り当てられてもよい。これは有利に、変更レコードにアクセスする際の性能を改善し、変更ストリームへのアクセス数を減らすことができる。キャッシュは、閾値キャッシュエントリサイズ(これはセグメントサイズと呼ばれることがある)までの変更ストリームレコードをグループ化し、エントリ粒度でキャッシュ操作を実行することができる。例えば、データは、変更レコードのグループに対するエントリごとにキャッシュされる、追い出される、ヒット/ミスされる等をなされ得る。
【0012】
異なるストリームプロセスは、異なる変更ストリームキャッシュを実施することができ、所与のストリームプロセス内の1つ以上の変更プロセッサモジュールは、そのプロセスのためのキャッシュを共有することができる。変更プロセッサモジュールは、変更ストリームにアクセスするための位置インジケータを提供することができ、これらの位置インジケータは、キャッシュのヒット及びミスを検出するために使用することができる。ウェブプロセスは、位置インジケータをストリームプロセスに転送することができ、ストリームプロセスは、これを使用して変更ストリームレコードを取り出すことができる。いくつかの実施形態において、1つ以上の処理層は、データベーステーブルが複数のテナントのためのエントリを記憶するようなマルチテナンシーを実施するが、基礎をなすデータベースシステムは、マルチテナント実装を認識していない場合がある。
【0013】
ストリームプロセスは、変更ストリームのためのチェックポイント指示(checkpointing)を実行することができ、チェックポイントは、システムがクラッシュしたときのリカバリ場所を提供することができる。チェックポイントは、システムクラッシュの後にレコードの処理を開始するための、変更ストリーム内の場所を指定する位置インジケータであり得る。チェックポイント指示は、テナントごとのマルチテナンシーを実施する処理層の1つ以上により実行されてもよく、個々のテナントチェックポイントに基づいて、システムは、変更ストリームについての全体的なチェックポイントを生成することができる。
【0014】
[変更処理システムの概要]
図1は、いくつかの実施形態による、キャッシュを含む一例示的なデータベース変更ストリーム処理システムを示すブロック図である。図示の実施形態において、コンピュータシステム110は、変更プロセッサモジュール112及びキャッシュモジュール120を含み、これらは、データベーステーブル132に対する変更ストリーム(change stream)134を処理するように構成される。
【0015】
図示の実施形態において、データベーステーブル132は、変更情報を変更ストリーム134に提供する。いくつかの実施形態において、変更情報は、データベーステーブル132に対して行われた変更を示す1つ以上の変更レコードを含む。いくつかの実施形態において、コンピュータシステム110は、データベーステーブル132を使用して複数の異なるテナントのためのデータを記憶するが、データベースシステムは、マルチテナンシーを認識していない場合がある。いくつかの実施形態において、データベーステーブル132は、例えば、DynamoDB(登録商標)又はGoogle(登録商標)のCloud SpannerなどのNoSQLデータベースシステムに含まれてもよく、データを様々な異なるサーバに記憶されたシャード(shards)に水平にパーティション化する(partition)ことができる。いくつかの実施形態において、コンピュータシステム110は、NoSQLデータベースのシャードを独立してスケーリングするように構成される。いくつかの実施形態において、スケーリングは、例えば、テナント数、又は各テナントのデータ量に基づく。
【0016】
図示の実施形態において、変更ストリーム134は、コンピュータシステム110にとってアクセス可能な変更ストリームレコードを記憶する。いくつかの実施形態において、複数の異なる変更ストリームが、変更レコードをコンピュータシステム110に提供する。例えば、複数のデータベーステーブルが、複数の異なる変更ストリームについての変更情報を生成することができ、コンピュータシステムは、この複数の異なる変更ストリームを処理することができる。いくつかの実施形態において、変更ストリームは、データベーステーブルに対して行われた変更のシーケンスを指定する情報を含む。いくつかの実施形態において、各変更レコードは対応するシーケンス番号を有し、これは変更ストリームにわたり一意であり得る。いくつかの実施形態において、変更レコードは、所与の変更の前後双方のデータの状態を示す。変更ストリームは、様々なデータベースサービスにより提供されてよく、該データベースサービスはさらに、変更が生成されたとき変更ストリームから変更を取り出すためのポーリングメカニズムを提供してもよい。いくつかの実施形態において、変更ストリームはシャードされ、異なるプロセスが変更ストリームシャードの異なるセットをハンドリングする(異なるセットは重複してもそうでなくてもよい)。いくつかの実施形態において、変更ストリームシャードは、1つ以上のテナントに対して行われた変更、又は所与の変更ストリームレコードに対してハンドリングされるべき変更のタイプに基づいてスケーリングされる。例えば、ウェブプロセスは、所与のテナントから高負荷の外部要求を受信することがあり、そのテナントのための変更ストリームシャードのサイズを増加させてもよく、あるいは要求に基づいて変更ストリームシャードを複数のシャードに分割してもよい。
【0017】
図示の実施形態において、キャッシュモジュール120は、位置インジケータを変更ストリーム134に送信して、位置インジケータに対応する変更レコードを要求する。いくつかの実施形態において、コンピュータシステム110に含まれるポーリングモジュールは、位置インジケータを使用して変更ストリーム134からレコードを反復的に取り出し、これらのレコードをキャッシュモジュール120に渡す。図示の実施形態では、キャッシュモジュール120は、変更ストリームレコードを受信し、変更レコードを変更ストリームキャッシュ122に記憶する。変更ストリーム134へのアクセスは、例えば変更ストリームをポーリングするとき、更新された位置インジケータを生成することもでき、これは、変更ストリーム内の現在の最も最近のレコードを示し得ることに留意する。いくつかの実施形態において、変更ストリームキャッシュ122は、閾値グループサイズまでの変更レコードのグループを各々が含むキャッシュエントリに、1つ以上のシャードのセットについての変更を記憶する。これらのグループは、図4及び図5を参照して以下で詳細に論じられる。
【0018】
本明細書で用いられるとき、用語「位置インジケータ」は、変更ストリーム内の場所を指定する情報を参照する。いくつかの実施形態において、位置インジケータは、変更ストリームのシャード内の場所を識別するシーケンス番号であり、シーケンス番号は、変更ストリームにおける各シャード内で一意である。いくつかの実施形態において、位置インジケータは、シャード識別子(ID)と、シャード内のレコードのシーケンス番号とを含む。シャード識別子とシーケンス番号との組み合わせは、変更ストリーム内のレコードの場所を一意に識別できることに留意する。いくつかの実施形態において、位置インジケータは、1つ以上のシャードIDを含むデルタリンク(delta link)であり、変更ストリームのためのシーケンス番号が、デルタリンクのデルタトークンに含まれる。以下は、変更ストリームのクエリを開始するために使用されるデルタリンクの一例であり、この例示的なクエリは、HTTP GETリクエストである。
http://…delta?startOffset=ShardB+ShardC+ShardD
この例示的なクエリは、シャードB、C、及びDのシーケンス番号を要求している。以下は、指定されたシーケンス番号(例えば、シャードBについてはシーケンス番号2)の後続の変更ストリームへの変更を取得するためにデルタリンクを使用する第2のクエリの非限定的な例である。
http://…&$deltaToken=ShardB:2+ShardC:15+ShardD:8
この例示的なクエリは、シャードBのシーケンス番号「2」、シャードCの「15」、及びシャードDの「8」を含み、シーケンス番号は、変更レコードの取り出しを開始すべき各シャード内の場所を示す。例えば、シーケンス番号により指定された各シャード内の場所より前のレコードは、すでに処理されている可能性がある。いくつかの実施形態において、位置インジケータは、あるシーケンス番号の後の、あるシーケンス番号における、所与のタイムスタンプにおける、変更ストリームに最も最近追加された等のレコードを処理することを指定し、したがって、様々な異なるフォーマットを使用して符号化され得る。位置インジケータは、変更ストリームの状態を維持又は永続化する必要を有利に低減又は除去することができる。
【0019】
図示の実施形態において、変更プロセッサモジュール112は、位置インジケータを受信し、このインジケータをキャッシュモジュール120に送信して変更レコードを要求する。キャッシュモジュール120は、提供された位置インジケータにマッチする変更ストリームキャッシュ122のキャッシュエントリから変更レコードを変更プロセッサモジュール112に返す(あるいは、キャッシュミスがある場合には変更ストリーム134にアクセスする)。変更ストリームキャッシュ122の実装の詳細は、図4を参照して以下で詳細に論じられる。いくつかの実施形態において、変更ストリームキャッシュを実施することは、複数のテナントにわたるファンアウト(fan-out)を有利にサポートすることができる。例えば、複数のテナントは、同じ又は類似の変更ストリームレコードを並列に要求することがある。この例において、キャッシュは、要求の数を減らし、あるいは変更ストリームにアクセスする必要を除去することができる。さらに、キャッシュは、改善された性能(例えば、変更ストリームレコードの要求と要求したレコードの受信との間の時間の短縮)を提供し得る。
【0020】
いくつかの実施形態において、コンピュータシステム110は、複数の異なるテナントのためのデータを記憶するデータベーステーブル(例えば、データベーステーブル132)に対する変更ストリームを処理するための複数の内部層を実施する。例えば、コンピュータシステム110は、テナント特有のデータベース操作(例えば、変更操作)をテナント非依存の(tenant-agnostic)形式に変換する1つ以上のマルチテナントアダプタを含んでもよい。テナント非依存のデータベース操作は、例えば、複数のテナントの情報を記憶するために使用されるがマルチテナンシーをサポートしないデータベースと互換性があり得る。
【0021】
本明細書で用いられるとき、用語「マルチテナントデータベースシステム」は、データベースシステムのハードウェア及びソフトウェアの様々な要素が1以上の顧客により共有されるシステムを参照する。例えば、コンピュータシステムは、多数の顧客のための要求を同時に処理することができ、データベーステーブルは、潜在的により多数の顧客のための行を記憶することができる。様々な実施形態において、異なるテナントのデータは、そのデータに他のテナントが許可なくアクセスできないように、安全に記憶され得る。
【0022】
[ストリームプロセスの概要]
図2は、いくつかの実施形態による、変更ストリームを処理するストリームプロセスの例示的な処理層を示すブロック図である。いくつかの実施形態において、ストリームプロセス210は、データベースモジュール230内のデータベーステーブルに対する内部更新をハンドリングする。いくつかの実施形態において、ストリームプロセス210は、取り出されるべき(例えば、ウェブプロセス250を介してクライアントにより要求されたとおりの)特定の変更を示す位置インジケータをウェブプロセス250から受信する。いくつかの実施形態において、ストリームプロセス210を使用してこれらの要求をハンドリングすることは、以下でさらに詳細に論じられるように、変更ストリームキャッシュ122の使用を有利に可能にすることができる。
【0023】
図示の実施形態において、ストリームプロセス210は、マルチテナントアダプタ/ルータ212、変更プロセッサモジュール214、マルチテナントアダプタ216、データベーストランスレータモジュール218、キャッシュモジュール120、及びポーリングモジュール240を含む。ストリームプロセス210は、図1に示すコンピュータシステム110により実施され得るプロセスの一例である。
【0024】
図示の実施形態において、ポーリングモジュール240及びキャッシュモジュール120は、変更プロセッサモジュール214による変更ストリームへのアクセスがキャッシュされたデータにヒットするように、データベースモジュール230から変更ストリームレコードを取り出し、キャッシュすることができ、これは、データベースモジュール230へのアクセスを減らし得る。残りの層は、例えば、マルチテナンシー及び基礎をなすデータベース実装をサポートするために、要求を翻訳する(translate)ことができる。
【0025】
図示の実施形態において、ポーリングモジュール240は、ストリームプロセス210のドメインネームサーバ(DNS)アドレスと、変更ストリームの組み合わせられたチェックポイントとをデータベーストランスレータモジュール218に送信する。変更ストリームレコードが成功裏に処理されると、ストリームプロセス210は、組み合わせられたチェックポイントを更新し、組み合わせられたチェックポイントをリーステーブル(図3を参照して以下で詳細に論じられる)に記憶することができる。いくつかの実施形態において、ポーリングモジュール240は、ストリームプロセス210をホスティングするサーバシステムがクラッシュから回復するとき、データベースモジュール230から(データベーストランスレータモジュール218を介して)組み合わせられたチェックポイントを取り出す。例えば、取り出されたチェックポイントにより示されるシーケンス番号に基づいて、ポーリングモジュール240は、そのシーケンス番号により示される場所の後の変更ストリームレコードの処理を開始してもよい。DNSアドレスは、例えば、位置インジケータをストリームプロセス210に転送するために、他のプロセスによりアクセスされ、使用され得る。
【0026】
いくつかの実施形態において、ポーリングモジュール240は、デルタリンクを使用して変更ストリームレコード(例えば、変更ストリーム134から)についてポーリングし、デルタリンクは、1つ以上の変更ストリームシャードのシーケンス番号を有する位置インジケータである。いくつかの実施形態において、ポーリングモジュール240は、1つ以上のシャードのシーケンス番号を要求する初期クエリを変更ストリームに送信する。各々の連続したクエリについて、更新された位置インジケータが、新しいレコードを有する各変更ストリームシャードの新しいシーケンス番号と共に返される。いくつかの実施形態において、ポーリングモジュール240により取り出された変更ストリームレコードの全て又は一部が、以下でさらに詳細に論じられるように、変更ストリームキャッシュ122に記憶される。
【0027】
いくつかの実施形態において、ストリームプロセス210は、変更プロセッサモジュール214をインスタンス化し、1つ以上の変更ストリームシャードを各変更プロセッサモジュールに割り当てる。ストリームプロセス210は、変更ストリームシャードを前にインスタンス化された変更プロセッサモジュール214に割り当ててもよいことに留意する。いくつかの実施形態において、ストリームプロセス210により処理される各変更ストリームシャードに対して、少なくとも1つの変更プロセッサモジュール214がインスタンス化される。
【0028】
本明細書で用いられるとき、用語「プロセス」は、その良く理解された意味に従って解釈されることを意図しており、これには、コンピュータプログラムのインスタンスのためのプログラムコード及び実行状態が含まれる。いくつかの実施形態において、プロセスは、Docker(登録商標)コンテナなどのアプリケーションコンテナである。いくつかの実施形態において、ストリーム処理に使用されるコンテナのサイズ及び数は、処理要件に基づいて調整されてもよい。上記で論じたように、異なるタイプのプロセス(例えば、ウェブ又はストリーム)を使用して、データベースシステムに対する異なるタイプの変更をハンドリングすることができる。プロセスの非限定的な例には、Docker(登録商標)コンテナ、Heroku(登録商標)ダイノ(dynos)、及びJavaプロセスが含まれる。
【0029】
図示の実施形態において、マルチテナントアダプタ/ルータ212は、図7を参照して以下で詳細に論じられるように、テナント非依存の形式に対して変更プロセッサモジュール214から受信される個々のテナントチェックポイントを受信し、この個々のチェックポイントに基づいて組み合わせられたチェックポイントを生成する。本明細書で用いられるとき、用語「チェックポイント」は、その良く理解された意味に従って解釈されることを意図しており、これにはリカバリポイントが含まれる。したがって、チェックポイントは、以前のアクティビティが成功裏に処理されており、したがってそれがシステム障害又は他のエラー状態の後に再処理される必要はないことを意味し得る。したがって、チェックポイントは、変更ストリームのステートフル情報を提供することができ、システムが障害を経験した場合にこの状態に戻ることを可能にする。いくつかの実施形態において、個々のテナントチェックポイントに基づいて、変更ストリームに対して全体的又は累積的チェックポイントが生成される。変更プロセッサモジュール214は、1つ以上の割り当てられたシャードについて1つ以上の個々のテナントチェックポイントを生成することができる。
【0030】
キャッシュモジュール120は、いくつかの実施形態において、マルチテナントアダプタ216から、位置インジケータ(例えば、デルタリンク)を含む変更ストリーム要求を受信する(これにおいて、変更ストリーム要求は、変更プロセッサモジュール214又はポーリングモジュール240から発信され得る)。変更ストリーム要求を受信することに応答して、キャッシュモジュール120は、対応する変更ストリームレコードが変更ストリームキャッシュ122にキャッシュされているかどうかを決定し、そうである場合にはキャッシュ122からレコードを提供する。レコードがキャッシュされていない場合、キャッシュモジュール120は、変更ストリーム要求をデータベーストランスレータモジュール218に転送して、変更ストリームからレコードを取り出すことができる(また、レコードが返されるとそれらをキャッシュすることができる)。
【0031】
図示の実施形態において、データベーストランスレータモジュール218は、データベース要求(例えば、データベース操作又は変更ストリーム要求)を、データベースモジュール230により認識されるフォーマットに変換する。いくつかの実施形態において、データベーストランスレータモジュール218は、データベースモジュール230に関連づけられたアプリケーションプログラミングインターフェース(API)を実施する。いくつかの実施形態において、データベーストランスレータモジュール218は、データベースモジュール230と通信するように構成されたソフトウェア開発キット(SDK)に関連づけられる。
【0032】
図示の実施形態において、変更プロセッサモジュール214は、データベースモジュール230のデータベーステーブルに関連づけられた要求と変更ストリームの要求との双方を送信するように構成される。データベーステーブル操作については、変更プロセッサモジュール214は、マルチテナントアダプタ216及びデータベーストランスレータモジュール218を介して、1つ以上のテナントごとの操作の要求をデータベースモジュール230に送信する。変更ストリーム要求については、変更プロセッサモジュール214は、要求をマルチテナントアダプタ216に送信し、変更レコードは、変更ストリームキャッシュ122又はデータベースモジュール230から取り出される。
【0033】
図示の実施形態において、変更プロセッサモジュール214は、ウェブプロセス250から1つ以上の位置インジケータを受信する。いくつかの実施形態において、ウェブプロセス250は、ストリームプロセス210のDNSアドレスに基づいて(例えば、ポーリングモジュール240によりデータベースモジュール230に記憶されたDNSアドレスを取り出すことにより)位置インジケータを送信する。図示の実施形態では、変更プロセッサモジュール214は、マルチテナントアダプタ216及びデータベーストランスレータモジュール218を介して、1つ以上のテナントごとの操作の要求をデータベースモジュール230に送信する。ストリームプロセス210は、取り出された変更レコードをウェブプロセス250に返すことができる。いくつかの実施形態において、変更プロセッサモジュール214は、1つ以上の取り出された変更レコードに基づいて、テナントごとの操作をデータベーステーブルに送信する。例えば、変更プロセッサモジュール214は、ユーザがアイテムをショッピングカートに追加することを要求したことを示す変更レコードを受信することに基づいて、特定のテナントのユーザのためのショッピングカート情報を更新するためにデータベースにアクセスすることができる。
【0034】
マルチテナントアダプタ216は、図示の実施形態において、テナントごとの操作を、データベースモジュール230によりサポートされるデータベース操作(例えば、テナント非依存のCRUD操作)に変換する。マルチテナントアダプタ216は、さらに、ポーリングモジュール240からの要求をキャッシュモジュール120に転送する(アダプタ216は、これらの要求に対して実際にはいかなる動作も実行しない可能性があることに留意する)。いくつかの実施形態において、マルチテナントアダプタ216は、テナントベースのアドレス指定情報をデータベーステーブル132内の場所に翻訳するように構成される。
【0035】
図示の実施形態において、データベーストランスレータモジュール218は、ストリームプロセス210内の様々な他のモジュール及びアダプタからのデータをハンドリングし、データベースモジュール230によりサポートされる形式でこの情報を通信する。具体的には、図示の実施形態では、データベーストランスレータモジュール218は、データベース操作及び変更ストリーム要求をデータベースモジュール230に送信し、変更ストリーム応答を受信する。図示の実施形態において、データベーストランスレータモジュール218は、さらに、DNS及び組み合わせられたチェックポイントを送信する(例えば、この情報をリーステーブルに記憶する)。
【0036】
データベースモジュール230は、いくつかの実施形態において、CRUD操作に基づいてデータベーステーブルを使用して操作を実行し、データベーストランスレータモジュール218から受信した情報に基づいてDNSアドレス及びチェックポイントをリーステーブルに記憶する。図示の実施形態において、データベースモジュール230は、さらに、例えば、供給されたデルタリンクに基づいて変更ストリームから取り出された変更ストリームレコードを、モジュール218に送信する。
【0037】
[例示的な変更処理システム]
図3は、いくつかの実施形態による、ウェブプロセスとストリームプロセスとの間の例示的な相互作用を示すブロック図である。図示の実施形態において、1つ以上のウェブプロセス250は、1つ以上のデータベース操作を実行するための外部要求をハンドリングし、1つ以上のストリームプロセス210は、1つ以上のデータベース操作をハンドリングする。図示の実施形態において、データベースモジュール230は、データベーステーブル132、変更ストリーム134、及びリーステーブル(lease table)336を含む。
【0038】
ウェブプロセス250は、いくつかの実施形態において、1つ以上のコンピューティングデバイスから1つ以上の外部要求を(例えば、インターネットなどのネットワークを介して)受信する。いくつかの実施形態において、外部要求は、データベーステーブル132に対する変更を引き起こす。例えば、ユーザは、自身のオンラインショッピングカートにアイテムを追加することができ、このユーザのデバイスをホストするサーバは、ハイパーテキストトランスファープロトコル(HTTP)POSTリクエストをウェブプロセス250に送信することができる。図示の実施形態において、サーブレット352は、外部要求を受信し、この要求を翻訳し、翻訳された要求を変更プロセッサモジュール354に送信する。例えば、サーブレットは、HTTPリクエストをJavaデータに翻訳するJavaサーブレットでもよい。図示の実施形態において、変更プロセッサモジュール354は、データベーステーブル132に対する1つ以上のテナントごとの操作を生成し、これらの操作をマルチテナントアダプタ356に送信し、マルチテナントアダプタ356は、これらをデータベースモジュール230によりサポートされるデータベース操作に変換する。いくつかの実施形態において、所与のウェブプロセスは、1つ以上の変更プロセッサを含む。例えば、変更プロセッサの数は、外部要求の数に基づいて決定されてもよい。マルチテナントアダプタ356は、データベース操作をデータベーストランスレータモジュール358に送信し、データベーストランスレータモジュール358は、データベーステーブル132に対する1つ以上のCRUD操作を生成する。例えば、データベーストランスレータモジュール358は、データベースモジュール230と通信するように構成されたソフトウェア開発キット(SDK)に関連づけられてもよい。
【0039】
図示の実施形態において、データベースモジュール230は、ウェブプロセス250のうちの1つに含まれるデータベーストランスレータモジュール358から転送されるCRUD操作を受信し、データベーステーブル132に対する1つ以上の変更を実施する。図示の実施形態において、データベーステーブル132への変更は変更ストリーム134により示される。いくつかの実施形態において、変更ストリーム134はシャードされ、各シャードは1つ以上の変更レコードを含む。いくつかの実施形態において、外部要求はデルタリンクを含み、このデルタリンクをウェブプロセス250はストリームプロセス210に転送し、ストリームプロセス210は、利用可能な場合にはキャッシュ122から対応する変更レコードを取り出し、要求された変更レコードでウェブプロセス250に応答する(ウェブプロセス250は、次に、レコードを要求クライアントに提供することができる)。
【0040】
図示の実施形態において、リーステーブル336は、1つ以上のストリームプロセス210のための1つ以上のDNSアドレスと、DNSアドレスの、1つ以上の変更ストリームシャードのセットへのマッピングとを記憶する。ウェブプロセス250は、リーステーブル336からDNSアドレスを取り出して、位置インジケータを転送すべきストリームプロセス(例えば、どのストリームプロセスがどの変更ストリームシャードを処理することを担うか)を決定する。次いで、ウェブプロセス250は、DNSアドレスを使用して、特定の変更のための位置インジケータを適切なストリームプロセス210に転送する。いくつかの実施形態において、リーステーブル336は、変更ストリームの1つ以上のシャードのためのステートフル情報を記憶し、例えば、リーステーブルの各行は、所与のストリームプロセスにより処理されているシャードを表すことができ、行は、シャード識別子、チェックポイント、及びリースIDを含む。リース情報は、例えば、プロセス間の負荷分散を実行するために、異なるストリームプロセスのポーリングモジュールにより使用されてもよい。各シャードのチェックポイントは、そのシャードの最も最近処理されたレコードを識別するシーケンス番号でもよい。
【0041】
図示の実施形態において、ストリームプロセス210は、ウェブプロセス250から転送された位置インジケータを受信し、この位置インジケータを、位置インジケータにより指定された1つ以上のシャードに関連づけられた1つ以上の変更プロセッサモジュール214に提供する。例えば、位置インジケータは、1つ以上の変更ストリームシャードのシーケンス番号を含むデルタリンクでもよく、これにおいて、変更プロセッサモジュール214は、これらのシャードをハンドリングするために事前に割り当てられていた。ストリームプロセス210の内部層(例えば、212、214、218、120、及び240)は、図2を参照して上記で詳細に説明したものと同様の動作を実行できることに留意する。いくつかの実施形態において、転送された位置インジケータは、例えば、ポーリングモジュール240が対応する変更レコードをすでに取り出しており、したがってレコードがキャッシュされている場合、キャッシュ122の使用を容易にし得る。いくつかの実施形態において、ストリームプロセス210は、要求された変更レコードをウェブプロセス250に返し、次いで、ウェブプロセス250は、レコードを、外部変更要求を送信したコンピューティングデバイスに送信する。ストリームプロセス210を使用してウェブプロセス250への変更ストリーム要求をハンドリングすることは、様々な実施形態において、キャッシュ122の使用を有利に可能にすることができる。
【0042】
図示の実施形態において、データベーストランスレータモジュール218は、データベーステーブル132に対するCRUD操作をデータベースモジュール230に送信する。いくつかの実施形態において、CRUD操作は、データベーステーブル132に対する1つ以上の内部更新(例えば、在庫カウント更新)に基づいて送信される。データベーストランスレータモジュール218は、ストリームプロセス210からのチェックポイント及びDNSアドレスをデータベースモジュール230に送信し、データベースモジュール230は、この情報をリーステーブル336に記憶する。いくつかの実施形態において、モジュール218は、例えば、システムクラッシュから回復した後、最も最近のチェックポイントを取り出す。
【0043】
一例として、図3に示すシステムは、所与のテナントのユーザからの、それらのオンラインショッピングカートにアイテムを追加する要求を処理することができる。この例において、ウェブプロセス250は、ユーザから要求を受信し、このユーザについてショッピングカート情報をデータベーステーブルに追加するためにデータベーステーブル132に対するCRUD操作を生成する。さらに、この例において、データベーステーブル132に追加されるショッピングカート情報は、変更ストリーム134に反映され得る。データベースモジュール230は、所与のストリームプロセス210についてのリーステーブル336からのDNSアドレスと変更ストリーム134からの位置インジケータとをウェブプロセス250に送信することができ、これにおいて、位置インジケータは、ショッピングカート情報がデータベーステーブル132に追加されていることを反映する変更レコードのための変更ストリームのシャードA内のシーケンス番号を指定する。この例では、ウェブプロセス250は、リーステーブル336からのDNSアドレスに基づいて、位置インジケータを所与のストリームプロセス210に転送する。
【0044】
この例を続けると、シャードAをハンドリングするように構成されたストリームプロセス210の変更プロセッサモジュール214は、転送された位置インジケータを使用してシャードAについての変更レコードの要求をキャッシュモジュール120に送信し、位置インジケータにマッチするキャッシュエントリからシャードAについての変更レコードを受信する。最後、この例では、受信された変更レコードに基づいて、変更プロセッサモジュール214はデータベースモジュール230にコマンドを送信し、これにおいて、コマンドには、在庫カウントを更新するための命令、及びユーザが自身のオンラインショッピングカート内にアイテムを置くことに基づいてユーザのオンラインショッピングカートを表示するように構成された新しいユーザインターフェースを生成する命令が含まれる。
【0045】
[例示的なキャッシュ実装]
図4は、いくつかの実施形態による、一例示的なキャッシュ実装を示すブロック図である。図示の実施形態において、キャッシュは、異なるエントリデータ420のためのタグ410を含む。
【0046】
図示の実施形態において、各キャッシュエントリは、そのエントリに記憶された変更レコードのためのシャード識別子及び対応するシーケンス番号を指定するタグ410を含む。図示の実施形態において、第1のエントリのためのタグ410は、シャードBのシーケンス番号5~7を含む。同様に、第2のキャッシュエントリのためのタグ410は、第2のキャッシュエントリがシャードDのシーケンス番号120~150に対応する変更レコードを含むことを指定している。図示の実施形態において、最後のキャッシュエントリは、シャードAのシーケンス番号1~6に対応するレコードがキャッシュエントリに記憶されることを指定するタグ410を有する。いくつかの実施形態において、キャッシュは、複数のストリームからのレコードを記憶することができ、したがって、各キャッシュエントリのタグ410は、シャード識別子及びシーケンス番号に加えてストリーム識別子を含む。
【0047】
いくつかの実施形態において、変更処理モジュール214は位置インジケータを提供し、キャッシュモジュール120はキャッシュヒット又はミスを検出し、キャッシュヒットがある場合に位置インジケータにマッチする変更レコードを提供する。キャッシュモジュール120は、キャッシュミスがある場合、変更ストリーム134からレコードを取り出すことができる。いくつかの実施形態において、キャッシュモジュール120は、図5を参照して以下で詳細に論じられるように、閾値エントリサイズが満たされるまで、取り出された変更レコードをキャッシュエントリに追加する。シャードBとシーケンス番号6を指定する位置インジケータの例について考える。この例において、位置インジケータは、第1のキャッシュエントリに対してキャッシュヒットを生じ、キャッシュは、シーケンス番号6の後の1つ以上の変更レコードを返す(いくつかの実施形態では、キャッシュは、提供された位置インジケータに続く(follow)、エントリ内の全てのシーケンス番号を返す)。
【0048】
いくつかの実施形態において、キャッシュは、グループレベル(例えば、セグメントレベル)でキャッシュ操作を実行し、エントリがフルになるまで、エントリ内の変更レコードのグループに変更レコードを追加し続ける。したがって、キャッシュモジュール120は、ヒット及びミスを検出し、変更レコードがフル又は部分的にフルであるエントリにおいて追い出し(evictions)を実行することができる。キャッシュ122は、様々なタイプのキャッシュ技術のいずれかを使用して実施されてもよく、例えば、最も最近使用されていないもの(least recently used、LRU)又は先入れ先出し(first-in-first-out、FIFO)などの様々な制御技術を使用して追い出しを実行してもよい。いくつかの実施形態において、キャッシュ122はソフトウェアキャッシュである。
【0049】
図5は、いくつかの実施形態による、変更レコードが取り出されるときのキャッシュエントリへの例示的な追加を示すブロック図である。図示の実施形態において、キャッシュエントリ550の内容は、ポイントA~C 542~546で示され、これにおいて、異なるシーケンス番号を有する異なる変更ストリームレコード512~538が、異なる時点でキャッシュエントリ550に追加される。
【0050】
ポイントA 542において、図示の例では、プロセスは、変更ストリーム(例えば、変更ストリーム134)からシーケンス番号4を有する変更レコード512を取り出し、それを新たに割り振られたキャッシュエントリ550に追加する。いくつかの実施形態において、変更レコードは、ポーリングモジュール240又は変更プロセッサモジュール214からのデルタリンクを有する要求に基づいて変更ストリームから取り出される。この取り出しの後、データベースシステムは、キャッシュエントリ550についてのシーケンス番号4及びシャード識別子を指定する更新されたデルタリンクを要求元に提供できることに留意する。いくつかの実施形態において、変更レコード512は、レコードが前に集約されていたキャッシュエントリがフルであるため、新しいキャッシュエントリに追加される。
【0051】
ポイントB 544において、図示の例では、プロセスは、変更ストリームからシーケンス番号5及び8を有するレコード524及び526を取り出し、それらをキャッシュエントリ550(レコード522をすでに含む)に追加する。レコード524及び526は、例えば、変更ストリームをポーリングすることにより取り出されるとき、レコード512の取り出しの後に変更ストリームに追加された可能性があることに留意する。いくつかの実施形態において、データベースシステムは、シーケンス番号8及びシャード識別子を有する更新されたデルタリンクを返す。ポイントC 546において、図示の例では、キャッシュは、変更ストリームからシーケンス番号10を有する変更レコード538を取り出し、それを、レコード532~536をすでに含むキャッシュエントリ550に追加する。いくつかの実施形態において、データベースシステムは、次いで、シーケンス番号10及びシャード識別子を有する更新されたデルタリンクを送信する。このプロセスは、閾値エントリサイズに達するまで継続することができる。例えば、閾値エントリサイズは、50、200、1000、若しくは5000レコード、又は任意の他の適切なサイズでもよい。いくつかの実施形態において、ひとたび閾値エントリサイズに達すると、キャッシュモジュール120は、変更ストリームから取り出されたレコードをキャッシュするための新しいエントリを割り振る。
【0052】
図6は、いくつかの実施形態による、変更ストリームのためにキャッシュを使用する一例示的な方法を示すフロー図である。図6に示す方法は、他の装置の中でも、本明細書に開示されるコンピュータ回路、システム、デバイス、要素、又はコンポーネントのいずれかと関連して使用することができる。様々な実施形態において、図示される方法の要素のいくつかは、同時に、図示のものと異なる順序で実行されてもよく、あるいは省略されてもよい。さらなるの方法の要素が、所望に応じてさらに実行されてもよい。
【0053】
610において、図示の実施形態では、キャッシュは、変更プロセッサモジュールから変更レコードの要求を受信し、要求は位置インジケータを含む。いくつかの実施形態において、キャッシュは、複数の要求を異なる変更プロセッサモジュールから並列に受信する。いくつかの実施形態において、2つの異なる変更プロセッサモジュールが要求をサブミットし、これら要求のための位置インジケータは類似している(キャッシュ内の類似の場所を示す)。いくつかの実施形態において、キャッシュ局所性の恩恵を受けるために、キャッシュは、エントリ境界に対して変更プロセッサモジュールを整合させ(align)て、異なるモジュールがある時間にわたり決まったやり方で(in lock step)キャッシュからレコードを取り出すことを可能にしてもよい。
【0054】
620において、キャッシュは、供給された位置インジケータがキャッシュヒットを生じたかどうかを決定する。例えば、キャッシュは、位置インジケータに含まれるシャードID及びシーケンス番号に対応するエントリの場所を特定することを試みることができる。いくつかの実施形態において、エントリは、図4を参照して上記で詳細に論じたように、シャードIDとシャードIDの1つ以上のシーケンス番号とを有するタグを含む。要素620でキャッシュヒットがある場合、フローは要素640に進む。キャッシュミスがある場合、フローは要素630に進む。
【0055】
630において、キャッシュモジュールは、変更ストリームからのレコードを返す。キャッシュモジュールは、返されたレコードを、将来の要求のために利用可能なキャッシュエントリにキャッシュすることができる。キャッシュモジュールは、さらに、返された変更レコードに基づいて更新された位置インジケータを転送してもよい。
【0056】
640において、キャッシュモジュールは、キャッシュヒットに基づいて、位置インジケータのシーケンス番号に続く(follow)キャッシュされた変更レコードと、返された変更レコードに基づく更新された位置インジケータとを、変更プロセッサモジュールに返す。キャッシュモジュールは、キャッシュミスではデータベースシステムから更新された位置インジケータを受信するのと対照的に、キャッシュヒットの場合には更新された位置インジケータを生成することができる。一例として、更新された位置インジケータは、元の位置インジケータと同じシャードIDのうちの1つ以上を含み得るが、1つ以上のシャードについて異なるシーケンス番号を含み得る。この例では、シーケンス番号は、変更プロセッサモジュールに返される各シャードの最後のレコードのシーケンス番号でもよい。
【0057】
図7は、いくつかの実施形態による、複数のテナントのためのチェックポイントに基づく組み合わせられた変更ストリームチェックポイントを生成する技術を示すブロック図である。図示の例において、ストリームプロセス210は、個々のテナントチェックポイント726及び728に基づいて変更ストリーム710のための組み合わせられたチェックポイント(combined checkpoint)736を作成する。
【0058】
図示の実施形態において、変更ストリーム710は、複数の異なるテナントのための変更レコードを含む。いくつかの実施形態において、変更レコードに関連づけられた番号は、シーケンス番号(シーケンス番号1~6)である。図示の実施形態において、変更ストリーム710は、個々のテナントチェックポイント726及び728に基づいて生成される組み合わせチェックポイント736を含む。
【0059】
図7の右手部分は、テナントによりグループ化された変更ストリーム710を表す情報720を示す。いくつかの実施形態において、変更プロセッサモジュール214は、テナントを認識し、テナントごとに変更ストリームからのレコードをグループ化する。情報720は、テナントA、B、及びCについての3つの異なるレコードグループを含む。図示の実施形態において、チェックポイント726及び728は、テナントA及びBについてそれぞれ示されている。所与のテナントのためのレコードの各グループ内で、変更プロセッサモジュール214は、レコードの元の順序付けを維持できることに留意する。いくつかの実施形態において、1つ以上の変更プロセッサモジュール214が、個々のテナントチェックポイントを生成する。テナントCのためのレコードグループは、チェックポイントを含まないことに留意する。例えば、テナントCのためのシーケンス番号5を有するレコードは、まだ処理されていない可能性がある。
【0060】
図示の実施形態において、組み合わせられたチェックポイント736は、変更ストリーム710内のシーケンス番号3を有する変更レコードの後に示されている。いくつかの実施形態において、組み合わせられたチェックポイントは、そのポイントの前には全てのレコードが成功裏に処理されている、ポイントを表す。組み合わせられたチェックポイント736の後のいくつかのシーケンス番号は成功裏に処理されている可能性があるが(例えば、テナントAのためのシーケンス番号6のレコード)、組み合わせられたチェックポイント736は前進せず、なぜならば、他のテナントがより早いシーケンス番号をまだ成功裏に処理していないためである(例えば、テナントBはシーケンス番号4のレコードを処理しておらず、テナントCはシーケンス番号5のレコードを処理していない)。
【0061】
いくつかの実施形態において、ストリームプロセッサ210は、各テナントについて観測されるシーケンス番号の範囲と、各テナントについての個々のチェックポイントを追跡する(ただし、テナントのための範囲又はチェックポイントは、特定のシナリオにおいてヌルでもよいことに留意する)。図7の例において、ストリームプロセッサ210は、テナントAについて、シーケンス番号範囲[2,6]とシーケンス番号6を示すチェックポイントを記憶することができる。同様に、ストリームプロセッサ210は、テナントBについて、範囲[1,4]とシーケンス番号1におけるチェックポイントを、テナントCについて、範囲[5]とヌルチェックポイントを記憶することができる。
【0062】
いくつかの実施形態において、ストリームプロセッサ210は、チェックポイントが存在しない範囲の下限に基づいて、共有チェックポイントのための第1の閾値シーケンス番号を決定する。例えば、図7の例における組み合わせられたチェックポイントの第1の閾値シーケンス番号はシーケンス番号4であり、なぜならば、テナントC(これはチェックポイントを有さない)の下限が5であるためである。
【0063】
いくつかの実施形態において、ストリームプロセッサ210は、さらに、既存のテナントチェックポイントに基づいて第2の閾値シーケンス番号を決定する。例えば、図7の例における組み合わせられたチェックポイントの第2の閾値シーケンス番号はシーケンス番号3であり、なぜならば、それが最も低いテナントチェックポイント(シーケンス番号4の前のテナントBのチェックポイント)の直前に来るシーケンス番号であるためである。いくつかの実施形態において、ストリームプロセッサ210は、共有チェックポイントとして第1の閾値と第2の閾値とのうちより小さい方を、例えば、図7の例ではシーケンス番号3を選択する。
【0064】
いくつかの実施形態において、ストリームプロセッサ210は、さらに、テナントから独立した(tenant-independent)チェックポイント指示モードをサポートしてもよい。いくつかの実施形態において、図7を参照して論じられた技術は、基礎をなすデータベースがマルチテナンシーを認識していないとしても、マルチテナントシナリオにおける正確なチェックポイント指示を可能にする。
【0065】
[例示的な方法]
図8は、いくつかの実施形態による、キャッシュを使用してデータベーステーブルに対する変更ストリームを処理する方法を示すフロー図である。図8に示す方法は、他の装置の中でも、本明細書に開示されるコンピュータ回路、システム、デバイス、要素、又はコンポーネントのいずれかと関連して使用することができる。様々な実施形態において、図示される方法の要素のいくつかは、同時に、図示のものと異なる順序で実行されてもよく、あるいは省略されてもよい。さらなるの方法の要素が、所望に応じてさらに実行されてもよい。
【0066】
810において、図示の実施形態では、コンピュータシステムのキャッシュモジュールは、変更ストリームからの変更レコードを受信し、変更ストリームは、データベーステーブルに対する変更を示す複数のシャードに対する複数のレコードを含み、1つ以上の変更レコード及び更新された位置インジケータを要求するために、複数のシャードのうち1つ以上についての1つ以上の位置インジケータを提供することによりアクセス可能である。
【0067】
いくつかの実施形態において、マルチテナントアダプタは、変更プロセッサモジュールからテナントベースの要求を受信し、テナントベースの要求を、データベーステーブルを維持するデータベースシステムによりサポートされる要求に変換し、これにおいて、マルチテナントアダプタモジュールは、データベーステーブルを使用して複数の異なるテナントのためのフィールドを記憶する。いくつかの実施形態において、コンピュータシステムは、複数のテナントのための変更レコードを処理することに基づいて複数のテナントチェックポイントを決定する。いくつかの実施形態において、コンピュータシステムは、複数のテナントチェックポイントに基づいて組み合わせられたチェックポイントを決定し、組み合わせられたチェックポイントを記憶する。
【0068】
820において、キャッシュモジュールは、キャッシュモジュールが構成されている1つ以上のシャードのセットに対する変更について、閾値グループサイズまでの変更レコードのグループを各々が含む1つ以上のキャッシュエントリを記憶する。
【0069】
830において、コンピュータシステムの変更プロセッサモジュールは、受信した位置インジケータを提供することを含め、変更ストリームの部分を要求する。
【0070】
いくつかの実施形態において、キャッシュモジュール及び変更プロセッサモジュールは、ストリームプロセスに含まれ、本方法は、コンピュータシステムにより実行される複数の異なるストリームプロセスを使用して変更ストリームにアクセスすることをさらに含む。
【0071】
840において、変更プロセッサモジュールは、キャッシュモジュールから、提供した位置インジケータにマッチするキャッシュエントリからの1つ以上のキャッシュされた変更レコードを受信する。いくつかの実施形態において、キャッシュエントリと提供された位置インジケータとの間のマッチは、位置インジケータに含まれるシャード識別子及びシーケンス番号に基づいており、キャッシュエントリは、1つ以上のシャード識別子と、1つ以上のシャード識別子に対応する1つ以上のシーケンス番号とを有するタグ値を含む。
【0072】
いくつかの実施形態において、コンピュータシステムは、変更プロセッサモジュールによりハンドリングされる変更ストリームの1つ以上のシャードに関連してデータベースシステムのリーステーブルに変更プロセッサモジュールのアドレスを記憶し、これにおいて、データベースシステムは、データベーステーブル及び変更ストリームを維持する。いくつかの実施形態において、変更プロセッサモジュールのアドレスは、変更プロセッサモジュールを含むプロセスのDNSアドレスでもよい。いくつかの実施形態において、受信した位置インジケータは、記憶されたアドレスに基づいて別のモジュールにより転送される。
【0073】
いくつかの実施形態において、コンピュータシステムのポーリングモジュールは、位置インジケータを使用して変更ストリームをポーリングし、これにおいて、位置インジケータは、変更ストリームにおける1つ以上のシャードについてのシャード識別子と、各シャードについてのシーケンス番号を含む。いくつかの実施形態において、ポーリングに応答して、ポーリングモジュールは、1つ以上の新しい変更レコード及び更新された位置インジケータを受信する。いくつかの実施形態において、キャッシュモジュールは、1つ以上の新しい変更レコードを1つ以上のキャッシュエントリに記憶する。
【0074】
[例示的なコンピューティングデバイス]
次に図9を参照し、いくつかの実施形態による、コンピューティングデバイス(コンピューティングシステムとも呼ばれ得る)910のブロック図が示される。コンピューティングデバイス910は、本開示の様々な部分を実施するために使用することができる。コンピューティングデバイス910は、本開示の部分を実施するモバイルデバイス、サーバコンピュータシステム、クライアントコンピュータシステム、又は任意の他のコンピューティングシステムとして使用され得る装置の一例である。
【0075】
コンピューティングデバイス910は、これらに限られないがパーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、携帯電話、メインフレームコンピュータシステム、ウェブサーバ、ワークステーション、又はネットワークコンピュータを含む、任意の適切なタイプの装置であってよい。図示のように、コンピューティングデバイス910は、インターコネクト960(例えば、システムバス)を介して結合された処理ユニット950、記憶サブシステム912、及び入力/出力(I/O)インターフェース930を含む。I/Oインターフェース930は、1つ以上のI/Oデバイス940に結合され得る。コンピューティングデバイス910は、ネットワークインターフェース932をさらに含み、ネットワークインターフェース932は、例えば、他のコンピューティングデバイスとの通信のためにネットワーク920に結合され得る。
【0076】
処理ユニット950は1つ以上のプロセッサを含み、いくつかの実施形態において、1つ以上のコプロセッサユニットを含む。いくつかの実施形態において、処理ユニット950の複数のインスタンスがインターコネクト960に結合されてもよい。処理ユニット950(又は、処理ユニット950内の各プロセッサ)は、キャッシュ又は他の形態のオンボードメモリを含むことができる。いくつかの実施形態において、処理ユニット950は汎用処理ユニットとして実装されてもよく、他の実施形態において、それは専用処理ユニット(例えば、ASIC)として実装されてもよい。一般に、コンピューティングデバイス910は、いずれかの特定のタイプの処理ユニット又はプロセッササブシステムに限定されない。
【0077】
本明細書で用いられるとき、用語「処理ユニット」又は「処理要素」は、動作を実行するように構成された回路を参照する。したがって、処理ユニットは、様々な方法で実装されるハードウェア回路として実装されてもよい。ハードウェア回路は、例えば、カスタム超大規模集積(VLSI)回路又はゲートアレイ、市販の半導体、例えば論理チップ、トランジスタ、又は他のディスクリートコンポーネントを含んでもよい。処理ユニットは、さらに、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなどのプログラマブルハードウェアデバイスに実装されてもよい。
【0078】
本明細書で用いられるとき、用語「モジュール」は、指定された動作を実行するように構成された回路、又は、他の回路(例えば、プロセッサ)に指定された動作を実行するように指示する情報(例えば、プログラム命令)を記憶する物理的な非一時的コンピュータ読取可能媒体を参照する。モジュールは、ハードワイヤード回路として、又は動作を実行するために1つ以上のプロセッサにより実行可能なプログラム命令を内部に記憶させたメモリとしてのものを含む、複数の方法で実装することができる。ハードウェア回路は、例えば、カスタム超大規模集積(VLSI)回路又はゲートアレイ、市販の半導体、例えば論理チップ、トランジスタ、又は他のディスクリートコンポーネントを含んでもよい。モジュールは、さらに、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなどのプログラマブルハードウェアデバイスに実装されてもよい。モジュールは、さらに、指定された動作を実行するために実行可能なプログラム命令を記憶する任意の好適な形態の非一時的コンピュータ読取可能媒体でもよい。
【0079】
記憶サブシステム912は、処理ユニット950により(例えば、処理ユニット950により実行可能な命令及び使用されるデータを記憶するために)使用可能である。記憶サブシステム912は、ハードディスクストレージ、フロッピーディスクストレージ、リムーバブルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RDRAM等)、ROM(PROM、EEPROM等)などを含む、任意の適切なタイプの物理メモリ媒体により実装されてよい。記憶サブシステム912は、いくつかの実施形態において、揮発性メモリのみから構成されてもよい。記憶サブシステム912は、コンピューティングデバイス910に本明細書に開示される様々な技術を実施させるために実行可能なプログラム命令を含む、処理ユニット950を使用してコンピューティングデバイス910により実行可能なプログラム命令を記憶することができる。
【0080】
I/Oインターフェース930は、1つ以上のインターフェースを表すことができ、様々な実施形態に従い、他の装置に結合及び他の装置と通信するように構成された様々なタイプのインターフェースのいずれでもよい。いくつかの実施形態において、I/Oインターフェース930は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップである。I/Oインターフェース930は、1つ以上の対応するバス又は他のインターフェースを介して、1つ以上のI/Oデバイス940に結合され得る。I/Oデバイスの例には、記憶デバイス(ハードディスク、光学ドライブ、リムーバブルフラッシュドライブ、記憶アレイ、SAN、又は関連コントローラ)、ネットワークインターフェースデバイス、ユーザインターフェースデバイス、又は他のデバイス(例えば、グラフィックス、サウンド等)が含まれる。
【0081】
図9のコンピューティングデバイスは、開示される概念を説明するための一実施形態であることに留意されたい。他の実施形態では、コンピューティングデバイスの様々な態様が異なることがある。例えば、いくつかの実施形態において、さらなるコンポーネント、又は図示されたコンポーネントの複数のインスタンスが含まれてもよい。
【0082】
特定の実施形態が上述されたが、これらの実施形態は、特定の特徴に関して単一の実施形態のみが記載されている場合でも、本開示の範囲を制限することを意図するものではない。本開示において提供される特徴の例は、別段示されない限り、限定的でなく例示的であることを意図している。上記の説明は、本開示の恩恵を有する当業者に明らかなように、そのような代替、修正、及び同等物をカバーすることを意図している。
【0083】
本開示の範囲は、本明細書で対処される問題のいずれか又は全てを緩和するか否かにかかわらず、本明細書に開示される任意の特徴若しくは特徴の組み合わせ(明示的又は暗黙的のいずれか)又はこれらの任意の一般化を含む。したがって、新たな請求項が、任意のそのような特徴の組み合わせに対して本出願(又は、本出願に対して優先権を主張する出願)の手続きの間に立てられ得る。詳細には、別記の特許請求の範囲を参照し、従属請求項からの特徴は独立請求項の特徴と組み合わせることができ、それぞれの独立請求項からの特徴は、別記の特許請求の範囲に列挙された特定の組み合わせのみでなく任意の適切な方法で組み合わせることができる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
【国際調査報告】