【问题标题】:replica set lag caused by $push of subdocuments由 $push 子文档引起的副本集滞后
【发布时间】:2023-03-25 07:34:01
【问题描述】:

我有一个记录我网站内用户旅程的文档。

鼠标移动存储为该文档的子文档。我记录鼠标移动,然后定期使用 $push 附加到子文档数组。从我对 Mongo 的初步阅读来看,这似乎是一种明智/有效的方法。现在我不太确定。

我最近在使用副本集时遇到了一些问题 - 当我的使用量达到峰值时,辅助节点与主节点不同步。查看我的 oplog,我注意到有很多 $set 命令,每个命令都包含用户在此之前的鼠标移动的整个历史记录,而且似乎 Mongo 正在做这种扩展,以便 oplog 记录可以是不可靠的。

相信与JIRA上的这个问题有关https://jira.mongodb.org/browse/SERVER-9784

我是否正确解释了这个问题?如果是这样,通过网络传播更改似乎是一种非常低效的方式。有没有办法解决这个问题?将鼠标移动分成单独的小文档会更好吗?或者我可以通过在子文档数组上使用动态键来解决这个问题(因此避免使用 $push 命令)。

【问题讨论】:

  • 那么,副本集实际上是副本,而不是副本?您的代码是否从辅助设备读取并且没有确保一致性的写入问题?
  • 不确定我是否理解您的评论。我正在使用 NEAREST 写入关注点进行读取。我意识到这意味着我可能会得到稍微过时的信息,但这对我来说不是问题。
  • @JohnGreenall 你用的是$pushAll而不是$push,对吧?
  • 我没有使用$pushAll,因为我想在鼠标移动时记录它们。我这样做是因为我不想丢失突然离开页面的用户的记录/关闭标签等。现在想知道我是否需要考虑另一种方法来做到这一点?
  • 我不这么认为,但这种行为看起来更像您对$pushAll 的期望。

标签: mongodb replication subdocument


【解决方案1】:

感谢大家的建议。我想我现在已经深究了。

看起来我的问题是一个错误。

在 mongoDB 中使用 $each 和 $push 目前(v2.4.3)在复制方面效率极低。已更新相关的 Jira 问题以缩小标准。

https://jira.mongodb.org/browse/SERVER-9784

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多