使用分页将动态订阅源集成到数据库结果中

时间:2011-12-26 12:31:41

标签: php pagination dynamic-data static-data

我有两个主要的数据源我需要在php中进行mashup。第一个是SQL数据库,另一个是feed。两个来源都包含需要按“名称”或“重量”排序的类似项目。每个来源中有超过1k项。简单地将Feed存储在数据库中不是一种选择,因为Feed经常变化。

我想要实现的是两者的准确分页输出。例如:如果我显示包含按“名称”排序的50个项目的结果的第二页,我不会读取来自Feed和数据库的所有数据,而只会读取来自两个来源的必要项目。

我目前认为这需要数据库数据是基本数据,并以某种方式将Feed数据合并到其中,但是:1)我可能错了,2)无论我多么努力,我似乎​​无法理解这一点好像试试。

有关如何实现这一目标的任何建议吗?

P.S。结果不必完全准确。他们只需看起来像。

1 个答案:

答案 0 :(得分:1)

请考虑暂时缓存Feed结果。然后,您可以计算出所需物品的大致位置。

对于用户请求第二页的示例,使用您的缓存,您可以确定(在缓存时)准确的结果将是数据库中的项目#20-50和来自Feed的项目#30-50。由于Feed经常更改,因此您不能只读取相同的项目并将其显示给用户。相反,您可以阅读额外的项目,例如10个双方。对于上面,它将是来自数据库的#10-60项和来自feed的#20-60。使用额外的项目并找到与缓存的匹配,您将能够提供更准确的结果,然后您可以通过请求相同的#20-50和#30-50。

这样,结果将不会完全准确,正如您在“P.S.”中所允许的那样。但是用户提出请求的次数越多,答案就越准确,因为每个请求都会稍微更新缓存。您还必须实施缓存过期跟踪,以防用户长时间未请求某些页面,因此完全过时。

上面的可能实现将是一个额外的表,每个“页面” - “排序类型”组合有一行。在您的示例中,对于每页50个项目和总共2000个项目,“按名称排序”将有40行,“按重量排序”将有40行。每行包含有关上次访问特定页面时来自两个来源的项目以及该信息的上次更新时间戳的信息。

P.S。你没有发布任何细节,这使得很难得出更具体的答案,但我希望我写的内容会有所帮助!