database-design - 如何设计架构以读取同时更新的巨大数据库表
问题描述
我正在为特定的架构设计寻找比我更好的解决方案。
现在,我们的 Oracle 上有一个巨大的用户表(大约 3000 万行并且还在增长),它正在由一个每天添加/删除行的现有服务更新,每天只有大约 10k 行。
我们应该创建一个需要获取所有用户的新服务,对其进行一些统计并打印报告。我不能在数据库中做这个报告,因为一些额外的信息将来自其他微服务。
当然,查询需要很长时间才能返回,而且我们需要分批进行,因为我们的新服务将无法在内存中处理所有这些。
所以我正在考虑为该表创建一个内存缓存(Redis 或其他),使用 Read-Through 策略,读取时间会减少,但我担心最终这个数据库会增长,我们会用完几个月后的记忆。
另一个想法是,我们可以尝试扩展我们的 Oracle 以增加读取实例,然后对具有特定范围的大量查询进行多线程处理。
在这种情况下我还有哪些其他选择?
提前致谢!
解决方案
使用 Redis 将是提供快速访问数据的一个不错的选择。
我不明白您为什么这么说,但没有提及您的数据集的任何大小:
我担心这个数据库最终会增长,我们将在几个月内耗尽内存。
如果最终需要更多 RAM,您可以部署一个 Redis 集群,它将数据分布在许多节点上。
您有多个选项可以从 Oracle 表中捕获更新:
Oracle 变更数据捕获
使用 JDBC 数据库更改通知 (DCN)
您将收到包含已更改信息的事件,并且您将能够使用此方法在 Redis 或任何缓存中创建/更新密钥。
推荐阅读
- sql-server - 如果值返回为无穷大,则默认为 0 - SQL 报告
- url - 如何在 Typo3 9.5.0 上获取 News 7.0.7 的口语 URL
- hibernate - 无法加载表单标记处理程序
- java - 如何在我的表单 liferay 7 中插入 ScreenName?
- javascript - 每 x 秒从远程服务器重新加载图像而不重新加载整个页面
- java - 如何减小 jre 大小以与应用程序捆绑?
- excel - if else 语句(基本)
- python-3.6 - Python 中的 Google Cloud Speech-to-Text 使用音频流的 websockets
- encryption - 加密/解密个人数据
- java - 为什么 Spring doc 说浏览器只支持 GET 和 POST 方法