【发布时间】:2021-11-30 03:23:32
【问题描述】:
所以我们的网站有不断增长的数据,我们通常使用 mysql 视图来查看记录列表,以便我们可以简化代码中的选择查询。从那以后一直是这种做法,但是随着时间的推移,这些需求给 SQL 视图带来了很多复杂性,例如 sum、count of 等。所以我们的大多数视图都相对较慢。
为了保留在 MySQL 视图中创建的逻辑(因为这是我们的客户偏好),我们确实尝试了以下方法:
选项 1 是:
- 启动 RDS 2
- 从我们的 RDS 1 的视图中选择 *
- 插入到 RDS 2 中的所有结果中
- 连接 Lists API 以从 RDS 2 获取数据
#4 它返回很快,因为数据库不会重新计算总和,不再计数,我们只需要获取结果。 #2 & #3:
- 我们的 API 服务器正在运行 nodejs,它连接到这 2 个数据库。
- 每个列表/表格我只保存 1000 个。因此,如果我有 6 个视图 = 正在创建 6 个平面表。
- 至少每分钟发生一次。在重复整个过程之前,我们实施了一个标志来检查是否有正在进行的过程。
此选项的问题:它使我们的 RDS 1 和 API 服务器紧张。
选项 2 是:
- 在同一个 RDS 1 上创建另一个表
- 插入到从 sql 视图中选择
- 连接列表 API 以从创建的平面表中获取数据
此选项的问题:尚未在我们的测试环境中对其进行测试,但在我的本地进行 #2 时,无法更新某些表行,并且出现死锁错误。
不确定我是否走在正确的轨道上,或者除了重新编码或修复我们的数据库结构或完全不使用 MySQL 视图之外,这是否还有解决方案。
提前谢谢你。
【问题讨论】:
-
您似乎需要某种缓存,而不是第二个数据库或表。
-
是的,就像 redis。然后我只需要启动另一个副本阅读器,这样我就可以将所有选择查询重定向到那个而不影响其他事务...
标签: mysql node.js amazon-web-services amazon-rds