我的问题涉及将整个 JSON 文档存储在数据库表中并定期刷新的最有效方法是什么。
本质上,我通过 cron 作业每 15 分钟调用一次 Google Analytics API,以提取有关我的网站的数据。我将此信息转储到 SQL 表中,以便我的前端应用程序可以搜索、排序和使用它。此 JSON 是分页的,因此一次只能通过 5,000 行。我将存储多达 100,000 个。
我想做的是优化重建表的方式。最简单的方法是截断表并插入 JSON 中的每一行。我感觉这是一个糟糕的方法,但也许我低估了 sql。
我还可以更新每个现有行并根据需要添加新行。但是,我正在努力解决如何删除可能不在最新 JSON 对象中的旧行。
或者也许我缺少一个更明显的解决方案。
最佳答案
这个问题的真正答案是取决于什么最有效。由于我不熟悉这些数据,我无法给您直接的答案,但可以给您一些指导。
首先,100 000 行对于 SQL Server 来说根本无法处理。因此,截断表并插入新值实际上可能是可行的,但是如果该数据大幅增长,这可能不是一个可以很好扩展的解决方案。这种方法的主要缺点是,在一段时间内表将是空的,这对于某些用户来说可能是一个问题。
此方法的摘要:
- 轻松快速地进行编码和维护。
- 截断总是很快,但插入会随着数据量的增加而变慢。
- 在截断和插入周期期间数据将离线。
插入和更新称为更新插入/合并。这种方法将涉及更多工作,但数据将始终在线。您面临的困难之一是使用 JSON 数据和 SQL 数据(查找 native JSON 数据集与 SQL 表中的差异),这将是无效且麻烦的。
所以我会为 JSON 创建一个临时表。该表将是最终生产表的精确副本。然后,我将使用左连接和右连接插入新数据并删除已删除的数据。您还可以为每一行创建一个散列,并比较这些散列以识别发生更改的行,然后仅进行必要的更新。所有这些转换都可以在一个简单的 SQL 脚本中处理。是的,你有点低估了 SQL...
此方法的摘要:
- 代码比较复杂,但编写简单的连接和哈希比较并不困难。
- 仅插入新值、更新更改的值并删除旧值。当扩展这个解决方案时,它最终将优于截断、插入循环。
- 数据始终保持在线。
如果您需要对此进行澄清,请直接询问。
关于php - 使用数据库作为缓存。重建与更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26706723/