自动模式模式(MongoDB 中模式持久化)
Overview
--schemaSource
选项指示mongosqld
使用已连接MongoDB实例上的特定数据库进行模式存储。 mongosqld
可以创建用于模式存储的新数据库,也可以使用现有数据库。
如果您指定先前已用于模式存储的现有数据库,则--schemaMode
选项将确定mongosqld
是将新模式数据写入指定数据库还是仅从该数据库读取。 如果指定当前不存在的数据库,则必须将--schemaMode
设置为auto
。
以下示例命令使用名为sampleDb
的数据库来存储模式信息,并将--schemaMode
设置为auto
。
mongosqld --schemaSource sampleDb --schemaMode auto
要了解有关采样模式的更多信息,请参阅采样模式参考图。
重新生成模式
默认情况下, mongosqld
在生成模式后不会自动对数据进行重新采样。 指定--schemaRefreshIntervalSecs
选项以指示mongosqld
自动对数据进行重采样并按固定安排重新生成模式。
要强制对模式进行一次性更新,请在 SQL 客户端中使用 FLUSH SAMPLE 命令。
持久化模式的用户权限
如果您的 MongoDB 实例使用身份验证,则除了缓存采样中所述的权限外,您还必须指定对指定模式数据库具有写入权限的 MongoDB 用户。
要创建具有运行具有持久模式的mongosqld
所需权限的用户,您可以创建具有所需最低权限的自定义角色(如缓存采样的用户权限中所述),或使用内置的 readAnyDatabase角色。 无论哪种情况,用户还需要对指定模式数据库的写入权限。
db.getSiblingDB("admin").createUser( { user: "<username>", pwd: "<password>", roles: [ { "role": "readAnyDatabase", "db": "admin" }, { "role": "readWrite", "db": "<dbname>" } ] } )
在以下示例中,名为bicUser
、密码为myPass
的用户提供档案以读取和更新名为schemaDb
的模式数据库。
mongosqld --auth -u bicUser -p myPass --schemaSource schemaDb --schemaMode auto