2010-08-25 90 views
2

我创建通过Zend Framework的网站,我一直在想这个现在相当一段时间的Meta属性(关键字/描述)......Zend框架:从数据库

试想一下,你已经创造了最好的文章模块,并且您通常会为每篇文章添加meta_keywords/meta_description数据库条目,以便在视图呈现时使用管理后端中输入的数据填充相关元字段。

但是,想象一下你的动态内容较少的情况,到目前为止,您正在使用HeadMeta()视图助手向页面添加元关键字/元描述。

我想有一种方法来配置元关键字/元描述或一些其他元数据在数据库中的每页。我一直在琢磨什么是最好的解决方案,而不会增加额外的开销(因为您需要为在您的网站上发生的每一个动作执行查询)

我最初的想法是将元属性保存在数据库的索引中,以便为每个操作快速检索所有相关数据。我很快意识到通过GET/POST传递的参数可能会改变提供的结果,使得结果集不相关。因此,也许我们可以添加参数,但是您可能想同时忽略几个参数(因为不需要考虑参数?page = 12 ...)。也许在索引中使用序列化参数添加另一个varchar列?

或者添加整个URL并执行REGEXP选择而不是常规选择? (我猜这可能是最慢的解决方案......)

另外请注意,mySQL在大约varchar(200)的UTF-8索引上有限制(因此一个巨大的URL无法保存)

有没有人想过解决这个问题的好方法?

+0

你想为每个网址/视图提供独特的元数据吗? – chelmertz 2010-08-25 21:51:51

+0

我认为它应该是独一无二的。考虑到元数据实际上表达了实际的url/view的事实。你心里还有别的东西吗? – mobius 2010-08-26 07:14:38

回答

1

这听起来像数据结构是正确的:元关键字/描述需要是每篇文章。

最终,您需要从db获取文章 - 无论是单篇文章还是一组“最佳”文章。在我看来,关键是要通过某种服务器端缓存来保持最高性能。

通常,我使用配置了db连接的服务类(see sample),并缓存它检索的数据。缓存生存期可以设置得足够短,以至于即使缓存数据也“足够新鲜”。或者,您可以通过cron清除/填充缓存,以便前端请求始终获得缓存命中。或者您可以将缓存生命周期设置为永久,并且只在管理端清除/填充更新中的缓存;这种方法的可行性取决于更新的频率。

获得数据后,它将值堵塞到HeadMeta视图助手中。

+0

好的缓存总是一个可以接受的选项。但真正的问题在于如何在数据库中保存动态页面的数据并有效检索它们。我一直在考虑扩展FrontController Action以在数据库中执行查询并为每个页面缓存它们...但是,使用GET参数保存uri的最佳方式是什么(考虑一些并保留一些内容) – mobius 2010-08-28 20:41:40