簡體   English   中英

在完全動態和繁重的數據庫網站中使用memcached是否很好?

[英]Is it good to use memcached in fully dynamic and heavy database website?

我目前正在從事類似電子商務網站的項目。 數據庫表中有數十萬條記錄。 我還必須對它們使用聯接操作來獲取數據,因為項目中有查詢生成器來選擇數據條件。 花費太多時間來獲取數據。 因此,我使用限制作為每頁的記錄數(例如10條)。 現在我開始了解memcached的概念。 因此,我認為對我的項目使用memcached,因為它只會花費太多時間。 但是仍然有一些懷疑。

  1. 緩存文件過多會影響嗎? 我的意思是將要創建的文件過多,因為每個模塊的每一頁都會有一個緩存文件 因此,數字將進入大約10000個緩存文件
  2. 假設沒有文件沒有任何問題。 但是,當從表中間添加或刪除表的任何行時,如何使用replace() 更新文件 在這里, 桌子幾乎每周都會更新

因此,我處於困境中,該不該使用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.

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