投稿者

インターシステムズジャパン
記事 Toshihiko Minamoto · 4月 14 11m read

インメモリデータベースとキーバリューストアに勝る優れた代替手段

序言

極めて高いパフォーマンスが求められるアプリケーションにおいて、企業はしばしばインメモリデータベースやキーバリューストア(キャッシュ層)を採用します。しかしながら、インメモリデータベースは総所有コストが高く、スケーラビリティにも限界があり、メモリ制限を超えた場合には信頼性の問題や再起動の遅延が生じます。インメモリキーバリューストアも同様の制約を抱えるだけでなく、アーキテクチャの複雑さやネットワーク遅延といった新たな課題をもたらします。

本記事では、高パフォーマンスのSQLおよびNoSQLアプリケーションにおいて、InterSystems IRIS™データプラットフォームがインメモリデータベースやキーバリューストアに比べ優れた選択肢である理由についてご説明いたします。

パフォーマンスと効率性のレベルアップ

InterSystems IRISは、同時データ取り込みおよび分析処理において、インメモリデータベースやキャッシュ層の性能に匹敵、あるいはそれを上回る唯一の永続データベースです。市販されているハードウェア上において、ネットワーク遅延を発生させることなく、1マイクロ秒未満で着信トランザクションの処理、データのディスクへの永続化、分析のためのインデックス作成を実現します。

InterSystems IRISの取り込みパフォーマンスは、そのマルチディメンショナルデータエンジンに一部起因しております。このエンジンにより、豊富なデータ構造において効率的かつコンパクトな保存が可能となります。二次元テーブルではなく、効率的なマルチディメンショナルデータモデルと疎な保存技術を採用することで、ランダムなデータアクセスやアップデートを非常に高いパフォーマンスで実現し、少ないリソースとディスク容量で運用できます。伝統的なTCP/IPアクセスAPIに加え、インメモリおよびインプロセスAPIも提供し、取り込みパフォーマンスを最適化します。

インターシステムズは、パフォーマンスと効率性をさらに最適化する独自の技術「エンタープライズ・キャッシュ・プロトコル」(ECP)を開発いたしました。本技術は、データ取り込みから利用に至るまでのマルチサーバー環境におけるデータフローを調整します。これにより、SQL、C++/C#、Java、Python、Node.jsをはじめとする一般的なプログラミング言語を通じて、ネットワーク上でのデータの複製やブロードキャストを必要とせず、環境内の全データへの完全なアクセスを可能にいたします。

ECPは分散システム内のサーバーがアプリケーションサーバーとデータサーバーの両方として機能することによって、ワークロードの種類(トランザクション処理や分析クエリなど)に応じてデータリソースとコンピューティングリソースを独立して拡張可能にし、リモートデータベースをローカルデータベースのように動的にアクセスできるようにします。システムのサーバーのうち、データのプライマリ所有権を保持する必要があるのはごく一部のみです。分析要件が増加した場合、アプリケーションサーバーを即座に追加することが可能です。同様に、ディスクのスループットがボトルネックとなった場合、データサーバーを追加することも可能です。データは再パーティションされますが、アプリケーションは不変の論理ビューを維持します。

分散システム内の各ノードは、自身のディスクシステムに存在するデータ、または他のデータサーバーから転送されたデータに対して操作を行うことが可能です。クライアントがデータを要求した場合、アプリケーションサーバーはまずローカルキャッシュからその要求を満たそうと試みます。データがローカルでない場合、アプリケーションサーバーはリモートデータサーバーに要求を送信します。その後、データはローカルアプリケーションサーバーにキャッシュされ、そのサーバー上で動作する全てのアプリケーションが利用可能となります。ECPはネットワーク全体におけるキャッシュの一貫性と整合性を自動的に管理します。

その結果、InterSystems IRISは、データを複製することなく、非常に大規模なデータセットに対する複雑な分析クエリを可能にします。これには、異なるノードやシャードに分散されたデータにアクセスできる結合を、極めて高いパフォーマンスで、かつデータのブロードキャストなしに実行する機能が含まれます。

ECPの使用は透過的であり、アプリケーションの変更や特別な技術は一切必要ありません。アプリケーションは、データベース全体をローカルにあるかのように扱うだけです。

世界有数の投資銀行において、同社のデータとクエリを用いた競争的テストを実施した結果、InterSystems IRISは主要な商用インメモリデータベースを常に上回る性能を発揮しました。より少ないハードウェア(仮想マシン4台、コア8基、RAM 96GB)で、約10倍のデータを分析(320GB対33GB)することに成功し、仮想マシン8台、コア16基、RAM 256GBを必要とする他社製品を上回りました。

永続的なデータストアを通じた信頼性の向上

InterSystems IRISに組み込まれているのは永続的なデータストアであり、常に最新の状態を維持しております。InterSystems IRISは、ディスク上の全データを高速なランダムアクセスに最適化された形式で、常に最新の状態に自動維持いたします。

対照的に、インメモリデータベースには永続的なデータストアが存在しません。その結果、すべてのデータは利用可能なメモリ内に収まる必要があり、さらに新しいデータを取り込み、分析ワークロードを処理するための十分なメモリが確保されていなければなりません。利用可能なメモリは、データ量やクエリ量(あるいはその両方)の予期せぬ増加により枯渇する可能性があります。クエリ(特に大きな分析クエリ)は、実行中および結果を生成する際にメモリを消費します。利用可能なメモリが枯渇すると、処理は停止します。

金融サービス企業における取引アプリケーションなど、ミッションクリティカルなアプリケーションにおいては、取引の消失や遅延、サービス停止は壊滅的な結果を招く可能性があります。インメモリデータベースでは、メモリの内容は定期的にチェックポイントファイルに書き込まれ、その後のデータは先行書き込みログ(WAL)ファイルに保存されます。停止後のプロセス状態を回復するには、チェックポイントファイルとWALファイルの取り込みおよび処理が必要となり、データベースがオンラインに戻るまでに数時間を要する場合があります。

InterSystems IRISでは、回復は即時に行われます。永続データベースにより、サーバーが停止またはクラッシュしてもデータは失われません。アプリケーションは単に別のサーバーまたはディスクからデータにアクセスし、処理を継続します。これにより、データベースの回復やデータベース状態の再構築が一切不要となります。

インテリジェントバッファリングによるスケーラビリティの向上

InterSystems IRISは、インメモリデータベースのようなハードなスケーラビティの制限を持たないため、使用可能なメモリの総量に制約されません。インテリジェントなバッファ管理により、よく使用されるデータはメモリ内に保持し、それ以外データはディスクから必要に応じて迅速にアクセスします。また、アクセス頻度の低いデータは定期的に削除することで、必要に応じてメモリを解放します。 これに対し、インメモリデータベースは、二度とアクセスされない可能性のあるデータも含め、すべてのデータをワーキングメモリ内に保持し続ける必要があります。

InterSystems IRISでは、1台のマシンシステム上でデータがキャッシュに存在しない場合、単にディスクから取得されます。分散環境においては、データがローカルキャッシュに存在しない場合、InterSystems IRISに基づくアプリケーションは自動的に、そのデータを所有するデータノードのキャッシュから取得を試みます。もしそのノードのキャッシュにもデータが存在しない場合、ディスクから取得されます。使用可能なメモリが完全に消費された場合、インテリジェントバッファリングにより、最近使用頻度の低いデータが優先的に削除され、新しいデータや処理タスクのためのメモリが確保されます。

メモリ制限がないため、InterSystems IRISベースのシステムは、取り込み速度や分析ワークロードの予期せぬ急増にも対応でき、ペタバイト規模のデータ処理に拡張可能です。インメモリデータベースではそれができません。

総所有コストの削減

メモリはディスクよりもコストが高いことから、InterSystems IRISベースのアプリケーションを運用することで、インメモリ型アプローチと比較してハードウェアコストの削減と総所有コストの低減が実現されます。多くのインメモリシステムでは、コンピュータのクラッシュによる影響から保護するため、別々のマシン上にデータの冗長コピーを保持しており、これがさらなるコスト増加要因となります。

インメモリ・キーバリューストア

特定の企業では、ストレージエンジンとアプリケーションサーバーの間に独立したキャッシュ層としてインメモリのキーバリューストアを運用し、高性能アプリケーションを処理しております。しかしながら、このアプローチはいくつかの理由から、急速に魅力を失いつつあります。

アーキテクチャの複雑さ

アプリケーションは、各レイヤーにおけるデータの冗長な表現を管理するとともに、キャッシュおよびデータベースとの統合と同期化を処理する必要があります。例えば、アプリケーションコードはまず、必要なデータがキャッシュレイヤーにあるかどうかを確認するためのルックアップを実行します。データがキャッシュレイヤーに存在しない場合、アプリケーションはSQLクエリを実行してデータベースからデータにアクセスし、アプリケーションロジックを実行した後、結果をキャッシュレイヤーに書き込み、その内容をデータベースと同期化します。

CPUコストの増加

キャッシュ層(文字列やリストを扱う)とアプリケーションコードの間には本質的な不整合が存在します。したがって、アプリケーションはキャッシュ内の構造体とアプリケーション層の構造体との間でデータを継続的に変換する必要があり、CPUコストの増加に加え、開発者の労力と複雑さも増大します。

遅延

アプリケーションサーバーとキャッシュ層間のリクエストはネットワーク経由で行われることから、このアプローチではネットワークトラフィックが増加し、アプリケーションに追加の遅延が生じます。

実際、最近の研究論文において、Googleとスタンフォード大学のエンジニアは「[リモート・インメモリ・キーバリューストア]の時代は既に過ぎ去った」と主張しています。その理由として、ドメインに依存しないAPI(例:PUT/GET)が複雑性をアプリケーション側に押し戻し、余分な(アン)マーシャリングのオーバーヘッドやネットワークホップを招くためです。1 InterSystems IRISは、これらのリモートキャッシュ層と比較して優れたパフォーマンスと効率性を提供すると同時に、アーキテクチャおよびアプリケーションの複雑さを低減します

結論

インメモリデータベースおよびキャッシュ層を主に使用する理由は、パフォーマンスの向上にあります。しかしながら、その高速性にもかかわらず、これらにはすべて制限が存在します。具体的には、ハードなスケーラビリティの限界、信頼性の問題、メモリ制限超過時の再起動遅延、アーキテクチャおよびアプリケーションの複雑化、そして高い総所有コストなどが挙げられます。InterSystems IRISは、インメモリデータベースやキャッシュと同等あるいはそれ以上のパフォーマンスを提供しながら、それらの制限を一切伴わない唯一の永続データベースです。これらの特長により、InterSystems IRISはミッションクリティカルな高性能アプリケーションにとって優れた選択肢となります。


関連する記事は:

Source: インメモリデータベースとキーバリューストアに勝る優れた代替手段