php - 使用 PHP 和 mySQL 实现标签系统。缓存帮助!

标签 php mysql performance tagging

引用这篇文章:How to implement tag counting

我已经完全实现了建议的 3 表标记系统。为了计算每个标签的文章数,我在标签定义表中使用了另一个名为 tagArticleCount 的列。 (其他列为 tagId、tagText、tagUrl、tagArticleCount)。

如果我实现此表的实时编辑,以便每当用户向文章添加另一个标签或删除现有标签时,tag_definition_table 将更新以更新添加/删除标签的计数器。每次进行任何修改都会花费额外的查询。 (同时从tagLinkTable中删除tag和article的相关链接条目)。

另一种方法是不允许对计数器进行任何实时编辑,而是使用 CRON 在指定时间段后更新每个标签的计数器。 我要讨论的问题来了。这可以看作是将文章计数缓存在数据库中。你能帮我找到一种方法来在浏览标签时以及当该标签的文章计数器不是最新时在列表中显示文章吗?例如: 1. 计数器显示 50 篇文章,但标签链接表(链接标签和文章)中实际上有 55 个条目。 2. 计数器显示50篇文章,但标签链接表中实际上有45条extries。

如何处理示例中给出的这 2 个场景。我将使用 APC 来保留这些计数器的缓存。在您的解决方案中也要考虑它。还讨论实时/CRONNED 计数器更新中的性能。

最佳答案

这一切都取决于您的应用程序的需求。信息及时更新有多重要?在大多数情况下,我认为为了获得实时数据而进行额外查询是值得的。

实际上,我最近在开发的系统上遇到了同样的挑战,但最终决定使用字段存储标签计数的解决方案行不通。如果它适用于您的情况,可能值得考虑我采用另一种方式的原因:

使用基于字段的方法,您只有一个计数可用。对于我的系统,我希望能够有多个可用的深度级别。因此,以本文中的标记为例,我想知道的不仅仅是“php”、“mysql”、“最佳实践”、“性能”和“标记”的总体计数。我还想知道各种组合的计数。

我采用的解决方案是使用如下计数 (*):

SELECT count(*)
FROM items i, categories c
WHERE c.Id = i.Id
AND (c.category IN ('php', 'mysql', 'tagging'))
GROUP BY i.Id
HAVING COUNT( i.Id )=3

为了减轻这种变慢的可能性,我使用 AJAX 来填充显示相关数据的页面段。

关于php - 使用 PHP 和 mySQL 实现标签系统。缓存帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059422/

相关文章:

PHP 转义编码引号

mysql - 更新触发失败后

php - MYSQL UPDATE仅添加两个句点

python - python中的质量字符串替换?

php - php/mysql 中按日期分组

php - Magento 的日志文件位于何处?

php - 尽管有 css 代码,但图像并未显示在整个屏幕上

mysql - 存储对 MYSQL 数据库所做的更改并将更改更新到不同服务器上的另一个 MYSQL 数据库

java - Tomcat 容器能否提高 JDBC 性能/可扩展性?

javascript - 在嵌套循环中设置间隔