Подтвердить что ты не робот

Лучший способ хранения массива в базе данных MySQL?

Часть моего приложения включает в себя автоматизацию томов для песен.

Автоматизация тома описана в следующем формате:

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

Я рассматриваю каждый элемент в этом массиве "точку данных" с первым значением, содержащим позицию в песне, и второе значение, содержащее громкость в масштабе 0-100.

Затем я беру эти значения и выполняю функцию client-side для интерполяции этих данных с "виртуальными" точками данных, чтобы создать кривую безье, позволяющую осуществлять плавный переход по громкости при воспроизведении аудиофайла.

Однако возникла необходимость разрешить пользователю сохранять эту автоматизацию в базе данных для последующего вызова позже.

Точки данных могут быть неограниченными (хотя в действительности никогда не должно превышать 40-50, причем большинство из них меньше 10)

Также как я должен обрабатывать данные? Должен ли он храниться как есть, в текстовом поле? Или мне нужно каким-то образом обработать его для получения оптимальных результатов?

Какой тип данных лучше всего использовать в MySQL для хранения массива?

4b9b3361

Ответ 1

Определенно не поле text, но a varchar - возможно. Я бы не рекомендовал анализировать результаты и хранить их в отдельных столбцах, если вы не хотите использовать эти данные в базе данных - статистика и т.д.

Если вы никогда не видите, что спрашиваете: "Каков средний объем, который пользователи используют?" то не беспокойтесь синтаксического анализа.

Чтобы выяснить, как хранить эти данные, спросите себя: "Как я буду использовать его позже?" Если вы получите массив и его нужно использовать с PHP, вы можете использовать функцию serialize. Если вы будете использовать значения в JavaScript, то JSON-кодирование, вероятно, будет лучше для вас (плюс многие языки знают, как его декодировать)

Удачи!

Ответ 2

Если скорость является наиболее важной при извлечении строк, создайте новую таблицу и сделайте ее выделенной для хранения индексов вашего массива. Используйте тип данных integer и каждая строка представляет индекс массива. Вам придется создать еще один числовой столбец, который связывает их вместе, чтобы вы могли повторно собрать массив с SQL-запросом.

Таким образом, вы помогаете MySQL помочь вам ускорить доступ. Если вам нужны только некоторые части массива, вы просто изменяете диапазон в SQL-запросе и можете собрать массив, как хотите.

Ответ 3

Я предлагаю вам взглянуть на тип данных JSON. Таким образом, вы можете сохранить свой массив более эффективным способом, чем текст или varchar, и вы можете получить доступ к своим данным непосредственно из MySQL без необходимости разбирать все это.

Взгляните на эту ссылку: https://dev.mysql.com/doc/refman/5.7/en/json.html