引言:
1.什么是数据库:
数据库:顾名思义,是存入数据的仓库。只不过这个仓库是在计算机存储设备上的,而且数据是一定格式存放的。用户可以对文件中的数据进行新增、查询、更新、删除等操作。
2.数据库的种类:
数据库根据其数据的存储方式可以分为关系型数据库和非关系型数据库。常见的关系型数据库有Oracle、Microsoft SQL Server、MySQL等。常见的非关系性数据库(Nosql)有 、Redis、Hbase、MongoDB 等.
3.数据库的认识:
数据库(DB)其英文全称是Database,简称DB,是按照数据结构来组织、存储和管理数据的仓库,顾名思义,就是是存放数据的仓库。只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。所谓数据库是指长期储存在计算机内的、有组织的、可共享,能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
关系型数据库
关系数据库的概念
关系型数据库基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作是某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系,多个表组成一个数据库,也就是关系型数据库。
关系数据库的存储方式
1)以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。
2)关系模型
关系: 可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。
元组: 可以理解为二维表中的一行,在数据库中经常被称为记录。
属性: 可以理解为二维表中的一列,在数据库中经常被称为字段。
域: 属性的取值范围,也就是数据库中某一列的取值限制。
关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。
关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中成为表结构
3)数据存储方式:行存储,一个表里每一个对象的记录存储一行,一行里包括了该记录的所有特征
key 列1 列2 列3
1 1 1 1
关系数据库的存储结构
关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。
关系数据库的存储规范
数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,数据管理就显得有点麻烦。
关系数据库的存储扩展
关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。
关系数据库的查询方式
关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。
关系数据库对事务支持
关系型数据库强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。支持对
事务原子性细粒度控制,并且易于回滚事务。
关系数据库的读写性能
关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的非常厉害。
关系数据库的数据规模(扩展性)
关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。
使用成本
大多数的关系型数据库都是付费的并且价格昂贵,成本较大,但入门成包较低。
优点
1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;
3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率。
4、支持SQL,可用于复杂的查询。
缺点:
1、为了维护一致性所付出的巨大代价就是其读写性能比较差;
2、固定的表结构;
3、高并发读写需求;
4、海量数据的高效率读写;
特性:
1、关系型数据库,是指采用了关系模型来组织数据的数据库;
2、关系型数据库的最大特点就是事务的一致性;
3、简单来说,关系模型指的就是二维表格模型,而一个关系型数 据库就是由二维表及其之间的联系所组成的一个数据组织。
Nosql(非关系型数据库)
引言:
1)Nosql的出现原因(关系数据库的瓶颈)
1.高并发读写需求
网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
2.海量数据的高效率读写
网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
3.高扩展性和可用性的要求逐渐变高
在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。对网站来说,关系型数据库的很多特性不再需要了:
4.事务一致性的要求变低
关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高
5.读写实时性的要求变低
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比如发一条消息之后,过几秒乃至十几秒之后才看到这条动态是完全可以接受的
6.通常不包含复杂SQL,特别是多表关联查询
任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品阶级角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能极大的弱化了
**
2)Nosql的解读
Nosql, 称作Not Only SQL,并不是NO
Sql,它的出现,并不是用来取代传统关系数据库,而是与其互补。
3)为什么使用NoSQL ?
今天我们可以通过第三方平台可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
非关系数据库的概念:
非关系型数据库,又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL( Structured QueryLanguage,结构化查询语言),对NoSQL 最普遍的定义是“非关联型的”,强调Key-Value 存储和文档数据库的优点,而不是单纯地反对RDBMS,NoSQL描述的是大量非结构化数据存储方法的集合。
非关系数据库的存储方式
(1)列族存储
面向检索的列式存储,其存储结构为列式结构,同于关系型数据库的行式结构,这种结构会让很多统计聚合操作更简单方便,使系统具有较高的可扩展性。这类数据库还可以适应海量数据的增加以及数据结构的变化,这个特点与云计算所需的相关需求是相符合的,比如GoogleAppengine的BigTable以及相同设计理念的Hadoop子系统HaBase就是这类的典型代表。需要特别指出的是,Big Table特别适用于MapReduce处理,这对于云计算的发展有很高的适应性。
(2)Key/Value
面向高性能并发读/写的缓存存储,其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作。Key-Value数据库的主要特点是具有极高的并发读/写性能,非常适合作为缓存系统使用。MemcacheDB、BerkeleyDB、Redis、Flare就是Key-Value数据库的代表。
(3)文档存储
面向海量数据访问的文档存储,这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON(JavaScriptObjectNotations)或者XML等格式的文档来进行存储。这种存储方式可以很方便地被面向对象的语言所使用。这类数据库可在海量的数据中快速查询数据,典型代表为MongoDB、CouchDB等。
(3)图存储
使用图作为数据模型来存储数据,以图论为基础用来表示一个对象的集合,包括顶点以及连接顶点的边,可以高效的存储不同顶点的关系。图数据库专门用与处理高度相互关联关系的数据,可以高效的处理实体之间的关系,比较适合推荐系统,社交网络等问题。典型代表有Neo4j、GraphDB.
非关系数据库的存储结构
Nosql数据库基于动态结构,使用与非结构化数据。因为Nosql数据库是动态结构,可以很容易适应数据类型和结构的变化。
非关系数据库的存储规范
而Nosql数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写
非关系数据库的存储扩展
Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
非关系数据库的查询方式
以块为单元操作数据,使用的是非结构化查询语言(UnQl),它是没有标准的
非关系数据库对事务的支持
遵循BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state )、最终一致性(Eventual Consistency))
一般不遵循ACID原则。
Nosql数据库是在CAP(一致性、可用性、分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,
非关系数据库的性能
Nosql存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的
一致性是 弱要求。Nosql无需sql的解析,提高了读写性能。
使用的非关系数据库成本
Nosql数据库通常都是开源的。但学习成本较高;
优点:
1、无需经过sql层的解析,读写性能很高。
2、基于键值对,数据没有耦合性,容易扩展。
3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、基本不支持事务。
3、无法对表进行复杂的计算,不支持join等功能。
特性:
1、使用键值对存储数据。
2、分布式。
3、一般不支持ACID特性。
4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
补充:CAP定理(CAP theorem)
在计算机科学中, CAP定理(CAPtheorem), 又被称作 布鲁尔定理(Brewer’stheorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)·
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足
AP 原则三 大类:·
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。·
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
使用java进行数据库的curd操作
传统关系型数据库(eg:mysql)
- 将mysql与java的驱动jar包放在项目的classpath下
- 测试连接数据库
- 快速入门(官网)
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-statements.html - 定义pojo类
- 插入
- 删除
- 更新
8. 查询
非关系型数据库(eg:mongodb)
1.首先下载mongo与java的驱动jar包,下载地址:https://mongodb.github.io/mongo-java-driver/,
2.将jar放在项目的classpath下
3.测试连接数据库
4.快速入门(官网)
https://mongodb.github.io/mongo-java-driver/3.11/driver/getting-started/quick-start-pojo/
5.Api(官网)
https://mongodb.github.io/mongo-java-driver/3.11/javadoc/
插入文档
删除第一个文档
更新文档
虽然Nosql查询功能相对传统关系型数据库有限,但是mongoDb为我们提供了大量的复杂查询功能。
查询所有文档
条件查询