Инициализация расположения таблицы разделов кластера... в Hazelcast 3.9.1 занимает слишком много времени
Я пытаюсь создать проект службы Hazelcast, в котором я буду подписываться на хранилище данных RDBMS (Oracle DB 12c), создать компонент POJO/Java на лету, используя отражение, а затем выполнить синтаксический анализ этого объекта Java Bean для сопоставления JDBC ResultSet как строки результата. значения в объект Java Bean и загрузите эти сопоставленные объекты в распределенную карту.
Я проверил объем данных двух таблиц, из которых я пытаюсь загрузить в Hazelcast IMap, и он составляет всего 0,0625 и 0,0316 МБ. Так что это более простая реализация Hazelcast, просто инициализирующая два параллельных экземпляра / узла на localhost.
Я определяю в методе Java Main общее время выполнения с момента создания класса Java POJO и создания каждого из соответствующих объектов и их загрузки в Hazelcast IMAP.
Насколько я понимаю, это занимает слишком много времени с точки зрения системы, потому что мы наблюдаем похожее поведение даже в тестовых и продуктовых блоках с системными характеристиками в 3-4 раза лучше, чем приведенный ниже. Пожалуйста, помогите дать советы о том, что не так или это обычное первое разделение в рамках IMDG Hazelcast с двумя узлами в кластере.
Системные характеристики следующие:
Macbook Pro 2014 Процессор: 2,6 ГГц Intel Core i5 Память: 8 ГБ 1600 МГц DDR3
Пожалуйста, найдите журналы...
26 февраля 2018 10:30:39 com.hazelcast.internal.partition.impl.PartitionStateManager ИНФОРМАЦИЯ: [xx.xxx.xx.xxx]:5702 [dev] [3.9.1] Инициализация расположения таблицы разделов кластера... Количество записей в карте пользователя: 883
Количество записей в userMaster Map: 7499
Приблизительная продолжительность:92520 миллисекунд. 26 февраля 2018 10:32:10 com.hazelcast.core.LifecycleService ИНФОРМАЦИЯ: [xx.xxx.xx.xxx]:5701 [dev] [3.9.1] [xx.xxx.xx.xxx]:5701 - это SHUTTING_DOWN
1 ответ
Хотя я не смог решить проблему с MapLoader, основная проблема с ResultSet setFetchSize()
, Это было установлено как 10, что вызывало слишком высокий сетевой ввод / вывод. Как только я увеличился, чтобы сказать 1000 или больше, выходит намного быстрее.
ЖУРНАЛЫ:
С обычным FetchSize(): prepareStatement.getFetchSize():10 февраля 28, 2018 19:24:51 com.hazelcast.internal.partition.impl.PartitionStateManager ИНФОРМАЦИЯ: [xx.xxx.xx.xx]:5702 [dev] [3.9.1] Инициализация расположения таблицы разделов кластера...
Количество записей в userMaster Map: 26464
Продолжительность прибл. Составила:276178 миллисекунд.
С большим FetchSize ():
prepareStatement.getFetchSize():1000 28 февраля 2018 г. 19:31:06 com.hazelcast.internal.partition.impl.PartitionStateManager INFO: [xx.xxx.xx.xx]]:5702 [dev] [3.9.1] Инициализация расположения таблицы разделов кластера... responseCode: 404 url: http://localhost:8080/mancenter/collector.do Количество записей в userMaster Map: 26464
Продолжительность прибл. Составила:11279 миллисекунд.
Я бы, конечно, разместил серверную и клиентскую версию кода для помощи с MapLoader, которая звучит как лучший подход.
В качестве дополнительной помощи, можете ли вы предоставить некоторую информацию о том, extends Mapload/Mapstore technique
может быть написано для объектов / классов, которые создаются Runtime, так как меньший пример, который я пробовал отдельно, был с фиксированным Java Bean.
Я помню документацию с упоминанием MapStoreFactory()
вариант. Будет ли это полезно.