如何将多个请求并行化为mongoDb?

时间:2013-10-07 05:54:51

标签: java multithreading mongodb

我使用的是一个独立的Mongo数据库服务器,没有像复制或分片等特殊拓扑。目前我有一个问题,即mongo DB不支持超过500个并行请求。请注意,我只使用一个MongoClient实例,其余的线程用于插入。我使用java执行器框架来创建线程,这些线程用于将数据插入集合[所有插入在同一集合中]

1 个答案:

答案 0 :(得分:1)

您应该在将请求发送到数据库之前对请求进行排队。没有必要并行地从您的数据库中请求500件事。请记住,单个请求带有一些内存明智的成本,锁定智能等等。实际上你是通过立刻询问你的数据库来浪费资源 - 记住我的意思是这个要求明智而不是数据明智。

因此,请使用队列(或更多)并汇总请求。从那个池中你可以提供你的工作线程(假设5或10就足够了)就是这样。

查看java并发包中的Future接口。在这里使用异步交换处理看起来就像具有最高吞吐量和最低资源影响的东西。

但首先检查MongoDB驱动程序。如果他们已经以这种方式实施它,我不会感到惊讶。如果是这种情况,您只需要通过使用队列来限制自己,只允许数据库驱动程序一次处理10或100个请求。做一些性能检查,调整发送到数据库的实际请求数。