【问题标题】:store temporary results in a seperate database table将临时结果存储在单独的数据库表中
【发布时间】:2014-11-08 14:11:29
【问题描述】:

我想知道什么是减轻对数据库的昂贵查询的好方法。例如使用大量记录、关节和计算的查询。

所以我想我会每 20 分钟(左右)执行一次这些昂贵的查询,并为用户提供来自存储这些昂贵查询结果的特殊表的存储结果。这是一个好方法,还是你会选择一种平面文件类型的缓存系统来存储来自数据库的结果?我读到正常的文件系统比较慢。

如果有人能在这个问题上启发我,我将不胜感激。

【问题讨论】:

  • 你可以有一个 memcache 服务器,所以加载必要的查询一次,将结果附加到 memcache 服务器并根据需要检索/nuke。虽然这需要专业的网络托管计划或虚拟服务器
  • Ha Thx Daryl,恐怕我不能依赖内存缓存。恐怕它是一个共享主机。 :( 对这种情况有什么想法吗?

标签: php mysql performance caching


【解决方案1】:

您需要缓存数据,这只是位置的问题,这也取决于数据集的大小。

Daryl 所说的 Memcache 是一个非常好的解决方案。根据访问此数据的内容和后端的框架,它可以存储在基于应用程序的缓存中,该缓存每 x 分钟仅发出一次查询,同时使用缓存结果。

如果你想走直接的 sql 路线,你会采用数据仓库的概念。
您将创建一个用于报告而不是基于事务的处理的扁平化模式。 您将减少连接数量并对数据进行非规范化,以使查询速度更快......但在特定时期内它将是陈旧的数据。

您可以设置服务/计划任务/数据库计划任务来发出查询、清除现有的扁平表并用新结果重新填充它。

【讨论】:

  • 谢谢基思!我想我会选择数据库路线。通过非规范化,您几乎可以创建一个包含所有所需数据的临时 excelsheet,而留下设置操作数据库的最佳实践?
  • 你可以把它想象成一个excel表格,但非常依赖于场景。您优化数据仓库的读取访问以用于报告和分析,而不是专注于消除冗余。如需进一步研究,您可以查看 OLTP(事务)与 OLAP(仓库)。一个很好的例子sql-server-performance.com/2013/from-oltp-to-olap
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2013-05-28
  • 2018-07-05
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多