簡體   English   中英

非常頻繁地拉出很多行 - 我在這里需要memcached嗎?

[英]Pulling very large # of rows very often — do I need memcached here?

我有大約10個表,每個表約10,000行,需要經常拉動。

例如,國家列表,世界上所有學校的列表等。

PHP不能在內存中保存這些東西(據我所知)所以我每次都要查詢服務器的SELECT * FROM TABLE。 我應該在這里使用memcached嗎? 起初雖然它絕對是肯定的,但是第二個想法,不會mysql已經為我緩存了,這幾乎是多余的嗎?

我對mysql如何緩存數據(或者甚至是否緩存整個表)沒有太多了解。

我建議閱讀MySQL查詢緩存:

http://dev.mysql.com/doc/refman/5.6/en/query-cache.html

您可以使用MySQL查詢緩存,但之后您仍然使用數據庫資源來建立連接並執行查詢。 如果您的頁面相對靜態,則另一個選項是操作碼緩存 但是我認為memcached是最靈活的解決方案。 例如,如果您有一個需要從應用程序中的各個代碼點訪問的國家/地區列表,您可以從持久存儲(mysql)中提取數據,並將它們存儲到memcached中。 然后,數據可用於任何業務需求的應用程序的任何部分(包括批處理和cronjobs)。

你肯定需要某種緩存,當然; 數據庫內部和周圍的緩存層的效率遠低於memcached可以提供的效率。

也就是說,如果你得出的結論是正確的東西是緩存查詢本身,而不是根據查詢緩存你正在生成的內容,我想你會得出結論 - 更多的分析是需要。

在輸出生成期間使用除了這些查詢的內容之外的哪些數據? 頁面緩存或頁面片段緩存(或前面的緩存反向代理)是否更有意義? 是否真的有必要“經常”運行這些查詢? 底層數據的變化頻率如何? 發生這種情況時,您是否有任何通知事件?

此外,沒有WHERE子句的SELECT *查詢是“代碼味道”(表示某些事情可能正在以錯誤的方式完成),特別是如果並非所有數據都被直接顯示給用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM