Mongodb Mongo提高延迟容忍度

Mongodb Mongo提高延迟容忍度,mongodb,pymongo,Mongodb,Pymongo,我有一个捕获工具,它每秒捕获大约1000个50字节的数据记录,将它们有效地实时存储到1千兆以太网中的MongoDB集合中 我想把服务器放到internet上,也就是说,捕获源和Mongod数据库将不再位于同一个LAN上。虽然吞吐量可能仍然足够(我在两点之间有100Mbps的双向服务,捕获速率为1000*50*8=400kbps,因此即使假设大量开销,这里的净空也有几个数量级),但延迟可能是一个问题 我是否可以调整Mongo,使其在几秒钟内不会确认每次写入,从而克服任何延迟问题?Mongo是否确认

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

我想把服务器放到internet上,也就是说,捕获源和Mongod数据库将不再位于同一个LAN上。虽然吞吐量可能仍然足够(我在两点之间有100Mbps的双向服务,捕获速率为1000*50*8=400kbps,因此即使假设大量开销,这里的净空也有几个数量级),但延迟可能是一个问题

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

我需要手动对它们进行批处理吗?

Mongo有一个概念,它基本上可以让您指定写操作的重要性,这可以提高您的速度,以换取潜在的数据丢失

具有“未确认”写问题的写操作根本不会等待主设备确认写操作——它基本上会将数据推入写套接字并继续进行。这非常快,但意味着如果在发送数据之前关闭套接字,或者在处理写操作之前退出主步骤,数据可能会丢失。在这种情况下,它是UDP-ish(尽管它仍然是TCP)

“已确认”和“已记录”写入问题将导致mongo驱动程序阻塞,直到服务器接收到写入并确认它为止(对于已记录的情况,一旦写入磁盘日志)。这比未确认的写入安全得多(但也慢得多),但如果在将op复制到辅助设备之前主设备退出,则仍有可能发生数据丢失

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


为什么要将服务器移出局域网?如果您只需要从外部访问它,您可以设置一个副本集,并使用它在局域网外进行复制。这样,您的写入操作仍然可以被复制到具有“日志”写入问题的本地主设备,并复制到辅助设备,而不必担心延迟会导致系统堵塞。

谢谢您:这正是我想知道的。是的,这是样本数据,所以这里有一些损失,不会有太多问题,因为如果有灾难性的问题,数据点也可以“历史”提取几天。如何设置未确认的写入?这是必须在mongo服务器和pymongo驱动程序中指定的内容吗?关于为什么要将数据库移出的好问题。它们是商业原因,而不是技术原因。是否可能有一个辅助服务器以一种容忍延迟的方式从主服务器提供数据?请参阅write concern-tl;dr:
w=0
。至于第二个问题,是的-mongo支持“副本集”——复制数据的节点集群。您将有1个主要和N个辅助。写操作将进入主系统,然后它将透明地同步到辅助系统。好的,只是一些反馈。在pymongo.MongoClient初始化中设置w=0使我的“互联网上”吞吐量(单个mondod实例)增加了4倍多,因此延迟现在基本上完全没有问题。根据我的使用案例,这对非关键(类似示例)数据非常有用。是的-它可以极大地提高您的能力,使您不会在等待IO时陷入困境,但有适当的检查来确保数据被记录,因为没有编程保证达到这一效果!