独立运行模式(缓存采样)
Overview
2.3 版新增功能:
默认, mongosqld
对连接的MongoDB实例上的每个集合进行采样,并生成模式的关系表示,然后将其缓存在内存中。
注意
如果已启用authentication
,请确保 MongoDB 用户具有正确的权限。 请参阅下面的用户权限。
默认情况下, mongosqld
在生成模式后不会自动对数据进行重新采样。 指定--schemaRefreshIntervalSecs
选项以指示mongosqld
自动对数据进行重采样并按固定安排重新生成模式。
如果mongosqld
创建的模式不能满足 BI 工作负载需求,您可以手动生成模式文件并根据需要进行编辑。
要了解有关采样模式的更多信息,请参阅采样模式参考图。
缓存采样的用户权限
如果您的 MongoDB 实例使用身份验证,而您希望使用缓存采样,则 BI Connector 实例也必须使用身份验证。 通过mongosqld
程序连接到 MongoDB 的管理员用户必须有权读取要从中采样数据的所有命名空间。
对所有命名空间进行采样
如果要对所有命名空间进行采样,则管理员用户需要以下权限:
listDatabases
在集群上listCollections
在每个数据库上find
在每个数据库上
或者,创建具有内置readAnyDatabase角色的用户:
use admin db.createUser( { user: "<username>", pwd: "<password>", roles: [ { "role": "readAnyDatabase", "db": "admin" } ] } )
注意
在将readAnyDatabase角色授予用户之前,请了解该角色包含的所有权限。
要对所有命名空间进行采样,请启动不带 选项的 {mongosqld
--sampleNamespaces
。
mongosqld --auth --mongo-username <username> --mongo-password <password>
特定命名空间示例
如果您希望对特定命名空间进行采样,则管理员用户需要以下权限:
listCollections
对于每个对所有collection进行采样的数据库find
对所有集合进行采样的每个集合或每个数据库
或者,创建一个具有内置readAnyDatabase角色的用户。 有关创建具有此角色的用户的示例,请参阅“所有命名空间示例”部分。
注意
在将readAnyDatabase角色授予用户之前,请了解该角色包含的所有权限。
以下示例在 中创建一个 自定义角色 mongoshell,该角色具有对test
数据库中的每个集合进行采样所需的最低特权:
创建一个新用户并为其分配新创建的角色
db.createUser( { user: "<username>", pwd: "<password>", roles: [ "samplingReader" ] } )
注意
上述示例中的用户没有 权限,因此在运行listDatabases
时,您必须使用--sampleNamespaces
mongosqld
选项指定要从中示例数据的数据库。
在启用身份验证的情况下启动mongosqld
在启用身份验证的情况下运行mongosqld
,并使用--sampleNamespaces
选项对test
数据库中所有集合的数据进行采样:
mongosqld --auth --mongo-username <username> --mongo-password <password> \ --sampleNamespaces 'test.*'