Лучший способ хранения массива в базе данных MySQL?
Часть моего приложения включает в себя автоматизацию томов для песен.
Автоматизация тома описана в следующем формате:
[[0,50],[20,62],[48,92]]
Я рассматриваю каждый элемент в этом массиве "точку данных" с первым значением, содержащим позицию в песне, и второе значение, содержащее громкость в масштабе 0-100.
Затем я беру эти значения и выполняю функцию client-side для интерполяции этих данных с "виртуальными" точками данных, чтобы создать кривую безье, позволяющую осуществлять плавный переход по громкости при воспроизведении аудиофайла.
Однако возникла необходимость разрешить пользователю сохранять эту автоматизацию в базе данных для последующего вызова позже.
Точки данных могут быть неограниченными (хотя в действительности никогда не должно превышать 40-50, причем большинство из них меньше 10)
Также как я должен обрабатывать данные? Должен ли он храниться как есть, в текстовом поле? Или мне нужно каким-то образом обработать его для получения оптимальных результатов?
Какой тип данных лучше всего использовать в MySQL для хранения массива?
Ответы
Ответ 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