zoukankan      html  css  js  c++  java
  • 持久化(Persistence)

    1、概念:

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

    持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)

    2、主要应用 

      将 内存中的对象 存储在 数据库 中,或者存储在 磁盘文件中、XML数据文件中 等等。

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

    3、理解 

      在一定周期内保持不变就是持久化,持久化是针对时间来说的。数据库中的数据就是持久化了的数据,只要你不去删除或修改。

      比如在IE浏览器中一次Session会话中Session对象变量也是不变的,是Session容器中持久化。
           对象持久化的方式有很多种,根据周期不同有page、Session、Application。
     
      对象序列化机制需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态,
      对象序列化的过程是对象持久化的方法之一,把对象保存到文件中。
     
    4、两个层面 
      

    应用层

    系统层

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

    5、特点 

    对象

    市场

    序列化

    持久化是一种对象服务,就是把内存中的对象保存到外存中,让以后能够取回。

    需要实现至少3个接口:

    • void Save(object o) 把一个对象保存到外存中
    • Object Load(object oid) 通过对象标识从外存中取回对象
    • boolExists(object oid) 检查外存中是否存在某个对象

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

    内存掉电后数据会丢失,但有一些对象是无论如何都不能丢失的,
    比如银行账号,遗憾的是,人们还无法保证内存永不掉电。
    内存很昂贵,与硬盘、磁带、光盘等外存相比,内存价格要高2~3个数量级,
    而且维持成本也高,至少需要一直供电吧。
    所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。

    如何构建一个好的持久化框架?

    框架是否好在于在扩展性、缩放性、重用性上取得良好的平衡: 

    • 扩展性,一个持久性框架不能支持用户定义的类型,显然不是一个好的框架。
    • 缩放性,保存和取回对象都需要耗费cpu、带宽、时间资源,哪一个消耗太多都不能接受。
    • 重用性,是我们建立框架的初衷,通过框架能够减少一些编码和测试的工作量。
    这几个需求往往是互相冲突的,所以关键是平衡。

    也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象

    需要实现2个接口:

    • voidSerialize (Stream stream,object o) 把对象序列化到流中
    • object Deserialize(Stream stream) 把流反序列化成对象 

    序列化和持久化很相似,有些人甚至混为一谈,

    其实还是有区别的?

    序列化是为了解决对象的传输问题,

    传输可以在线程之间、进程之间、内存外存之间、主机之间进行。

    之所以在这里提到序列化?

    是因为我们可以利用序列化来辅助持久化,

    可以说凡是可以持久化的对象都可以序列化,

    因为序列化相对容易一些(也不是很容易),

    所以主流的软件基础设施,已经把序列化的框架完成了

    比如.net和java

     

    6、意义 

    兴起原因

    运用

       

    7、相关实现 

    Hibernate JPA(Java Persistense API) Mybatis

    为应用程序提供了高效的O/R关系映射和查询服务,

    面向对象的领域模型到传统的关系型数据库的映射,

    提供了一个使用方便的框架。

    是EJB3.0的一部分,为其提供了一套O/R关系映射的API,

    但不仅限于EJB中使用,

    它也可以在web应用或者应用程序客户端中被使用,

    甚至在Java桌面程序中被使用。

    也是一种orm框架。

     8、Koa 

      koa前后端分离session持久化(koa-mysql-session)

      koa-mysql-session 结合 koa-session-minimal 的方法 做 session 处理的中间件

    koa-mysql-session  koa-session-minimal

    为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。

    app.use( //session缓存设置
      session({
        key: 'USER_SID',
        store: new MysqlStore(sessionMysqlConfig),
        cookie: cookie,
      }),
    );

     适用于koa2 的session中间件,提供存储介质的读写接口 

    app.use(session({
            key: 'session-id',          // cookie 中存储 session-id 时的键名, 默认为 koa:sess
            cookie: {                   // 与 cookie 相关的配置
                domain: 'localhost',    // 写 cookie 所在的域名
                path: '/',              // 写 cookie 所在的路径
                maxAge: 1000 * 30,      // cookie 有效时长
                httpOnly: true,         // 是否只用于 http 请求中获取
                overwrite: false        // 是否允许重写
            }
    }))
  • 相关阅读:
    异常:Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    SpringMVC 如何定义类型转换器
    Springmvc 进行数据类型转换
    mvc:view-controller 标签
    将POST请求转换为DELETE、PUT等请求的方法
    关于HiddenHttpMethodFilter
    关于抽象方法的调用的
    一对一关联关系基于主键映射的异常 IdentifierGenerationException
    (二十四)js内存回收方法
    (二十三)函数柯里化
  • 原文地址:https://www.cnblogs.com/slightFly/p/14089407.html
Copyright © 2011-2022 走看看