Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

自己管理型配置のためのインメモリ ストレージ エンジン

項目一覧

  • インメモリ ストレージ エンジンの指定
  • トランザクション(読み取りと書込み)の同時実行性
  • ドキュメント レベルの同時実行
  • メモリの使用
  • 耐久性
  • トランザクション
  • 配置アーキテクチャ

インメモリ ストレージエンジンは、64ビット ビルドの一般提供(GA)の構成要素であり、一部のメタデータと診断データを除き、構成データ、インデックス、ユーザー認証情報などのディスク上のデータを保持しません。

ディスク I/O を回避することで、インメモリ ストレージ エンジンはデータベース操作のレイテンシをより予測しやすくなります。

インメモリ ストレージ エンジンを選択するには、次のことを指定します。

  • inMemory --storageEngineオプションの場合、または構成ファイルを使用する場合はstorage.engine設定の場合。

  • --dbpath、または構成ファイルを使用する場合は storage.dbPath。インメモリ ストレージ エンジンはファイル システムにデータを書き込みませんが、--dbpath 内に小規模のメタデータ ファイルと診断データ、および大規模なインデックスを構築するための一時ファイルを保持します。

たとえば、コマンドラインから次のことを実行します。

mongod --storageEngine inMemory --dbpath <path>

または、YAML 構成ファイル形式を使用する場合は、以下を実行します。

storage:
engine: inMemory
dbPath: <path>

このストレージ エンジンに固有の構成オプションについては、「inMemory オプション」を参照してください。ジャーナリングや保管時の暗号化構成など、データの永続性に関連するオプションを除き、ほとんどの mongod 構成オプションは、インメモリ ストレージ エンジンで使用できます。

警告

インメモリ ストレージ エンジンは、プロセスのシャットダウン後にデータを保持しません。

バージョン7.0以降、 MongoDB は、デフォルトのアルゴリズムを使用して、ストレージエンジンの同時トランザクション(読み取りチケットと書き込みチケット)の最大数を動的に調整します。 ストレージエンジンの同時トランザクションの動的なアルゴリズムは、クラスターの過負荷時にデータベースのスループットを最適化します。 ストレージエンジンの同時実行トランザクション(読み取りチケットと書き込みチケット)の最大数は128読み取りチケットと128書き込みチケットを超えることはなく、クラスター内のノードによって異なる場合があります。 1 つのノード内の読み取りチケットと書き込みチケットの最大数は常に同じです。

動的な最大値が超えることのできない読み取りおよび書込みトランザクション(読み取りおよび書込みチケット)の最大数を指定するには、 storageEngineConcurrentReadTransactionsstorageEngineConcurrentWriteTransactions使用します。

ストレージエンジンの同時トランザクションの動的なアルゴリズムを無効にする場合は、MongoDB テクニカル サービス エンジニアと連携するためのサポートリクエストをお申し込みください。

インメモリ ストレージ エンジンは、書込み (write) 操作にドキュメント レベルの同時実行制御を使用します。その結果、複数のクライアントがコレクションの異なるドキュメントを同時に修正することができます。

インメモリ ストレージ エンジンでは、すべてのデータ(インデックス、mongod インスタンスがレプリカセットの一部である場合の oplog などを含む)が、指定された --inMemorySizeGB コマンドライン オプションまたは YAML 構成ファイルstorage.inMemory.engineConfig.inMemorySizeGB 設定に適合する必要があります。

デフォルトで、インメモリ ストレージエンジンは物理 RAM の 50% から 1 GB を引いた量を使用します。

書込み (write) 操作によってデータが指定されたメモリ サイズを超える場合、MongoDB は次のようにエラーを返します。

"WT_CACHE_FULL: operation would overflow cache"

新しいサイズを指定するには、YAML 構成ファイル形式storage.inMemory.engineConfig.inMemorySizeGB 設定を使用します。

storage:
engine: inMemory
dbPath: <path>
inMemory:
engineConfig:
inMemorySizeGB: <newSize>

または、--inMemorySizeGB のコマンドライン オプションを使用します。

mongod --storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>

インメモリ ストレージ エンジンは非永続的であり、永続的ストレージにデータを書込みません。非永続データには、ユーザー、権限、インデックス、レプリカセット構成、シャーディングされたクラスター構成などのアプリケーション データおよびシステム データが含まれます。

そのため、ジャーナルの概念やデータが耐久性を持つまで待機するという概念は、インメモリ ストレージ エンジンには適用されません。

レプリカセットの投票ノードのいずれかが インメモリ ストレージ エンジンを使用する場合は、writeConcernMajorityJournalDefaultfalse に設定する必要があります。

注意

バージョン 4.2 以降(および 4.0.13 と 3.6.14)では、レプリカセット ノードでインメモリ ストレージ エンジン(投票または非投票)が使用され、かつレプリカセットが writeConcernMajorityJournalDefault に設定されている場合、レプリカセット ノードで起動警告がログに記録されます。

writeConcernMajorityJournalDefaultfalse に設定すると、MongoDB は書き込みを確認する前に、オンディスク ジャーナルに w: "majority" 書き込みが書き込まれるのを待たなくなります。そのため、"majority" 特定のレプリカセット内の大多数のノードでの一時的な損失(例: クラッシュおよび再起動)が発生したイベントにロールバックされる可能性があります。

書込み保証 (write concern) journaled を指定する書込み操作は、ただちに承認されます。shutdown コマンドの結果として、またはシステム エラーが原因で、mongod インスタンスがシャットダウンした場合、メモリ内のデータを回復することはできません。

トランザクションは、次のレプリカセットとシャーディングされたクラスターでサポートされます。

  • WiredTiger ストレージ エンジンを使用するプライマリ

  • セカンダリ ノードでは、WiredTiger ストレージ エンジンまたはインメモリ ストレージ エンジンのいずれかが使用されます。

注意

シャーディングされたクラスターのうち writeConcernMajorityJournalDefaultfalse に設定されているもの(インメモリ ストレージ エンジンを使用する投票ノードのあるシャードなど)ではトランザクションを実行できません。

インメモリ ストレージ エンジンを使用する mongod インスタンスは、スタンドアロンとして実行するだけでなく、レプリカセットの一部またはシャーディングされたクラスターの一部として実行することもできます。

インメモリ ストレージ エンジンを使用する mongod インスタンスを、レプリカセットの一部として配置できます。たとえば、3 つのノードのレプリカセットの一部として、次のものを持つことができます。

  • インメモリ ストレージ エンジンで実行される 2 つの mongod インスタンス。

  • WiredTiger ストレージ エンジンで実行される 1 つの mongod インスタンス。非表示ノードとして WiredTiger ノードを設定します(つまり、hidden: truepriority: 0 )。

この配置モデルでは、インメモリ ストレージ エンジンで実行される mongod インスタンスのみがプライマリになることができます。クライアントは、インメモリ ストレージ エンジンの mongod インスタンスにのみ接続します。インメモリ ストレージ エンジンで実行している mongod インスタンスの両方がクラッシュして再起動しても、WiredTiger を実行しているノードから同期できます。WiredTiger で実行されている非表示の mongod インスタンスは、ユーザー データ、インデックス、レプリケーション構成情報などのデータをディスクに保存します。

注意

インメモリ ストレージ エンジンでは、すべてのデータ( mongodがレプリカセットの一部である場合などの oplog を含む)が、指定された--inMemorySizeGBコマンドライン オプションまたはstorage.inMemory.engineConfig.inMemorySizeGB設定に適合する必要があります。 「メモリの使用 」を参照してください。

インメモリ ストレージ エンジンを使用する mongod インスタンスを、シャーディングされたクラスターの一部として配置できます。インメモリ ストレージ エンジンは、データベース操作の待ち時間をより予測しやすくするためにディスク I/O を回避します。シャーディングされたクラスターでは、シャードは 1 つの mongod インスタンスまたはレプリカセットで構成できます。たとえば、以下のレプリカセットで構成されるシャードを 1 つ持つことができます。

  • インメモリ ストレージ エンジンで実行される 2 つの mongod インスタンス

  • WiredTiger ストレージ エンジンで実行される 1 つの mongod インスタンス。非表示ノードとして WiredTiger ノードを設定します(つまり、hidden: truepriority: 0 )。

このシャードに、tag inmem を追加します。たとえば、このシャードの名前が shardC の場合、mongos に接続して sh.addShardTag() を実行します。

たとえば、

sh.addShardTag("shardC", "inmem")

他のシャードには、別のタグ persisted を追加します。

sh.addShardTag("shardA", "persisted")
sh.addShardTag("shardB", "persisted")

inmem シャードに存在すべきシャーディングされたコレクションごとに、タグ inmemassign to the entire chunk range を行います。

sh.addTagRange("test.analytics", { shardKey: MinKey }, { shardKey: MaxKey }, "inmem")

persisted シャードにまたがって存在すべきシャーディングされたコレクションごとに、タグ persistedassign to the entire chunk range を行います。

sh.addTagRange("salesdb.orders", { shardKey: MinKey }, { shardKey: MaxKey }, "persisted")

inmem シャードの場合は、データベースを作成するか、データベースを移動します。

注意

読み取り保証 (read concern) レベル "snapshot" は、インメモリ ストレージ エンジンでは正式にサポートされていません。

戻る

自己管理型シャーディングされたクラスターを WiredTiger に変更