[英]Is it good to use memcached in fully dynamic and heavy database website?
我目前正在從事類似電子商務網站的項目。 數據庫表中有數十萬條記錄。 我還必須對它們使用聯接操作來獲取數據,因為項目中有查詢生成器來選擇數據條件。 花費太多時間來獲取數據。 因此,我使用限制作為每頁的記錄數(例如10條)。 現在我開始了解memcached的概念。 因此,我認為對我的項目使用memcached,因為它只會花費太多時間。 但是仍然有一些懷疑。
因此,我處於困境中,該不該使用memcached? 如果任何人都可以提出建議並做出解釋,那么我們將不勝感激。
如果您的網站執行許多相同的MySQL查詢,這些查詢經常返回相同的數據,那么可以,運行memcached可能會有一些好處。
問題:
“有成千上萬條記錄……獲取數據花費了太多時間”。
這可能表明您的架構存在問題。 正確地建立索引,即使使用JOIN,查詢也應能夠快速執行(<0.1秒)。 對運行時間很長的查詢運行EXPLAIN
查詢,看看是否可以改進。
回答問題1
緩存文件太多不會有問題。 Memcached將所有緩存的信息存儲在內存中(因此而得名),因此不使用磁盤文件。 緩存的對象存儲在RAM中,可以直接從RAM訪問。
問題2的答案
不能完全確定您在這里要問什么,但是如果您的應用程序更新或刪除了數據庫中的信息,那么刪除受更新和刪除影響的緩存項就至關重要。 如果應用程序沒有刪除受此類操作影響的緩存項,則下次查詢數據時,可能會返回不再有效的緩存結果。 確保任何緩存的數據都設置了適當的到期時間,或者當數據庫中的數據發生更改時應用程序將其從緩存中刪除。
希望能有所幫助。
我不是從Memcached開始,而是從弄清楚瓶頸是什么開始。 您的表大約有一百萬行。 我不知道行的大小,但我有根據的猜測是,基於瀏覽器窗口可容納一條記錄中的信息的事實,行號小於1K。
因此,大概是數據庫中的1G信息。 如果我錯了糾正我。 如果是這樣,那么整個數據庫應由MySQL自動緩存在RAM中。
現在您的數據庫已完全位於RAM中,然后通過適當地組織索引,查詢的復雜度應相對於結果集的數量呈線性關系,結果集的數量以千字節為單位,因為它適合瀏覽器窗口。
因此,我的建議是確定數據庫的大小並查看“ top”命令的結果,以便了解MySQL消耗了多少內存。 並且,如果您確定數據庫完全位於內存中,則對最流行的查詢運行explain命令,然后根據explain的結果向數據庫中添加一些索引。 即使您的數據庫大於RAM的數量,我仍然建議您調查一下explain命令的結果,因為它確實有很大幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.