MongoDB:模式迁移、更新或插入

2024-01-08

虽然 MongoDB 不需要任何固定模式,但有时我们希望从一种结构迁移到另一种结构。

我最近正在处理一个小数据集(~200K),并决定循环现有数据,转换数据模型并插入到新集合中。事实证明,我们的 vps 并没有那么强大,使用 php 驱动程序,在确保以下内容后,我只能达到约 300 次插入/秒:

  • 插入前没有索引。
  • 尽可能使用批量插入。

我想知道我是否只是选择了错误的迁移路径,或者在处理时是否有一些最佳实践模式改变在 MongoDB 中?


在采纳了一些建议后,我在迁移过程中将 write focus 更改为 0,这是我观察到的:

  • 插入仍然没有预期的那么快,最大约为每秒 500 次插入
  • 插入完成后,索引进行得非常快,可能是因为ensureIndex是一劳永逸的w=0?
  • 剩余的更新需要一段时间才能开始,可能是因为索引操作被阻塞?然后它似乎以不同的速度运行(之前它的运行速度一直较慢),再次可能正在进行索引。
  • CPU和IO都很好。 cpu大部分空闲在90%左右,IO等待不到10%。

除了不使用我们的PHP ORM进行迁移之外,是否还有更多的优化可能?


与 php 客户端之间传输和序列化所有内容可能会增加大量开销。从 shell 运行迁移将是最快的。用一个写它们update http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update或使用光标forEach http://docs.mongodb.org/manual/reference/method/cursor.forEach/#cursor.forEach迭代并调用save http://docs.mongodb.org/manual/reference/method/db.collection.save/.

查看使用游标的示例MongoDB更新数组的多条记录 https://stackoverflow.com/questions/14720734/mongodb-update-multiple-records-of-array(朝向底部)。

意识到snapshot http://docs.mongodb.org/manual/reference/method/cursor.snapshot/游标问题。如果集合未分片,可能需要幂等更新或使用快照。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB:模式迁移、更新或插入 的相关文章

  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • PHP 开发相当于 Mongrel/Webrick 吗?

    PHP 开发中是否有与 Rails 开发期间使用 Mongrel Webrick 等效的方法 我通常在端口 3000 上使用 Mongrel 在开发过程中为我的 Rails 应用程序提供服务 我从事 PHP 开发已经有几年了 据我所知 方法
  • Node.js 检测两个猫鼬查找何时完成

    我正在尝试使用自动完成功能初始化两个输入library https www devbridge com sourcery components jquery autocomplete 当我加载页面时 我将触发 Ajax 来初始化两个输入文本
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 如何通过php的require()或include()函数传递变量?

    当我使用这个时 require diggstyle code php page page no 警告是 无法打开流 第 198 行 C xampp htdocs 4ajax gallery core php 中没有错误 错误是 Failed
  • 如何在类似 MVC 的页面中加载基于漂亮 URL 的类?

    我想请教一些关于如何解决这个问题的提示 我正在尝试构建自己的 MVC 网站 我了解了 URL 的基础知识 http example com blog cosplay cosplayer expo today 博客 gt 控制器cosplay
  • 在 Symfony 序列化中更改序列化属性名称

    我正在使用 Symfony 序列化器 效果很好 use Symfony Component Serializer Annotation Groups Groups default notification public function g
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • 使用php将数据存储到文本文件中?

    我正在尝试将数据存储在文本文件中 例如使用 php 将数组存储到文本文件中 而不是存储到 mysql 数据库中 例如 这里是要存储在文本文件中的数据 name gt john age gt 25 location gt australia
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 在 MongoDB 聚合的“addField”操作中使用“$count”

    我正在尝试找到聚合运算符的正确组合 以将标题为 totalCount 的字段添加到我的 mongoDB 视图中 这将为我提供聚合管道特定阶段的计数 并将其输出为每个文档的计数结果 count count 但最终我得到了一个具有此结果的文档
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • 转置表然后设置并重命名索引

    我想转置表并重命名索引 如果我显示df with existing index Time I get Time v1 v2 1 0 5 0 3 2 0 2 0 1 3 0 3 0 3 之后df transpose I m at Time 1
  • 在React js中点击回车键时触发onb​​lur事件

    我有一个输入文本字段 当用户输入任何文本并单击输入按钮时 我需要激活模糊事件以删除焦点并验证文本输入
  • 当没有滚动时,Recyclerview 页脚位于屏幕底部;当有滚动时,页脚位于列表末尾

    在我的应用程序中 我在所有屏幕上的滚动末尾 对于有滚动的屏幕 都有品牌页脚 并且在 无滚动 时在屏幕底部有静态 但我面临着用有列表的屏幕实现这一点的问题 我正在使用 recyclerview 来显示列表 我想展示当回收器视图滚动时 在其末尾
  • Git Alias - 带有分支名称的 git commit

    我想要一个 git 别名来提交一条消息并自动填充提交消息中的分支名称 输出示例 git commit m EX 1234 This is the commit message 我正在寻找一种仅在终端中输入的方法 git cm this is
  • 这个前提条件是否违反了里氏替换原则

    我有3节课 Account CappedAccount UserAccount CappedAccount and UserAccount两者都延伸Account Account包含以下内容 abstract class Account A
  • WeakTypeTag 与 TypeTag

    在 REPL 中 我写下了以下示例反射 类型标签和清单 http docs scala lang org overviews reflection typetags manifests html 我对之间的区别感到困惑WeakTypeTag
  • 如何让 PyC​​harm 在 Python/IPython 控制台和编辑器中显示方法签名和文档?

    在 IPython 的 QT 控制台 在 Windows 7 上 中 如果我输入 import scipy scipy zeros 接下来是 Tab 它显示该方法的基本文档 例如其签名 参数 描述等 在 PyCharm CE 3 4 1 中
  • 如何在 Java 中向现有私钥添加密码

    假设我之前使用 openssl 创建了私钥 但我决定不使用密码保护它 BEGIN RSA PRIVATE KEY BASE64 ENCODED DATA END RSA PRIVATE KEY 但后来我意识到我想保护它 我知道如何使用 op
  • java.lang.ClassNotFoundException:运行 Scala MongoDB 连接器时出现 org.apache.spark.sql.DataFrame 错误

    我正在尝试使用 SBT 运行 Scala 示例来从 MongoDB 读取数据 每当我尝试访问从 Mongo 读取到 RDD 的数据时 我都会收到此错误 Exception in thread dag scheduler event loop
  • C 的通用数据结构库?

    你们使用哪些库来实现链表 二叉树等通用数据结构 最常见 最高效的库有哪些 你能说出一些吗 GDSL 通用数据结构库 http home gna org gdsl Gnulib GNU 可移植性库 http www gnu org softw
  • 无法在 Xamarin Android 中从 HTML 创建 PDF

    我正在 Xamarin for Android 中开发一个应用程序 我已经使用 StringBuilder 生成了 HTML 文件 现在我的外部存储中有一个 HTML 文件 并且 PDF 需要相同的模板 所以当我尝试使用将 HTML 转换为
  • Kotlin:您可以对可变参数使用命名参数吗?

    例如 您的函数可能具有复杂的签名和可变参数 fun complicated easy Boolean false hard Boolean true vararg numbers Int 您应该能够像这样调用这个函数是有意义的 compli
  • 文件无法使用 PHP fopen 打开

    我试过这个 这应该以只读模式打开文件 但事实并非如此 test txt 文件与 index php 主项目文件夹 位于同一文件夹中 文件打不开 当我把 echo 像这样 echo fileip 它回来了 资源 ID 3 文件确实打开得很好
  • MySQL 事件在一段时间后停止工作

    我有一些游戏 其中用户的健康状况和其他属性每隔几分钟就会使用 MySQL 事件更新一次 我遇到了一个问题 最终事件不再运行 事件中的 SQL 不会被执行 我不确定如何修复它 所以我尝试重新启动 MySQL 这修复了它一段时间 我将 MySQ
  • 如何使 getElementsbyName 适用于 IE(和 FF)?

    这是在 IE 中出错但在 FF 中有效的 JavaScript 错误 document getelementsbyname 0 innerhtml 为 null 或不是对象 var oldVal parseInt document getE
  • JSHint 无法识别 Visual Studio Code (VSCode) 中的 Async/Await 语法

    我一直在努力使用 VSCode 和 JSHint 来找到摆脱这种语法突出显示的方法 JSHint 似乎无法识别 Async Await 语法 在这里您可以找到我正在谈论的内容的屏幕截图 我的 JSHint 版本 jshint esnext
  • 对于新项目,使用本地 gradle 发行版而不是包装器

    我想使用本地 gradle 发行版而不是 gradle 包装器 我将 IntelliJ 用于 Android 项目 为了启动新的 gradle 项目 我会得到一个选项窗口 询问要使用哪个发行版 包装器或本地 而对于 android 项目 我
  • GeoJSON 坐标?

    我有一个 GeoJSON 文件 我正在尝试处理它 以便在谷歌地图上绘制一些特征 然而 问题在于坐标不是传统的纬度 经度表示形式 而是一些大的六 七位数 例子 type FeatureCollection features type Feat
  • 如何从信号中去除频率

    我想从信号中删除一个频率 一个峰值 并在没有它的情况下绘制我的函数 在 fft 之后 我找到了频率和幅度 我不确定现在需要做什么 例如 我想删除我的最高峰 在绘图上用红点标记 import numpy as np import matplo
  • MongoDB:模式迁移、更新或插入

    虽然 MongoDB 不需要任何固定模式 但有时我们希望从一种结构迁移到另一种结构 我最近正在处理一个小数据集 200K 并决定循环现有数据 转换数据模型并插入到新集合中 事实证明 我们的 vps 并没有那么强大 使用 php 驱动程序 在