摘要: 背景 数据迁移是数据库运维中一个很常见的场景。数据迁移分为全量和增量。为了追求速度,通常我们会采用并发的方式对数据进行全量迁移。在全量导出数据时,通常都会选择做到记录级的并发,因此通常会涉及到对需要导出的某个表(集合)按照并发度进行切分(分区)的过程。
数据迁移是数据库运维中一个很常见的场景。数据迁移分为全量和增量。为了追求速度,通常我们会采用并发的方式对数据进行全量迁移。在全量导出数据时,通常都会选择做到记录级的并发,因此通常会涉及到对需要导出的某个表(集合)按照并发度进行切分(分区)的过程。现有常用做法是通过若干个skip加limit来找到一些分区点,然后就可以并发同时导出多个分区。事实上MongoDB还有一个SplitVector命令特别适合用来做集合的分区。本文将介绍一下如何利用这个命令来对集合做分区,实现并发数据迁移。
SplitVector命令原是在sharding中chunk分裂时需要用的一个内部命令,是mongos在准备分裂某个chunk前发给这个chunk所在shard以计算分裂点(SplitPoint)时使用的。但是这个命令也可以用于普通的副本集,我们可以把副本集中的集合看作一个唯一的chunk,利用这个命令来为这个chunk计算分裂点,从而达到为某个集合进行分区的目的。
SplitVector命令的使用在官方文档中没有介绍,只说明了其实一个内部命令,但是使用命令的Help却可以看到:
db.runCommand({splitVector:"test.test", help:1}) { "help" : "help for: splitVector Internal command.\nexamples:\n { splitVector : \"blog.post\" , keyPattern:{x:1} , min:{x:10} , max:{x:20}, maxChunkSize:200 }\n maxChunkSize unit in MBs\n May optionally specify 'maxSplitPoints' and 'maxChunkObjects' to avoid traversing the whole chunk\n \n { splitVector : \"blog.post\" , keyPattern:{x:1} , min:{x:10} , max:{x:20}, force: true }\n 'force' will produce one split point even if data is small; defaults to false\nNOTE: This command may take a while to run", "lockType" : 0, "ok" : 1 }
从帮助文档中可以大致看到,这个命令大致是这么使用的:
db.runCommand({splitVector:"blog.post", keyPattern:{x:1}, min{x:10}, max:{x:20}, maxChunkSize:200})
接下来介绍一下各个参数及其含义。
这么多参数到底怎么用呢?我怎么知道出来的结果是怎样的?没有更详细的文档,只有啃源码了。
SplitVector的原理是遍历指定的『keyPattern』索引,根据指定的『maxChunkSize』找到满足以下条件的n个分裂点:分裂后的每个新的chunk的大小约为『maxChunkSize』的一半。如果集合当前大小比『maxChunkSize』小或者集合记录数为空,那么返回一个空的分裂点集合。如果指定了『force: true』,那么会忽略传入的『maxChunkSize』参数,并强制在集合的中位点进行分片,这时候只会产生一个分裂点。在寻找分裂点时首先会根据集合的平均文档大小计算一个分裂后每个chunk所包含的文档数:
原文链接
您还没有登录,请您登录后再发表评论
由于 MongoDB 的主从复制功能不支持高可用,所以从 3.2 版本开始已经被废弃了,转而用副本集来代替实现数据复制的功能。一个副本集总会有一个活跃节点(Primary)和若干个备份节点(Secondary),还有一个可选的一个...
MongoDB是一种流行的开源文档数据库系统,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在管理和操作MongoDB时,批处理脚本是一个高效的方法,特别是对于执行重复性的任务,如安装、启动、停止和配置服务...
7. **安全和权限管理**:测试数据也可能涉及到用户角色和权限的设定,让你了解如何在MongoDB中实现安全性。 在使用这些测试数据时,你应该逐一实践每个操作,对比预期结果,理解MongoDB的工作原理。同时,你也可以...
MongoDB的设计目标是为了解决大规模数据存储问题,特别是针对大数据量、高并发的互联网应用,它提供了内置的水平扩展机制,可以轻松处理从百万到十亿级别的数据量。 在MongoDB中,管理和操作数据库的基本命令是: ...
Geoserver提供了强大的MongoDB插件,可以实现MongoDB矢量数据的读取和写入。 发布步骤: 1. 创建工作区 首先,需要创建一个工作区,用于存储矢量数据。 2. 创建数据存储 其次,需要创建一个数据存储,用于存储...
综上所述,"SpringBoot+MongoDB+Echarts图表数据可视化"项目利用SpringBoot作为后端处理逻辑,MongoDB作为数据存储,Echarts作为前端数据展示工具,共同实现了高效、直观的数据可视化解决方案。这个组合在现代Web...
【MongoDB 2.6 升级到 4.0 数据备份迁移】 MongoDB 是一个高性能、开源的文档型数据库,常用于构建分布式应用程序。...在进行数据迁移时,务必检查新环境的配置是否与旧环境一致,以保证服务的连续性。
在实际工作中,开发者可能会需要结合其他相关工具和技术,比如MongoDB的GUI工具(如Robo 3T、MongoDB Compass等),以及用于数据备份和迁移的MongoDB自带工具mongodump和mongorestore。掌握这些工具和命令对于进行...
- **安全性**:确保数据迁移过程中的数据安全,防止数据丢失或泄露。 - **自定义**:用户可以根据自身需求定制迁移策略,满足特定业务场景的需求。 通过这些策略,MongoDB能够有效地管理热温数据,提高数据库性能...
MongoDB 是一种流行的开源文档...在日常操作中,MongoDB 的管理命令是管理员进行数据管理、备份、恢复、性能优化以及问题排查的关键工具。熟练掌握这些命令,能够有效地管理和维护 MongoDB 集群,确保系统的稳定运行。
MongoDB中的分片技术能够将数据分布到多个服务器上,从而有效地支持大数据量和高并发访问。 7. 数据压缩技术:在日志系统中,数据量往往会非常庞大。数据压缩技术可以帮助节省存储空间,提高数据传输的效率,并且...
MongoDB 提供了一个交互式的shell,可用于管理数据库,包括用户认证、查看和操作数据库、创建和删除集合、监控复制状态、修复数据库、设置性能日志(profiling)以及数据迁移等任务。例如,通过`use`命令切换数据库...
django+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理...
MongoShake是一款强大的工具,专为MongoDB数据库的数据迁移和实时同步而设计。它利用了MongoDB的oplog(操作日志)机制,确保在不同MongoDB实例间进行高效、安全且一致的数据转移。MongoShake是实现数据库灾备和多活...
在centos7下安装部署mongodb分片+副本集群常用命令整理,内容包含,安装、配置、启动、访问shell终端等命令
MongoDB的数据迁移通常涉及几个关键步骤,包括数据备份、数据恢复以及可能的数据转换。以下是对这些步骤的详细说明: 1. **数据备份**:MongoDB提供了命令行工具`mongodump`来执行备份操作。这个工具可以导出数据库...
MongoDB是一种流行的开源文档型数据库,属于NoSQL数据库系统,以其灵活性、可扩展性和高性能而受到广泛使用。本文将深入探讨在MongoDB中...通过不断学习和实践,你将能够更好地利用MongoDB解决各种数据存储和处理问题。
MongoDB的迁移平台提供了全面的数据迁移解决方案,具有以下特点: - **兼容性**:支持多种数据库系统(如MySQL、SQL Server、Oracle等)和数据源(如ElasticSearch、Hadoop),方便数据迁移。 - **实时性**:实现...
相关推荐
由于 MongoDB 的主从复制功能不支持高可用,所以从 3.2 版本开始已经被废弃了,转而用副本集来代替实现数据复制的功能。一个副本集总会有一个活跃节点(Primary)和若干个备份节点(Secondary),还有一个可选的一个...
MongoDB是一种流行的开源文档数据库系统,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在管理和操作MongoDB时,批处理脚本是一个高效的方法,特别是对于执行重复性的任务,如安装、启动、停止和配置服务...
7. **安全和权限管理**:测试数据也可能涉及到用户角色和权限的设定,让你了解如何在MongoDB中实现安全性。 在使用这些测试数据时,你应该逐一实践每个操作,对比预期结果,理解MongoDB的工作原理。同时,你也可以...
MongoDB的设计目标是为了解决大规模数据存储问题,特别是针对大数据量、高并发的互联网应用,它提供了内置的水平扩展机制,可以轻松处理从百万到十亿级别的数据量。 在MongoDB中,管理和操作数据库的基本命令是: ...
Geoserver提供了强大的MongoDB插件,可以实现MongoDB矢量数据的读取和写入。 发布步骤: 1. 创建工作区 首先,需要创建一个工作区,用于存储矢量数据。 2. 创建数据存储 其次,需要创建一个数据存储,用于存储...
综上所述,"SpringBoot+MongoDB+Echarts图表数据可视化"项目利用SpringBoot作为后端处理逻辑,MongoDB作为数据存储,Echarts作为前端数据展示工具,共同实现了高效、直观的数据可视化解决方案。这个组合在现代Web...
【MongoDB 2.6 升级到 4.0 数据备份迁移】 MongoDB 是一个高性能、开源的文档型数据库,常用于构建分布式应用程序。...在进行数据迁移时,务必检查新环境的配置是否与旧环境一致,以保证服务的连续性。
在实际工作中,开发者可能会需要结合其他相关工具和技术,比如MongoDB的GUI工具(如Robo 3T、MongoDB Compass等),以及用于数据备份和迁移的MongoDB自带工具mongodump和mongorestore。掌握这些工具和命令对于进行...
- **安全性**:确保数据迁移过程中的数据安全,防止数据丢失或泄露。 - **自定义**:用户可以根据自身需求定制迁移策略,满足特定业务场景的需求。 通过这些策略,MongoDB能够有效地管理热温数据,提高数据库性能...
MongoDB 是一种流行的开源文档...在日常操作中,MongoDB 的管理命令是管理员进行数据管理、备份、恢复、性能优化以及问题排查的关键工具。熟练掌握这些命令,能够有效地管理和维护 MongoDB 集群,确保系统的稳定运行。
MongoDB中的分片技术能够将数据分布到多个服务器上,从而有效地支持大数据量和高并发访问。 7. 数据压缩技术:在日志系统中,数据量往往会非常庞大。数据压缩技术可以帮助节省存储空间,提高数据传输的效率,并且...
MongoDB 提供了一个交互式的shell,可用于管理数据库,包括用户认证、查看和操作数据库、创建和删除集合、监控复制状态、修复数据库、设置性能日志(profiling)以及数据迁移等任务。例如,通过`use`命令切换数据库...
django+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理...
MongoShake是一款强大的工具,专为MongoDB数据库的数据迁移和实时同步而设计。它利用了MongoDB的oplog(操作日志)机制,确保在不同MongoDB实例间进行高效、安全且一致的数据转移。MongoShake是实现数据库灾备和多活...
在centos7下安装部署mongodb分片+副本集群常用命令整理,内容包含,安装、配置、启动、访问shell终端等命令
MongoDB的数据迁移通常涉及几个关键步骤,包括数据备份、数据恢复以及可能的数据转换。以下是对这些步骤的详细说明: 1. **数据备份**:MongoDB提供了命令行工具`mongodump`来执行备份操作。这个工具可以导出数据库...
MongoDB是一种流行的开源文档型数据库,属于NoSQL数据库系统,以其灵活性、可扩展性和高性能而受到广泛使用。本文将深入探讨在MongoDB中...通过不断学习和实践,你将能够更好地利用MongoDB解决各种数据存储和处理问题。
MongoDB的迁移平台提供了全面的数据迁移解决方案,具有以下特点: - **兼容性**:支持多种数据库系统(如MySQL、SQL Server、Oracle等)和数据源(如ElasticSearch、Hadoop),方便数据迁移。 - **实时性**:实现...