У меня есть демо-счет, который должен обрабатывать сотни тысяч данных очень быстро. Я применил ExecutorSerivce
для параллельной обработки. Это увеличило скорость, но не очень. Для обработки 1 000 000 записей требуется около 2,5-3 часов. Как я могу сделать это быстрее, чем обрабатывать эти данные за полчаса?Как сделать приложение Java быстрее?
Я написал следующее для настройки выполнения:
-Xms2048M -Xmx2048M -XX:MaxPermSize=256m
Я пытался реализовать потребителей модель Producer с 1 производителем и 4 потребителей. Каждый список может содержать 10 000 записей.
ArrayBlockingQueue<BillableList> list =new ArrayBlockingQueue<BillableList>(10);
ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Consumer("pool1", list));
threadPool.execute(new Consumer("pool2", list));
threadPool.execute(new Consumer("pool3", list));
threadPool.execute(new Consumer("pool4", list));
Future producerStatus = threadPool.submit(new Producer("Producer", list));
producerStatus.get();
threadPool.shutdown();
Кроме того, при обновлении записей в базе данных я получаю много исключений с превышением времени ожидания блокировки базы данных. Это связано с тем, что разные потребители пытаются использовать одного и того же пользователя одновременно? Как я могу заставить разных потребителей брать разные данные из списка ArrayBlockingQueue
?
Шаг 1: узнайте, почему это медленно. Время выполнения журнала операций высокого уровня, использование профилировщика, ведение журнала GC, чтобы узнать, если вы перепутаете память ... – millimoose
Получите очень быстрый массив SSD для БД. –
также ~ purrrrformance ~~~~ –