Хранение XML-документа в предварительно проанализированном двоичном формате.
-
21-09-2019 - |
Вопрос
Моему приложению необходимо хранить большие объемы XML-подобной иерархической информации со следующими требованиями:
- Быстро читать
- Минимальное потребление памяти
- Введенные данные вместо просто текста
Есть ли какие-нибудь предложения по двоичному формату, который соответствует этим целям?
Решение
вы не указываете, является ли 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.