Скопировать таблицу из Oracle в Redis

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

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

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

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

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

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


person Puneet Purohit    schedule 07.01.2020    source источник
comment
Можете объяснить, почему вы считаете свой путь нехорошим, или что вы хотите улучшить?   -  person user7294900    schedule 15.01.2020


Ответы (2)


Один из способов — написать задание планировщика/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

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

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

person lazylead    schedule 15.01.2020

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

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

Ссылки: https://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28815

person Ed Bighands    schedule 21.01.2020