gpt4 book ai didi

meteor - cursor.observe 会降低服务器性能吗?

转载 作者:行者123 更新时间:2023-12-04 18:45:58 25 4
gpt4 key购买 nike

我已经搜索并找到了

_suppress_initial: true

但它不适用于 0.54

我想观察一些集合,比如 Orders Collection。

如果我有大量订单并且当添加新订单时,我想使用观察来更新另一个集合。

我没有将观察放入 Meteor.publish 如果我不停止观察会怎样,如果我在服务器运行期间一直观察它会减慢服务器吗?
if Meteor.isServer

obOrders = Orders.find({}).observe # when server restart does this slow down performance ?

_suppress_initial: true # doesnt work

added: (order) ->

console.log order # still add exist documents

if Date.now() - order.timestamp < 500
console.log order # update another one

还是我应该限制 Orders.find {}, limit: 50 并按时间戳排序以观察最新文档?

将观察服务器 Meteor.startup 或 Meteor.publish 这两个条件有什么不同?

如果我把它放到 Meteor.startup 中,这是否意味着我会进行单例观察?

最佳答案

现在,observe必须将查询的全部结果永久保存在内存中。因此,如果您调用 Orders.observe({}) ,那么只要观察运行,服务器就会在内存中保留 Orders 集合的完整副本。这是因为,在幕后,observe当检测到潜在变化时,通过将旧查询结果与新查询结果进行比较来工作。这是为了确保 observe 的结果即使由于多个进程同时写入数据库而存在竞争条件,也始终是 100% 正确的。

因此,如果您查询有限数量的文档,例如最近的五个订单,或者最近 5 分钟内下的订单,它将显着减少 RAM 使用率(可能还有 CPU 使用率)。但如果您这样做,您将拥有小心确保您不会遗漏任何文件。例如,如果您正在观察最近 5 分钟内插入的文档,但您的服务器关闭了 10 分钟,那么您可能不会收到某些订单的添加消息。或者,如果您正在观察 5 个最近的文档,然后另一个节点一次插入 1000 个文档,您可能只会收到最近 5 条消息的添加消息(因为 observe 并不能保证您会观察每个中间状态,只是您的添加/删除/更改消息最终会让您了解当前状态。)

至于你将在哪里开始这样的观察:如果你从服务器上的 Meteor.startup 执行它,它将始终运行,但只会运行一个副本(目前 - future Meteor 将启动多个服务器进程,您将需要更新您的代码。)如果您从发布处理程序执行此操作,那么它将仅在至少有一个订阅时运行(并且仅消耗资源)。最近的 Meteor 版本将删除重复 observe在完全相同的查询上调用的 s,因此如果您有 1000 个对调用 Orders.find({}).observe({ ... }) 的发布处理程序的订阅,它不应该比 if 消耗更多的资源只有一个。 (记住在客户端退订时停止每个观察。)

根据您的操作,在创建每个订单时安排任务可能比使用 added 更容易。 .例如,您可以有一个方法 createOrder插入订单,并将项目添加到 ordersToProcess集合,然后分别具有从 ordersToProcess 中提取项目的代码一次收集并处理它们,然后将它们删除。或者您可以直接从 createOrder 进行处理如果不需要太长时间的方法。

关于meteor - cursor.observe 会降低服务器性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14376486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com