我有一个MongoLab集群,它允许我使用Oplog拖尾来改善我的Meteor.js应用程序的性能,可用性和冗余.
问题是:自从我使用它以来,我的所有出版物都需要更多的时间来完成.当它只需要200ms时,这不是问题,但它通常需要更多,就像在这里,我订阅我在这里描述的出版物.
这个出版物的响应时间已经太长了,而且oplog观察也在减慢它的速度,尽管它远远不是观察oplog花费那么多时间的唯一出版物.
谁能向我解释发生了什么?我在网上搜索的任何地方都找不到为什么观察oplog会减慢我的出版物的任何解释.
以下是Kadira的一些截图,用于说明我在说什么:
这是另一个pub/sub的截图:
最后,观察oplog需要一段合理的时间(但仍然会减慢我的pub/sub):
我正在使用Meteor.js开发应用程序.为此,我确实有一个用于oplog拖尾的mongo实例集群.另外,我正在使用Kadira来追踪我的应用程序性能.
因为我启用了oplog拖尾,所以我的很多pub/sub都比以前慢.我看到的是,当oplog"query"将其"wasMultiplexerReady"属性设置为false时,速度会慢一些,这就是我在Kadira上看到的大多数observeChanges的情况.
问题是网上绝对没有任何关于它的东西.我一直在寻找关于它的任何资源以及它是如何工作的,但是没有任何文章.
可以给我一些关于这里发生了什么的暗示/解释吗?就像这个属性"wasMultiplexerReady"一样,它是如何使用的,如何减少oplog尾部计算时间等...
谢谢.
是否有一个简单的或优雅的方法(或我可以写的查询)来检索集合中(最后更新的文档的)最后更新的时间戳。我可以编写这样的查询来查找最后插入的文档
db.collection.find().limit(1).sort({$natural:-1})
Run Code Online (Sandbox Code Playgroud)
但我需要有关最新更新文档的信息(可以是插入内容或更新内容)。
我知道一种方法是从集合中查询oplog集合中的最后一条记录。但是考虑到oplog的大小可能非常大(似乎也不可靠,因为它是一个受限制的集合),这似乎是一项昂贵的操作。有一个更好的方法吗?
谢谢!
更新操作上的更改流事件仅返回更改的文档,与 oplog 相同。我可以在更新之前获取文档(或一些更新的值)吗?
MySQL 基于行的 binlog 可以使用完整的binlog_row_image 来完成此操作。