Компания Google открыла (http://google-opensource.blogspot.ru/2014/06/flatbuffers-mem... под лицензией Apache 2 библиотеку FlatBuffers (https://github.com/google/flatbuffers), предоставляющую средства для сериализации данных (http://ru.wikipedia.org/wiki/%D0%A1%D0%B... отличающиеся высокой эффективностью работы с памятью. FlatBuffers позволяет (http://google.github.io/flatbuffers/) напрямую обращаться к сериализированным данным, без их промежуточной распаковки и выделения дополнительных буферов. Код библиотеки написан на C++, но доступен и вариант для Java.
Бинарный формат сериализованных данных переносим между разными платформами и архитектурами и может быть использован как для записи в файлы, так и для передачи по сети. Дополнительно предоставляются средства преобразования в бинарный формат из JSON-представления. В качестве областей применения библиотеки называются игры и ограниченные в потреблении памяти приложения. Поддерживается работа на широком спектре платформ, включая Android, Windows, OS X и Linux.
URL: http://google-opensource.blogspot.ru/2014/06/flatbuffers-mem...
Новость: http://www.opennet.me/opennews/art.shtml?num=40017
А что в сравнении с тем же Protocol Buffers от гугла?
Why not use Protocol Buffers, or .. ?Protocol Buffers is indeed relatively similar to FlatBuffers, with the primary difference being that FlatBuffers does not need a parsing/ unpacking step to a secondary representation before you can access data, often coupled with per-object memory allocation. The code is an order of magnitude bigger, too. Protocol Buffers has neither optional text import/export nor schema language features like unions.
Судя по всему, команда разработчиков FlatBuffers нашли в ProtocolBuffers фатальный недостаток: его написали не они :).
Нуу, у нас проекте 70-80% времени это сериализация/десериализация....
Так что может оно и быстрее.
Надо глянуть какой код, сколько структуры занимают в сравнении, сколько время доступа к полям у класс....эх, где на все время то брать...
> Нуу, у нас проекте 70-80% времени это сериализация/десериализация....Сурово. А что за проект такой? В смысле, чего можно делать для того чтобы тратить 70% на сериализацию?
Просто пишем хороший код)
И то, и другое делал Гугль, вроде как...
Россиянин россиянину - друг, товарищ и брат.
дерьмовее протобуфа трудно что-то придумать, там оверхед на каждом шагу. Единственный его плюс - оно есть и как-то работает.
Пытались внедрить. Остались на JSON - у нас нет бинарей, а протобуф не удобен до жути. Пусть идет в гугль.
> Пытались внедрить. Остались на JSON - у нас нет бинарей, а протобуф
> не удобен до жути. Пусть идет в гугль.Парсинг и передача JSON оверхеднее даже протобуфа в разы. Так что видимо у вас не сильно много данных было.
> Пытались внедрить. Остались на JSON - у нас нет бинарей, а протобуф
> не удобен до жути. Пусть идет в гугль.Парсинг и передача JSON оверхеднее даже протобуфа в разы. Так что видимо у вас не сильно много данных было.
А чем неудобен показался?
Аналог http://msgpack.org/
> дерьмовее протобуфа трудно что-то придумать, там оверхед на каждом шагу. Единственный его
> плюс - оно есть и как-то работает.А можно подробней об оверхеде по сравнению с JSON?
Гугл там что, сериализацией только и занимается? :-)
сделали одно гогно, потом обнаружили что действительно сделали гогно. Пошли делать другое.
Значит вы никогда не строили сервис-ориентированные системы под большой нагрузкой :))
Гугл... Такой гугл:> For applications on Google Play that integrate this tool, usage is tracked. ... you are free to
> remove the version string but we would appreciate if you would leave it in.Всё ему отследить надо.
Ну, а вы сомневались ? Гугл это практически АНБ, только АНБ денег не зарабатывает и работает по большей части на себя, но и немного на того дядю, но уже не из-за денег.
> Всё ему отследить надо.Это еще что. Вы делаете в программе HTTP даунлоад. Приходит сервак гугли, забирает файл. И отдает вашей программе. Если захочет. Интересная платформа этот ваш ведроид - зонд на зонде и зондом погоняет. В смысле, гугл хочет знать что вы там качали. Даже если это посторонняя программа.
Пруфлинк пожалуйста
> Пруфлинк пожалуйстаОн путает гугли то ли с сониевским, то ли с нокиевским "ускорителем мобильного интернета". Если я сам ничего не потаю, головка-то маленькая.
у гугля есть точно такой же мобильный "ускоритель".
включается он правда в определенные фазы луны...
> Он путает гуглиНет, не путает. К сожалению. Гугл таки обнаглел в зондостроении за пределами самых диких фантазий.
> Нет, не путает. К сожалению. Гугл таки обнаглел в зондостроении за пределами
> самых диких фантазий.Вы уже третий, кто не ответил на #10. Я подожду. ТОлько не про "ззонды вообще, а про ускорители интернетов от, да-а? Не стесняйтесь, оба трое.
> Пруфлинк пожалуйстаНе получится: совершенно случайно обнаружено анализом логов. И логи я вам разумеется не дам.
Могу сказать как сие выглядит: к user agent программы дописывается нечто типа "AppEngine-Google; (+http://code.google.com/appengine; appid: <идентификатор программы>)". Называется эта заподлянка как несложно догадаться AppEngine и используется чуть более чем половиной ведроидных программ при скачке файлов по HTTP. И гугл при этом *знает* что вы качали. Ибо приходит забирать файл именно гуглевый сервант, а вовсе и не ваша программа.
Так что гугля имеет юзеров андроида в хвост и в гриву и делает это довольно фундаментально. Не знали? Вот, получите и распишитесь. Наверняка у них где-то есть описание как этот app engine работает.
Kenton Varda задолбался мейнтейнить протобуфы, ушёл (из Гугла) и запилил свой Cap-n-Proto.
Wouter van Oortmerssen пришёл (в Гугл) и запилил свой Cap-n-Proto для быстрого обмена данных с игрушками потому что не нашёл в Cap-n-Proto опциональных полей, до юнионов не дочитал, а спросить - язык отсох, да и надо же как-то себя проявить на новом месте.
А юнионы в протобуфы тоже потом добавили, но в опенсорс еще не выложили.
Преимущества перед Cap-n-Proto, с точки зрения автора FlatBuffers:
>We feel optionals have a lot of uses beyond just mere unions and forwards/backwards compatibility, however. Game objects can have a LOT of fields, many of which are often at their default value, and thus not stored on the wire. This gives significant compression. The zero-byte compression in Cap'n Proto is cool, but we prefer to not have to use additional buffers when reading. Optionals also give a lot of design freedom, i.e. you can add a field that you know is only needed for very few instances without fear of bloating your binaries, as an alternative to "subclassing", or indeed unions.
Вот еще одна библиотека http://kentonv.github.io/capnproto/
Код на джаве какой-то не очень... Мягко говоря. Наколеночное все.
По сравнению с кодом на С++, это еще по божески) А вообще руки нужно отбивать за такой код.