インメモリデータベースは、主に内部メモリを使用してデータストレージする目的別データベースです。標準のディスクドライブ (SSD) にアクセスする必要がないため、応答時間を最小限に抑えることができます。インメモリデータベースは、ゲームリーダーボード、セッションストア、リアルタイムデータ分析などの、マイクロ秒の応答時間を必要としたり、トラフィックが急増するアプリケーションに最適です。メインメモリデータベース (MMDB)、インメモリデータベースシステム (IMDS)、およびリアルタイムデータベースシステム (RTDB) という用語も、インメモリデータベースを指します。

インメモリデータベースの利点

インメモリデータベースには、以下で詳しく説明するいくつかの利点があります。

低レイテンシー、リアルタイム応答を提供

レイテンシーは、データへのアクセス要求からアプリケーションの応答までのタイムラグのことです。インメモリデータベースは、規模に関係なく予測可能な低レイテンシーを実現します。マイクロ秒単位の読み取りレイテンシー、1 桁のミリ秒単位の書き込みレイテンシー、および高スループットを提供します。

その結果、インメモリストレージにより、企業はデータに基づいた意思決定をリアルタイムで行うことができます。手遅れになる前に、データを処理して変更に対応するアプリケーションを設計できます。たとえば、自動運転車のセンサーデータをインメモリで計算することで、急ブレーキの瞬時の応答が可能になります。

高スループット

インメモリデータベースはスループットが高いことで知られています。スループットとは、特定の期間における読み取り (読み取りスループット) または書き込み (書き込みスループット) 操作の数を指します。例としては、1 分あたりのバイト数や 1 秒あたりのトランザクション数などがあります。

高いスケーラビリティ

インメモリデータベースをスケーリングして、変動するアプリケーション需要に対応できます。パフォーマンスに悪影響を及ぼすことなく、書き込みと読み取りの両方のスケーリングが可能です。データベースはオンラインのままであり、サイズ変更中も読み取り/書き込み操作をサポートします。

インメモリデータベースのユースケース

インメモリデータベースは、銀行、通信、ゲーム、モバイル広告業界に適しています。以下に、インメモリデータベースのユースケースをいくつか示します。

キャッシュ

キャッシュは、通常は一時的なデータのサブセットを保存する高速データストレージレイヤーです。キャッシュの主な目的は、基盤となる低速なストレージレイヤーにアクセスする必要を減らすことによって、データ取得のパフォーマンスを向上させることです。つまり、そのデータに対する今後のリクエストは、データのプライマリストレージにアクセスするよりも高速に処理されます。

キャッシュにより、以前に取得または計算されたデータを効率的に再利用できるようになります。インメモリデータストレージは、キャッシュされたデータにすばやくアクセスするのに適しています。キャッシュは耐久性と応答時間のトレードオフになります。データはメモリから取得されるので応答時間は速くなりますが、キャッシュではメモリ内のデータが失われることを防ぐことはできません。そのため、キャッシュはディスクベースの耐久性の高いデータベースと組み合わせて使用されることがよくあります。

リアルタイム入札

リアルタイム入札とは、オンライン広告インプレッションを売買することです。入札は通常、ユーザーがウェブページを読み込んでいる間、100~120 ミリ秒、時には 50 ミリ秒もの速さで行われます。この時間の中で、リアルタイム入札アプリケーションは、すべての購入者の広告スポットへの入札を要求し、複数の条件に基づく落札価格の選択し、オファーの表示し、広告表示後の情報を収集します。インメモリデータベースは、ミリ秒未満のレイテンシーでリアルタイムデータの取り込み、プロセス、分析をするのに最適です。

ゲームのリーダーボード

ゲームの相対リーダーボードでは、同じようなレベルの他のプレイヤーに相対したゲーマーのポジションが表示されます。これらのリーダーボードは、プレイヤー間のエンゲージメントを構築し、ゲーマーがトッププレイヤーとの比較でモチベーションを下げないようにするのに役立ちます。数百万人のプレイヤーがいるゲームでは、インメモリデータベースがソート結果を迅速に提供し、リーダーボードをリアルタイムで更新します。

インメモリキャッシュの仕組み

インメモリキャッシュは、ランダムアクセスメモリ (RAM) を使用してデータを保存します。このテクノロジーは、データテーブルを外付けドライブではなく RAM に直接保存します。特殊なデータ構造により、データレコードのインデックスを作成できます。インデックスは、特定の行と列への直接ポインタとして機能します。ただし、実際の物理データは圧縮されており、非リレーショナル形式です。アクセス要求を行うと、データベースはインデックスを使用して正確なデータ値にナビゲートします。保存されたデータは、いつでも直接使用できる形式で利用できます。

64 ビットコンピューティング、低価格の RAM、マルチコアサーバーなどにより、インメモリストレージがより一般的になっています。さらに、クラウドベースのデータストアでは、必要に応じて RAM リソースをスケールアップまたはスケールダウンできるため、インメモリテクノロジーの柔軟性とアクセス性が向上します。

インメモリキャッシュと従来のディスクベースのデータベースの違い

従来のデータベースは、すべてのデータを外部ディスクドライブまたはソリッドステートドライブに保存します。すべての読み取り/書き込み操作にはディスクアクセスが必要です。逆に、インメモリキャッシュはデータの永続性を優先しません。たとえば、キャッシュは定期的に外部ストレージメディアにのみデータを保存できます。インメモリキャッシュと従来のデータベースの違いを以下にまとめました。

インメモリキャッシュとインメモリデータベースの違い

インメモリキャッシュでは、書き込みが永続化されないためパフォーマンスが向上し、データの永続化に必要な余分な時間がなくなります。インメモリデータベースは書き込みを永続化するため、データ変更の耐久性が高まります。この耐久性の代償として、書き込みのパフォーマンスが低下します。ただし、インメモリデータベースは、依然としてディスクベースのデータベースよりもパフォーマンスが優れています。パフォーマンスの観点から見ると、これらはインメモリキャッシュとディスクベースのデータベースの中間に位置します。

インメモリキャッシュの制限

すべてのデータはメモリにのみ保存および管理されているので、インメモリキャッシュは処理やサーバー障害によってデータが失われてしまうリスクがあります。耐久性を向上させるために、インメモリキャッシュはデータをディスクデータベースに定期的に保存する場合があります。以下では、耐久性を向上させるためのメカニズムを詳しく説明します。

スナップショットファイル

スナップショットファイルには、特定の時点でのデータベースの状態が記録されます。インメモリキャッシュは、定期的に、または制御されたシャットダウン中にスナップショットを生成します。スナップショットを作成すると耐久性がある程度向上しますが、スナップショット間でデータが失われる可能性があります。

トランザクションロギング

トランザクションロギングは、データベースへの変更を外部のジャーナルファイルに記録します。ロギングはデータの読み取り/書き込みに依存せず、パフォーマンスには影響しません。ジャーナルファイルは、インメモリキャッシュの自動回復を容易にします。

レプリケーション

インメモリキャッシュの中には、高可用性を実現するために冗長性に依存しているものがあります。同じデータの複数のコピーを異なるメモリモジュールに保存します。モジュールに障害が発生すると、複製されたバックアップコピーに自動的にフェイルオーバーされます。これにより、キャッシュによるデータ損失のリスクが軽減されます。

AWS がインメモリキャッシュとデータベースの要件をサポートする方法

AWS では、お客様の特定のニーズに合わせて、フルマネージド型のインメモリキャッシュとデータベースサービスをいくつか提供しています。

インメモリデータベース

Amazon MemoryDB for Redis

Amazon MemoryDB for Redis は、耐久性のあるインメモリデータベースサービスで、超高速なパフォーマンスを実現します。一般的なオープンソースのデータストアである Redis と互換性があります。これにより、お客様は、現在すでに使用しているのと同じ柔軟で使いやすい Redis データ構造、API、コマンドを使用してアプリケーションをすばやく構築できます。また、MemoryDB は、マルチ AZ トランザクションログを使用して、複数のアベイラビリティーゾーン (AZ) にわたってデータを永続的に保存し、高速なフェイルオーバー、データベースリカバリ、およびノードの再起動を可能にします。

インメモリキャッシュ

Amazon ElastiCache for Redis

Amazon ElastiCache for Redis は、マイクロ秒のレイテンシーを実現する非常に高速なインメモリキャッシングサービスで、インターネット規模のリアルタイムアプリケーションを強化できます。デベロッパーは、ElastiCache for Redis を、インメモリキャッシュとして、あるいは高いデータ耐久性を必要としないユースケースとして使用することができます。ElastiCache for Redis のクラスター設定サポートは、単一クラスターのインメモリキャパシティで最大 6.1 TB で Redis のワークロードを実行することができます。ElastiCache for Redis では、実行中のクラスターにシャードの追加や削除を実行する機能が提供されています。Redis クラスターのワークロードを動的にスケールアウトまたはスケールインして、需要の変化に適応できます。

Amazon ElastiCache for Memcached

Amazon ElastiCache for Memcached は、Memcached と互換性のあるインメモリの key-value キャッシュサービスです。Memcached と同じ高いパフォーマンス、使いやすさ、シンプルさを提供します。スケーラブルで安全性に優れたフルマネージド型の ElastiCache for Memcached は、頻繁にアクセスされるデータをメモリ内に置く必要があるユースケースに最適です。

今すぐ無料のアカウントを作成して、AWS のインメモリキャッシュまたはデータベースを使い始めましょう。

Amazon MemoryDB for Redis の紹介
Amazon ElastiCache for Redis の紹介