Marshalling 和 ActiveRecord 序列化有什么区别?
是否有任何特定情况下最好使用一个而不是另一个将对象保存到数据库中?
Marshalling 和 ActiveRecord 序列化有什么区别?
是否有任何特定情况下最好使用一个而不是另一个将对象保存到数据库中?
IIRC:
Ruby Marshall 不能保证在不同的 ruby 版本或不同平台上的相同 ruby 版本上工作。
因为您可能有不同的 Ruby 版本访问同一个序列化列,Rails 使用 YAML 实现它的序列化。虽然速度较慢,但它确实保证您的序列化列可以被其他 ruby 版本、其他操作系统上的 ruby 以及其他编程语言读取。
编组和序列化都是描述相同基本原理的通用术语。根据定义,任何能够将对象及其相关子结构编码为可以保存的东西以便在以后可以恢复的过程称为序列化或编组。
在 Wikipedia 条目中,有一些关于这些术语如何不同但通常相同的说明:http ://en.wikipedia.org/wiki/Marshalling_(computer_science)#Comparison_with_serialization
Ruby 的具体区别在于内置模块 Marshal 可用于任何应用程序,而 ActiveRecord 序列化支持特定于 Rails 平台。
由于 ActiveRecord 有自己的紧密集成的序列化方法,通常最好使用它。