【问题标题】:Is MongoDB built for a lot of updates?MongoDB 是为大量更新而构建的吗?
【发布时间】:2011-06-03 17:44:32
【问题描述】:

我正在创建一个博客。

每当有人查看博客页面时,我可以这样做吗:

post['views'] += 1
db.collection.save(post)

我不索引“视图”。

【问题讨论】:

  • 1.无论如何,索引视图对这种情况无济于事(因为您不是仅根据其值进行查询) 2. 您的问题标题可以使用重命名:类似于“在 MongoDB 中增加计数器的最佳方法”。您当前标题(“MongoDB 是否为大量更新而构建?”)的答案是否定的(对于“很多”的某些值)。

标签: mongodb performance indexing database


【解决方案1】:

您应该使用$inc(或您的驱动程序的实现),它会进行原子更新。

你应该很好,但与任何事情一样,这取决于你的流量。

【讨论】:

  • 如果我已经选择了mongo文档怎么办?我所要做的就是 +=1 和 .save。我还必须使用 $inc 吗?不会使用 $inc 进行两次查询吗?
  • $inc 将完全在服务器内执行该操作。您不会提取文档,只需将带有文档查询的 $inc 命令发送给它。如果您查看驱动程序页面/文档,它应该有一个示例。
  • $inc 是执行此操作的最简洁方法,并且可以节省流量。除非您的框架真的很聪明,否则 .save() 可能会尝试保存整个对象。个人建议时间。我会做两个增量:views.totalviews.20110105。所以这是一个总数,一个是每天。它会占用更多空间,但它可以让您跟踪视图的历史记录(这是一个非常便宜的操作)。
  • $inc 也是唯一能确保您的值是准确的操作。并发:如果 2 个客户同时访问同一个帖子怎么办? A和B检索帖子(具有相同的“views”值),A和B增加“views”值,然后A和B保存帖子;最后虽然帖子被看到了两次,但计数器只增加了一次。 $inc 不会有这些问题。
猜你喜欢
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多