Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 可以从多个进程同时访问数据库或内存文件吗?_Mongodb_Sqlite_Concurrency_Redis_Database - Fatal编程技术网

Mongodb 可以从多个进程同时访问数据库或内存文件吗?

Mongodb 可以从多个进程同时访问数据库或内存文件吗?,mongodb,sqlite,concurrency,redis,database,Mongodb,Sqlite,Concurrency,Redis,Database,这是我的情况。我有一个为多个用户设计的服务器应用程序,因此在同一时间有很多读/写操作。而且反应要快 目前,我将所有数据缓存在内存中,因此数据读取/写入操作的速度与我们预期的一样快。为了防止数据锁定给我带来问题,我使用队列将用户的请求排成一行,让他们逐个进入处理程序进程 但很快我发现了一个问题。程序一次只能处理一个请求。即使程序基准计时器报告我它使用零毫秒来处理,但在一秒钟内处理请求仍然有限制,比如说现在我每秒处理100次 所以我在寻找一些更并发的方法,比如8个进程同时处理8个请求。那太好了。但是

这是我的情况。我有一个为多个用户设计的服务器应用程序,因此在同一时间有很多读/写操作。而且反应要快

目前,我将所有数据缓存在内存中,因此数据读取/写入操作的速度与我们预期的一样快。为了防止数据锁定给我带来问题,我使用队列将用户的请求排成一行,让他们逐个进入处理程序进程

但很快我发现了一个问题。程序一次只能处理一个请求。即使程序基准计时器报告我它使用零毫秒来处理,但在一秒钟内处理请求仍然有限制,比如说现在我每秒处理100次

所以我在寻找一些更并发的方法,比如8个进程同时处理8个请求。那太好了。但是数据共享有一个更大的问题,我不想重新发明轮子。所以我检查了mongodb、redis和sqlite

这是我的作业,如果我错了,请纠正我,谢谢

mongodb和redis的速度确实很快,但它们使用了相同的机制,一次可以处理一个请求,这不是我想要的

因此sqlite更加紧密,多个进程可以同时打开同一个db文件并进行读取,痛苦在于它的写锁(我不知道sqlite3中的新锁工作得有多好)

我的问题是,对于这种情况,是否有可靠且良好的解决方案?如果我把写过程分开,会有帮助吗


感谢您的评论

MongoDB的解决方案是切分。基本上允许您在这个问题上投入更多的处理器。更多处理器=更多写入线程

每个MongoDB实例只有一个写线程。分片提供了更多的实例,因此允许更多的写入

然而,这里有一个更大的问题。磁盘吞吐量

我已经让Mongo运行了超过1000次插入/秒,如果整个过程都在RAM中的话。但大多数人使用Mongo作为数据库,并提供实际的文件支持。因此,如果您使用Mongo进行非常繁重的写操作,您必须准备能够接受该吞吐量水平的磁盘


同样,解决磁盘吞吐量问题的方法是分片。构建更多的碎片,您将获得更少的写入/磁盘和基本上更少的锁定。

并不是所有的服务器逻辑过程都需要相应的,我正在尝试优化非相应部分。对于sqlite,请参阅:感谢您纠正我有关monongdb解决方案的问题。我要把它挖得更深一点!谢谢!