Mongo增加延迟容忍度

时间:2014-10-08 14:41:41

标签: mongodb pymongo

我有一个捕获工具,每秒捕获大约1000个50字节的数据记录,在1千兆位以太网网络中实时存储到MongoDB集合中。

我想把服务器带到互联网上,也就是说,捕获源和Mongod数据库将不再在同一个局域网上。虽然吞吐量仍然可能足够(我在两点之间有100Mbps双向服务,并且捕获速率为1000 * 50 * 8 = 400kbps,因此即使假设大量开销,也有几个数量级的余量),延迟很可能成为一个问题。

我可以调整Mongo以便确认每次写入几秒钟,从而克服任何延迟问题吗? Mongo是否确认每次写作?我的工具都是使用Pymongo用Python编写的,每次发生数据点事件时都会触发原子写入。

我是否必须手动批量处理它们?

1 个答案:

答案 0 :(得分:1)

Mongo具有write concerns的概念,它基本上允许您指定写入的重要性,这可以帮助您快速换取潜在的数据丢失。

使用"未确认"进行写入写关注不会等待主要来确认写入 - 它基本上将数据推入写入套接字并继续前进。这非常快,但意味着如果在发送数据之前关闭套接字,或者在处理写入之前主要降低数据,则数据可能会丢失。在这种情况下它是UDP-ish(虽然它仍然是TCP)。

"承认"并且" journaled"写关注将导致mongo驱动程序阻塞,直到服务器收到写入并确认它(并且在记录的情况下,一旦它被写入磁盘日志)。这比未确认的写入更安全(但也更慢),但如果主要在op被复制到辅助节点之前降级,则仍有可能导致数据丢失。

"多数"写入关注将导致mongo驱动程序阻塞,直到服务器确认写入,副本集中的大多数节点已确认写入。这是最慢的写入模式,但是最耐用,并且减轻了许多最终的一致性问题。

为什么要将服务器移出局域网?如果您只需要从外部访问它,您可以设置副本集并使用它复制出局域网。这样,你的写作仍然可以通过" journaled"写下问题并将其复制到辅助设备,而不必过多担心延迟系统的延迟。