Надим,
Это очень хорошие вопросы.Вы можете быть новичком в домене, но ветераны XML часто задают одни и те же вопросы.Я постараюсь обратиться к каждому из них.
Я слышал о буферах протокола Google и экономии Facebook, может кто-нибудь сказать мне, могут ли эти двое выполнить работу, которую я ищу?
Как упоминалось Марком, Protocol Buffers и Thrift являются двоичными форматами данных, но они не являются форматами XML, предназначенными для передачи данных XML.Например, они не поддерживают такие концепции XML, как пространства имен, атрибуты и т. Д., Поэтому сопоставление между XML и этими двоичными форматами потребует немалой работы с вашей стороны.
ИЛИ просто дайте мне знатьесли есть что-то лучше, то EXI я должен искать.
EXI, вероятно, ваш лучший выбор.W3C завершил довольно тщательный анализ реализаций формата XML и обнаружил, что реализация EXI (Efficient XML) последовательно достигла наилучшей компактности и была одной из самых быстрых.Они также обнаружили, что он неизменно достигал лучшей компактности, чем сжатие GZIP, и даже упакованных двоичных форматов, таких как ASN.1 PER (см. Оценка EXI W3C ).Ни один из других форматов XML не смог этого сделать.В тестах, которые я видел, сравнивая EXI с буфером протокола, EXI был как минимум в 2-4 раза меньше.
Я хочу лучшего из обоих миров, лучшего сжатия + лучшей производительности разбора, какие-либо предложения ??
Если это вариант, вы можете рассмотреть коммерческие продукты.Упомянутые выше тесты W3C EXI использовали Efficient XML , что намного быстрее, чем EXIficient (иногда> в 10 раз быстрее синтаксического анализа и> в 20 раз быстрее сериализации).Ваш пробег может варьироваться, поэтому вы должны проверить его самостоятельно, если это вариант.
Еще одна вещь, касающаяся EXI, как EXI может утверждать, что она быстро обрабатывает декодированный XML-файл?
Причина, по которой EXI может быть меньше и быстрее для анализа, чем XML, заключается в том, что EXI может передаваться напрямую в / из памяти через стандартные API-интерфейсы XML, не создавая данных в промежуточном формате XML.Таким образом, вместо сериализации ваших данных в виде XML с помощью стандартного API, сжатия XML, отправки сжатого XML, декомпрессии XML на другом конце, а затем анализа его через один из API XML, ... вы можете сериализовать свои данные напрямуюкак EXI через стандартный XML API, отправьте EXI, а затем проанализируйте EXI напрямую через один из XML API на другой стороне.Это принципиальная разница между сжатием и EXI.EXI - это не сжатие как таковое - это более эффективный формат XML, который можно передавать прямо в / из вашего приложения.
Надеюсь, это поможет!