认识数据库
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内、有组织、可共享、统一管理的大量数据的集合。可以将数据库视为一个电子化的文件柜,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
数据库是一个按数据结构来存储和管理的计算机软件,实际包含两层意思:
1.数据库是一个整体,他是能够合理保管数据的一个“仓库”,用户在这个“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
2.数据库是数据管理的新方法和技术,他能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。
数据库发展现状
在数据库的发展历史上,数据库先后经历了层次数据库、网状数据库和关系数据库等各个阶段的发展,数据库技术在各个方面的快速发展。特别是关系型数据库已经成为了目前数据库产品中最重要的一员,80年代以来,几乎所有的数据库厂商新出的数据库产品都要支持关系型数据库,即使一些非关系型数据库产品页几乎都有支持关系型数据库的接口。这主要是传统的关系型数据库可以比较好的解决管理和存储关系型数据的问题。随着云计算的发展和大数据时代的到来,关系型数据库越来越无法满足需要,这主要是由于越来越多的半关系型和非关系型数据需要用数据库进行存储管理,以此同时,分布式技术等新技术的出现也对数据库的技术提出了新的要求,于是越来越多的非关系型数据库就开始出现,这类数据库与传统的关系型数据库在设计和数据结构有了很大的不同,他们更强调数据库数据的高并发读写和存储大数据,这类数据库一般称为NoSQL(Not only SQL)数据库。而传统的关系型数据库在一些传统领域依然保持了强大的生命力。
数据库的分类
关系型数据库
关系型数据库存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。常见关系型数据库有MySQL、Oracle、SQLite、SQLServer、等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
数据的组织形式使用"表"作为结构,首先得有一个表头,表头中约定了有很多列,以及每一列的类型。插入的数据就是表中的一行,这一行里的每一列都需要和表头的结构一一对应,对于数据的“约束”(对于数据合法性的校验)比较强。
非关系型数据库(NoSQL)
随着近些年技术方向的不断拓展,大量的非关系型数据库如MongoDB、Redis、Memcahe出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。
NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。对于非结构化数据的处理更合适,如文章、评论,这些数据如全文搜索、机器学习通常只用于模糊处理,并不需要结构化数据一样,进行精确查询,而且这类数据的数据的数据规模往往是海量的,数据规模的增长往往也是不可预期的,而NoSQL数据库的扩展能力几乎是无限的,所以NoSQL数据库可以很好的满足这一类数据的存储。
数据的组织形式使用"键值对"作为结构,类似于Map。存储的时候需要指定K-V值,每组数据的value中包含的字段没有明确的要求,这样相对来说对数据的约束更低。相比于关系型数据库,牺牲了一部分的功能,但是换来了更高效率以及更强的水平扩展能力,更适用于分布式系统中。
非关系型数据库与关系型数据库的区别
存储方式
传统的关系型数据库采用表格的存储方式,数据以行和列的方式进行存储,要读取和查询都十分方便。而非关系型数据库不适合这样的表格存储方式,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构或者文档。
存储结构
关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好,再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据库之前就已经定义好了,所以整个数据表的可靠性和稳定性比较高,但带来的问题就是一旦存入数据后,如果修改数据表的结构就会十分困难。而NoSQL数据库由于面对的是大量非结构化的数据的存储,它采用的动态结构,对于数据类型和结构的改变非常的适应,可以根据数据存储的需要灵活的改变数据库的结构。
存储规范
关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样的数据管理的就可以变得很清晰、一目了然,当然这主要是一张数据表的情况。如果是多张表情况就不一样了,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。而NoSQL数据库的数据存储方式是用平面数据集的方式集中存放,虽然会存在数据被重复存储,从而造成存储空间被浪费的问题,但是由于基本上单个数据库采用独立存放的形式,很少采用分割存放的方式,所以这样数据往往能存成一个整体,这对于数据的读写提供了极大的方便。
扩展方式
当前社会和科学飞速发展,要支持日益增长的数据库存储需求当然要求数据库有良好的扩展性能,并且要求数据库支持更多数据并发量,扩展方式是NoSQL数据库与关系型数据库差别最大的地方,由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要环节这个问题,只有提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间是非常有限的,也就是说关系型数据库之具备纵向扩展能力。而NoSQL数据库由于使用的是数据集的存储方式,他的存储方式一定是分布式的,它可以采用横向的方式来开展数据库,也就是可以添加更多的数据库服务器到资源地,然后有这些增加的服务器来负担数据量增加的开销。
查询方式
关系型数据库采用结构化的查询语句(SQL)来对数据进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据课的CRUD(增加、查询、更新、删除)操作,具有非常强大的功能,SQL可以采用索引来加快查询操作。NoSQL数据课使用的是非结构化的查询语言(UnQL),他以数据集位单位来管理和操作数据,由于他没有一个统一的标准,所以每个数据课厂商提供的产品标准是不一样的,NoSQL中的文档ID与关系型表中的主键概念类似,NoSQL数据库采用的数据访问方式相对于SQL更简单而精确。
规范化
在数据库的设计开发国中开发人员通常会面对同时需要对一个或者多个数据实体进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张关系型数据表中,这是一个复杂的过程。对于NoSQL数据库来说是没有这方面的问题,它不需要规范化数据,它通常是再一个单独的存储单元中存入一个复杂的数据实体。
事务性
关系型数据库强调的是ACID规则(原子性、一致性、隔离性、持久性),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。并且关系型数据库十分强调数据的强一致性,对于事务的操作有很好的支持。关系型数据库可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以立马回滚事务。而NoSQL数据库强调BASE原则(基本可用、软状态、最终一致性),他减少了对数据的强一致性,从而获得了基本一致性和柔和可靠性,并且利用以上的特性达到了高可靠性和高性能,最终达到了数据的最终一致性。NoSQL数据库虽然对于事务操作也可以使用,但由于他是一种基于节点的分布式数据库,对于事务的操作不能很好的支持,页很难满足其全部的需求,所以NoSQL数据库的性能和优点更多的体现在大数据的处理和数据库的扩展方面。
读写性能
关系数据库十分强调数据的强一致性,并且为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但是一旦面对海量数据的处理的时候笑了就回变得很差,特别是遇到高并发的时候性能就会下降的非常厉害。而NoSQL数据库相对关系数据库优势最大的恰恰是对大数据方面,也就是对于大量的每天都产生非结构化的数据能够高性能的读写,这是因为NoSQL数据库是按照key-value类型进行存储的,以数据机的方式存储的,因此无论是扩展还是读写都非常的容易,并且NoSQL数据库不需要关系型数据库繁琐的解析,所以NoSQL数据库大数据管理、检索、读写、分析意识可视化方面具有关系型数据库不可比的优势。
授权方式
关系型数据库常见的有MySQL、Oracle、SQL Server、DB2,但是除了MySQL大多数的关系型数据库如果要使用都需要支付一笔价格高昂的费用,即使是免费的MySQL性能也受到了诸多的限制。而对于NoSQL数据库,比较主流的有redis、HBase、MongoDb,memcache等产品,通常采用的是开源方式,不需要像关系型数据库那用,需要一笔高昂的花费。