我有一个包含300万条记录的数据库表。一个java线程从表中读取10,000条记录并处理它。处理后,它跳到下一个10000,依此类推。为了加速,我有25个线程完成相同的任务(读取+处理),然后我有4个物理服务器运行相同的Java程序。所以有效地,我有100个线程做同样的工作(阅读+处理)。在多个进程间平均分配数据库记录
我使用的策略是有一个SQL过程,抓取下一个10,000条记录并将它们标记为由特定线程处理。但是,我注意到线程似乎在等待一段时间,试图调用该过程并获得响应。还有什么其他的策略可以用来加速这个数据选择过程。
我的数据库服务器是MySQL和编程语言是Java
我用这种方法可以看到的唯一问题是“写入”队列会被卡住。瓶颈处于驱动器的读/写周期,我不认为他能做任何事情。 – 2012-07-16 16:55:08
@Tomasz:使用jms方法,如果消费者由于某些原因而死亡,那么我将拥有一组不会处理的消息,除非我提供某种额外的检查机制。用我目前的程序方法,我能够绕过这种情况。如果一台服务器出现故障,其余的服务器将继续工作并承担额外的负载。 – prashant 2012-07-16 18:23:52
@prashant:如果您将消费者配置为事务性消息,如果消费者无法处理某些消息(通过死亡,抛出异常,无论如何),消息代理会将该消息放回队列中,另一位消费者会将其选中。 – 2012-07-16 18:28:06