2011-12-26 18 views
0

我有兩個主要數據源需要在php中進行混搭。第一個是SQL數據庫,另一個是feed。這兩個來源包含類似的項目,需要按「名稱」或「權重」進行排序。每個來源中有超過1k個項目。簡單地將數據源存儲在數據庫中不是一種選擇,因爲數據源變化太頻繁。將動態Feed與分頁數據庫結果集成

我想實現的是兩者的精確分頁輸出。例如:如果我顯示第二頁包含按「名稱」排序的50個項目的結果,則不會從源和數據庫中讀取所有數據,但只會從兩個源中讀取所需的項目。

我目前認爲這需要數據庫數據爲基本數據,並以某種方式將饋送數據合併到它中,但是:1)我可能是錯的,2)無論如何,我似乎都無法理解這一點我似乎嘗試。

有關如何實現此目的的任何建議?

P.S.結果不一定要完全準確。他們只需要看起來像。

回答

1

考慮暫時緩存提要結果。然後您可以計算出您需要的物品的大概位置。

對於用戶請求第二頁的示例,使用緩存,您可以指出(在緩存時),準確的結果將是來自數據庫的項目#20-50和來自項目#30-50的項目。由於Feed經常更改,因此不能只讀取相同的項目並將其顯示給用戶。相反,你可以讀取額外的項目,例如雙方10。對於上述內容,它將來自數據庫#10-60和來自Feed的#20-60。使用額外的項目並找到與緩存匹配的內容,您將能夠提供更準確的結果,然後您將請求相同的#20-50和#30-50。

這樣的結果不會完全準確,正如您在「P.S.」中所允許的那樣。但用戶請求越頻繁,答案就越準確,因爲每個請求都會稍微更新一次緩存。您還必須實施緩存過期追蹤,以防某些頁面長時間未被用戶請求,因此完全過時。

上面的可能實現將是一個額外的表,每個「頁面」 - 「排序類型」的組合。在你的例子中,每頁50個項目和2000個項目總數,「按名稱排序」將有40行,「按重量排序」將有40行。每行包含有關上次訪問特定頁面時來自兩個源的哪些項目以及該信息的上次更新時間戳的信息。

P.S.你不會發布任何細節,這使得很難提出更具體的答案,但我希望我寫的會有所幫助!