2012-06-25 41 views
2

我目前正在用Django構建一個網站,並且希望託管可能高達幾KB的用戶生物樣式頁面。這些字段不一定需要搜索,但需要在查找用戶名時提供。非常大的字段對MySQL數據庫有負面影響嗎?

將它存儲在數據庫中有負面影響嗎?如果我在數據庫中使用帶有鏈接的靜態文本文件,我的服務器會運行得更好嗎?

回答

0

您的問題的基本答案是「將數據存儲在MySql中」(與外部文本文件相比):將數據存儲在數據庫中肯定是最佳方法。

「BLOB」可以是一個通用術語 - 在這種情況下,Oleksi絕對正確(我標記爲+1,而不是down!)。

但你想要的MySQL特定類型的確是TEXT:

存儲在你的MySQL數據庫中的文本將有很多好處(包括但不限於「表演」 )。

在我能想到的外部文件中存儲文本沒有任何優勢。

PS:

我有一個使用,早自由文本在MySQL中搜索一個很老的版本遺留PHP/MySQL的Web應用程序。如果我無法將它移植到新服務器上,我會認真考慮將所有「筆記」數據保存在外部文件中,這樣我就可以對文本運行索引器,如「Lucene」。但這是規則的例外。在你的情況下,存儲在數據庫中幾乎肯定是最好的選擇。恕我直言...

1

您可以將它們存儲在數據庫中,它們可能不會成爲您的性能瓶頸。確保列類型設置爲TEXT,MySQL將盡可能智能地處理該數據以避免性能問題。

+1

您將BLOB存儲爲TEXT而不是TEXT存儲的原因是什麼? BLOB通常不是用於二進制數據嗎? – Ilion

+0

@Ilion是的,TEXT更合適。編輯。 – Oleksi

+0

您的'TEXT'鏈接仍然指向'BLOB'的文檔 –

0

正如@Oleksi和@ paulsm4所討論的,將數據存儲在數據庫中可能是有益的,因爲他們討論的所有原因。他們沒有然而提到的原因,你可能不希望:

  1. 應在臨時表查詢優化過程中BLOB或TEXT列結束了,這個表將結束在磁盤上,即使是足夠小,否則會在內存中。因此,您應該儘量避免選擇BLOB或TEXT列,除非您知道需要它;應該避免select *(無論如何,這是一個很好的做法)。

  2. BLOB/TEXT列存儲在數據庫中。假設它是相對靜態的內容,您可以通過將它們作爲專用低開銷httpd服務/緩存背後的靜態文件來獲得性能/可伸縮性/成本優勢。

  3. 在BLOB代表媒體的情況下,將其外部存儲在專用流媒體服務之後幾乎總是更好。

  4. 如果內容發生更改,那麼當數據存儲在外部而不是數據庫時,更容易合併版本控制。

  5. BLOB/TEXT列將與表的其餘部分存儲在同一臺服務器上。 BLOB/TEXT訪問通常對錶/索引訪問具有非常不同的讀取模式。這意味着對BLOB/TEXT的訪問會污染緩衝區緩存,影響數據庫性能;並且表/索引訪問會干擾順序讀取調度,影響BLOB/TEXT性能。

當然,2和5當然只適用於達到數據庫服務器性能極限的情況; 3和4是比較特殊的情況;並且通常可以通過拆分表格或重寫相關查詢來解決1。所以大多數情況下這些都不適用,從這個問題上來看,它們聽起來並不適用於你的案例;然而,通常正確的建議「使用BLOB/TEXT」確實有它的例外,它非常值得理解它們是什麼。

相關問題