我正在创建一个cms,还没有确定在结构中存储给定页面的完整URL的位置。

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

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

<强>更新

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

更新2

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

我宁愿在表格中包含整个网址,以便我可以只进行一次查询(WHERE url ='/ first-page / sub-page')但这似乎并不理想,如果我改变了slug为父页面?然后我还需要更新所有后代的url-field。

其他人如何解决这个问题?他们把它放在数据库中吗?在将/ first-page- / sub-page映射到页面的id的缓存中?或者他们是否拆分请求的URL并循环通过数据库?

由于

的Anders

有帮助吗?

解决方案

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

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

其他提示

我刚刚为 MvcCms 做了这个。我考虑了内容类别/子类别和内容页面。当创建内容类别/子类别时,我递归遍历父项并构建整个路径,然后将其存储在类别表中。然后,当请求页面时,如果正在构建的当前导航是当前或活动路线,我可以找到正确的内容页面,并找出何时通过导航结构。

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

来源是mvccms.codeplex.com

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top