这是我的情况。我有一个专为多个用户设计的服务器应用程序,因此同时有很多读/写操作。答案需要快速。
目前我在内存中缓存了所有数据,因此数据读取/写入操作的速度与我们预期的一样快。为防止数据锁定导致我出现问题,我使用Queue排列用户的请求,让他们进入处理程序一个接一个。
但很快我发现了一个问题。程序一次只能处理一个请求。即使程序基准计时器报告我使用零毫秒进行处理,但仍然有限制在一秒钟内处理请求。现在我每秒处理大约100次。
所以我正在寻找更多并发的方法,比如在同一时间处理8个请求的8个进程。那将是如此美好。但是数据共享存在更大的问题,我不想重新发明轮子。所以我检查了mongodb,redis和sqlite。
这是我的作业,如果我错了,请纠正我,非常感谢
正如他们所说,mongodb和redis非常快,但他们使用相同的机制,他们可以一次处理一个请求,这不是我想要的。所以sqlite更接近,多个进程可以同时打开同一个db文件并读取,痛苦就是它的写锁定(我没有多少更好的sqlite3中的新锁工作)。
这是我的问题,这种情况是否有坚实而良好的解决方案?如果我将写入过程分开,那会有帮助吗?
感谢任何评论
答案 0 :(得分:0)
MongoDB的解决方案是分片。 MongoDB sharding基本上允许你在问题上投入更多的处理器。更多处理器=更多写线程。
每个MongoDB实例只有一个写线程。 Sharding提供更多实例,因此允许更多写入。
然而,这里存在更大的问题。磁盘吞吐量。
如果整个内存在RAM中,我已经让Mongo运行超过1000次插入/秒。但是大多数人使用Mongo作为具有实际文件支持的数据库。因此,如果您使用Mongo进行非常繁重的写入操作,则必须准备好能够接受该级别吞吐量的磁盘。
同样,磁盘吞吐量问题的解决方法是分片。构建更多的分片,你将获得更少的写入/磁盘,并且基本上更少锁定。