Маршаллинг против сериализации ActiveRecord в Ruby On Rails - PullRequest
8 голосов
/ 19 августа 2009

В чем разница между Marshalling и сериализацией ActiveRecord?

Есть ли какой-то конкретный случай, когда предпочтительнее использовать один над другим для сохранения объекта в базе данных?

Ответы [ 2 ]

10 голосов
/ 20 августа 2009

IIRC:

Ruby Marshall не гарантируется для разных версий ruby ​​или одних и тех же версий ruby ​​на разных платформах.

Поскольку у вас могут быть разные версии Ruby, обращающиеся к одному и тому же сериализованному столбцу, Rails реализует его сериализацию с использованием YAML. Хотя это и медленнее, это гарантирует, что ваш сериализованный столбец может быть прочитан другими версиями ruby, ruby ​​на других ОС, а также на других языках программирования.

4 голосов
/ 19 августа 2009

Маршаллинг и сериализация - это общие термины, которые описывают один и тот же базовый принцип. По определению любой процесс, способный кодировать объект и его зависимые подструктуры во что-то, что может быть сохранено таким образом, что в какой-то более поздний момент его можно восстановить, называется сериализацией или сортировкой.

В статье в Википедии есть некоторые пояснения о том, как эти термины могут отличаться, но обычно они совпадают: http://en.wikipedia.org/wiki/Marshalling_(computer_science)#Comparison_with_serialization

Конкретное различие с точки зрения Ruby заключается в том, что встроенный модуль Marshal доступен для любого приложения, тогда как поддержка сериализации ActiveRecord специфична для платформы Rails.

Поскольку ActiveRecord имеет собственный тесно интегрированный метод сериализации, обычно его рекомендуется использовать.

...