【问题标题】:Implementing Tagging System with PHP and mySQL. Caching help!使用 PHP 和 mySQL 实现标记系统。缓存帮助!
【发布时间】:2010-06-17 06:41:04
【问题描述】:

参考这篇帖子: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 performance tagging


    【解决方案1】:

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

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

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

    我采用的解决方案是使用 count(*),如下所示:

    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 填充显示相关数据的页面段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2011-07-06
      • 2019-02-22
      • 2017-10-13
      • 2014-07-26
      • 2019-05-10
      • 2013-05-01
      相关资源
      最近更新 更多