【问题标题】:Integrate dynamic feed into database results with pagination通过分页将动态提要集成到数据库结果中
【发布时间】:2011-12-26 12:31:40
【问题描述】:
我有两个主要数据源需要在 php 中进行混搭。第一个是 SQL 数据库,另一个是提要。两个来源都包含需要按“名称”或“重量”排序的类似项目。每个来源中有超过 1k 个项目。不能简单地将提要存储在数据库中,因为提要经常更改。
我想要实现的是两者的准确分页输出。例如:如果我显示包含按“名称”排序的 50 个项目的结果的第二页,我不会从提要和数据库中读取所有数据,而只会从两个来源读取必要的项目。
我目前认为这要求数据库数据是基础数据并以某种方式将提要数据合并到其中,但是:1)我可能错了,2)无论我多么努力,我似乎都无法理解这一点好像试试。
关于如何实现这一点的任何建议?
附:结果不必完全准确。他们只需要看起来像。
【问题讨论】:
标签:
php
pagination
dynamic-data
static-data
【解决方案1】:
考虑偶尔缓存提要结果。然后你可以计算出你需要的物品的大致位置。
对于您请求第二页的用户示例,使用您的缓存,您认为(在缓存时)准确的结果将是数据库中的项目 #20-50 和提要中的项目 #30-50。由于提要经常更改,您不能只阅读相同的项目并将它们显示给用户。相反,您可以阅读额外的项目,例如双面 10。对于上述内容,它将是数据库中的项目 #10-60 和提要中的 #20-60。使用额外的项目并使用缓存查找匹配项,您将能够提供更准确的结果,然后请求相同的 #20-50 和 #30-50。
正如您在“P.S.”中所允许的那样,这种方式的结果不会完全准确。但是用户请求的次数越多,答案就越准确,因为每个请求都会稍微更新缓存。您还必须实施缓存过期跟踪,以防某些页面长时间未被用户请求并因此完全过时。
上面的可能实现是一个额外的表,每个“页面”-“排序类型”组合都有一行。在您的示例中,对于每页 50 个项目和总共 2000 个项目,“按名称排序”将有 40 行,“按重量排序”将有 40 行。每行包含有关上次访问该特定页面时从两个来源获取了哪些项目的信息,以及该信息的上次更新时间戳。
附:您没有发布任何详细信息,因此很难得出更具体的答案,但我希望我所写的内容会有所帮助!