Ruby On Rails 中的编组与 ActiveRecord 序列化
Posted
技术标签:
【中文标题】Ruby On Rails 中的编组与 ActiveRecord 序列化【英文标题】:Marshalling vs ActiveRecord Serialization in Ruby On Rails 【发布时间】:2010-11-21 00:32:34 【问题描述】:Marshalling 和 ActiveRecord 序列化有什么区别?
是否有任何特殊情况下最好使用一个而不是另一个来将对象保存到数据库中?
【问题讨论】:
【参考方案1】:IIRC:
不保证 Ruby Marshall 可以跨不同的 ruby 版本或不同平台上的相同 ruby 版本工作。
因为您可能有不同的 Ruby 版本访问同一个序列化列,Rails 使用 YAML 实现它的序列化。虽然速度较慢,但它确实保证您的序列化列可以被其他 ruby 版本、其他操作系统上的 ruby 以及其他编程语言读取。
【讨论】:
【参考方案2】:编组和序列化都是描述相同基本原理的通用术语。根据定义,任何能够将对象及其相关子结构编码为可以保存以便在稍后恢复它的东西的过程称为序列化或编组。
在 Wikipedia 条目中对这些术语的不同之处做了一些说明,但通常是相同的:http://en.wikipedia.org/wiki/Marshalling_(computer_science)#Comparison_with_serialization
Ruby 的具体区别在于内置模块 Marshal 可用于任何应用程序,而 ActiveRecord 序列化支持特定于 Rails 平台。
由于 ActiveRecord 有自己紧密集成的序列化方法,因此通常最好使用它。
【讨论】:
我发现 ActiveRecord 序列化比 Marhal 慢。以上是关于Ruby On Rails 中的编组与 ActiveRecord 序列化的主要内容,如果未能解决你的问题,请参考以下文章
将 Silverlight 与 Ruby on Rails 一起使用?