首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库变更检测

数据库变更检测
EN

Stack Overflow用户
提问于 2011-08-22 22:04:04
回答 5查看 3.8K关注 0票数 1

我需要一种方法来检测数据库的更改,因为我要在客户端的站点上实现一个缓存系统。(缓存整个页面,而不仅仅是查询)

在每个页面的顶部(我有一个“母版页”,所以在代码中只有一个地方),我查询数据库,看看它是否有size is changed like so

我将大小相加,得到一个“唯一”的数字。将其与前一个值进行比较,如果值相同,则交付缓存的页面,如果不同,则运行“正常”页面,然后缓存该页面。

所以我认为在理论上这是可行的,因为我只有一个数据库查询,并在此基础上将站点(缓存或未缓存,取决于结果)交付给用户。

这能行得通吗?如果不行-为什么?

编辑:

检查最后一次更新的时间戳如何?LINK

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-22 22:16:35

谁在更新数据库?建议导致更改的进程应该是使缓存无效的进程。当用户/管理员导致表发生更改时,您可以:

  • 如果管理员和面向公众的站点共享相同的应用程序空间(即它们是相同的应用程序),那么只需在管理员进行更改时更新缓存。
  • 在某个地方设置状态位(可能是会话变量),并定期检查以重新加载缓存的数据。

建议的大小不是“发生更改”的良好指标。忘记行-如果布尔值/位值发生变化怎么办?这将满足使缓存无效的条件,但“大小”将始终相同。您可以使用last- change -datetime来改进这一点,但是仍然存在相同的基本问题--查询数据库以检查更改标志。这有点违背了缓存的目的。

考虑另一种方法--每n分钟重新加载一次缓存。无论是否有更改,只需重新加载即可。N将是一个适合您的业务需求的值。您可能拥有陈旧的缓存,并且为旧/陈旧数据提供服务的时间最多为n分钟。这不是我的建议,而是一些需要考虑的东西。

票数 1
EN

Stack Overflow用户

发布于 2011-08-22 22:16:10

有趣的方法。

根据http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html的说法,您可能会得到Data_length值的近似值-在示例链接中,有可疑的舍入数字。我肯定会做更多的实验,以确保它能像你想象的那样工作。

您还应该确保这适用于更新,而不仅仅是删除/插入。

我还会在一个非平凡的系统上测试"has changed“查询的性能。我猜测,为了使这一点更准确,DB服务器将需要查看文件系统,我猜测这比通过SQL查询要慢很多倍。

其次,根据底层应用程序的不同,您可能会发现您的应用程序数据更改太频繁,以至于您经常会使缓存无效。

票数 0
EN

Stack Overflow用户

发布于 2011-08-22 22:23:00

您可以使用以下命令:

代码语言:javascript
复制
<?php

mysql_connect("localhost","root","");
$result = mysql_query("SHOW TABLE STATUS FROM test;");
while($array = mysql_fetch_array($result)) {
$total = $array[Data_length]+$array[Index_length];
echo '
Table: '.$array[Name].'<br />
Data Size: '.$array[Data_length].'<br />
Index Size: '.$array[Index_length].'<br />
Total Size: '.$total.'<br />
Total Rows: '.$array[Rows].'<br />
Average Size Per Row: '.$array[Avg_row_length].'<br /><br />
';
}

?> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7148672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档