初步理解为什么要用持久层,持久层使用数据库高效的原因
在写代码之前必须搞清楚持久层的意义是什么?持久层是必要的吗?
持久层对于持久是相对于瞬时来说的,持久层,可以理解成数据保存在数据库或者硬盘一类可以保存很长时间的设备里面,不像放在内存中那样断电就消失了,也就是把数据存在持久化设备上 。企业应用中,数据很重要(各种订单数据、客户数据、库存数据之类的),比应用程序本身更重要, 所以需要把数据持久化。现在大数据时代,可以说不仅是企业应用,几乎所有应用都是需要持久层支持的。持久化可以通过很多方式,写文件和数据库都可以。只是现在企业一般都会选择把数据持久化到数据库中,因为可以很方便的查询统计分析,但数据库的数据最终还是会写到磁盘上的。
那么数据库是如何实现快速对数据进行操作的呢?经过查阅资料,了解到数据库依靠着索引和数据结构课上学习的B+Tree实现高效获取数据。索引是对记录集的多个字段进行排序的方法。在一张表中为一个字段创建一个索引,将创建另外一个数据结构,包含字段数值以及指向相关记录的指针,然后对这个索引结构进行排序,允许在该数据上进行二分法排序。但这样存在着一定的副作用,即索引需要额外的磁盘空间,相当于以空间换时间了。
索引的好处,以下面的表为例:
字段名 | 数据类型 |
---|---|
id (Primary key) | Unsigned INT |
firstName | Char(50) |
lastName | Char(50) |
emailAddress | Char(100) |
假设数据库中有r=1000000条记录,在id字段上的线性搜索平均需要N/2 = 500,000块访问来找到一条记录假设id字段是查询关键值,不过既然id字段是有序的,可以执行一个二分查询,这样平均只需要访问log2 (1000000) = 19.93 = 20 个数据块。但通过firstName字段查找时候,由于firstName字段既不是有序的,无法执行二分搜索,数值也不具有唯一性,所以对这张表的查找必须到最后一个记录即全表扫描N = 1,000,000个数据块访问。这就是索引用来改进的地方。
B+Tree是在数据结构课上学习的,他的好处十分显然了,如下图:
在这之后,开始写代码了,又遇到了下一个问题,是否采用持久层框架?我查了现在大部分用的都是ORM 即对象关系映射框架,,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中,采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。
上述内容主要参考:
https://blog.csdn.net/qq_33530388/article/details/62053538
https://blog.csdn.net/GitChat/article/details/78787837
初步理解为什么要用持久层,持久层使用数据库高效的原因相关推荐
- 表现层 业务层 持久层 web层 service层 dao层的相关概念描述
我们的架构一般分为两种, 一种是C/S(客户端/服务器),另一种是B/S(浏览器/服务器). 在我接下来学习的SpringMVC种,几乎都是B/S架构开发的. 其标准的三层架构中,一般分为:表现层,业 ...
- java 持久_Java持久锁总结 -解道Jdon
并发主题 Java与持久相关的锁总结 本文总结Java中有关数据库保存持久数据的锁机制,不只是纯粹数据库自身的锁,本文主要就Java持久层三个技术数据库.JPA和Hibernate的锁应用进行了总结. ...
- 对SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层等层的理解
SSM 是 Spring + SpringMVC + Mybatis集成的框架. MVC即model view controller.(模型,视图,控制器) 一.entity层(model层,doma ...
- wmts格式说明_WMTS服务初步理解与读取
WMTS 服务初步理解与读取 当前在网络地图服务中,大部分都会采取缓存技术来替代实时对数据进行可视化,用以提高地图响应能 力.介绍 OGC 提出的缓存技术标准的 WMTS 服务. WMTS 简介 WM ...
- Spring框架学习笔记(1) ---[spring框架概念 , 初步上手使用Spring , 控制反转 依赖注入初步理解 ]
spring官网 -->spring官网 spring5.3.12–>spring-framework 在线文档 --> Spring 5.3.12 文章目录 1.Spring概论 ...
- [tts] WaveNet初步理解
WaveNet初步理解 paper 是DeepMind使用CNN来做语音生成的工作,这个模型直接使用声音的原始波形进行训练的.目前github上开源了一个tensorflow-wavenet项目 文章 ...
- 如何让人大致理解RxJava思想:第一节 初步理解RxJava
如何让人大致理解RxJava思想:第一节 初步理解RxJava 首先,我们需要明确,一个人不可能一口气吃成一个胖子,你不可能仅仅花5分钟看完我这篇文章,然后一拍桌子,大叫一声,我知道了,然后赢取白富美 ...
- php7连接oracle数据库,使用一个持久连接连到 Oracle 数据库 - PHP 7 中文文档
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0) oci_pconnect – 使用一个持久连接连到 Oracle 数据库 说明 oci_pconnect ( string ...
- 云技术-SaaS架构初步理解
最近公司准备整一个SaaS的东西.有幸参入这一块东西的搭建,借着這个机会也重新好好梳理了一下对SaaS的认识.今天整理一下! 一.云计算与SaaS 说起SaaS,就得先说说云计算了.关于云计算分为三层 ...
最新文章
- win7虚拟机黑苹果_首次安装黑苹果系统,原来如此简单,比真正的Mac电脑更快!...
- TCL脚本语言基础介绍
- 如何将ng-template整体作为一个参数,传递给另一个组件
- 输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例
- [JavaWeb-HTML]HTML标签_文件标签
- 关于二叉堆(优先队列)的其他操作及其应用
- JavaWeb 如何防止表单重复提交 - 使用Token,令牌
- array 前端面试题_web前端开发面试题汇总
- java bean对象属性复制,将一个对象的属性值赋值给另一个对象,对象之间的复制方法
- 电力系统继电保护第二版张保会_电力系统继电保护试题
- vb.net与FLASH的完美结合
- Svn、Git、GitHub、GitLab、码云 区别
- HTML5新增视频标签(HTML5)
- element表格固定某一行_elementui 表格 固定列+合计行
- ResultSet大数据量导致内存溢出
- cropper左右移动_cropper.js移动端使用
- win7共享wifi之bat文件
- 仿百度音乐html5,js仿百度音乐全选操作
- 检索所学课程包含学生S3所学课程的学生学号
- cocos creater 鸿蒙 音频卡死 播放失败 不回调