Node.js MongoDB性能:针对并发读/写的单个集合与多个集合

Node.js MongoDB性能:针对并发读/写的单个集合与多个集合,node.js,mongodb,concurrency,locking,database-performance,Node.js,Mongodb,Concurrency,Locking,Database Performance,我正在利用web服务器上的本地数据库从外部API同步某些数据。本地数据库将用于为web应用程序提供服务。我同步的数据对于访问web应用的每个用户都是不同的。由于同步作业是在用户从网页访问数据时周期性地但连续地写入数据库,因此我想知道在这里什么能给我带来最好的性能 由于同步作业一直在向数据库写入数据,因此我认为在完成之前,收集是锁定的。我认为拥有多个集合在这里会有所帮助,因为锁会锁定正在写入的特定集合,而不是每次锁定一个集合 我的想法正确吗?我基本上不希望读操作受到限制,因为写操作一直在锁定一个集

我正在利用web服务器上的本地数据库从外部API同步某些数据。本地数据库将用于为web应用程序提供服务。我同步的数据对于访问web应用的每个用户都是不同的。由于同步作业是在用户从网页访问数据时周期性地但连续地写入数据库,因此我想知道在这里什么能给我带来最好的性能

由于同步作业一直在向数据库写入数据,因此我认为在完成之前,收集是锁定的。我认为拥有多个集合在这里会有所帮助,因为锁会锁定正在写入的特定集合,而不是每次锁定一个集合


我的想法正确吗?我基本上不希望读操作受到限制,因为写操作一直在锁定一个集合。

一般来说,MongoDB中有大量关于锁粒度和锁的信息

一般来说,对于中小型值“multiple”并假设所有集合都是提前创建的,写入多个集合可能比使用单个集合更快,例如,如果您必须通过聚合管道执行连接,而不是执行单个集合/索引扫描,那么查询将变得笨拙,并且可能会变慢

如果您有如此多的集合,以至于打开了如此多的文件,以至于DB或OS开始从各自的缓存中逐出文件,那么性能将再次开始下降


创建集合也可能相对较慢,因此如果在加载时发生这种情况,可能对性能不是很好。

一般来说,MongoDB中有大量关于锁粒度和锁的信息

一般来说,对于中小型值“multiple”并假设所有集合都是提前创建的,写入多个集合可能比使用单个集合更快,例如,如果您必须通过聚合管道执行连接,而不是执行单个集合/索引扫描,那么查询将变得笨拙,并且可能会变慢

如果您有如此多的集合,以至于打开了如此多的文件,以至于DB或OS开始从各自的缓存中逐出文件,那么性能将再次开始下降


创建集合也可能相对较慢,因此如果在加载时发生这种情况,可能对性能不是很好。

在MongoDB中,集合级别锁定从来都不是一件事。在MongoDB 4.x附带WiredTiger存储引擎之前,有很多情况下整个数据库都会被锁定

现在,使用多线程和/或进程对单个集合进行WiredTiger写入非常高效。在MongoDB中分配非常重的写入负载的正确方法是将其分配到您的集合中


要测试分片配置与非分片配置,您可以轻松地并行启动这两种配置

收集级锁定在MongoDB中从来都不是一件事。在MongoDB 4.x附带WiredTiger存储引擎之前,有很多情况下整个数据库都会被锁定

现在,使用多线程和/或进程对单个集合进行WiredTiger写入非常高效。在MongoDB中分配非常重的写入负载的正确方法是将其分配到您的集合中

要测试分片配置与非分片配置,您可以轻松地并行启动这两种配置