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

时间:2014-11-03 01:56:49

标签: php mysql sql

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

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

我尝试做的是优化重建表格的方式。最天真的方法是截断表并插入JSON中的每一行。我觉得这是一个糟糕的方法,但也许我低估了sql。

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

或许我错过了一个更明显的解决方案。

1 个答案:

答案 0 :(得分:1)

这个问题的真正答案在于它取决于什么是最好的。由于我不熟悉数据,我无法给你一个直截了当的答案,但有一些指导。

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

这种方法的总结:

  1. 简单快捷的编码和维护。
  2. Truncate总是很快但插入会随着音量的增加而减慢。
  3. 截断和插入周期期间数据将处于脱机状态。
  4. 随着我们的进行插入和更新被称为Upserts / Merges。这种方法将涉及更多工作,但数据将始终在线。您面临的困难之一是使用JSON数据和SQL数据(查找本机JSON数据集与SQL表相比的差异),这将是无效且繁琐的。

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

    这种方法的总结:

    1. 代码更复杂,但编码简单连接和哈希比较并不困难就可以了。
    2. 仅插入新值,更新更改的值并删除旧值。在扩展此解决方案时,它最终将胜过截断,插入周期。
    3. 数据一直在线。
    4. 如果您需要澄清一下,请随时提出。