Существует ли быстрый и надежный способ сериализации объектов в разных версиях Ruby? - PullRequest
1 голос
/ 18 февраля 2010

У меня есть два приложения, которые общаются друг с другом с помощью очереди, на данный момент они запускают одну и ту же версию ruby ​​(1.8.7), поэтому я просто собираю объекты туда-сюда; только объекты из стандартной библиотеки в основном хэши, строки, объекты времени и даты.

Сейчас я перехожу на Ruby 1.9.1, одно приложение за раз, что означает, что я буду некоторое время запускать одно приложение с 1.8.7, а другое - с 1.9.1. Выполняя свои тесты, я знаю, что Marshal не будет надежным во всех версиях, я мог бы использовать YAML, но он намного медленнее, JSON, кажется, быстрее, но он не работает напрямую с объектами даты / времени.

Существует ли надежный и быстрый способ сериализации объектов ruby ​​в разных версиях?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2010

Ключом здесь является поиск общего типа данных, который, как вы знаете, будет представлен одинаково во всех версиях Ruby. Очевидным выбором здесь является хранение данных во внешней базе данных (библиотеки интерфейса БД будут обрабатывать все преобразования) или запись данных в структурированном текстовом формате. Если для работы нет тонны данных (а данные в основном стандартные), я обычно просто сохраняю их в виде текста; экспорт / импорт занимает больше времени, но обычно быстрее записывает.

0 голосов
/ 15 июня 2010

Protobufs хороши, но требуют, чтобы вы предварительно определили свои структуры данных, если я помню. Thrift похож на protobufs, но имеет несколько приличных функций генерации кода.

Формат списка двоичных свойств Apple звучит близко к тому, что вам нужно. По поведению он похож на JSON, но более компактен и поддерживает несколько дополнительных типов, включая datetime и не закодированный двоичный файл. На github есть пара реализаций ruby.

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

0 голосов
/ 18 февраля 2010

Я не пробовал это на ruby, но вы могли бы посмотреть на буферы протокола?Разработанный как быстрый, но переносимый двоичный формат, он имеет порт ruby ​​ здесь .Однако вам, вероятно, придется рассматривать сгенерированные типы как отдельный слой DTO (т.е. вы отображаете существующие данные в новые типы, а не сериализуете существующие объекты).Обратите внимание, что встроенная поддержка даты и времени отсутствует, но вы можете просто использовать галочки в эпоху и т. Д.

...