Хранение двоичного массива в MySQL - PullRequest
3 голосов
/ 07 февраля 2009

У меня есть массив значений, называемых A, B ... X, Y, Z. Забавно, хотя было бы иметь 26 столбцов в таблице, я не могу помочь, но чувствую, что есть лучший способ. Я рассмотрел создание второй таблицы со значением id строки из первой таблицы, идентификатором элемента в массиве и затем логическим значением, но это кажется неуклюжим и запутанным.

Есть ли лучший способ?

Ответы [ 4 ]

6 голосов
/ 07 февраля 2009

Краткий ответ, нет. Длинный ответ, это зависит.

Вы можете хранить двоичные данные несколькими способами: злоупотреблять числом, использовать BINARY или VARBINARY, использовать BLOB или TINYBLOB и т. Д. Типы BINARY обычно работают быстрее, чем типы BLOB, при условии, что ваши данные имеют известный размер.

Однако реляционные базы данных не предназначены для того, чтобы делать что-то умное с двоичными данными. В проекте, над которым я работал, была таблица, в которой каждая запись имела определенный двоичный шаблон - сохраненный как некое целое число - и для поиска требовалось много AND, OR, XOR и NOT. Это никогда не работало очень хорошо, производительность была плохой, и это сдерживало весь проект. Оглядываясь назад, я бы выбрал совершенно другой подход.

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

Ситуация может отличаться от других поставщиков баз данных. Фактически, вы рассматривали возможность использования чего-то другого вместо базы данных? Какое-то постоянство объекта?

2 голосов
/ 07 февраля 2009

Ваши возможные значения массива статичны?

Если это так, попробуйте использовать тип данных MySQL SET.

1 голос
/ 07 февраля 2009

Вы можете сохранить его как строку и использовать функции манипулирования текстом для (повторного) создания массива.

1 голос
/ 07 февраля 2009

Вы можете попытаться сохранить его как TINYBLOB или даже без подписи INT, но вам придется выполнять битовую маскировку в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...