跳到主要内容
版本:2.x

MongoDB

MongoDB 是一个流行的、开源 NoSQL 数据库,以灵活/可扩展的方式存储和检索数据。在创建 MongoDB 连接前,您需要在跟随本文完成前置准备工作,完成操作后即可创建连接并在数据复制/开发任务中使用该数据源。

支持版本

MongoDB 3.2、3.4、3.6、4.0、4.2

提示

Tapdata 基于 MongoDB 的 Change Stream 实现,此特性在 MongoDB 4.0 开始支持,因此,推荐源和目标数据库的版本为 4.0 及以上。

作为源库

  1. 保障源库的架构为副本集或分片集群,如果为单节点架构,您可以将其配置为单成员的副本集以开启 Oplog。 具体操作,见如何将单节点转为副本集

  2. 配置充足的 Oplog 存储空间,至少需要容纳 24 小时的 Oplog。 具体操作,见修改 Oplog 大小

  3. 根据权限管控需求选择下述步骤,创建用于数据同步/开发任务的账号并授予权限。

    提示

    由于分片服务器不会向 config 数据库获取用户权限,因此,当源库为分片集群架构时,您需要在每个分片的主节点上创建相应的用户并授予权限。

    • 授予指定库(以 demodata 库为例)的读权限

      use admin
      db.createUser({
      "user" : "tapdata",
      "pwd" : "my_password",
      "roles" : [
      {
      "role" : "clusterMonitor",
      "db" : "admin"
      },
      {
      "role" : "read",
      "db" : "demodata"
      }
      {
      "role" : "read",
      "db" : "local"
      },
      {
      "role" : "read",
      "db" : "config"
      }
      ]
      }
      提示

      仅当 MongoDB 为 3.2 版本时,需要授予 local 数据库的读权限。

    • 授予所有库的读权限。

      use admin
      db.createUser({
      "user" : "tapdata",
      "pwd" : "my_password",
      "roles" : [
      {
      "role" : "clusterMonitor",
      "db" : "admin"
      },
      {
      "role" : "readAnyDatabase",
      "db" : "admin"
      }
      ]
      }
  4. 在设置 MongoDB URI 时,推荐将写关注级别设置为大多数,即 w=majority,否则可能因 Primary 节点异常宕机导致的数据丢失文档。

  5. 源库为集群架构时,为提升数据同步性能,Tapdata 将会为每个分片创建一个线程并读取数据,在配置数据同步/开发任务前,您还需要执行下述操作。

    • 关闭源库的均衡器(Balancer),避免块迁移对数据一致性的影响。具体操作,见如何停止平衡器
    • 清除源库中,因块迁移失败而产生的孤立文档,避免 _id 冲突。具体操作,见如何清理孤立文档

作为目标库

授予指定库(以 demodata 库为例)的写权限,并授予 clusterMonitor 角色以供数据验证使用,示例如下:

> use admin
> db.createUser({
"user" : "tapdata",
"pwd" : "my_password",
"roles" : [
{
"role" : "clusterMonitor",
"db" : "admin"
},
{
"role" : "readWrite",
"db" : "demodata"
},
{
"role" : "read",
"db" : "local"
}
]
}
提示

仅当 MongoDB 为 3.2 版本时,需要授予 local 数据库的读权限。

下一步

连接 MongoDB 数据库