001_数据库介绍

一. 什么是数据库

1. 数据库是存放数据的仓库。它的存储空间很大, 可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放, 是有一定的规则的, 否则查询的效率会很低。互联网世界充斥着大量的数据, 即这个互联网世界就是数据世界。数据的来源有很多, 比如: 出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据, 图像、音乐、声音也是数据。

2. 数据库是一个按数据结构来存储管理数据的计算机软件系统。数据库的概念实际包括两层意思:

2.1. 数据库是一个能够存储数据的"仓库", 用户在该"仓库"中存放数据, "数据"和"库"两个概念结合成为数据库。

2.2. 数据库是管理数据的新方法和技术, 它能更合理的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。

二. 数据的发展

1. 在数据库的发展历史上, 数据库先后经历了层次数据库、网状数据库和关系数据库等各个阶段的发展。数据库技术在各个方面的快速的发展, 特别是关系型数据库已经成为目前数据库产品中最重要的一员。80年代以来, 几乎所有的数据库厂商新出的数据库产品都支持关系型数据库, 即使是一些非关系数据库产品也几乎都有支持关系数据库的接口。这主要是传统的关系型数据库可以比较好的解决管理和存储关系型数据的问题。随着云计算的发展和大数据时代的到来, 关系型数据库越来越无法满足需要, 这主要是由于越来越多的半关系型和非关系型数据需要用数据库进行存储管理, 与此同时, 分布式技术等新技术的出现也对数据库的技术提出了新的要求, 于是越来越多的非关系型数据库就开始出现, 这类数据库与传统的关系型数据库在设计和数据结构方面有了很大的不同, 它们更强调数据库数据的高并发读写和存储大数据, 这类数据库一般被称为NoSQL(Not only SQL)数据库。而传统的关系型数据库在一些传统领域依然保持了强大的生命力。

三. 关系数据库

1. 关系型数据库, 存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似, 关系型数据库中表与表之间是有很多复杂的关联关系的。常见的关系型数据库有Oracle, Mysql, SqlServer, DB2(IBM公司的)等。在轻量或者小型的应用中, 使用不同的关系型数据库对系统的性能影响不大, 但是在构建大型应用时, 则需要根据应用的业务需求和性能需求, 选择合适的关系型数据库。

2. 标准SQL语句

2.1. 虽然关系型数据库有很多, 但是大多数都遵循SQL(结构化查询语言, Structured Query Language)标准。常见的操作有查询, 新增, 更新, 删除, 求和, 排序等。

2.2. 查询语句: SELECT param FROM table WHERE condition该语句可以理解为从table中查询出满足condition条件的字段param。  

2.3. 新增语句: INSERT INTO table (param1, param2, param3) VALUES (value1, value2,value3)该语句可以理解为向table中的param1, param2, param3字段中分别插入value1,value2,value3。

2.4. 更新语句: UPDATE table SET param=new_value WHERE condition该语句可以理解为将满足condition条件的字段param更新为new_value值。  

2.5. 删除语句: DELETE FROM table WHERE condition该语句可以理解为将满足condition条件的数据全部删除。

2.6. 去重查询: SELECT DISTINCT param FROM table WHERE condition该语句可以理解为从表table中查询出满足条件condition的字段param, 但是param中重复的值只能出现一次。

2.7. 排序查询: SELECT param FROM table WHERE condition ORDER BY param1该语句可以理解为从表table 中查询出满足condition条件的param,并且要按照param1升序的顺序进行排序。  

2.8. 总体来说, 数据库的SELECT,INSERT,UPDATE,DELETE对应了我们常用的增删改查四种操作。

3. MySQL是最流行的关系型数据库管理系统, 在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System: 关系数据库管理系统)应用软件之一。

4. RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

4.1. 数据以表格的形式出现。

4.2. 每行为各种记录名称。

4.3. 每列为记录名称所对应的数据域。

4.4. 许多的行和列组成一张表单。

4.5. 若干的表单组成database。

5. RDBMS术语:

5.1. 数据库: 数据库是一些关联表的集合。

5.2. 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

5.3. 列: 一列(数据元素)包含了相同类型的数据。

5.4. 行: 一行(元组或记录)是一组相关的数据。

5.5. 冗余: 存储两倍数据, 冗余降低了性能, 但提高了数据的安全性。

5.6. 主键: 主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

5.7. 外键: 外键用于关联两个表。

5.8. 复合键: 复合键(组合键)将多个列作为一个索引键, 一般用于复合索引。

5.9. 索引: 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

5.10. 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。

5.11. 实体完整性: 是关系模型必须满足的完整性约束条件, 目的是保证数据的一致性。

6. MySQL数据库

6.1. MySQL是一个关系型数据库管理系统, 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:

6.2. MySQL是由瑞典MySQL AB公司开发, 目前属于Oracle公司。MySQL是一种关联数据库管理系统, 关联数据库将数据保存在不同的表中, 而不是将所有数据放在一个大仓库内, 这样就增加了速度并提高了灵活性。

6.3. MySQL是开源的, 目前隶属于Oracle旗下产品。

6.4. MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

6.5. MySQL使用标准的SQL数据语言形式。

6.6. MySQL可以运行于多个系统上, 并且支持多种语言。这些编程语言包括: C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

6.7. MySQL支持大型数据库, 支持5000万条记录的数据仓库, 32位系统表文件最大可支持4GB, 64位系统支持最大的表文件为8TB。

6.8. MySQL是可以定制的, 采用了GPL协议, 你可以修改源码来开发自己的MySQL系统。

6.9. 此外, 你也可以使用MariaDB代替, MariaDB数据库管理系统是MySQL的一个分支, 主要由开源社区在维护, 采用GPL授权许可。开发这个分支的原因之一是: 甲骨文公司收购了MySQL后, 有将MySQL闭源的潜在风险, 因此社区采用分支的方式来避开这个风险。

6.10. MariaDB的目的是完全兼容MySQL, 包括API和命令行, 使之能轻松成为MySQL的代替品。

四. 非关系型数据库(NoSQL)

1. NoSQL最常见的解释是"non-relational", "Not Only SQL"也被很多人接受。NoSQL仅仅是一个概念, 泛指非关系型的数据库, 区别于关系数据库, 它们不保证关系数据的ACID特性。NoSQL是一项全新的数据库革命性运动, 其拥护者们提倡运用非关系型的数据存储, 相对于铺天盖地的关系型数据库运用, 这一概念无疑是一种全新的思想的注入。

2. NoSQL数据库种类繁多, 但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系, 这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。NoSQL数据库都具有非常高的读写性能, 尤其在大数据量下, 同样表现优秀。NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。

3. 常见的非关系型数据库有: Redis、Memcache、Hbase、MongoDB等。

4. 目前NoSQL数据库仍然没有一个统一的标准, 它现在有四种大的分类:

4.1. 键值对存储(key-value): 代表软件Redis, 它的优点能够进行数据的快速查询, 而缺点是需要存储数据之间的关系。

4.2. 列存储: 代表软件Hbase, 它的优点是对数据能快速查询, 数据存储的扩展性强。而缺点是数据库的功能有局限性。

4.3. 文档数据库存储: 代表软件MongoDB, 它的优点是对数据结构要求不特别的严格。而缺点是查询性的性能不好, 同时缺少一种统一查询语言。

4.4. 图形数据库存储: 代表软件InfoGrid, 它的优点可以方便的利用图结构相关算法进行计算。而缺点是要想得到结果必须进行整个图的计算, 而且遇到不适合的数据模型时, 图形数据库很难使用。

五. NoSQL与关系型数据库的区别

1. 存储方式

1.1. 传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储, 要读取和查询都十分方便。而非关系型数据不适合这样的表格存储方式, 通常以数据集的方式, 大量的数据集中存储在一起, 类似于键值对、图结构或者文档。

2. 存储结构

2.1. 关系型数据库按照结构化的方法存储数据, 每个数据表都必须对各个字段定义好(也就是先定义好表的结构), 再根据表的结构存入数据, 这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了, 所以整个数据表的可靠性和稳定性都比较高, 但带来的问题就是一旦存入数据后, 如果需要修改数据表的结构就会十分困难。而NoSQL数据库由于面对的是大量非结构化的数据的存储, 它采用的是动态结构, 对于数据类型和结构的改变非常的适应, 可以根据数据存储的需要灵活的改变数据库的结构。

3. 存储规范

3.1. 关系型数据库为了避免重复、规范化数据以及充分利用好存储空间, 把数据按照最小关系表的形式进行存储, 这样数据管理的就可以变得很清晰、一目了然, 当然这主要是一张数据表的情况。如果是多张表情况就不一样了, 由于数据涉及到多张数据表, 数据表之间存在着复杂的关系, 随着数据表数量的增加, 数据管理会越来越复杂。而NoSQL数据库的数据存储方式是用平面数据集的方式集中存放, 虽然会存在数据被重复存储, 从而造成存储空间被浪费的问题(从当前的计算机硬件的发展来看, 这样的存储空间浪费的问题微不足道), 但是由于基本上单个数据库都是采用单独存放的形式, 很少采用分割存放的方式, 所以这样数据往往能存成一个整体, 这对于数据的读写提供了极大的方便。

4. 扩展方式

4.1. 当前社会和科学飞速发展, 要支持日益增长的数据库存储需求, 当然要求数据库有良好的扩展性能, 并且要求数据库支持更多数据并发量, 扩展方式是NoSQL数据库与关系型数据库差别最大的地方, 由于关系型数据库将数据存储在数据表中, 数据操作的瓶颈出现在多张数据表的操作中, 而且数据表越多这个问题越严重, 如果要缓解这个问题, 只能提高处理能力, 也就是选择速度更快性能更高的计算机, 这样的方法虽然可以拓展一定的空间, 但这样拓展的空间是非常有限的, 也就是关系型数据库只具备纵向扩展能力。而NoSQL数据库由于使用的是数据集的存储方式, 它的存储方式一定是分布式的, 它可以采用横向的方式来开展数据库, 也就是可以添加更多数据库服务器到资源池, 然后由这些增加的服务器来负担数据量增加的开销。

5. 查询方式

5.1. 关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询, SQL早已获得了各个数据库厂商的支持, 成为数据库行业的标准, 它能够支持数据库的CRUD(增加, 查询, 更新, 删除)操作, 具有非常强大的功能, SQL可以采用类似索引的方法来加快查询操作。NoSQL数据库使用的是非结构化查询语言(UnQL),它以数据集(像文档)为单位来管理和操作数据, 由于它没有一个统一的标准, 所以每个数据库厂商提供产品标准是不一样的, NoSQL中的文档Id与关系型表中主键的概念类似, NoSQL数据库采用的数据访问模式相对SQL更简单而精确。

6. 规范化

6.1. 在数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操作, 这样在关系型数据库中, 一个数据实体一般首先要分割成多个部分, 然后再对分割的部分进行规范化, 规范化以后再分别存入到多张关系型数据表中, 这是一个复杂的过程。 好消息是随着软件技术的发展, 相当多的软件开发平台都提供一些简单的解决方法, 例如: 可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。对于NoSQL数据库则没有这方面的问题, 它不需要规范化数据, 它通常是在一个单独的存储单元中存入一个复杂的数据实体。

7. 事务性

7.1. 关系型数据库强调ACID规则, 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability), 可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作, 而且可以充分满足数据库操作的高性能和操作稳定性的要求。并且关系型数据库十分强调数据的强一致性, 对于事务的操作有很好的支持。关系型数据库可以控制事务原子性细粒度, 并且一旦操作有误或者有需要可以马上回滚事务。而NoSQL数据库强调BASE原则, 基本可用(Basically Availble)、软状态(Soft-state)、最终一致性(Eventual Consistency), 它减少了对数据的强一致性支持, 从而获得了基本一致性和柔性可靠性, 并且利用以上的特性达到了高可靠性和高性能, 最终达到了数据的最终一致性。NoSQL数据库虽然对于事务操作也可以使用, 但由于它是一种基于节点的分布式数据库, 对于事务的操作不能很好的支持, 也很难满足其全部的需求, 所以NoSQL数据库的性能和优点更多的体现在大数据的处理和数据库的扩展方面。  

8. 读写性能

8.1. 关系型数据库十分强调数据的一致性, 并为此降低读写性能从而付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错, 但一旦面对海量数据的处理的时候效率就会变得很差, 特别是遇到高并发读写的时候性能就会下降的非常厉害。 而NoSQL数据库相对关系型数据库优势最大的恰恰是应对大数据方面, 也就是对于大量的每天都产生非结构化的数据能够高性能的读写, 这是因为NoSQL数据库是按key-value类型进行存储的, 以数据集的方式存储的, 因此无论是扩展还是读写都非常容易, 并且NoSQL数据库不需要关系型数据库繁琐的解析, 所以NoSQL数据库大数据管理、检索、读写、分析以及可视化方面具有关系型数据库不可比拟的优势。

9. 授权方式

9.1. 关系型数据库常见的有Oracle、SQLServer、DB2、Mysql, 除了Mysql大多数的关系型数据库如果要使用都需要支付一笔价格高昂的费用, 即使是免费的Mysql性能也受到了诸多的限制。而对于NoSQL数据库, 比较主流的有redis、HBase、MongoDb、Memcache等产品, 通常都采用开源的方式, 不需要像关系型数据库那样, 需要一笔高昂的花费。

六. 分布式数据库

1. 所谓的分布式数据库技术, 就是数据库技术与分布式技术的一种结合。具体指的是那些在地理意义上分散开的各个数据库节点, 在逻辑上又是属于同一个系统的数据结合起来的一种数据库技术。既有着数据库间的协调性也有着数据的分布性。这个系统并不注重系统的集中控制, 而是注重每个数据库节点的自治性, 此外为了让程序员能够在编写程序时可以减轻工作量以及系统出错的可能性, 一般都是完全不考虑数据的分布情况, 这样的结果就使得系统数据的分布情况一直保持着透明性。

2. 在分布式数据库里, 数据冗杂是一种被需要的特性, 这点和一般的集中式数据库系统不一样。第一点是为了提高局部的应用性而要在那些被需要的数据库节点复制数据。第二点是因为如果某个数据库节点出现系统错误, 在修复好之前, 可以通过操作其他的数据库节点里复制好的数据来让系统能够继续使用, 提高系统的有效性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值