所以我正在使用PHP和MongoDB构建一个应用程序,它在读取和写入时都会有相当多的流量。几个月之后,每秒应该有大约2500次读取和每秒200次写入(不确定)但是,与其他人相比,这在流量方面的确如何评价。
我对更新集合时该怎么做有点好奇;文档示例显示了更新特定集合字段的shell,但没有解释当集合中的任何数量的字段可能已更改时会发生什么。
例如,假设我有一个用户集合(非常简化的示例):
user = { _id : MongoId(...), name : 'User One', email : 'email@address.com', company : 'Company', ... }
我们会在表单中显示所有可编辑字段,但用户只会更改其电子邮件地址。
严格来说,在性能方面,是否最好将原始值存储在隐藏的输入中,以便在PHP中进行比较,然后构建特定于更新的查询?
或者我应该替换所有可编辑的字段吗?
它将是一个包含对象和数组的集合 - 而不是这里显示的简单。
我知道优化之后,但我也希望通过MongoDB养成良好的习惯。
感谢。
答案 0 :(得分:3)
您可能正在检索整个对象以显示可编辑的表单 - 我假设您将显示当前名称,电子邮件等,并允许他们编辑和提交新版本。这意味着您可以检查以查看更改内容并进行更新,而不是每次都上传和替换整个对象。
我建议使用优化的更新操作:"MongoDB Updating"。这样,您可以执行更优化的就地操作,而不是每次要编辑特定字段时替换整个对象。您可能主要关注$set
,$addToSet
和(如果您正在处理许多嵌套对象,$
位置运算符。
来自文档:
修改器操作
在更新现有值时,修改器操作非常高效且有用;例如,它们非常适合增加数字。 [和其他更复杂的事情]
...
修饰符更新具有避免查询和返回对象所涉及的延迟的优点。修改器更新还具有操作原子性和非常少的网络数据传输。
如果您对实施特定操作有更具体的问题,请随时提出。