0

我正在创建一个 cms,但尚未确定在哪里存储结构中给定页面的完整 url。

每个页面都有一个 slug(页面的 url 友好名称),每个页面都有一个可以为空的(对于顶级页面)父级和子级。

我在哪里存储给定页面的完整 url (/first-page/sub-page)?这应该与页面的其他属性一起进入数据库还是一些缓存?

更新

这不是我要询问的数据库设计,而是将完整 url 存储到给定页面的位置,因此我不需要遍历整个 url 来获取用户请求的页面(/first-page/sub-page )

更新 2

我需要找到哪个页面属于当前请求的 url。如果请求的 url 是 /first-page/sub-page 我不想拆分 url 并循环访问数据库(显然)。

我宁愿将整个 url 放在表中,这样我就可以执行一个查询(WHERE url = '/first-page/sub-page'),但这似乎并不理想,如果我更改 slug 的父页面?然后我还需要更新所有后代的 url 字段。

其他人如何解决这个问题?他们是否将其放入数据库中?在将 /first-page-/sub-page 映射到页面 id 的缓存中?还是他们拆分请求的 url 并循环访问数据库?

谢谢

安德斯

4

2 回答 2

0

将其存储在缓存中,因为 Web 服务器需要不断地查找 URL。除非您期望页面的 URL 变化非常迅速,否则缓存将大大减少数据库的负载,这通常是您在数据库驱动的网站中的瓶颈。

基本上,您需要一个映射 URL -> 呈现页面所需的任何内容的字典。许多 Web 服务器会自动使用操作系统的文件系统作为字典,并且通常具有内置缓存,可以识别文件系统中的文件何时发生更改。这可能比您在 CMS 中编写的任何内容都高效得多。因此,让您的 CMS 直接在文件系统中实现该结构并使用硬链接或软链接处理附加映射可能会更好。

于 2008-10-29T15:21:43.990 回答
0

我只是为MvcCms做了这个。我提出了内容类别/子类别和内容页面的想法。当创建内容类别/子类别时,我会递归地通过父母并构建整个路线,然后将其存储在类别表中。然后,当页面被请求时,我可以找到正确的内容页面,并在通过导航结构时找出当前正在构建的导航是否是当前或活动路线。

这种方法需要一些关于编辑类别时会发生什么的规则。现在的方法是,一旦为子类别设置了完整路径,以后就不能使用普通工具进行更改。

来源是 mvccms.codeplex.com

于 2009-08-11T19:50:29.327 回答