【问题标题】:How to design architecture to read a huge database table being updated simultaneously如何设计架构以读取同时更新的巨大数据库表
【发布时间】:2019-10-02 23:36:20
【问题描述】:

我正在为特定的架构设计寻找比我更好的解决方案。

现在,我们的 Oracle 上有一个巨大的用户表(大约 3000 万行并且还在增长),该表正在由每天添加/删除行的现有服务更新,每天只有大约 10k 行。

我们应该创建一个需要获取所有用户的新服务,对其进行一些统计并打印报告。我不能在数据库中做这个报告,因为一些额外的信息会来自其他微服务。

当然,查询需要很长时间才能返回,而且我们需要分批进行,因为我们的新服务将无法在内存中处理所有内容。

所以我正在考虑为该表创建一个内存缓存(Redis 或其他),使用 Read-Through 策略,读取时间会减少,但我担心最终这个数据库会增长,我们会几个月后内存耗尽。

另一个想法,我们可以尝试扩展我们的 Oracle 以增加读取实例,然后多线程处理具有特定范围的大量查询。

在这种情况下我还有哪些其他选择?

提前致谢!

【问题讨论】:

  • 你能告诉我们更多关于尺寸的信息吗?如您所知,您可以部署 Redis(和其他解决方案)多个分片以允许您进行扩展,如果需要,您还可以使用 Redis On Flash 将一些值存储到磁盘并保持您的数据库非常快。
  • 在我的查询中,我只需要带上有用的列,每行的数据少于500字节。唯一的问题是我们的数据库每天都在增长。

标签: database-design architecture


【解决方案1】:

使用 Redis 将是提供快速访问数据的不错选择。

我不明白您为什么这么说,但没有提及您的数据集的任何大小:

我担心这个数据库最终会增长,几个月后我们的内存就会用完。

如果最终需要更多 RAM,您可以部署一个 Redis 集群,将数据分布在多个节点上。

您有多种选择从 Oracle 表中捕获更新:

  1. Oracle 变更数据捕获

  2. 使用 JDBC 数据库更改通知 (DCN)

您将收到信息已更改的事件,并且您将能够使用此方法在 Redis 或任何缓存中创建/更新密钥。

【讨论】:

  • 谢谢,数据集不大,每行大约 500 字节,考虑到我只会获取有用的列,如何测量 Redis 中使用的 RAM?
  • 刚刚检查了Change Data Capture,如果我让数据库通知Redis有关更改,那么这将是Write Around缓存设计?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2018-04-15
  • 2019-02-13
相关资源
最近更新 更多