2011-11-17 53 views
1

我們正在構建一個基於Java的內部RESTful Web服務應用程序,該應用程序以XML格式公開特定於域的數據。我們希望通過利用緩存存儲來補充架構並提高性能。我們希望將緩存託管在獨立但共存的服務器上,並且由於Web服務是Java/Grails,緩存中的Java或HTTP API將是理想的。什麼是合適的存儲RDBMS,NoSQL,用於緩存網站響應?

由於請求進來,獨特的URI和他們的反應會使用簡單的鍵/值約定緩存,例如...

KEY           VALUE 
http://prod1/financials/reports/JAN/2007 --> XML response of 50Mb 
http://prod1/legal/sow/9004    --> XML response of 250Kb 

單個請求的響應值可以說是相當大的,也許起來到200Mb,但可能小到1Kb。而且每天的請求數量很少;不超過1000,但平均爲250;我們沒有大量的消費者;再次,它是一個內部應用程序。

我們開始將MongoDB視爲潛在的緩存存儲,但鑑於MongoDB的最大文檔大小爲8或16Mb,我們並不認爲這是最合適的。

根據我提供的有限的細節,在這種情況下可能適合其他類型商店的任何建議?

+0

50MB響應?分頁是一個選項嗎?這種情況有一個代碼味道它IMO。 – lobster1234

+0

不是,這是一個系統到系統的交互,而不是用戶到系統。 – user646584

回答

1

我理解你的問題的方式,你基本上想要緩存文件,即你不需要了解文件的內容,對吧?

在這種情況下,您可以使用MongoDB的GridFS將xml緩存爲文件。這樣,您可以平滑地將文件流入和流出數據庫。你可以使用URI作爲'文件名',那麼應該做這個工作。

沒有(合理的)文件大小限制,並且大多數(如果不是全部)驅動程序都支持它。

+0

是的,沒錯,反應是任意的。不知道GridFS ......那些利用內存而不是磁盤的緩存存儲呢?我們應該看看Memcached嗎? – user646584

+0

MongoDB是以內存爲中心的,並試圖儘可能多地保留內存。總的來說,我認爲緩存幾百MB的文件是一個相當不尋常的要求,我相信MongoDB可以完成這項工作。可能還有其他選項,可能包括memcached,但我對任何一個都不熟悉。 – mnemosyn

+0

我只是好奇,如果GridFS使用內存儘可能多的非GridFS使用....只是爲了清楚文件緩存,並不是說我們緩存物理文件,一個100MB +的響應可能來自多個數據源的聚合,並且加入那麼多的數據需要時間,所以緩存結果對於後續請求通過避免聚合步驟。 – user646584

0

這裏最簡單的解決方案只是緩存這些數據在文件系統中。如果您希望緩存的大小大於您的內存,可以使用tmpfs確保所有內容都位於主內存或任何常規文件系統中。不要擔心,即使在後一種情況下,操作系統內核也會高效地緩存主內存中經常使用的所有內容。如果您使用的是Linux,仍然必須通過cron刪除舊文件。

這似乎是一個老派的解決方案,但它可能更容易實現,並且比其他許多人更容易出錯。