MongoDB Sharding 请勿复用已删除的 namespace

  • 日期:08-27
  • 点击:(1365)


Sharding 请勿复用已删除的 namespaceSERVER-:在分片群集中删除数据库或集合可能不会自动成功。 MongoDB是一个难题。如果未完全执行库或集合删除操作,则创建具有相同名称的新集合可能会导致读取旧版本的数据。问题。

MongoDB分片碎片原理参考MongoDB Sharded群集架构原理

通常,当用户对集合执行打开碎片时,集合片段的元数据存储在配置服务器的配置集合中。

记录集合片段的元数据,根据shardKey片段,集合是否已被删除等等。

记录与每个块(一系列shardKeys)对应的分片信息以进行路由请求

将实际数据存储在每个分片中

删除所有分片中的相应数据

删除与config.chunks集合相关的chun信息

修改config.collections,标签集已被删除

注意:3.2+按照上述过程操作。删除数据库的过程类似。它还需要另外操作config.databases集合,但问题本质上是类似的

上述操作需要操作配置服务器和所有分片。如果中间有步骤(根据上述步骤没有执行某些旧版本,并且在执行期间可能未严格检查返回的错误代码,即使返回成功,内部实际上可能执行失败),并且最终,该集合中的一些数据仍然存在并且没有完全清理。

如果重新使用集合名称,再次调用shardCollection将生成新的碎片元数据,这可能导致

可以读取分片上的一些残留数据,并且实际上应该删除数据

Mongos没有成功更新路由信息。最后,多个mongos可能会看到不一致的数据视图。有些mongos可以读取数据,有些则无法读取。 ('flushRouterConfig命令可以强制解决刷新路由信息。

MongoDB分片删除集合/数据库涉及多个节点的运行。这些操作不能是原子的,这可能导致集合最终处于中间状态;多路复用集合可能导致写入数据一致性问题。

对于MongoDB 3.2及以上版本,在大多数情况下,只要没有异常,删除集合操作就可以正常完成。重用集合名称的问题通常不是一个大问题,但问题不能完全避免。

建议在Sharding环境中删除命名空间名称后,不要再次重复使用

在需要重用命名空间的情况下,如果要确保没有数据问题,可以每次都按下删除收集工作方式,以确保正确清理相关数据并更新路由信息。

抓住阿里云的新用户的独家优势,拨打-1!

作者:张有东

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。

阿里云云栖社区

2019.08.02 12: 06

字数796

SERVER-:在分片群集中删除数据库或集合可能不会自动成功。 MongoDB是一个难题。如果未完全执行库或集合删除操作,则创建具有相同名称的新集合可能会导致读取旧版本的数据。问题。

MongoDB分片碎片原理参考MongoDB Sharded群集架构原理

通常,当用户对集合执行打开碎片时,集合片段的元数据存储在配置服务器的配置集合中。

记录集合片段的元数据,根据shardKey片段,集合是否已被删除等等。

记录与每个块(一系列shardKeys)对应的分片信息以进行路由请求

将实际数据存储在每个分片中

删除所有分片中的相应数据

删除与config.chunks集合相关的chun信息

修改config.collections,标签集已被删除

注意:3.2+按照上述过程操作。删除数据库的过程类似。它还需要另外操作config.databases集合,但问题本质上是类似的

上述操作需要操作配置服务器和所有分片。如果中间有步骤(根据上述步骤没有执行某些旧版本,并且在执行期间可能未严格检查返回的错误代码,即使返回成功,内部实际上可能执行失败),并且最终,该集合中的一些数据仍然存在并且没有完全清理。

如果重新使用集合名称,再次调用shardCollection将生成新的碎片元数据,这可能导致

可以读取分片上的一些残留数据,并且实际上应该删除数据

Mongos没有成功更新路由信息。最后,多个mongos可能会看到不一致的数据视图。有些mongos可以读取数据,有些则无法读取。 ('flushRouterConfig命令可以强制解决刷新路由信息。

MongoDB分片删除集合/数据库涉及多个节点的运行。这些操作不能是原子的,这可能导致集合最终处于中间状态;多路复用集合可能导致写入数据一致性问题。

对于MongoDB 3.2及以上版本,在大多数情况下,只要没有异常,删除集合操作就可以正常完成。重用集合名称的问题通常不是一个大问题,但问题不能完全避免。

建议在Sharding环境中删除命名空间名称后,不要再次重复使用

在需要重用命名空间的情况下,如果要确保没有数据问题,可以每次都按下删除收集工作方式,以确保正确清理相关数据并更新路由信息。

抓住阿里云的新用户的独家优势,拨打-1!

作者:张有东

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。

SERVER-:在分片群集中删除数据库或集合可能不会自动成功。 MongoDB是一个难题。如果未完全执行库或集合删除操作,则创建具有相同名称的新集合可能会导致读取旧版本的数据。问题。

MongoDB分片碎片原理参考MongoDB Sharded群集架构原理

通常,当用户对集合执行打开碎片时,集合片段的元数据存储在配置服务器的配置集合中。

记录集合片段的元数据,根据shardKey片段,集合是否已被删除等等。

记录与每个块(一系列shardKeys)对应的分片信息以进行路由请求

将实际数据存储在每个分片中

删除所有分片中的相应数据

删除与config.chunks集合相关的chun信息

修改config.collections,标签集已被删除

注意:3.2+按照上述过程操作。删除数据库的过程类似。它还需要另外操作config.databases集合,但问题本质上是类似的

上述操作需要操作配置服务器和所有分片。如果中间有步骤(根据上述步骤没有执行某些旧版本,并且在执行期间可能未严格检查返回的错误代码,即使返回成功,内部实际上可能执行失败),并且最终,该集合中的一些数据仍然存在并且没有完全清理。

如果重新使用集合名称,再次调用shardCollection将生成新的碎片元数据,这可能导致

可以读取分片上的一些残留数据,并且实际上应该删除数据

Mongos没有成功更新路由信息。最后,多个mongos可能会看到不一致的数据视图。有些mongos可以读取数据,有些则无法读取。 ('flushRouterConfig命令可以强制解决刷新路由信息。

MongoDB分片删除集合/数据库涉及多个节点的运行。这些操作不能是原子的,这可能导致集合最终处于中间状态;多路复用集合可能导致写入数据一致性问题。

对于MongoDB 3.2及以上版本,在大多数情况下,只要没有异常,删除集合操作就可以正常完成。重用集合名称的问题通常不是一个大问题,但问题不能完全避免。

建议在Sharding环境中删除命名空间名称后,不要再次重复使用

在需要重用命名空间的情况下,如果要确保没有数据问题,可以每次都按下删除收集工作方式,以确保正确清理相关数据并更新路由信息。

抓住阿里云的新用户的独家优势,拨打-1!

作者:张有东

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。