Скопировать таблицу из Oracle в Redis - PullRequest
2 голосов
/ 07 января 2020

У меня есть одна таблица ( 1 cr records ) в Oracle 12g, которая обновляется (из другого источника / источника ETL) каждый день в 4:00, которая является моей главной таблицей пользователей. Я использую эту таблицу для аутентификации моего пользователя.

Такой простой способ - получить его из базы данных, но вместо этого я думаю о том, чтобы перемещать / обновлять таблицу в Redis каждый день после операции ETL, чтобы мне не пришлось подключаться БД для каждой аутентификации.

Один из способов - написать задание планировщика / Cron в Java, которое будет запускаться после операции ETL для копирования записи таблицы и вставки в Redis.

Есть ли лучший способ сделать это? например, использовать oRedis для обновления кэша Redis непосредственно из Oracle базы данных или чего-то еще?

PS: сейчас я использую Redis с Java ( redisson ) для кэширования.

Я использую Netflix Zuul фильтр для аутентификации, поэтому каждый запрос будет проходить аутентификацию на фильтре Zuul, поэтому подключение базы данных для каждого запроса кажется дорогостоящей.

Ответы [ 2 ]

3 голосов
/ 15 января 2020

Один из способов - написать задание планировщика / Cron в Java, которое будет запускаться после операции ETL для копирования записи таблицы и вставки в Redis.

Oracle поддерживает хранимые процедуры который может быть записан в Java https://docs.oracle.com/cd/B19306_01/java.102/b14187/chfive.htm В этом случае ваш код будет ближе к данным, поэтому он может работать намного быстрее , чем просто приложение java для настольных компьютеров.

Затем вам может потребоваться запланировать ежедневную синхронизацию, используя Oracle DBMS_SCHEDULER https://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72235

Самый быстрый доступ к таблице oracle - это доступ по rowid https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm Таким образом, период синхронизации зависит от того, как часто вставляются строки. Вам необходимо получить доступ к вашей таблице только для ежедневных / почасовых данных, используя rowid .

Обратите внимание, что rowid может быть изменено во время переноса базы данных / перемещения / основных действий по обслуживанию , Что может вызвать изменение Oracle ROWID?

0 голосов
/ 21 января 2020

Поскольку вы уже знаете время обновления ETL для своей таблицы, я думаю, что все, что вы предложили, уже является оптимальным. Но вот другая точка зрения на ту же проблему. Посмотрите, подходит ли этот аромат. :)

Oracle RA C поддерживает надежные CQN (непрерывные уведомления о запросах), называемые в мире Oracle DCN. Это может быть либо прослушиватель события изменения объекта, либо прослушиватель события изменения запроса. Если вы зарегистрируете прослушиватель для одного из них вместе с параметром rowids, ваш зарегистрированный компонент получит значения rowid, которые вы можете получить напрямую через select, чтобы получить обновленные строки. Это ваш выбор будет гораздо быстрее (при условии, что вы еще не используете раздел диапазона дат в столбце update_date и выбираете их).

Refs: https://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28815

...