0

我正在将日志信息异步写入 mongodb。由于这是一个非必要的功能,我正在寻找一种方法来限制这些写入,这样它就不会影响来自应用程序其他部分的读/写。本质上,只有在某些统计数据低于可接受的水平时才写。

我想到使用的一个统计数据是来自serverStatus的“globalLock.ratio” 。但是,这似乎不是移动平均线,也不是衡量数据库当前使用情况的好方法。

什么是我想做的好统计数据?写锁定 % 将是理想的,但我如何从 serverStatus 获得移动平均值?

4

1 回答 1

0

关于您的问题,有几点需要注意:

1) 如果您想要移动平均线,那么您需要自己在客户端程序中跟踪它们。如果您正在运行一个多线程程序,您可以使用一个线程定期(1 秒?5 秒?)间隔轮询 MongoDB,并自己计算移动平均值。这就是 MMS 的做法。

2) 当你计算这个平均值时,你需要弄清楚“加载的数据库”对你意味着什么。可能有很多事情需要检查:你关心写锁百分比吗?阅读百分比?I/O 使用情况?复制延迟?不幸的是,没有一个单一的指标可以始终适用于所有用例:您必须弄清楚您关心什么并对其进行衡量。

3) 您可以采取的实现此目标的另一种策略是使用写入关注、“多数”的“w”值和合理的超时(例如 10 秒)对日志记录集合进行写入。使用它,您将无法比复制更快地写入数据库。如果你开始出现超时,你就知道你需要缩减。如果您无法以足够快的速度写入以耗尽队列,那么您将在那时开始删除日志条目。

于 2012-06-22T21:45:14.310 回答