Хранение XML-документа в предварительно проанализированном двоичном формате.

StackOverflow https://stackoverflow.com/questions/1386705

Вопрос

Моему приложению необходимо хранить большие объемы XML-подобной иерархической информации со следующими требованиями:

  1. Быстро читать
  2. Минимальное потребление памяти
  3. Введенные данные вместо просто текста

Есть ли какие-нибудь предложения по двоичному формату, который соответствует этим целям?

Это было полезно?

Решение

вы не указываете, является ли xml требованием к формату, вы только говорите, что он должен быть иерархическим, как xml.

Без более подробной информации о типе данных трудно дать вам подробный совет.Итак, вот небольшой список.

  • b-деревьев существует ряд библиотек, поддерживающих форматы хранения b-деревьев на нескольких языках.они имеют быстрый поиск и имеют иерархическую природу.
  • Протокол-Буферы от Google.Компактное хранилище, оптимизированное для передачи по проводу.Однако не обязательно оптимизирован как формат хранения.Однако они напечатаны и, вероятно, вполне подойдут в качестве формата хранения.
  • Заархивированные текстовые форматы.компактный и в зависимости от выбранного формата типизированный и иерархический по своей природе.
    • YAML (поддержка сложной типизации, иерархии, удобочитаемости)
    • JSON (меньше поддержки ввода, быстрый анализ, иерархический, удобочитаемый)

Другие советы

Другие приложения должны читать сохраненные данные или только ваше?Должен ли это быть «стандартный» формат?

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

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

Что означает «минимальное потребление памяти»?Вы бежите на ограниченной платформе?Должны ли вы делиться ресурсами с другими приложениями?Достаточно ли мало места в 1 ГБ, если на вашем компьютере 4 ГБ памяти?Будут ли ваши данные храниться в памяти или только те части, над которыми вы работаете?

Если бы платформой была Java, я бы начал со стандартной сериализации, а затем исследовал бы пользовательскую сериализацию, если бы меня не устраивала производительность.

Вы также можете прочитать XML в графе объектов и сохранить его как буферы протокола Google.Они разработаны, чтобы быть очень эффективными.

Если формат можно обсудить, я бы предложил JSON, а не XML.JSON на самом деле загружается и пишется быстрее, чем стандартный XML.

Подробнее о JSON:

http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=060ca7c3-b03f-41aa-937b-c8cba5b7f986 http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=39842a17-781a-45c8-ade5-58286909226b

Объяснение проблемы в Википедии:http://en.wikipedia.org/wiki/Binary_XML

Предположительно рекомендуемую организацию и ее пакеты Java и .net можно скачать по адресу:http://www.agiledelta.com/product_efx.html

xml — это чистый текст, но его можно использовать для представления сериализованных объектов.Предположим, ваш сериализатор сериализует ваши объекты в XML.

Вам не следует пытаться преобразовать ваши объекты в двоичные потоки, потому что вам придется решать проблему с порядком байтов (http://en.wikipedia.org/wiki/Endian) и проблемы представления данных.Однако, если вы настаиваете, вам придется использовать XDR (http://en.wikipedia.org/wiki/External_Data_Representation) за нейтральность архитектуры данных.

В противном случае вам следует сериализовать свои объекты в XML с помощью стандартных сериализаторов, а затем преобразовать XML в двоичный/компактный XML из-за доступности библиотек и SDK.А затем десериализовать путем распаковки из двоичного XML.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top