非关系型数据库和关系型数据库比较
目前的数据库主要分为关系行数据库和非关系型数据库两类,二者在多方面均有区别,各有优势:
存储方式: 传统数据库采用表的格式进行存储,数据以行和列的方式进行存储,读取和查询十分方便。而非关系型数据库不适合以表的格式进行存储,而是以数据集的方式进行存储,没有固定的格式,类似于键值对、图结构或者文档,可以可以很方便的进行扩展。
存储结构: 关系型数据库按照结构化的方式存储数据,每张数据表都必须实现定义好数据表的表结构,然后再根据表结构对数据进行存储。而非关系型数据库采用的是动态结构,如果面对大量的非结构化数据,它可以非常轻松地适应数据类型和结构的改变,也可以根据需要改变数据表的结构。
存储规范: 关系型数据库将数据按照最小关系表的形式进行存储,这样数据管理就变得清晰,但是随着数据表数量的增加,数据的管理会变得十分困难。非关系型数据库的数据存储方式是用平面数据集的方式存放,虽然会出现数据重复存放造成空间浪费的问题,但是通常单独的数据库都是采用单独存储的形式,将数据存为一个整体,对于大量数据的读写十分方便。
扩展方式: 关系型数据库将数据存储到表中,随着表数量的增多,进行多表操作时会出现I/O瓶颈,想要解决这个问题,可以选择提高处理能力,选择更好的硬件设施,当时名不能彻底解决问题,而非关系型数据库使用的时数据集的方式,存储方式是分布式的,可以通过水平扩展的方式扩展数据库。
查询方式: 关系型数据库采用结构化查询语言(SQL),可以执行更复杂的操作,而非关系型数据库使用的是非结构化语言(UnQL),并没有统一的标准,不同的数据库厂商提供的方式可能比不一样。
规范化: 在关系型数据库中,一个数据实体会被分割为多个部分,然后对分割后的数据进行规范化处理,之后在将数据存储到多张关系数据表中,过程相对复杂。而非关系数据库没有这方面的问题,不需要规范化数据,通常会在一个单独的数据单元中存储一个复杂的数据实体。
事务性: 关系型数据库遵循ACID规则,而非关系型数据库则强调BASE原则。
读写性能: 关系型数据库强调数据的一致性为此降低了数据的读写性能,对于海量数据的处理效率很低。而非关系型数据库可以很好的应对海量数据。
授权方式: 关系型数据库包括Oracle、SQL server 、DB2、MySQL等,除MySQL外其它大多数都是非开源的,需要支付高昂的使用费。非关系型数据库包括Redis、HBase、MongoDB、Memcache等都是开源的(企业版除外)
关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。
一般会将数据存储在关系型数据库中,在nosql数据