2012-02-15 157 views
18

我的應用程序的一部分包括歌曲的音量自動。在MySQL數據庫中存儲數組的最佳方法?

體積自動化在以下格式描述:

[[0,50],[20,62],[48,92]] 

我此陣列的「數據點」與含在歌曲的位置和包含卷的第二個值的第一個值中考慮的每個項目在0-100的範圍內。

我然後取這些值,並執行功能的客戶端,以便創建Bezier曲線允許光滑過渡體積爲音頻文件正在播放內插與「虛擬」數據點此數據。

然而,亟需允許用戶保存這種自動化到數據庫召回在稍後的日期。

的數據點可以是無限的(儘管在現實中應該從來沒有真正超過大多數小於10 40-50)

此外,我應該如何處理這些數據?它應該按原樣存儲在文本字段中嗎?還是應該事先以某種方式處理它以獲得最佳效果?

什麼數據類型將是最好的MySQL中使用存儲陣列?

+0

什麼是你與你的應用程序中工作的數據類型?它是一個字符串,一個數組,一個對象嗎?我從「原樣在文本字段中」收集到的意思是你在內部將點表示爲一個字符串,但我可能會讀錯。 – 2012-02-15 19:12:13

+0

爲什麼不使用INT類型創建多個字段?例如,volume_min,volume_max,song_position – 2012-02-15 19:12:48

+1

如果您不需要在數組中進行查詢搜索,那麼您可以簡單地使用「text」字段並存儲數組的序列化版本(您在此處發佈的方式是可以的, '[[0,50],[20,62],[48,92]]')。 – 2012-02-15 19:12:53

回答

32

絕對不是text場,但varchar - 也許。我不會建議解析結果,並將其存儲在單獨的列,除非你想利用這些數據的數據庫感 - 統計等

如果你永遠看不到自己在問「什麼是平均成交量用戶使用?」那麼不要打擾解析它。

要弄清楚如何存儲這些數據,請問自己「我以後如何使用它?」如果您將獲得該陣列並需要使用PHP,則可以使用serialize函數。如果你在JavaScript中使用的值,然後JSON編碼可能會是最適合你(以及許多語言知道如何解碼)

祝你好運!

+1

完美的回答米哈伊爾謝謝。它涵蓋了所有有問題的觀點。 – gordyr 2012-02-15 19:16:48

+1

@Mikhail +1好,但爲什麼_無限期地不是'text' field_? – 2012-02-16 20:00:50

+1

'文本'被設計成存儲一個實際的文本 - 就像一個故事或一首詩。它不是用來存儲字符串的。在MySQL文本中存儲在文件中而不是「樹的葉子」。關於它的一切都比較慢,搜索,索引和緩存。 – Mikhail 2012-02-16 21:53:53

2

如果檢索行時速度是最重要的,那麼創建一個新表並使其專用於保存數組的索引。使用整數的數據類型,並讓每一行代表數組的索引。您將不得不創建另一個數字列,將它們綁定在一起,以便您可以使用SQL查詢重新組合數組。

這樣你可以幫助MySQL幫助你加快訪問速度。如果您只想要數組的某些部分,則只需更改SQL查詢中的範圍,然後可以根據需要重新組合數組。

相關問題