在MySQL数据库中存储数组的最佳方法?

问题描述:

我的应用程序的一部分包括歌曲的音量自动。在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

绝对不是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

如果检索行时速度是最重要的,那么创建一个新表并使其专用于保存数组的索引。使用整数的数据类型,并让每一行代表数组的索引。您将不得不创建另一个数字列,将它们绑定在一起,以便您可以使用SQL查询重新组合数组。

这样你可以帮助MySQL帮助你加快访问速度。如果您只想要数组的某些部分,则只需更改SQL查询中的范围,然后可以根据需要重新组合数组。

我建议你看看JSON数据类型。通过这种方式,您可以以比text或varchar更高效的方式存储数组,并且可以直接从MySQL访问数据,而无需分析整个事物。

看看这个链接:https://dev.mysql.com/doc/refman/5.7/en/json.html