论持久化的理解
来源:互联网 发布:苹果mac怎么升级系统 编辑:程序博客网 时间:2024/04/30 11:24
什么是持久化?
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。 JDBC就是一种持久化机制。文件IO也是一种持久化机制。 将鲜肉冷藏,吃的时候再解冻的方法也是。 将水果做成罐头的方法也是。将人的脏器迅速冷冻,运输,然后解冻给人移植的技术也是。
为什么要持久化?
持久化是一种对象服务,就是把内存中的对象保存到外存中,让以后能够取回。需要实现至少3个接口: void Save(object o) 把一个对象保存到外存中 Object Load(object oid) 通过对象标识从外存中取回对象 bool Exists(object oid) 检查外存中是否存在某个对象 为什么需要持久化服务呢?那是由于内存本身的缺陷引起的: 内存掉电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号,遗憾的是,人们还无法保证内存永不掉电。 内存过于昂贵,与硬盘、磁带、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电吧。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。 既然持久化服务在看得到的未来还有市场,我们就来看看如何构建一个好的持久化框架,框架是否真的好在于如何在扩展性、缩放性、重用性上取得良好的平衡: 扩展性,如果一个持久性框架不能支持用户定义的类型,显然不是一个好的框架。 缩放性,保存和取回对象都需要耗费cpu、带宽、时间资源,哪一个消耗太多都不能接受。 重用性是我们建立框架的初衷,就是通过框架能够减少一些编码和测试的工作量。 这几个需求往往是互相冲突的,所以关键是平衡。 我们先跳开一下,看看另一个类似的有用概念:序列化,序列化也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。需要实现2个接口: void Serialize(Stream stream,object o) 把对象序列化到流中 object Deserialize(Stream stream) 把流反序列化成对象 序列化和持久化很相似,有些人甚至混为一谈,其实还是有区别的,序列化是为了解决对象的传输问题,传输可以在线程之间、进程之间、内存外存之间、主机之间进行。我之所以在这里提到序列化,是因为我们可以利用序列化来辅助持久化,可以说凡是可以持久化的对象都可以序列化,因为序列化相对容易一些(也不是很容易),所以主流的软件基础设施,比如.net和java,已经把序列化的框架完成了。 持久化方案可以分为关系数据库方案、文件方案、对象数据库方案、xml数据库方案,目前主流的持久化方案是关系数据库方案,关系数据库方案不仅解决了并发的问题,更重要的是,关系数据库还提供了持久化服务之外的价值:统计分析功能。刚才我说到,凡是可以序列化的对象都可以持久化,极端的说,我们可以只建立一个表Object(OID,Bytes),但基本上没有人这么做,因为一旦这样,我们就失去了关系数据库额外的统计分析功能。 关系数据库和面向对象之间有一条鸿沟,因为2中模式不匹配,所以就存在一个OR映射问题。- 论持久化的理解
- Hibernate持久化的理解
- 如何理解hibernate的持久化
- 数据库持久化的深入理解
- 对象持久化的初步理解
- 对数据持久化的理解
- Hibernate持久化类的理解
- 如何理解Redis的'持久化'机制?
- 持久化理解
- 持久化概念理解
- 5.5 深入理解持久化对象:(5.5.1)持久化类的要求
- 5.5 深入理解持久化对象:(5.5.2)持久化对象的状态
- 5.5 深入理解持久化对象:(5.5.3)改变持久化对象状态的方法
- java 类的序列化和持久化理解
- java 类的序列化和持久化理解
- 理解操纵持久化方法
- 理解IOS数据持久化
- 深入理解Redis的持久化机制和原理
- 给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历
- 保证一天不困的25个小方法
- <JQuery>双下拉框内容移动
- oracle10g win7下使用命令启动服务和实例
- KMP算法详解
- 论持久化的理解
- SQL 2008 ADO数据库使用指南
- Objective-C 编程语言(13)远程消息---Obj-C 对远程消息的支持(同步异步消息)
- Bitbucket免费版本库分享
- arm-linux-gcc编译工具的安装
- /dev/tty
- oracle 数据插入方法
- 迭代器失效的问题
- 使用Ruby写xml文件 , Ruby xml , Ruby读写xml文件 ,Ruby创建xml文件