一、OldSQL数据库
OldSQL数据库泛指传统的关系型数据库,如Oracle、Sybase、SQLServer、DB2、MySQL、PostgreSQL等,以结构化数据为处理对象,提供实时的、面向应用的事务处理能力,支持标准SQL或PL/SQL。 OldSQL数据库采用SMP(Symmetric Multi-Processing)对称多处理架构,汇聚多个服务器的一组CPU处理器,各CPU之间共享内存、总线和存储。可以通过增加CPU、内存来提高性能,进行Scale up的纵向扩展,但由于是共享存储IO带宽有限,无法大规模扩展,适合数据量在数十TB的应用场景。
二、NewSQL数据库
NewSQL泛指各种新的可扩展、高性能关系型数据库,这类数据库不仅具有对海量结构化数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。 NewSQL数据库工作在一个分布式集群的节点上,采用本地存储(Share-nothing),每个节点拥有一个数据子集。NewSQL有一组节点用来做事务处理,这些节点接到特定的SQL查询后,会把它所需的数据从本地取回来后执行SQL查询,再返回结果。
与OldSQL数据库共享存储相比,NewSQL数据库采用本地存储,无共享存储I/O限制,可以通过添加节点来Scale out横向扩展,节点数量可以达到数百台,数据量可以达到PB级。
NewSQL系统虽然在的内部结构变化很大,但是它们有两个显着的共同特点:(1)它们都支持关系数据模型;(2) 它们都使用SQL作为其主要的接口。
NewSQL数据库有2种存储方式,即行存储和列存储。 行存储和列存储方式是指数据在磁盘中按照行或者列的方式进行组织和物理存储。行存储架构和列存储架构的数据库分别适用于不同的应用场景,具备各自的优劣势。
·行存储
行存储数据库适合增加、插入、删除、修改的事务处理处理等。以“修改”为例,数据库先把需要修改的指定记录从硬盘读取到内存,对记录进行修改,然后再从内存保持回到硬盘。由于只需要对指定的记录读取到内存和写入硬盘操作,所以I/O最小,效率最高。
但是,行存数据库对列的统计分析却需要耗费大量的I/O。对指定列进行统计分析时,需要把整张表读取到内存,然后再逐行对列进行读取分析操作。因此,表结构越大,I/O效率越低。
·列存储
列存储数据库对增加、插入、删除、修改的事务处理I/O高、效率低,以“修改”为例,列存数据库先把需要修改表的所有列数据从硬盘读取到内存组合成完整的表,然后对指定行记录进行修改,再按照列的方式保存回到硬盘。因此,表结构越大,I/O效率越低。
但是列存储非常适合做统计查询类操作,统计分析一般是针对指定列进行,只需要把指定列读取到内存进行操作,所以I/O最小,效率最高。
列存储还具备建立索引来优化统计查询性能。每个数据包在加载数据时自动建立索引,索引是对每个列存数据包的描述,包含基本的统计信息,如:最大值、最小值、平均值等,在数据查询时只需要解包就能得到统计值,可进一步降低I/O,对复杂查询的优化效果明显。索引本身占空间很少,扩展性很好,建立索引后无膨胀。建立索引的速度快,后续的数据包建立索引的速度不会受到前面数据包的影响。 |