持久化

持久化(Persistence)

     持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的) 持久化为持久数据(比如持久化至数据库中,能够长久保存)。


定义

     持久化(Persistence),即把数据(如内存中的对象) 保存到可永久保存的存储设备中(如磁盘)。 持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中,XML数据文件中等等。


       持久化是将程序数据在持久状态和瞬时状态间转换的机制。


       JDBC就是一种持久化机制。文件IO也是一种持久化机制。


       日常持久化的方法


        将鲜肉冷藏,吃的时候在解冻的方法也是。

        将水果做成罐头的方法也是。

        将人的脏器迅速冷冻,运输,然后解冻给人移植的技术也是。


理解

      我们这样理解:

        在一定周期内保持不变就是持久化,持久化是针对时间来说的。

        数据库中的数据就是持久化了的数据,只要你不去删除或修改。

        比如在IE浏览器中依次Session会话中Session对象变量也是不变的,是Session容器中持久化。

        对象持久化的方式有很多种,根据周期不同有 page Session Application。

        对象序列化机制对于需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态。

        对象序列化的过程是对象持久化的方法之一,把对象保存到文件中。


二个层面

       简单的理解持久化可以在两个层面:应用层和系统层。

     应用层

      如果关闭(shutdown)你的应用然后重新启动则先前的数据依然存在。

     系统层

      如果关闭(shutdown)你的系统(电脑)然后重新启动则先前的数据依然存在。


特点

      对象

      持久化是一种对象服务,就是把内存中的对象保存到外存中,让以后能够取回。需要实现至少3个接口:

        void  Save (object o) 把一个对象保存到外存中

        Object Load(object oid) 通过对象标识从外存中取回对象

        boolExists(object oid) 检查外存中是否存在某个对象

        为什么需要持久化服务呢? 那是由于内存本身的缺陷引起的:

        内shi存掉电后数据会丢失,但有一些对象是无论如何都不会丢失的,比如银行账号,遗憾的是,人们还无法保证内存永不掉电。

        内存过于昂贵,与硬盘,磁带,光盘等外存相比,内存的价格要高2-3个数量级,而且维持成本也高,至少需要一直供电吧,所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。

      序列化

      序列化也是一种对象服务,就是把内存中的对象序列化成流,或者把流反序列化成对象。需要实现两个接口:

        void Serialize(Stream stream,object o) 把对象序列化到流中

              object Deserialize(Stream stream) 把流反序列化成对象

        序列化和持久化很相似,有些人甚至混为一谈,其实还是有去别的,序列化是为了解决对象的传输问题,传输可以在线程之间,进程之间,内存外存之间,主机之间进行。我之所以在这里提到序列化,是因为我们可以利用序列化来辅助持久化,可以说凡是可以持久化的对象都可以序列化,因为序列化相对容易一些(也不是很容易),所以主流的软件基础设施,比如.net和java , 已经把序列化的框架完成了。


         持久化方案可以分为关系数据库方案,文件方案,对象数据库方案,xml数据库方案,现今主流的持久化方案是关系数据库方案,关系数据库方案不仅解决了并发的问题,更重要的是,关系数据库还提供了持久化服务之外的价值:统计分析功能。刚才我说到,凡是可以序列化的对象都可以持久化,极端的说,我们可以只建立一个表Object(OID,Bytes),但基本上没有人这么做,因为一旦这样,我们就失去了关系数据库额外的统计分析功能。

    

        关系数据库和面向对象之间有一条鸿沟,因为二者模式不匹配,所以就存在一个OR映射问题。

     

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值