【问题标题】:Serialization vs. Materialization序列化与物化
【发布时间】:2013-07-02 05:36:04
【问题描述】:
有人可以指出不同之处(如果有的话)以及每个术语的使用时间合适吗?
例如在处理Object/Relational Mappers(ORM)时,对象创建涉及Materialization,而使用Json/Xml格式的对象创建被认为是Deserialization。
我能想到一些核心差异,但我很想知道这些术语是否有更正式的定义,因为我找不到。
【问题讨论】:
标签:
serialization
terminology
【解决方案1】:
“反序列化”几乎完全与“序列化”配对使用。当您的对象或对象图完全转换为要存储的“数据流”(即作为文件或单个数据库记录)时,这些术语描述了“工作流程”。通常单身。然后,在某个时间点,它被检索并“反序列化”,因此“解包”回对象或对象图。它们成对使用。如果您曾经说过您的 XYZ 对象已被序列化,那么稍后它将被反序列化。当您的对象以不能称为“序列化”的方式存储时,尽量不要使用“反序列化”一词。
这里的关键字是“串行”。去'连载'化。串行表单数据,一个数据流。一个文件(txt、bin、xml,随便什么:文件)、DB 中的一个 BLOB 等。
“物化”描述了一个抽象的“过程”,它将任何形式的“查询描述”和“原始数据”转换为与查询匹配的一些“可用数据”。它比“反序列化”更通用。后者几乎总是明确地意味着对象是从一些类似流的数据中“解包”出来的,而“物化”意味着对象是从任何合适/可用的描述中重建的。
这里的关键字是,嗯.. 物化。在某一时刻,你有一个“抽象的想法”,它会在某个时间点“具体化”成具体的形式。
“物化”用于数据查询和分析的范围。构建查询时,您可以定义一些源、过滤器、聚合、投影等。但是,通常您不能一次“仅构建查询”作为一个整体或放入代码中。因此,您的查询将分部分构建。但是,查询的某些部分可能已经格式化和可执行,只是传递给扩展。它仍然是一个“定义”、抽象的东西,还没有“物化”。稍后,在某个时间点将执行您的查询并获取结果。结果现在将是“具体化”和可读的,这与您刚刚有一个“查询”但仍然只是“准备”的早期状态相反。现在将它连接到 ORM 及其定义类和表之间映射的自定义方式,以及表达过滤器的自定义方式等。
具有讽刺意味的是,我没有碰巧看到“去物质化”这个词,它应该是一种抽象的方式来分解对象并以某种方式存储它们。可能听起来太奇怪了,好像要被删除一样。人们倾向于不恰当地使用“序列化”这个词,或者只是“保存/存储/写入”,这有时会增加一些混乱。因此,您有时可能会听到人们使用 ORM 并将对象“序列化”到 DB 中,分成 3 个表的 15 列,但好吧.. 我认为这不是严格意义上的序列化。