Как выбрать между форматами хранения и примерами использования некоторых из них?


10

У нас есть разные способы хранения данных программы (сохранение файлов в играх, базах данных сотрудников, конфигурации программы и т. Д.):

  • Простой текст (подумай .iniи .conf)
  • XML
  • Базы данных (MySQL, SQLite ...)
  • .zip и аналогичные, содержащие несколько файлов (с разными форматами)
  • Двоичные файлы ( .docнапример, например, созданные инструментом сериализации)

Каковы различные варианты использования для форматов, перечисленных выше, и каковы их преимущества по сравнению с недостатками (скорость, гибкость, размер файла, простота использования ...)? Как выбрать между ними разные задачи?

О формате ZIP: это просто используется для хранения других файлов. Это может быть и другой формат сжатия. Это позволяет создать структуру из нескольких файлов, включая файлы изображений, звуковые файлы и текстовые файлы. Например, скажем, у вас есть формат хранения сообщений, который может содержать файлы. У вас могут быть следующие файлы внутри заархивированного файла:

message.txt (containing the message)
attachments (folder containing attachments)
  audio.wav
  picture.jpg

в двоичном, рассмотрим буфер протокола Google. Способность к отложенной десериализации потрясающая, и у вас всегда есть возможность извлечь ее и сохранить как форматированный текст (на нескольких языках C ++ / Java / Python).
Матье М.

Ответы:


6

Я использую следующим образом:

Простой текст

Для конфигурации - обычно используется YAML или .ini. Мое устаревшее для большинства случаев использования, кроме случаев, когда текстовый файл является желаемым результатом (например, печать в текст, сохранение в текст и т. Д.)

XML

Для конфигурации и транспортировки данных; например, экспорт, форматирование через XSLT и т. д. Хорошо подходит как переносимый формат файла (например, SVG). Отличные манипуляции с инструментами и фильтрами.

Базы данных

Основное хранилище данных из приложения / веб-приложения. Используйте это все время как хранилище выбора. Это надежно, надежно, и вы получаете много встроенного (транзакции, ссылочная целостность, каскадное удаление / обновление, индексы, скорость). Лучше всего использовать со слоем или ORM (IMO).

Единый файловый архив (например, ZIP)

Подходит для компактного хранения нескольких связанных двоичных потоков, например, образов ПЗУ для эмулятора. Лучше всего для вещей, которые не часто или никогда не должны быть обновлены. Это тяжеловес, медленно и трудно манипулировать;

двоичный

Только там, где база данных недоступна для хранения данных приложения. Проще всего с сериализацией (C ++). Настроенный двоичный формат превзойдет все остальное как по скорости, так и по размеру.


4

Там нет серебряной пули. По моему опыту:

Обычный текст как носитель информации - автоматическое нет. Несколько случаев, которые я бы даже рассмотрел, лучше бы охватить файлом .config, где у меня есть схема и тип безопасности. Кажется, почти всегда возникает необходимость в безопасности типов и извлечении данных. Простой текст превращает этот процесс в кошмар.

XML : безопасность типов, проверка данных, низкий объем, и в некоторых случаях я использую его, потому что .NET имеет мощную встроенную поддержку сериализации XML объектов.

Базы данных : по умолчанию. Введите безопасность, скорость, транзакции, пользуясь доверием, и трудно обвинить в выборе БД в качестве носителя данных, если что-то идет не по плану.

.zip это формат сжатия, не уверен, как это вписывается в постоянство ..?

Двоичный файл: я использую двоичный файл только тогда, когда мне нужно создать временный поток памяти. Двоичный код не добавляет ценности способу запроса по сравнению с БД или XML, где мои данные организованы с помощью схемы.

Простота использования является относительной и зависит от того, что конкретно вы хотите достичь. Скорость похожа вне того, что я сказал выше относительно объема. Если размер файла является проблемой и применяется правильная нормализация, я сожму его с помощью zip или другого формата сжатия, но это отдельный процесс.


3

Я использую их следующим образом:

Простой текст

Если эта категория включает несколько более сложные форматы, такие как YAML или файлы свойств, то это лучший вариант для всего, что вы ожидаете от людей, которые будут читать и редактировать вручную. Еще одним огромным преимуществом является простота его изменения с помощью небольшого скрипта (например, sed).

Ничто не сравнится с простотой и удобством использования. Когда команде поддержки нужно что-то настроить на удаленном компьютере (например, решить проблему клиента) или ИТ-отделу необходимо перенастроить группу серверов, на которых работает ваше программное обеспечение, они будут благодарны вам за выбор этого формата. Это также избавит вас от написания какого-то одноразового программного обеспечения, которое делает это для них.

XML

Я согласен с @Ingo здесь - в отличие от обычного текста XML труднее обрабатывать с помощью сценариев, и кошмарно редактировать вручную imo.

Тем не менее, если у вас есть данные с какой-то сложной структурой, в которой YAML становится не поддающимся расшифровке, и все же хотите, чтобы они были удобочитаемыми и редактируемыми, то XML, вероятно, является лучшим выбором.

Реляционная база данных

Отличный выбор для случаев, когда у вас есть много данных (которые могут сделать простой текст и XML громоздкими), которые вы все еще можете разрешить сторонним редакторам редактировать вручную - с помощью команд SQL и даже графического интерфейса.

Еще одним преимуществом является то, что ваш код, который управляет содержимым, очень удобочитаем. @ Ричард-Харрисон дал хороший список других преимуществ в своем превосходном ответе.

База данных NoSQL

Одним из преимуществ СУРБД является масштабируемость за счет распространения, что, вероятно, не очень важно для вашего вопроса. Преимущества, которые, вероятно, более актуальны, - это простота хранилища значений ключей и гибкость отсутствия схемы (это слово?). Когда вы обнаружите, что нарушаете реляционную парадигму: просто храните двоичные объекты в базе данных, обращайтесь к ним по ключу и обрабатывайте их с помощью кода, затем рассмотрите этот вариант. Некоторые варианты (например, CouchDB) очень переносимы, имеют небольшую площадь и могут также масштабироваться, поэтому они предлагают хорошую нереляционную альтернативу MySQL и SQLite.

двоичный

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

Я должен отметить, что мне еще не приходилось сталкиваться со случаем, когда в какой-то момент простой доступ к программным данным не требовался по причинам, которые не учитывались при первоначальном проектировании. В настоящее время я лично выбираю базу данных для чего-то другого, кроме файлов, которые имеют стандартные форматы и должны быть закодированы / декодированы другим программным обеспечением (например, аудио, видео).

Примечание: существует распространенное заблуждение, что двоичный файл непрозрачен и, следовательно, как-то более безопасен. Без дополнительной защиты это не так - если кто-то хочет взломать ваше программное обеспечение, то простое хранение ваших конфигураций или чего-то еще в двоичном виде не остановит их.

Сжатый Архив

Не совсем альтернатива вышесказанному, а скорее дополнительная мера.

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

Сегодня очень быстро справляется практически с чем угодно (закон Мура в действии, детка), поэтому единственная причина, по которой он не используется, заключается в том, что он добавляет сложности вашему коду. Не много сложностей, но все же нарушение принципа KISS. Особенно обременительно для файлов конфигурации, которые необходимо редактировать вручную или с помощью сценариев - и если вам действительно нужно сэкономить там место, то вам, вероятно, следует использовать опцию базы данных.


2

Я бы использовал их следующим образом:

  • Простой текст : приложение имеет небольшой размер просто структурированных данных (например, пары «имя-значение»). Данные не изменяются одновременно несколькими пользователями.
  • XML : небольшой размер структурированных данных, которые не изменяются одновременно или часто.
  • База данных : требуются большие структурированные данные или одновременный доступ. Необходимость запросов и поиска является обязательным в приложении.
  • Двоичные данные: я бы использовал это только для потоковых объектов.
  • zipping - это сжатие, которое может быть добавлено в качестве другого процесса для любого из вышеперечисленных, кроме баз данных на серверах.

1

Я слышал, что XML сочетает в себе худшие свойства текста (трудно / медленно обрабатывать) и двоичного (не читается).


Не полный ответ
Anto
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.