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

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

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

特許7507142データベースにおいてレコードを一括削除するためのシステムおよび方法
<>
  • 特許-データベースにおいてレコードを一括削除するためのシステムおよび方法 図1
  • 特許-データベースにおいてレコードを一括削除するためのシステムおよび方法 図2
  • 特許-データベースにおいてレコードを一括削除するためのシステムおよび方法 図3
  • 特許-データベースにおいてレコードを一括削除するためのシステムおよび方法 図4
  • 特許-データベースにおいてレコードを一括削除するためのシステムおよび方法 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-19
(45)【発行日】2024-06-27
(54)【発明の名称】データベースにおいてレコードを一括削除するためのシステムおよび方法
(51)【国際特許分類】
   G06F 16/22 20190101AFI20240620BHJP
   G06F 16/23 20190101ALI20240620BHJP
【FI】
G06F16/22
G06F16/23
【請求項の数】 18
(21)【出願番号】P 2021504766
(86)(22)【出願日】2019-09-24
(65)【公表番号】
(43)【公表日】2022-01-04
(86)【国際出願番号】 US2019052733
(87)【国際公開番号】W WO2020068856
(87)【国際公開日】2020-04-02
【審査請求日】2022-09-13
(31)【優先権主張番号】16/140,523
(32)【優先日】2018-09-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ファンハエネル トマス
【審査官】鹿野 博嗣
(56)【参考文献】
【文献】特開2003-085009(JP,A)
【文献】特開2003-308682(JP,A)
【文献】特開2018-005552(JP,A)
【文献】特表2014-529126(JP,A)
【文献】米国特許出願公開第2018/0260407(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
メモリ記憶から区域にデータを書き込むマージ動作中に、ログ構造化マージ(LSM)ツリー・ベースの記憶システムにおけるレコードを削除する、コンピュータ実装される方法であって:
複数のレコードを削除するコマンドを受領する段階と;
前記記憶システムのメモリ記憶に範囲墓標を挿入する段階であって、前記範囲墓標は削除されるべき複数のレコードを示す、段階と;
少なくとも部分的に前記複数のレコードが所定の閾値量を超えて連続しているかどうかに基づいて遅延削除プロセスを選択する段階と;
選択された遅延削除プロセスに基づいて前記記憶システムのマニフェストを修正する段階と;
前記マージ動作を実行する段階であって、前記複数のレコードは、少なくとも部分的には前記遅延削除プロセスに基づいて、フラッシュ動作中に前記区域に書き込まれない、段階とを含む、
方法。
【請求項2】
前記複数のレコードはテーブルのすべてのレコードまたはテナントに関連付けられたすべてのレコードのうちの1つを含み、前記複数のレコードのうちの少なくとも1つのレコードは範囲墓標としてマークされる、請求項1に記載の方法。
【請求項3】
前記コマンドによって影響される各キー範囲について1つの範囲墓標が挿入される、請求項1に記載の方法。
【請求項4】
前記複数のレコードが連続的である場合、前記遅延削除プロセスは、キー範囲切り取りプロセスであり、前記キー範囲切り取りプロセスは:
前記複数のレコードに対応するキー範囲を前記マニフェストから除去するよう前記記憶システムの前記マニフェストを更新することを含む、
請求項1および3のうちいずれか一項に記載の方法。
【請求項5】
前記マニフェストを更新することは、前記記憶システムにおける区域においてキー範囲を定義する一つまたは複数の区域参照を修正することを含む、請求項1、3、4のうちいずれか一項に記載の方法。
【請求項6】
前記マージ動作の前に、前記記憶システムからデータを読み取る動作は、除去されたキー範囲内のレコードをスキャンしない、請求項1、3~5のうちいずれか一項に記載の方法。
【請求項7】
前記複数のレコードが連続的でない場合、前記遅延削除プロセスが繰り延べ削除プロセスであり、前記繰り延べ削除プロセスは:
前記記憶システムの前記マニフェストに、前記記憶システムから削除されるオブジェクトと、そのオブジェクトが前記記憶システムから削除された時間とを示すデータで注釈付けすることを含み、
前記注釈付けは前記記憶システムにおける区域参照を修正しない、
請求項1~2のうちいずれか一項に記載の方法。
【請求項8】
前記オブジェクトが前記記憶システム内のテーブルである、請求項に記載の方法。
【請求項9】
前記マージ動作の前に、前記記憶システムからデータを読み取る動作は、前記テーブルとデータを共有するスキャンされたレコードをバイパスする、請求項に記載の方法。
【請求項10】
メモリ記憶から区域にデータを書き込むマージ動作中にレコードを削除することを許容するログ構造化マージ(LSM)ツリー・ベースの記憶システムであって:
コンピュータ実行可能命令を記憶している少なくとも1つのメモリと;
複数のレコードを記憶しているデータベースと;
少なくとも1つのプロセッサとを有しており
前記少なくとも1つのプロセッサは、前記少なくとも1つのメモリにアクセスし、前記コンピュータ実行可能命令を実行して:
複数レコードを削除するコマンドを受領する段階と;
前記記憶システムのメモリ記憶に範囲墓標を挿入する段階であって、前記範囲墓標は削除されるべき前記複数のレコードを示す、段階と;
前記複数のレコードが所定の閾値量を超えて連続的であるかどうかに基づいて遅延削除プロセスを選択する段階と;
選択された遅延削除プロセスに基づいて前記記憶システムのマニフェストを修正する段階と;
前記マージ動作を実行する段階であって、前記複数のレコードは、少なくとも部分的には前記遅延削除プロセスに基づいて、フラッシュ動作中に前記区域に書き込まれない、段階とを実行するように構成されている、
記憶システム。
【請求項11】
前記複数のレコードはテーブルのすべてのレコードまたはテナントに関連付けられたすべてのレコードのうちの1つを含み、前記複数のレコードのうちの少なくとも1つのレコードは範囲墓標としてマークされる、請求項10に記載の記憶システム。
【請求項12】
前記プロセッサが、前記コマンドによって影響される各キー範囲について1つの範囲墓標を挿入するように構成されている、請求項10に記載の記憶システム。
【請求項13】
前記複数のレコードが連続的である場合、前記遅延削除プロセスは、キー範囲切り取りプロセスであり、前記キー範囲切り取りプロセスは:
前記複数のレコードに対応するキー範囲を前記マニフェストから除去するよう前記記憶システムの前記マニフェストを更新することを含む、
請求項10および12のうちいずれか一項に記載の記憶システム。
【請求項14】
前記マニフェストを更新することは、前記記憶システムにおける区域においてキー範囲を定義する一つまたは複数の区域参照を修正することを含む、請求項10、12、13のうちいずれか一項に記載の記憶システム。
【請求項15】
前記マージ動作の前に、前記記憶システムからデータを読み取る動作は、除去されたキー範囲内のレコードをスキャンしない、請求項10、12~14のうちいずれか一項に記載の記憶システム。
【請求項16】
前記複数のレコードが連続的でない場合、前記遅延削除プロセスが繰り延べ削除プロセスであり、前記繰り延べ削除プロセスは:
前記記憶システムの前記マニフェストに、前記記憶システムから削除されるオブジェクトと、そのオブジェクトが前記記憶システムから削除された時間とを示すデータで注釈付けすることを含み、
前記注釈付けは前記記憶システムにおける区域参照を修正しない、
請求項10~11のうちいずれか一項に記載の記憶システム。
【請求項17】
前記オブジェクトが前記記憶システム内のテーブルである、請求項16に記載の記憶システム。
【請求項18】
前記マージ動作の前に、前記記憶システムからデータを読み取る動作は、前記テーブルとデータを共有するスキャンされたレコードをバイパスする、請求項17に記載の記憶システム。
【発明の詳細な説明】
【背景技術】
【0001】
データ構造は、その中に格納されたデータと相互作用するための多様な仕方を提供するデータの組織体系である。データ構造は、さまざまな目的のために設計されることができる。たとえば、二分探索木におけるようなデータの効率的な検索を容易にするため、リンクリストによるような疎データの効率的な記憶を可能にするため、またはBツリーによるような検索可能なデータの効率的な格納を提供するためである。
【0002】
キー‐値パラダイムを利用するデータ構造は、キー‐値ペアを受け入れ、そのキーについての問い合わせに応答するように構成される。キー‐値データ構造は、辞書(たとえば、マップ、ハッシュマップなど)のような構造を含んでいてもよく、その場合、キーはそれぞれの値をリンクする(または含む)リストに格納される。これらの構造は、メモリ内では(たとえば、記憶〔ストレージ〕ではなく、メインまたはシステム状態のメモリにおいて)有用であるが、永続的記憶(たとえば、ディスク上)におけるこれらの構造の記憶表現は、非効率的であることがある。よって、ログ・ベースの記憶構造のクラスが導入されている。一例は、ログ構造化マージ・ツリー(log structured merge tree、LSMツリー)である。
【0003】
LSMツリー・データベースは、可変な(mutable)メモリ常駐メモリ層に加えて一つまたは複数のディスク常駐の不変(immutable)層(「区域(extent)」)から構成されてもよい。LSMツリーから読み取るとき、リーダーはすべての層からの結果を読み取り、マージすることができる。新しいレコードがインデックス付けされると、対応するインデックス・エントリーが可変のメモリ常駐層に追加される。
【0004】
LSMツリー・データベースにおけるトランザクションは、与えられた諸レコードの不変バージョンとして格納される。システム上にすでに格納されているレコードの内容の不変バージョンは、その内容がシステムから削除されるまで(もし削除されるとして)変更されないままでありうる。すなわち、受領されたトランザクションは、レコードの内容を変更する代わりに、システムに格納されるべき当該レコードの内容の新しいバージョンを作成してもよい。よって、レコードの複数のバージョン(たとえば、異なる内容をもつレコード)が、トランザクション識別子(たとえば、これはトランザクション番号を含んでいてもよい)を除き、同一のキーをもつことが可能でありうる。
【図面の簡単な説明】
【0005】
開示される主題のさらなる理解を提供するために含まれる添付の図面は、本明細書に組み込まれ、本明細書の一部を構成する。図面はまた、開示される主題の実施形態を示し、詳細な説明とともに、開示される主題の実施形態の原理を説明するはたらきをする。開示される主題およびそれが実施されうるさまざまな仕方の基本的理解のために必要でありうる以上に詳細な構造的詳細を示そうとはしない。
【0006】
図1】開示される主題のある実装による例示的なデータベース・システムを示す。
【0007】
図2】開示される主題のある実装による、マニフェストにおける区域参照集合に適用されるキー範囲切り取りを示す。
【0008】
図3】開示される主題のある実装による、マニフェストにおける区域参照集合に適用される延期された削除を示す。
【0009】
図4】開示される主題のある実装によるコンピュータを示す。
【0010】
図5】開示される主題のある実装によるネットワーク構成を示す。
【発明を実施するための形態】
【0011】
本開示のさまざまな側面または特徴が、図面を参照して記述される。ここで、同様の参照符号は、全体を通じて同様の要素を指すために使用される。本明細書においては、本開示の十全な理解を提供するために、多数の詳細が記載される。しかしながら、開示のある種の側面は、これらの個別的詳細なしに、または他の方法、構成要素、材料などを用いて実施されうることが理解されるべきである。他の例では、周知の構造および装置が、主題となる開示の説明を容易にするために、ブロック図の形で示される。
【0012】
開示される方法および技術は、多様な異なるデータベース構造に適用できる。開示された主題は、単一タイプのアーキテクチャーに限定されるものではないが、例示の目的のために、以下の議論は、キー範囲マルチテナント性(key-range multi-tenancy)をもつログ構造化マージ(LSM)ツリーを用いた実装を説明する。LSMツリーは、不変のデータ・バージョンでデータ変更を記述することができる。キー範囲マルチテナント性は、サーバーへの動的バインディングを可能にし、各テナントのデータを別個に保つために使用できる。
【0013】
LSMツリー・ベースのデータベースにおける単一レコードの削除は、削除マーカー(「墓標(tombstone)」と呼ばれる)を書き込むことによって行なわれる。しかしながら、すべてのレコードに対する削除マーカーの書き込みは、たとえば、多数のレコードが削除される結果となりうるDROP TABLEまたはDROP INDEXコマンドによって引き起こされるバルクまたは大量の削除のためには非効率的な機構である。理想的には、ユーザーの観点からは、そのようなコマンドは、基礎となるテーブルまたはインデックスのサイズに対して線形でないまたは依存的でない、一定時間の動作であるべきである。
【0014】
開示される実施形態は、「範囲墓標(range tombstone)」の概念を導入することにより、任意に多数のレコードのバルク削除の技術的問題に対処する。範囲墓標は、削除のための複数のレコード、たとえば、所与のテーブル内のすべてのレコードまたは所与のテナントに関連付けられたすべてのレコードをマークするレコードである。レコードは、たとえば、フラグまたは特別なヘッダ・ビットによって、「範囲墓標」レコードとしてマークされることができる。そうでなければ、範囲墓標レコードは、通常レコードの属性を与えられ、通常レコードとして扱われることができる。たとえば、範囲墓標レコードは、DROPを実行するトランザクションのトランザクション識別子(XID)でマークされ、トランザクションがコミットするときに適切なトランザクション番号(XCN)をスタンプされることができる。DROPコマンドによって影響される各キー範囲について、1つの範囲墓標が作成されることができる。
【0015】
範囲墓標は、バルク/大量削除のための少なくとも2つの異なる機構(本明細書では「キー範囲切り取り(key range slicing)」および「繰り延べ削除(deferred deletion)」と呼ばれる)を実装するために使用できる。どちらの機構も、行なわれる必要がある実際の作業を遅らせることによって、エンドユーザーに対して一定時間フィードバックを提供する。だが、それらの性能特性は異なっており、データベース・システム内で発生する可能性のある異なるタイプの大量またはバルク削除に好適となる。
【0016】
図1は、レコードの大量除去のために、開示される範囲墓標を実装することによって改善できる例示的なシステム100を示す。データの不変のバージョンは、システム100上で「区域」において記憶される。「区域(extent)」とは、典型的には記憶媒体内で連続的な、データを記憶するために使用できる記憶領域を指す。後述するように、「区域参照(extent reference)」は、物理的記憶に格納される物理的な区域に対する論理的な参照として使用されてもよく、物理的記憶へのアクセスを記憶内の一つまたは複数の「レベル」に仮想化するために使用されうる。データは、時間の経過とともに、データベースの保守および最適化プロセスの一部として、それらのレベルを通じて移動する。
【0017】
システム100は、単一のコンピューティング装置または複数の接続されたコンピューティング装置上で動作することができる。たとえば、システム100は、ラップトップ、デスクトップ、個々のサーバー、サーバークラスター、サーバーファーム、または分散サーバー・システム上に実装されることができ、または仮想コンピューティング装置もしくはシステム、または物理的システムと仮想システムの任意の適切な組み合わせとして実装されることができる。簡単のため、プロセッサ、オペレーティング・システム、およびデータベース管理システムの他の構成要素といったさまざまな部分は、図1には示されていない。
【0018】
システム100は、コンピューティング・システムおよびネットワーク・インフラストラクチャーの一部であることができ、またはさもなければ、別個のコンピューティング・システムおよびネットワーク・インフラストラクチャーに接続されることができ、それはシステム100と同様の他のサーバー・システムを含みうるより大きなサーバー・ネットワークを含む。いくつかの実装では、システム100は、図4に示されるコンピュータ600、中央コンポーネント700、および/または第2のコンピュータ800、および/または図5に示されるデータベース・システム1200a~1200dのうちの一つまたは複数であってもよい。
【0019】
システム100は、アクセス層105、仮想化層115、および物理的記憶層127を含む。アクセス層105は、テナントがアプリケーションおよびデータベースをホスティングするためのプラットフォームを提供し、ユーザーがシステム100と対話するための主要なインターフェースとして機能する一つまたは複数のサーバー111、112、113を含むことができる。アクセス層105はまた、サーバー111、112、113を横断した負荷分散を扱うことができ、コンピューティング装置(たとえば、図4に示されるコンピュータ600および/または第2のコンピュータ800)からシステム100に対する問い合わせを受け入れ、処理することができるデータベース記憶エンジン110をも含むことができる。たとえば、データベース記憶エンジン110は、テナント組織から問い合わせを受け取り、該問い合わせを処理して、仮想化層115にコマンドを送信することができる。データベース記憶エンジン110は、データベース・システムに対する問い合わせを受け取り、受け取った問い合わせに関連するデータを検索するための、サーバー・システム100上のハードウェアおよびソフトウェアの任意の好適な組み合わせでありうる。
【0020】
仮想化層115は、テナント・データを仮想化し、各テナントに、カスタマイズされたデータベースのようなシステム・サービスを提供する。たとえば、複数のテナントからのデータがシステム100に記憶されていても、テナントはテナント自身のデータのみにアクセスすることができる。仮想化層は、区域参照集合120(マニフェストの構成要素)およびメモリ記憶125を含むことができる。いくつかの実装では、マニフェストおよびメモリ記憶125は、図4に示される中央コンポーネント700および/または図5に示されるデータベース・システム1200a~1200dに記憶されることができる。
【0021】
メモリ記憶125は、データが永続的な物理的記憶層127内の区域に記録される前に、データの初期バージョンを記憶する。すなわち、新しいレコードの挿入または墓標の挿入のようなデータ・トランザクションは、メモリ記憶125レベルで生起する。時間の経過とともに、メモリ記憶125の使用を最適化するために、フラッシュ(flush)動作が、データをメモリ記憶125から物理的記憶レベル127における最上レベルの区域130に転送し、データベース保守動作の一部として、マージ(merge)動作がデータを区域130間で転送する。仮想化の用語では、より新しいデータはツリーの「最上部」の近くまたはデータベースの「上位レベル」にあり、一方、より古いデータはツリーの「底」の近くまたはデータベースの「下位レベル」にあるといえる。しかしながら、この用語法は単に概念化の助けとして使用されているのであって、データベースにおけるデータの、互いに対する実際の物理的な位置に必ずしも何の関係もないことを理解すべきである。
【0022】
マニフェストは、テナント・データからのメタデータを使用して、区域130が永続的な物理的記憶127内のどこに位置するか(すなわち、テナント・データが区域130の一部としてどこに記憶されているか)を定義することができる区域参照集合(extent reference set)120を含む。メタデータは、たとえば、ある区域においてどのキーが見えるかを定義するキー範囲(key range)、区域130内のレコード/墓標のトランザクション順序を示すトランザクション番号(以下、「XCN」と称する)、および区域を所与のテナントに関連付けるテナント識別子データ(ID)を含むことができる。
【0023】
仮想化層115は、データベース記憶エンジン110から問い合わせを受け取り、データの最新バージョンがメモリ記憶125内にあるかどうかをチェックすることによって、または、区域参照集合120を参照することによってデータの最新バージョンがすでに物理的記憶層127内の区域130にフラッシュされているかどうかをチェックすることによって、要求されたデータを見つけることができる。問い合わせは、たとえば、少なくとも一のテナントに関連付けられた、データベース・システムの認可されたユーザーから受け取ることができる。データがすでに物理的記憶127にフラッシュされている場合、仮想化層115は、マニフェストの区域参照集合120内のメタデータに基づいて、要求されたデータを位置特定することができる。すなわち、仮想化層115は、問い合わせによって要求されたデータを区域130から取り出すことができ、該データをデータベース記憶エンジン110に返すことができ、データベース記憶エンジン110は該データを、たとえば、問い合わせをデータベース・システムに送信したコンピューティング装置に提供することができる。
【0024】
永続的な物理的記憶層127は、不変データ記憶装置を含むことができ、たとえば、半導体メモリ、ソリッドステートドライブ(SSD)、ハードディスクドライブ、光メモリ、光記憶デバイス、または他の任意の好適な物理的データ記憶媒体、またはそれらの何らかの組み合わせとして実装できる。物理的記憶層127は、テナント・データの不変バージョンを含む区域130を実装することができる。物理的記憶層127はまた、マニフェストの過去のバージョンを記憶し、区域130の識別情報および寿命を管理し、区域を記憶できる記憶装置およびサーバーなどのハードウェアを管理するためのデータ・キャパシティーを追跡するカタログ135をも含むことができる。
【0025】
永続的な物理的記憶127内のデータは不変であるため、システム100が記憶されたデータを修正するためにデータ・トランザクションを実行すると、システム100は、すでに記憶されているデータの内容を変更/削除する代わりに、そのデータの新しいバージョンを作成し、メモリ記憶125に挿入する。メモリ記憶125から、データは、フラッシュ動作で物理的記憶127にはいる。よって、本明細書に開示されるようなキー‐値データの複数のバージョン(たとえば、それぞれが異なる内容を有する)が同一のキーを有することが可能である。さらに、各トランザクションをマークするためにインクリメンタルな逐次的トランザクション番号(XCN)を使用することによって、システム100は、データの諸バージョンについての同一のキーの間の区別をすることができる。たとえば、レコードの後のバージョンは、レコードの前のバージョンよりも高いXCNをもち、両方のレコードは、同一のキーをもつが、潜在的に異なる内容値をもつ。
【0026】
システム100がデータの読み出しを必要とする動作を実行するとき、システム100はXCNによって時間的に順序付けられた検索を実行することができる。スキャン中に墓標に遭遇したとき、システム100は、墓標と同じキーを有し、墓標よりも低いXCNを有するいかなる以前のレコードをも無視することができる。すなわち、キー‐値ペアの一つまたは複数の期限切れバージョンが区域130内の、より古い位置に存在していても、システムは、対応する値が削除されたかのように機能する。同様に、範囲墓標に遭遇したとき、開示されるシステム100は、墓標を付けたキー範囲内のレコードを無視する。開示されるシステム100は、代わりに、後述するようなさまざまな要因に基づいて、遅延した大量/バルク削除プロセスを選択し、実行する。
【0027】
先述したように、開示された実施形態は、遅延した大量/バルク削除プロセスとして、本明細書で「キー範囲切り取り」および「繰り延べ削除」と称されるものを利用する。これらのプロセスは、実行する必要のある実際の削除作業を延期することにより、エンドユーザーに対して定時間フィードバックを提供することを可能にする。しかしながら、2つのプロセスは性能特性が異なり、各プロセスは発生しうる大量削除コンテキストの異なるタイプに好適である。
【0028】
データベース大量削除コンテキストは、DROP TABLE〔テーブルをドロップ〕、DROP INDEX〔インデックスをドロップ〕、DROP TENANT〔テナントをドロップ〕、およびDROP DATABASE〔データベースをドロップ〕といった、さまざまなデータ定義言語(data definition language、DDL)コマンドの実行時に生じうる。これらのオブジェクトをドロップするタイプのコマンドは、一般に、2つの主なタスクを実行する必要がある。それは、1)必要なスキーマ変更を行なうためにマニフェスト120内のメタデータを更新すること、および2)ドロップされたオブジェクトによって区域130内に占有されている記憶を解放すること、である。
【0029】
開示される実施形態では、システム100は、DDLコマンドが受領されたときにマニフェスト120を更新することによって、すぐに第1のタスクを処理する。ドロップされたオブジェクトは、マニフェスト120へのメタデータ更新がコミットされると、アクセス不能になる。第2のタスク、すなわち、実際のレコードの除去およびそれらが区域130内で占める記憶スペースの解放は、遅延される。ドロップされたオブジェクトと同じ識別情報(すなわち、テーブルおよびインデックスについては同じ物理的関係ID、データベースについては同じデータベース番号、テナントについては同じテナントID)をもつ新しいオブジェクトは、次にメモリ記憶125(すなわち、LSMツリーのメモリ内コンポーネント)がフラッシュされるまで、再作成することができない。
【0030】
システム100データベース内のデータのクラスタリング特性のために、上述のほとんどすべてのオブジェクト・タイプの記憶スペースの解放は、一般に、2つの異なる記憶パターン、すなわち、連続的なキー範囲内のレコードのバルク削除、またはいくつかの不連続なキー範囲内のレコードの大量削除のいずれかに従う。たとえば、DROP TABLEは、ターゲット・テーブルにテナントがない場合は、連続的なキー範囲に影響するが、テーブルがマルチテナント・テーブルである場合は、多くの連続しないキー範囲に影響する可能性がある。同様に、DROP INDEXは、インデックスがテナントがないテーブル上のものである場合、またはマルチテナント・テーブル上のクロステナント・インデックスである場合は、連続的なキー範囲に影響するが、インデックスがテナント・クラスタリングされている(tenant-clustered)場合は、多くの不連続なキー範囲に影響する。DROP TENANTは一般に、連続的なキー範囲に影響する。DROP DATABASEは、一般に、データベースがテナントを含まない場合は、連続的なキー範囲に影響し、データベースに登録されるテナントごとに、1つの追加的な別個のキー範囲に影響を与える可能性がある。
【0031】
大部分が連続的なキー範囲の場合、本明細書に開示されるキー範囲切り取り・プロセスは、連続的なキー範囲の除去のために有利でありうる。キー範囲切り取りでは、レコードのバルク除去は、墓標を付けたキー範囲がマニフェスト120から消去されるようマニフェスト120を更新することによって実行される。これは、メモリ125から物理的記憶区域130にレコードを転送するフラッシュ動作中に新しいマニフェストを作成することによって行なわれる。フラッシュ動作によって作成されたマニフェストの新しいバージョンは、フラッシュ動作によって作成されたばかりの記憶区域への新しい参照を追加し、LSMツリーのすべてのレベルにわたって、墓標を付けたキー範囲をカバーするあらゆる既存の区域参照を修正することができる。
【0032】
新しいマニフェストを作成する際に、既存の区域参照は、それらが完全に1つの墓標を付けたキー範囲内にはいる場合は削除され、またはそれらが墓標を付けたキー範囲の一つまたは複数の境界と重なる場合は再帰的に修正される。この再帰的な動作は、次のことを行なう:1)区域参照の下/上の境界が墓標を付けたキー範囲内にはいる場合、その境界をもって新しい参照が作成され、墓標を付けたキー範囲の上限/下限になるように調整されるか、または2)区域参照が墓標を付けたキー範囲を完全にカバーする場合、その参照は2つの新しい区域参照に分割され、一方は、墓標を付けたキー範囲の下の境界に一致する上の境界をもち、他方は、墓標を付けたキー範囲の上の境界に一致する下の境界をもつ。
【0033】
図2は、マニフェスト200内の区域参照集合210に適用される、開示されるキー範囲切り取り〔スライシング〕を示す。区域1はキー範囲(0,10)をもつものとして定義され、区域2はキー範囲(11,20)をもつものとして定義され、区域3はキー範囲(21,30)をもつものとして定義される。第1のDROPコマンドは、キー範囲(5,13)をカバーする第1の範囲墓標220の挿入をもたらす。範囲墓標220の上の境界は、区域1の(0,10)というキー範囲内にはいり、下の境界は、区域2の(11,20)というキー範囲内にはいるので、フラッシュ動作は、範囲墓標キー範囲を切り取り去る新しい区域を作成する。よって、キー範囲(0,4)をもつ新しい区域4が定義され、キー範囲(14,20)をもつ区域5が定義される。
【0034】
第2のDROPコマンドは、キー範囲(24,26)をカバーする第2の範囲墓標230の挿入をもたらす。この場合、区域3についての区域参照は範囲墓標230のキー範囲を完全にカバーするため、区域3は区域6 (21,23)と区域7 (27,30)の2つの新しい区域に分割される。区域7の上の境界は、墓標を付けたキー範囲の下の境界と一致し、区域6の下の境界は、墓標を付けたキー範囲の上の境界と一致する。
【0035】
よって、開示されるキー範囲切り取りは、マニフェストがもはやそのキー範囲のエントリーを含まないので、LSMツリーにおいて、墓標を付けたキー範囲内のレコードをアクセス不能にする。それらのレコードによって占有されている記憶スペースは、後で再生〔レクラメーション〕されることができる。たとえば、マージ動作が切り取り境界のまわりのそのキー範囲を書き換え、最終的に、墓標を付けたキー範囲の物理的なレコードをいまだ保持しているもとの区域が期限切れになるときにである。
【0036】
キー範囲切り取りは、連続的なキー範囲について有利であるが、多数のDROP DDLを必要とする状況では、過剰な切り取りが生じ、マニフェストに新しい区域参照を繰り返し含めることにより、マニフェストのサイズを膨らませる可能性がある。マニフェスト内の区域参照の数が多いと、マージまたはフラッシュ動作といった、区域参照集合を操作する必要のあるプロセスが遅くなることがある。
【0037】
十分に不連続なキー範囲にわたって大量削除が行なわれる必要がある場合、本明細書に開示されているような繰り延べ削除が有利でありうる。繰り延べ削除とは、既存の区域参照を不変のままにしつつ、マニフェストに、どのオブジェクト(単数または複数)がドロップされるかを示す追加的データで注釈付けすることによって実行される、レコードのバルク除去をいう。この注釈付けプロセスは、フラッシュ動作中に実行できる。
【0038】
フラッシュ動作によって作成されたマニフェストの新しいバージョンは、LSMツリーのメモリ内のコンポーネントにおいて範囲墓標が見つかったオブジェクトがあればその識別子を、そのオブジェクトがドロップされた時のログ・ストリーム相対タイム・スタンプ(log-stream-relative timestamp)とともに含む。LSMツリーの永続的な物理記憶内のその後のスキャンは、ドロップされたオブジェクトのリストに対してレコードを修飾し(qualify)、現行スキャンでは見ることができない古すぎるオブジェクトに属するレコードを効果的にフィルタリング除去することができる。
【0039】
図3は、マニフェスト300内の区域参照集合310に適用される、開示される繰り延べ削除プロセスを示す。区域参照集合は、テナントA、B、およびCについてタグ付けされたデータを含み、各テナントは、テーブルT1、T2、T3、およびT4にデータを有する。テーブルT1を削除するDROP TABLEコマンドは、削除のためにテーブルT1を同定する範囲墓標を挿入する。フラッシュ動作は、区域参照集合310を修正することなく、テーブルT1を削除のために同定するデータを用いてマニフェスト300に注釈付けする。区域参照集合310によってマッピングされたデータのその後のスキャンは、まず、注釈330をチェックして、読み取られたデータが繰り延べ削除のためにマークされたかどうかを判定する。テーブルT1に関連付けられているとして読み込まれたいかなるデータも出力されない。
【0040】
よって、ドロップされたキー範囲内のレコードは、開示された繰り延べ削除プロセスによってすぐには隠されない。レコードが存在する限り、低レベルの記憶スキャンでは、いまだドロップされたレコードを見ることができるが、レコードを実行エンジン(またはクライアント)に返すことは防止される。実際の記憶スペースの再生は、通常の墓標およびキー範囲切り取りプロセスで行なわれる仕方と同様に実行される。マージがドロップされたオブジェクトのレコードを含むキー範囲に遭遇すると、それらのレコードはスキップされ、新しい区域(単数または複数)に再書き込みされない。
【0041】
開示されるキー範囲切り取りおよび繰り延べ削除アプローチは、いくつかの点で類似している。両方とも、スキーマ更新を実行することによって、たとえば、ドロップされたオブジェクトへのアクセスを得るために必要なメタデータを除去/修正することによって、すぐに、ドロップされたオブジェクトに対応するすべてのレコードを効果的に隠す。どちらのプロセスも、少なくとも1つのフラッシュ動作が行なわれるまで、最近ドロップされたオブジェクトと一致する識別情報をもつ新しいオブジェクトの生成を防止する。
【0042】
これら2つのプロセスは、マニフェストにどのように影響するか、および、その後のマージがドロップされたオブジェクトに対応するキー範囲に遭遇するときに、その後のマージがどのくらい効率的に実行できるかにおいて異なる。
開示されるキー範囲切り取りプロセスは、各墓標を付けたキー範囲について、記憶マニフェストにオーバーヘッドを追加する。オーバーヘッドは、マニフェストの膨張につながることがあり、それはひいては、問い合わせのパフォーマンス、およびマニフェストを書き換えるその後の動作に悪影響を及ぼす可能性がある(マニフェストのサイズの増加に対応する処理時間の増加のため)。しかしながら、キー範囲切り取りは、マージ動作が、ドロップされたキー範囲に遭遇したときに、効率的なままであるという利点を提供する。マージ動作は、レコードがドロップされるかどうかを判断するために、ドロップされたキー範囲内のレコードを1つずつ読み込む必要はない。
【0043】
開示される繰り延べ削除プロセスは、記憶マニフェスト内のオーバーヘッドをなくし、それにより、問い合わせを効率的に維持し、記憶マニフェストの書き換えが高速なままであることを確実にする。しかしながら、それは、ドロップされたキー範囲に遭遇したマージ動作のパフォーマンスに悪影響を与える可能性がある。マージ動作は、相変わらず、ドロップされたキー範囲内の各レコードを1つずつ読み取る必要があるからである。
【0044】
複数のレコードを含むデータベース・オブジェクトをドロップする最も効率的な仕方は、影響を受けるキー範囲の数や、それらのキー範囲内のレコードの数といった、多くの要因に依存する。開示されるキー範囲切り取りアプローチは、影響を受けるキー範囲が広く(wide)、それぞれが比較的大量のレコードを含む場合に使用されるのが最善である。開示される繰り延べ削除アプローチは、非常に多数の比較的小さな不連続なキー範囲に影響を与え、それらのキー範囲中のレコードがほとんどない動作に適用されるのが最善である。
【0045】
開示されるシステム100は、どの遅延削除(delayed deletion)プロセスを使用するかを決定するために発見的方法を使用することができる。たとえば、ある実施形態では、繰り延べ削除が、テナント・クラスタリングされたオブジェクト(すなわち、マルチテナント・テーブルまたはテナント・クラスタリングされたインデックス)に影響を及ぼすすべてのDROP動作について使用でき、キー範囲切り取りが、他のすべてのDROP動作に使用できる。別の実施形態では、システムは、複数のレコードが所定の閾値量を超えて連続的であるかどうかに基づいて、遅延削除プロセスを選択することができる。
【0046】
本願で開示される主題の実装は、多様なコンポーネントおよびネットワークアーキテクチャーにおいて実装され、それらとともに使用されうる。図4は、本願で開示される主題の実装を実装するのに好適なコンピューティング装置600の一例である。装置600は、複数のコンピュータのネットワークにおける単一のコンピュータであってもよい。図4に示されるように、コンピュータ600は、中央コンポーネントまたは分散コンポーネント700(たとえば、サーバー、クラウドサーバー、データベース、クラスター、アプリケーション・サーバーなど)と通信することができる。中央コンポーネント700は、記憶装置810を含んでいてもよい第2コンピュータ800のような一つまたは複数の他のコンピュータと通信することができる。第2のコンピュータ800は、サーバー、クラウドサーバーなどであってもよい。記憶810は、たとえば、ハードディスクドライブ、ソリッドステートドライブ、光媒体、フラッシュメモリ、テープドライブ、レジスタ、およびランダムアクセスメモリ等またはそれらの任意の組み合わせを含む任意の好適な揮発性および不揮発性物理的記憶媒体の任意の好適な組み合わせを使用することができる。
【0047】
上記で論じたレコードのようなデータは、任意の好適なファイルシステムまたは記憶スキームもしくは階層構造を使用して、たとえば記憶810内に、任意の好適なフォーマットで記憶されうる。たとえば、記憶810は、上述したような複数のレベルを有するログ構造化マージ(LSM)ツリーを用いてデータを記憶することができる。さらに、図4図5に示されるシステムがマルチテナント・システムである場合、記憶は、テナントのためのデータベースの各インスタンスについて、別個のログ構造化マージ・ツリーに編成されてもよい。あるいはまた、特定のサーバーまたはシステム上のすべてのレコードの内容が、単一のログ構造化マージ・ツリー内に格納されてもよく、その場合、レコードのバージョンに関連付けられた一意的なテナント識別子が、各テナントのためのデータの間の区別をするために使用されてもよい。より最近のトランザクションはツリーの最も高いまたは最上位のレベルに格納されてもよく、より古いトランザクションはツリーの最下位レベルに格納されてもよい。あるいはまた、各レコードの最新のトランザクションまたはバージョンは、ツリーの最も高いレベルに格納されてもよく、以前のバージョンまたは以前のトランザクションは、ツリーの、より低いレベルに格納されてもよい。
【0048】
中央コンポーネント700におよび/または中央コンポーネント700から得られた情報は、コンピュータ600がコンピュータ800と情報を共有しないように、各コンピュータについて隔離されてもよい。代替的または追加的に、コンピュータ600は、第2のコンピュータ800と直接通信してもよい。
【0049】
コンピュータ(たとえば、ユーザーコンピュータ、企業コンピュータ等)600は、中央プロセッサ640、メモリ670(典型的には、RAMだが、ROM、フラッシュRAM等を含むこともできる)、入力/出力コントローラ680、ディスプレイまたはディスプレイアダプターを介したタッチスクリーンのようなユーザーディスプレイ620、ユーザー入力インターフェース660(キーボード、マウス、WiFi/セルラー無線、タッチスクリーン、マイクロフォン/スピーカー等のような一つまたは複数のコントローラおよび関連するユーザー入力または装置を含んでいてもよく、I/Oコントローラ680に密接に結合されていてもよい)、ハードドライブ、フラッシュ記憶、ファイバーチャネル・ネットワーク、SAN装置、SCSI装置等のような固定記憶630、および光ディスク、フラッシュドライブ等を制御し、受け入れるように動作するリムーバブルメディア・コンポーネント650といったコンピュータ600の主要構成要素と相互接続するバス610を含む。
【0050】
バス610は、前述したように、中央プロセッサ640とメモリ670との間のデータ通信を可能にし、該メモリは、読み出し専用メモリ(ROM)またはフラッシュメモリ(いずれも図示せず)、およびランダムアクセスメモリ(RAM)(図示せず)を含んでいてもよい。RAMは、オペレーティング・システムおよびアプリケーション・プログラムがロードされるメイン・メモリを含むことができる。ROMまたはフラッシュメモリは、他のコードの中でも、周辺コンポーネントとの相互作用のような基本的なハードウェア動作を制御する基本入出力システム(BIOS)を含むことができる。コンピュータ600に常駐するアプリケーションは、ハードディスクドライブ(たとえば、固定記憶630)、光学ドライブ、フロッピーディスク、または他の記憶媒体650のようなコンピュータ読み取り可能媒体上に記憶され、これを介してアクセスされることができる。
【0051】
固定記憶630は、コンピュータ600と一体であってもよいし、あるいは別個であって他のインターフェースを通じてアクセスされてもよい。ネットワークインターフェース609は、インターネットサービスプロバイダー(ISP)を介したインターネットへの電話リンクを介して遠隔サーバーへの直接接続を、またはPOP(ポイントオブプレゼンス)または他の技法を介したインターネットへの直接ネットワークリンクを介して遠隔サーバーへの直接接続を提供することができる。ネットワークインターフェース609は、デジタルセルラー電話接続、セルラー・デジタル・パケット・データ(Cellular Digital Packet Data、CDPD)接続、デジタル衛星データ接続などを含む無線技術を使用して、そのような接続を提供してもよい。たとえば、ネットワークインターフェース690は、図5に示されるように、一つまたは複数のローカル、広域、または他のネットワークを介して、コンピュータが他のコンピュータと通信できるようにしうる。
【0052】
多くの他の装置またはコンポーネント(図示せず)が、同様の仕方で接続されうる(たとえば、データ・キャッシュ・システム、アプリケーション・サーバー、通信ネットワーク・スイッチ、ファイアウォール・デバイス、認証および/または許可サーバー、コンピュータおよび/またはネットワーク・セキュリティ・システムなど)。逆に、本開示を実施するために、図4に示される構成要素のすべてが存在する必要はない。これらの構成要素は、図示されたものとは異なる仕方で相互接続されることができる。本開示を実装するためのコードは、メモリ670、固定記憶630、リムーバブル・メディア650のうちの一つまたは複数といったコンピュータ読み取り可能記憶媒体に、または遠隔記憶位置に記憶することができる。
【0053】
図5は、開示された主題のある実装による例示的なネットワーク構成を示す。クラウド1202によって表わされるネットワーク内の異なるノードにおける4つの別個のデータベース・システム1200a~1200dが、ネットワークリンク1204を通じて互いに、およびユーザー(図示せず)と通信する。データベース・システム1200のそれぞれは、データベースの複数のインスタンスをホストするように動作可能であってもよく、各インスタンスは、特定のテナントに関連するユーザーにとってのみアクセス可能である。データベース・システムのそれぞれは、ストレージ・エリア・ネットワーク(図示せず)、ロード・バランサーおよびバックアップ・サーバーとともに、ファイアウォール、他のセキュリティ・システムおよび認証システムとともに、コンピュータのクラスターを構成することができる。システム1200のいずれかにおける前記インスタンスのいくつかは、データを摂取し該インスタンス内での記憶のために提供するために、ユーザーから、またはコンピューティング要素(図示せず)から受け取ったトランザクションを処理し、コミットするライブまたはプロダクション・インスタンスであってもよい。
【0054】
データベース・システム、たとえば、1200cは、図4のような少なくとも1つの記憶装置を含んでいてもよい。たとえば、該記憶は、メモリ670、固定記憶630、リムーバブル・メディア650、中央コンポーネント700および/または第2のコンピュータ800に含まれる記憶装置、および/またはデータベース・システム1200a~1200dのうちの一つまたは複数に関連付けられた一つまたは複数の記憶装置を含んでいてもよい。
【0055】
いくつかの実装では、図4図5に示される一つまたは複数のサーバーは、ログ構造化マージ・ツリー・データ構造を使用して、前記少なくとも1つの記憶装置の不変記憶(たとえば、中央コンポーネント700、第2のコンピュータ800、および/またはデータベース・システム1200a~1200dに付随する記憶装置)にデータを記憶することができる。
【0056】
開示された主題のシステムおよび方法は、単一テナントおよび/またはマルチテナントのシステムのためであってもよい。マルチテナント・システムは、さまざまなテナント(たとえば、ユーザー、ユーザーのグループ、または組織でありうる)が、該さまざまなテナント間で共有されうるサーバー・システム上のソフトウェアツールまたはインスタンスを通じて、サーバー・システム上の自分自身のレコードにアクセスすることを許容しうる。各テナントについてのレコードの内容は、そのテナントについてのデータベースの一部でありうる。複数のテナントのレコードの内容は、すべて、同じサーバー・システム内に一緒に記憶されてもよいが、各テナントは、そのテナントに属する、またはそのテナントによって作成されたレコードの内容にのみアクセスすることができうる。これにより、サーバー・システムは、各テナントのレコードの内容を別々に、たとえば別々のサーバーまたはサーバー・システム上に記憶する必要なく、マルチテナントを可能にすることができる。テナントのためのデータベースは、たとえば、リレーショナルデータベース、階層データベース、または任意の他の好適なデータベースタイプであってもよい。サーバー・システム上に記憶されるすべてのレコードは、たとえばLSMツリーを含む任意の好適な構造に記憶されうる。
【0057】
さらに、マルチテナント・システムは、各ノードにコンピューティング・システムを有するネットワーク全体に分散されたサーバー・システム上にさまざまなテナント・インスタンスを有していてもよい。各テナントのライブまたはプロダクション・データベース・インスタンスは、1つの特定のコンピュータ・システムにおいてそのトランザクションを処理させてもよい。そのインスタンスのトランザクションを処理するコンピューティング・システムは、他のテナントのための他のインスタンスのトランザクションも処理することができる。
【0058】
詳細な説明のいくつかの部分は、コンピュータメモリ内のデータに対する操作の図または記号的表現の観点で提示される。これらの図、説明および表現は、データ処理技術の当業者によって、自らの仕事の内容を他の当業者に最も効果的に伝達するために一般的に使用される。コンピュータに実装されたプロセスは、ここで、また一般に、所望の結果につながる自己無矛盾な一連のステップであると考えられる。それらのステップは、物理量の物理的操作を必要とするステップである。必ずではないが通例、これらの量は、記憶され、転送され、組み合わされ、他の仕方で操作されることが可能な電気的もしくは磁気的な信号の形を取る。主に慣用の理由により、時に、これらの信号を、ビット、値、要素、シンボル、キャラクタ、項、数などと称することが便利であると判明している。
【0059】
しかしながら、これらおよび同様の用語のすべては、適切な物理量に関連しており、そうした物理量に適用される便宜上のラベルでしかないことを留意すべきである。そうでないことが明確に述べられるのでない限り、上述の議論から明白なように、本稿を通じて、「書き込み」、「読み取り」、「受領」、「伝送」、「修正」、「更新」、「送信」などの用語を利用する議論は、コンピュータ・システムのレジスタおよびメモリ内の物理的(たとえば電子的)量として表わされたデータを操作して、コンピュータ・システムのメモリもしくはレジスタまたは他のそのような情報記憶、伝送もしくは表示装置内の物理的量として同様に表わされる他のデータに変換する、コンピュータ・システムまたは類似の電子コンピューティング装置のアクションおよびプロセスを指すことが理解される。
【0060】
さらにより一般的には、本願で開示される主題のさまざまな実装は、それらのプロセスを実施するためのコンピュータ実装されるプロセスおよび装置を含んでいてもよく、またはそれらの形で実装されてもよい。実装はまた、フロッピーディスケット、CD-ROM、ハードドライブ、USB(ユニバーサルシリアルバス)ドライブ、または他の任意の機械可読記憶媒体のような非一時的なおよび/または有形の媒体に実装された命令を含むコンピュータ・プログラム・コードを有するコンピュータ・プログラム製品の形で実装されてもよく、コンピュータ・プログラム・コードがコンピュータにロードされ、コンピュータによって実行されると、コンピュータは開示された主題の実装を実施するための装置となる。実装はまた、コンピュータ・プログラム・コードの形で実装されてもよく、これはたとえば、記憶媒体に記憶されるか、コンピュータにロードされ、かつ/または、コンピュータによって実行されるか、または、電気配線もしくはケーブルを介して、ファイバー・オプティクスを通じて、または、電磁放射を介してなど、何らかの伝送媒体を通じて伝送されるかによらない。コンピュータ・プログラム・コードが、コンピュータにロードされ、コンピュータによって実行されると、そのコンピュータが、開示される主題の実装を実施するための装置となる。汎用マイクロプロセッサ上に実装されるとき、コンピュータ・プログラム・コードのセグメントが、特定の論理回路を作り出すようにマイクロプロセッサを構成する。いくつかの構成では、コンピュータ可読記憶媒体上に記憶された一組のコンピュータ可読命令は、汎用プロセッサによって実装することができ、汎用プロセッサまたは汎用プロセッサを含む装置を、前記命令を実装または実行するように構成された特殊目的の装置に変換することができる。実装は、開示される主題の実装に従った技法の前部または一部をハードウェアおよび/またはファームウェアにおいて実装する汎用マイクロプロセッサおよび/または特定用途向け集積回路(ASIC)などのプロセッサを含みうるハードウェアを使用して実装されてもよい。プロセッサは、RAM、ROM、フラッシュメモリ、ハードディスク、または電子的な情報を記憶することができる他の任意のデバイスなどのメモリに結合されてもよい。メモリは、開示された主題の実装に従った技法を実行するために、プロセッサによって実行されるように適合された命令を記憶してもよい。
【0061】
上記の記述は、説明のために、具体的な実装を参照して記載されている。しかしながら、上記の例示的な議論は、網羅的であることも、あるいは開示される主題の実装を開示された厳密な形に限定することも意図していない。上記の教示に鑑み、多くの修正および変形が可能である。実装は、開示された主題の実装の原理およびその実際の適用を説明し、それにより、当業者が、それらの実装ならびに考えられている具体的な用途に適しうるさまざまな修正をもった様々な実装を利用できるようにするために選択され、記載されたのである。
図1
図2
図3
図4
図5