Liferay импортирует миллионы данных с помощью Service API

У меня есть устаревшая таблица, содержащая около 1,7 миллиона записей. Я использую API-интерфейс Liferay для создания сервисов, чтобы вставлять эти записи в таблицу Liferay в соответствии с предложением везде использовать сервисный API-интерфейс Liferay для работы с таблицами Liferay.

Первоначально я использовал (Entity)LocalServiceUtil.getEntities(-1,-1) для извлечения всех записей и вставки по одной, что, как я понял, является безрассудством для чтения 1,7 миллиона записей за один раз.

Затем я читаю записи из базы данных в дельтах 5000. Хотя это работает, это требует своего сладкого времени. Есть ли другой способ ускорить этот процесс? Или другое значение дельты решит проблему?


person Sandeep Nair    schedule 18.05.2015    source источник
comment
Используете ли вы ServiceBuilder для доступа к устаревшей таблице? Как вы говорите: используйте сервисный API Liferay для работы с таблицами Liferay.   -  person Tobias Liefke    schedule 18.05.2015
comment
Да. Я использую построитель сервисов как для источника, так и для назначения.   -  person Sandeep Nair    schedule 18.05.2015
comment
А целевая таблица — это таблица Liferay?   -  person Tobias Liefke    schedule 18.05.2015
comment
Да. Я могу извлечь данные из внешнего источника данных, используя конфигурацию в ext-spring.xml, и передать данные в Liferay, используя источник данных по умолчанию.   -  person Sandeep Nair    schedule 18.05.2015


Ответы (1)


Это правда, что вы должны использовать API для доступа к базе данных Liferay.

Но важно знать, почему вы должны это сделать:

  • Поскольку макет базы данных не задокументирован и может изменяться без предварительного уведомления между младшими версиями.
  • Потому что вы можете пропустить неявное ограничение, которое приведет к ложным ошибкам.
  • Потому что изменение базы данных работающего портала Liferay может привести к неверным записям кэша.

Но если ни один из них не применим, потому что

  • вы заполняете таблицы ваших сущностей (где вы знаете точное расположение) и
  • вы остановили работающий портал Liferay

тогда вы можете использовать функции вашей базы данных для массовых операций вместо использования вашего сервиса.

person Tobias Liefke    schedule 18.05.2015