【发布时间】: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