这是我的情况。我有一个供多个用户使用的服务器应用程序,因此有很多同时的读/写操作。响应需要快速。

目前,我将所有数据缓存在内存中,因此数据阅读/写作操作与我们预期的快速。为了防止数据锁定我使用队列将用户的请求排列起来的问题,请使其进入处理程序流程。一个。

但是很快我发现了一个问题。程序只能一次处理一个请求。即使程序基准计时器也报告了我使用零MS来处理,但仍有一秒钟内处理请求的限制。现在,我每秒处理了大约100次。

因此,我正在寻求更多并发的方法,例如8个过程来同时处理8个请求。那会很好。但是数据共享存在更大的问题,我不想重新发明轮子。因此,我检查了MongoDB,Redis和Sqlite。

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

正如他们所说的那样,MongoDB和Redis确实很快,但是他们使用相同的机制,可以一次处理一个请求,这不是我想要的。

因此,sqlite几乎更近,多个进程可以同时打开相同的数据库文件并阅读,痛苦是其写入锁(我没有sqlite3中的新锁定得多)。

这是我的问题,在这种情况下是否有坚实而良好的解决方案?如果我将写入过程分开,会有所帮助吗?

感谢您的任何评论

有帮助吗?

解决方案

使用MongoDB的溶液正在分片。 mongodb碎片 基本上允许您将更多的处理器扔到问题上。更多处理器=更多写线。

每个MongoDB实例只有一个写线。碎片提供了更多的实例,因此可以提供更多的写作。

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

如果整个东西都在RAM中,我让Mongo运行1000多个插入 /秒。但是大多数人将Mongo用作具有实际文件备份的数据库。因此,如果您使用Mongo进行真正的沉重写作,则必须准备好可以接受该吞吐量的磁盘。

同样,围绕磁盘吞吐量问题的方式是碎片。构建更多的碎片,您将获得更少的写入 /磁盘,并且基本上将锁定在周围。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top