Лучший способ хранить данные XML в базе данных MySQL с некоторыми особыми требованиями - PullRequest
12 голосов
/ 10 августа 2011

Я получаю данные XML от службы. Тестовые данные, которые я получаю обратно, содержат около 300 узлов XML, явно слишком много, чтобы создавать отдельные строки в базе данных MySQL.

Проблема в том, что в идеале нам нужно хранить все данных, и нам, вероятно, понадобится снова сослаться на данные в будущем - мы не сможем просто обработать их один раз и удалить строка XML.

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

Я прогнозировал, что при прогнозируемой скорости в течение нескольких месяцев, если мы будем хранить необработанные данные XML в формате TEXT, база данных может вырасти примерно до 500 МБ. В долгосрочной перспективе это кажется непрактичным.

Ответы [ 4 ]

16 голосов
/ 10 августа 2011

Вы можете создать столбец blob (т.е. столбец mediumtext). Вместо того, чтобы вставлять XML в виде строк в БД, вы можете сжать XML, а затем сохранить в MySQL.

Когда вы читаете из MySQL, вы снова распаковываете его. Поскольку XML - это текст, вы получите очень высокую степень сжатия (около 80% сжатия). При мыслительном процессе дисковый ввод-вывод занимает гораздо больше времени, чем сжатие / несжатие, которое преимущественно связано с процессором.

Недостатком является то, что вы больше не сможете запрашивать или выполнять полнотекстовый поиск с использованием SQL ....

3 голосов
/ 10 августа 2011

Многое зависит от того, что вы хотите сделать с данными - если вы хотите искать вещи в XML, то разложение их на дерево даст гораздо лучшую производительность запросов.

500Mb - это не огромный объем данных - все дело в том, как вы ссылаетесь на него и ищите его.Если это просто для целей архивирования или вам никогда не нужно искать внутри XML, то сжатие его (например) кодировки base64 уменьшит это значение до уровня менее 80 МБ

3 голосов
/ 10 августа 2011

Попробуйте использовать команду LOAD XML . Это утверждение доступно в MySQL 5.5.

3 голосов
/ 10 августа 2011

Лучший способ - не хранить XML в БД, но у меня есть история с этой конкретной проблемой.

Просто сохраните его как ТЕКСТ.500 МБ - это ничто для MySql, особенно с типами данных TEXT, поскольку они не сохраняются в буфере строк.

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