NewSQL
简介
NewSQL是融合了NoSQL技术的关系型数据库,其主要目标是为了解决一致性和分区容忍性。
Nosql数据库的目标是为了解决大规模数据的存储问题,所以分区容忍性是其主要的设计目标,但是对于关系型数据库而言,一致性是基本的要求。
NewSQL 尝试同时满足NoSQL数据库和关系型数据库的优点(ACID和水平扩展性),目前是大数据领域的解决方案之一。
NewSQL数据库的特性一般包括如下特性:
基于内存的数据存储和数据处理提供较快的处理速度。
通过分区将数据库切分成若干分片的单元,查询在多个单元同时执行并且合并为查询结果。
支持事务。
一般通过二级索引提供更快的信息检索速度。
通过复制技术实现高可用。
通过内置的容灾机制提供更快的容灾恢复时间。
NewSQL和SQL以及NoSQL的区别。
特性 | SQL | NoSQL | NewSQL |
---|---|---|---|
Schema | 关系型 | 无Schema | 同时支持 |
SQL | YES | 不同系统有不同程度的支持 | 支持 |
ACID | YES | NO(BASE) | YES |
OLTP | 部分支持 | 不支持 | 完全支持 |
切分方式 | 垂直 | 水平 | 水平 |
分布式 | NO | YES | YES |
高可用 | 使用者实现 | 自动 | 内置 |
查询 | 支持简单查询 | 支持更加复杂的查询 | 同时支持简单和复杂查询 |
原理
面向内存的设计
传统DBMS采用的面向磁盘的存储结构,数据主要存储在SSD或HDD等块存储设备。块存储设备的读写速度较内存至少慢一个数量级,所以DBMS一般会采用缓冲池的技术将读入的数据块缓在内存中进行缓存,写操作也会利用缓冲池进行缓冲之后批量存储到磁盘来提高效率。相较于内存,磁盘的容量更大,价格更低,面向磁盘的设计成本更低。随着内存成本的大幅度下降,大内存的机器架构可以将数据库中的数据全量或者接近全量的存储在内存中。所以NewSQL采用面向内存的设计可以提升数据库的性能。
H-Store,HyPer,MemSQL、SAP HANA 和VoltDB等NewSQL数据库都采用了面相内存的设计模式。
面向内存的设计一般将热点数据存储在内存中,将不活跃的数据转移到磁盘存储,该架构的实现方案有如下几种:
建立跟踪机制发现内存中不活跃的记录,将其转移到外存进行存储,并且进行外存的位置记录,当需要访问这些外存的数据时,会启动异步线程进行数据加载,采用该架构的NewSQL有H-Store等。
部分NewSQL直接采用的操作系统虚拟内存的paging机制进行数据缓冲,例如VoltDB。
为了提升空数据的检索效率,部分NewSQL采用布隆过滤器进行性能优化。
MemSQL等NewSQL数据库采用log-structured的形式组织数据,提升写入性能。
Spanner
Spanner是Google公司的NewSQL产品。