首页 > 解决方案 > 如何设计架构以读取同时更新的巨大数据库表

问题描述

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

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

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

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

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

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

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

提前致谢!

标签: database-designarchitecture

解决方案


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

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

我担心这个数据库最终会增长,我们将在几个月内耗尽内存。

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

您有多个选项可以从 Oracle 表中捕获更新:

  1. Oracle 变更数据捕获

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

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


推荐阅读