php - 使用数据库作为缓存。重建与更新

标签 php mysql sql

我的问题涉及将整个 JSON 文档存储在数据库表中并定期刷新的最有效方法是什么。

本质上,我通过 cron 作业每 15 分钟调用一次 Google Analytics API,以提取有关我的网站的数据。我将此信息转储到 SQL 表中,以便我的前端应用程序可以搜索、排序和使用它。此 JSON 是分页的,因此一次只能通过 5,000 行。我将存储多达 100,000 个。

我想做的是优化重建表的方式。最简单的方法是截断表并插入 JSON 中的每一行。我感觉这是一个糟糕的方法,但也许我低估了 sql。

我还可以更新每个现有行并根据需要添加新行。但是,我正在努力解决如何删除可能不在最新 JSON 对象中的旧行。

或者也许我缺少一个更明显的解决方案。

最佳答案

这个问题的真正答案是取决于什么最有效。由于我不熟悉这些数据,我无法给您直接的答案,但可以给您一些指导。

首先,100 000 行对于 SQL Server 来说根本无法处理。因此,截断表并插入新值实际上可能是可行的,但是如果该数据大幅增长,这可能不是一个可以很好扩展的解决方案。这种方法的主要缺点是,在一段时间内表将是空的,这对于某些用户来说可能是一个问题。

此方法的摘要:

  1. 轻松快速地进行编码和维护。
  2. 截断总是很快,但插入会随着数据量的增加而变慢。
  3. 在截断和插入周期期间数据将离线。

插入和更新称为更新插入/合并。这种方法将涉及更多工作,但数据将始终在线。您面临的困难之一是使用 JSON 数据和 SQL 数据(查找 native JSON 数据集与 SQL 表中的差异),这将是无效且麻烦的。

所以我会为 JSON 创建一个临时表。该表将是最终生产表的精确副本。然后,我将使用左连接和右连接插入新数据并删除已删除的数据。您还可以为每一行创建一个散列,并比较这些散列以识别发生更改的行,然后仅进行必要的更新。所有这些转换都可以在一个简单的 SQL 脚本中处理。是的,你有点低估了 SQL...

此方法的摘要:

  1. 代码比较复杂,但编写简单的连接和哈希比较并不困难。
  2. 仅插入新值、更新更改的值并删除旧值。当扩展这个解决方案时,它最终将优于截断、插入循环。
  3. 数据始终保持在线。

如果您需要对此进行澄清,请直接询问。

关于php - 使用数据库作为缓存。重建与更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26706723/

相关文章:

javascript - 基于 PHP 条件在页面刷新时将复选框设置为 CHECKED

SQLXML 没有 XML 编码?

mysql - 是否需要修改 RegEx 模式才能与 MySql 中的 SQL 一起使用?

mysql - Perl DBI MySQL 插入占位符和外键

mysql - 在 MySQL 中存储 BINARY 的优点

php - 是否可以使用 Joomla 一次运行多个更新查询?

MySQL使用varchar列进行分表查询

php - 有没有办法直接从 cPanel 文件管理器中的 URL 上传文件

PHP MySQL ETL。我应该使用 ETL 工具、存储过程还是 php 脚本?

php - 设置多个包含路径?