自動スキーマ モード(MongoDB でのスキーマの永続化)
Overview
--schemaSource
オプションは、スキーマ ストレージ用に接続された MongoDB インスタンス上の特定のデータベースを使用するようにmongosqld
に指示します。 mongosqld
では、スキーマ ストレージに使用する新しいデータベースを作成するか、既存のデータベースを使用できます。
スキーマ ストレージに過去に使用された既存のデータベースを指定する場合、 --schemaMode
オプションによって、 mongosqld
が指定されたデータベースに新しいスキーマ データを書込むか、読み取りのみを行うかが決まります。 現在存在しないデータベースを指定する場合は、 --schemaMode
をauto
に設定する必要があります。
次のサンプルコマンドでは、 sampleDb
という名前のデータベースを使用してスキーマ情報を保存し、 --schemaMode
をauto
に設定します。
mongosqld --schemaSource sampleDb --schemaMode auto
サンプリング モードの詳細については、「サンプリング モード参照チャート 」を参照してください。
スキーマを再生成する
デフォルトでは、 mongosqld
はスキーマ生成後にデータを自動的に再サンプリングしません。 --schemaRefreshIntervalSecs
オプションを指定すると、 mongosqld
にデータを自動的に再サンプリングし、固定スケジュールでスキーマを再生成するように指示します。
スキーマの 1 回限りの更新を強制するには、SQL クライアントから FLUSH SAMPLE コマンドを使用します。
永続化スキーマのユーザー権限
MongoDB インスタンスが認証を使用する場合は、キャッシュされたサンプリングで説明されている権限に加えて、指定されたスキーマ データベースに対する書込み権限を持つ MongoDB ユーザーを指定する必要があります。
永続化スキーマでmongosqld
を実行するために必要な権限を持つユーザーを作成するには、「キャッシュされたサンプリングのユーザー権限 」で説明されているように、必要な最小限の権限を持つカスタムロールを作成するか、組み込みの readAnyDatabaseロールを使用します。 いずれの場合も、指定されたスキーマ データベースに対する書込み (write) 権限も必要です。
db.getSiblingDB("admin").createUser( { user: "<username>", pwd: "<password>", roles: [ { "role": "readAnyDatabase", "db": "admin" }, { "role": "readWrite", "db": "<dbname>" } ] } )
次の例では、パスワードmyPass
を使用するbicUser
という名前のユーザーが、 schemaDb
というスキーマ データベースから読み取りと更新を行うための認証情報を提供します。
mongosqld --auth -u bicUser -p myPass --schemaSource schemaDb --schemaMode auto