首页 > 代码库 > 嵌入值和序列化LOB

嵌入值和序列化LOB

Embedded Value

  • 把一个对象映射成另一个对象表中的若干字段.

 

    • OO系统中会有很多小对象(DataRange,Money).而作为表在DB中毫无意义.
    • 默认想法是把一个对象保存为一个表.
    • 但是,将这些小对象,映射为该对象所有者记录中的若干字段.
  • 运行机制
    • 可以看做一种特殊的依赖映射.该值对象是一个依赖者对象.
    • 由所有者完成对依赖者的加载和保存.
  • 使用时机
    • 简单的值对象.由于没有ID.所以更新时不需要标识映射来同步.所以不需要DB表来对应.
    • 一般,只用在简单的依赖者上.只在一对一关联关系时,才使用.或者依赖者数量很少且固定时.
    • 如果想在SQL查询中使用依赖者值时,需要使用它.
    • 对于复杂的依赖关系(巨大的对象子图),使用序列化LOB.
  • Serialized LOB
    • 序列化一个对象图中的对象到一个LOB中,并将该LOB存储在一个DB表的字段中.
      • 在对象模型中,会包含一些由小对象组成的复杂图.该结构中的信息不存在于对象中,而存在于它们之间的链接关系中.
      • 而在DB中,基本的方案是带有上级外键的组织结构表.但是这样造成了很多的链接.
      • 对象不需要被保存成相互关联的数据表行.还可以进行序列化.
    • 运行机制
      • 序列化方法
        • BLOB二进制
          • 由于多数平台提供了自动序列化对象图的能力.所以容易保存图.
          • 易于编程,并使用最小的空间.
          • 缺点是DB必须支持二进制Data类型.并且没有对象就不能重构对象图.不能做到偶尔查看字段来解出其意义.
          • 还会出现版本问题.如果修改了对象类.那么就会导致无法读出之前的序列化部分.
        • CLOB文本字符
          • 易读.意义明显.
          • 但会占用更多的空间.且需要专门的解析器.速度慢.
          • 这些缺点可以使用XML解决.但XMl加大了空间的利用.而压缩的话,又会影响可读性.
      • 应该保证除了LOB拥有者对象之外的其它对象,都不能访问到它.
    • 使用时机
      • 最大问题是不能使用SQL查询到它的结构.
      • 应确保序列化子图中的对象不会被SQL查询访问.