3

所以我正在使用 PHP 和 MongoDB 构建一个应用程序,它在读取和写入方面都会有相当多的流量。几个月后,每秒应该有大约 2500 次读取和 200 次写入(不知道那是怎么回事不过,与其他人相比,流量方面的费率)。

我有点好奇更新集合时该怎么做;文档示例显示了一个更新特定集合字段的外壳,但没有解释当集合中的任意数量的字段可能已更改时会发生什么。

例如,假设我有一个用户集合(非常简化的示例):

用户 = {
  _id : MongoId(...),
  name : '用户一',
  电子邮件:'email@address.com',
  公司:'公司',
  ...
}

我们在表单中显示所有可编辑字段,但用户只更改他们的电子邮件地址。

严格来说,就性能而言,最好将原始值存储在隐藏输入中以在 PHP 中进行比较,然后构建特定于更新的查询?

还是我应该替换所有可编辑的字段?

它将是一个包含对象和数组的集合——而不是这里显示的简单集合。

我知道优化紧随其后,但我也希望养成使用 MongoDB 的好习惯。

谢谢。

4

1 回答 1

3

您可能会检索整个对象以显示可编辑的表单 - 我在这里假设您将显示当前名称、电子邮件等,并允许他们编辑和提交新版本。这意味着您可以查看已更改的内容并进行具体更新,而不是每次都上传和替换整个对象。

我建议使用优化的更新操作:"MongoDB Updating"。这样,您可以执行更优化的就地操作,而不是每次要编辑特定字段时都替换整个对象。您可能主要关注$set, $addToSet, 和 (如果您要处理大量嵌套对象,则可以使用$位置运算符。

从文档:

修饰符操作

在更新现有值时,修改器操作高效且有用;例如,它们非常适合增加数字。[和其他更复杂的事情]

...

修改器更新具有避免查询和返回对象所涉及的延迟的优点。修改器更新还具有操作原子性和很少的网络数据传输。

如果您对实施特定操作有更具体的问题,请尽管问。

于 2010-10-18T17:40:03.123 回答