我有一个严重的问题。我正在研究一个应该在一小时内处理超过500,000条记录的代码。通常,这些记录中的每一个都有另一个表中的数据,我必须在处理时查找这些数据。
我目前正在使用hibernate。我尝试使用具有多个线程的Executor服务来处理每个100个记录 - 这样,10个线程,每个处理100个记录,当线程完成时,它离开池,另一个线程进入。
但问题是,速度没有提高。我注意到,我运行的线程越多,整个过程就越慢。目前,线程处理100条记录需要2分钟。当我运行10个线程时,需要20分钟,这与在1个线程中运行一千条记录基本相同!
我认为这些线程应该同时运行。我可以使用不同的实现吗?
请注意,我正在使用具有8个内核和64GIG RAM的服务器。
由于
答案 0 :(得分:0)
如果我是你,我会在Jprofiler这样的配置文件下运行该应用程序,并查看处理卡住的位置。你会在30分钟内知道问题是什么。
答案 1 :(得分:0)
我通过以最轻的形式查询hibernate实体解决了这个问题。我不是用所有变量查询整个对象的列表,而是仅用它们的id查询整个对象的列表,将它们发送到线程,然后根据我需要的特定列查询每个对象。
加快了这个过程。我的大多数表都有很多专栏,其中大部分都是我在处理过程中不需要的。