mongodb 来自单个实例的最大并行 find() 请求数
mongodb max number of parallel find() requests from single instance
在决定分片之前,我们可以从单个 mongodb 实例中压缩的最大理论并行请求数是多少?
考虑到数据库和索引适合内存,所有请求都是 find() 查询,根据索引字段获取单个文档。托管 OS 是 Ubuntu ,数据分区是 SSD。 ulimits 设置为最大值。
在我的笔记本电脑上对单个实例进行简单测试,我达到了接近 40k/sec ,之后平均执行时间开始显着增加,但想知道理论上限是多少?
视情况而定。如果您的活动数据集可以容纳在内存中——如果大多数请求不需要执行任何磁盘 I/O——那么您可以很容易地实现 24k+ 请求。如果不是在(更大的)单机上,那么至少使用具有多个辅助设备的副本集集群。
如果活动数据集比可用 RAM 大得多,那么您会遇到与任何其他数据库相同的问题。 MongoDB 的新引擎 WiredTiger(自 v3.0 起)的优点是透明压缩 - 它可以减少数据量和 I/O 从而提高性能 - 尽管压缩会增加 CPU加载.
为了提高性能,它确实有帮助:
- 如果访问次数最多的文档很小,那么它花费的时间更少
加载它们,传输它们,并减少在您的应用程序列表项中反序列化的时间
- 如果你在 find() 中使用投影,出于同样的原因
- 如果您使用批量操作来减少联网 I/O 和上下文切换
甚至MongoDB本身也有一个选项来限制传入连接的最大数量。它默认为 64k。
更多信息请参考link
在决定分片之前,我们可以从单个 mongodb 实例中压缩的最大理论并行请求数是多少?
考虑到数据库和索引适合内存,所有请求都是 find() 查询,根据索引字段获取单个文档。托管 OS 是 Ubuntu ,数据分区是 SSD。 ulimits 设置为最大值。
在我的笔记本电脑上对单个实例进行简单测试,我达到了接近 40k/sec ,之后平均执行时间开始显着增加,但想知道理论上限是多少?
视情况而定。如果您的活动数据集可以容纳在内存中——如果大多数请求不需要执行任何磁盘 I/O——那么您可以很容易地实现 24k+ 请求。如果不是在(更大的)单机上,那么至少使用具有多个辅助设备的副本集集群。
如果活动数据集比可用 RAM 大得多,那么您会遇到与任何其他数据库相同的问题。 MongoDB 的新引擎 WiredTiger(自 v3.0 起)的优点是透明压缩 - 它可以减少数据量和 I/O 从而提高性能 - 尽管压缩会增加 CPU加载.
为了提高性能,它确实有帮助:
- 如果访问次数最多的文档很小,那么它花费的时间更少 加载它们,传输它们,并减少在您的应用程序列表项中反序列化的时间
- 如果你在 find() 中使用投影,出于同样的原因
- 如果您使用批量操作来减少联网 I/O 和上下文切换
甚至MongoDB本身也有一个选项来限制传入连接的最大数量。它默认为 64k。 更多信息请参考link