【问题标题】:Copy table from Oracle to Redis将表从 Oracle 复制到 Redis
【发布时间】:2020-04-25 01:15:47
【问题描述】:

我在 Oracle 12g 中有一个表(1 cr 记录),每天凌晨 4:00 更新(来自其他/ETL 源),这是我的用户主表。 我正在使用此表来验证我的用户。

如此简单的方法是从数据库中获取它,但我想在 ETL 操作后每天将表移动/更新到 Redis 中,这样我就不必为每次身份验证连接数据库。

一种方法是用 Java 编写一个调度程序/Cron 作业,该作业将在 ETL 操作后运行以复制表记录并插入到 Redis 中。

有没有更好的方法呢?喜欢使用 oRedis 直接从 Oracle 数据库或其他方式更新 Redis 缓存?

PS:现在我正在使用 Redis 和 Java(redisson) 进行缓存。

我正在使用 Netflix Zuul 过滤器进行身份验证,因此每个请求都将在 Zuul 过滤器上进行身份验证,因此为每个请求连接数据库的操作似乎很昂贵。

【问题讨论】:

  • 能解释一下为什么你认为你的方式不好,或者你想改进什么?

标签: java oracle caching redis netflix-zuul


【解决方案1】:

一种方法是用 Java 编写一个调度程序/Cron 作业,该作业将在 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 可能会在数据库迁移/移动/主要维护操作期间更改。 What can cause an Oracle ROWID to change?

【讨论】:

    【解决方案2】:

    由于您已经知道 ETL 更新到您的表的时间,我认为您提出的任何建议都已经是最佳的。但这里对同一个问题有不同的看法。看看这个口味合不合适。 :)

    Oracle RAC 支持可靠的 CQN(连续查询通知),在 Oracle 世界中称为 DCN。这可以是对象更改事件侦听器或查询更改事件侦听器。如果您注册其中任何一个的侦听器以及 rowids 选项,您注册的组件将获得可以通过 select 直接获取的 rowid 以获取更新的行。这是您的选择会快得多(假设您尚未在 update_date 列上使用日期范围分区并选择那些)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 2011-11-09
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多