2012-12-14 47 views
0

我有一個大的用戶表,我在C++ Web服務(BitTorrent跟蹤器)中緩存。整個表格每5分鐘重新進行一次。這有一些缺點,比如數據長達5分鐘,並重新提取大量沒有改變的數據。 有沒有一種簡單的方法來獲取自上次以來的更改? 理想情況下,我不必更改更新數據的查詢。如何在C++ Web服務中緩存MySQL表

+0

預取允許我在沒有任何MySQL查詢的情況下響應請求,這對性能來說是很好的(必需)。 – XTF

+0

我們在談論多少個網絡服務器? Facebook爲此使用memcached。 –

+0

只有一個進程在一臺服務器上 – XTF

回答

0

兩個直接的可能性來找我:

  1. MySQL查詢緩存
  2. Memcached的(或類似)的緩存層

我先試試查詢緩存,因爲它可能要容易得多建立。做一些基本的測試/基準,看看它是否符合你的需求。 Memcached可能與您現有的緩存非常相似,但是,正如您所提到的那樣,您將找到一種更好的方式來使舊的緩存條目無效(查詢緩存爲您所做的一切)。

+0

MySQL查詢緩存對性能不利,它仍然會要求我查詢MySQL的每一個請求,這是我沒有時間。該服務目前可以執行5000+個請求/秒(單線程),這使得每次請求的時間少於0.2毫秒。 Memcache與我目前的緩存會有同樣的問題,不是嗎? – XTF

+0

您必須先進行測試,然後才能說出是否太慢或者僅僅是因爲涉及大量變量。根據查詢的複雜性/大小,我不會對亞毫秒執行時間感到驚訝。如果查詢緩存確實太慢,那麼更快的緩存層(如Memcached或您自己的緩存)就是下一步。這要求您手動管理緩存項目,理想情況下,每當更新緩存項目時用其新值替換緩存項目。 – uesp

+0

我應該說,查詢緩存是否有用取決於很多因素,這就是爲什麼我先說「測試」。 – uesp