设计模式-序列化LOB(Serialized LOB)

概念

通过将多个对象序列化到一个大对象(LOB)中来保存一个对象图,并存储在一个数据库字段中。

对象模型经常出现一些小对象组成的复杂图,复杂性主要体现在对象间的关系上,比如组织结构层次关系。

对数据库的映射比较复杂,最简单的方法是包含一个指向上级的外键,但这样做很难使用。

序列化LOB方法使整张的对象图被作为一个独立的大对象写入表中,变成了一种备忘录的形式。

运行机制

  • 两种方法进行序列化:二进制形式(BOLB)或者文本字符形式(CLOB)。
  • BLOB的优点:易于编程,使用空间小。缺点:数据库必须支持二进制数据类型,若没有对象就无法重新构造对象图,即需要还原才能查看字段内容。
  • CLOB优点:容易查看内容。缺点:占用空间多,需要自己的解析器,并且速度慢
  • XML可以作为CLOB的解析器,空间问题可以通过压缩的XML格式解决,但同时也失去了可读性。
  • 注意ID问题,若LOB放错了位置,譬如把顾客LOB放到订单中,顾客数据就会被拷贝到每一个订单上,使更新成为问题。
  • 注意数据的复制,往往复制的数据不是一个完整的序列化LOB。
     

使用时机

  •  在能够突出对象模型的一部分、并且用它作为LOB的时候使用。这些对象一般不会在应用程序之外通过SQL访问。
  •  LOB之外的对象引用隐藏在LOB里面的对象,序列化LOB效率会低下,需要一些引用方案,但会十分复杂。

序列化LOB示例-序列化一个部分层级到XML中(java

Step1 :根据对象结构建立客户和部门类

Step1 :插入一个LOB(读取XML的过程和插入相反,略)

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值