2012-09-27 53 views
3

我正在編寫一個由MySQL數據庫備份的Web應用程序,其中一個表有可能獲得非常大的(千兆字節)大量的表操作寫道。其中一個表列需要存儲可能相當大的字符串序列。在我到目前爲止的測試中,它已經達到了289字節的大小,但是爲了安全起見,我想要設計最大大小爲1 kb的文件。目前,我將該列存儲爲InnoDB表中的MySQL MediumBlob字段。BLOB或不BLOB

同時,我一直在使用Google來建立BLOB與其他存儲形式相對的優點和缺點。那裏有太多的信息,可能太多了。我所收集的是,InnoDB將BLOB的前幾個字節(如果內存正確地處理我的話)存儲在錶行本身中,其餘的則存儲在其他地方。我也得到了這樣一個觀點:如果每行有一個以上的BLOB(我的表沒有),那麼「別處」是每個BLOB的不同位置。除了我有一個印象,訪問BLOB數據比訪問行數據慢得多(這聽起來很合理)。

我的問題就在於 - 根據我的BLOB大小和桌子的大的可能大小,我應該打擾一個blob嗎?另外,如果我使用某種形式的inrow存儲,而不會對該表能夠容納的最大行數產生不利影響?

MySQL很整潔,讓我在開發環境中獲得了幾乎所有的東西。但是......那不是現實世界。

+1

如果你想存儲字符串,你應該使用TEXT而不是blob,這樣你的字符串將被正確編碼/解碼。 –

+0

另外,1000字節的文本列不是你應該擔心的。 – lanzz

回答

1

我相信你已經看過here,但很容易忽略一些細節,因爲在涉及到InnoDB限制時需要記住很多細節。

對您的其中一個問題(表格的最大大小)的簡單回答是64TBytes。使用可變大小類型將該存儲移動到單獨的文件中肯定會改變行數的上限,但64TBytes是相當多的空間,因此該比例可能非常小。

在表中存儲1KByte字符串類型的列似乎是一個可行的解決方案,因爲它與64TBytes相比也非常小。特別是如果你對查詢速度有非常嚴格的要求。

另外,請記住,InnoDB 64TByte限制可能會被您所使用操作系統的最大文件大小壓低。你總是可以將多個文件連接在一起,爲你的桌子獲得更多空間,但隨後開始變得更加混亂。

+0

謝謝!是的,我遇到了你提到的那篇文章,但卻錯過了本地存儲的小於一半頁面大小的行。 – DroidOS

+0

@DroidOS很高興能幫到你。是的,有很多細節需要記住,就像我上面寫的那樣。 – HonkyTonk

1

如果BLOB數據超過250kb,這是不值得的。在你的情況下,我不會打擾自己白衣BLOB'n。 Read this