首先我试着去定义 NewSQL,它是一类现代的关系型数据库,同时它又具备 NoSQL 的扩展能力。其擅长在 OLTP 场景下提供高性能的读写服务,同时可以保障事务隔离性和数据一致性。我们可以简单理解为,NewSQL 要将 2000 年左右发展而来的 NoSQL 所代表的扩展性与 20 世纪 70 年代发展的关系模型 SQL 和 ACID 事务进行结合,从而获得一个高并发关系型的分布式数据库。
如果我们使用 NewSQL 数据库,可以使用熟悉的 SQL 来与数据库进行交互。使用 SQL 使得原有基于 SQL 的应用不需要改造(或进行微量改造)就可以直接从传统关系型数据库切换到 NewSQL 数据库。而与之相对,NoSQL 数据库一般使用 SQL 变种语言或者定制的 API,那么用户切换到 NoSQL 数据库将会面临比较高的代价
。
对于 NewSQL
的定义和适用范围一直存在争议。有人认为 Vertica、Greenplum 等面向 OLAP 且具有分布式特点的数据库也应该归到 NewSQL 里面。但是,业界更加广泛接受的 NewSQL 标准包括:
- 执行短的读写事务,也就是不能出现阻塞的事务操作;
- 使用索引去查询一部分数据集,不存在加载数据表中的全部数据进行分析;
- 采用 Sharded-Nothing 架构;
- 无锁的高并发事务。
根据以上这些特点,我总结为:一个 NewSQL 数据库是采用创新架构
,透明支持 Sharding
,具有高并发事务
的 SQL 关系型数据库。
请注意 DistributedSQL 是一类特殊的 NewSQL,它们可以进行全球部署。
下面就按照我给出的定义中的关键点来向你详细介绍 NewSQL 数据库。
创新的架构
使用创新的数据库架构是 NewSQL 数据库非常引人注目的特性。这种新架构一般不会依靠任何遗留的代码,我们以 TiDB 这个典型的 NewSQL 数据库为例。
可以看到其中的创新点有以下几个。
- 存储引擎没有使用传统数据库。而使用的是新型基于 LSM 的 KV 分布式存储引擎,
- 有些数据库使用了完全内存形式的存储引擎,比如 NuoDB。
- Sharded-Nothing 架构。底层存储到上层工作负载都是独立部署的。
- 高性能并发事务。TiDB 实现了基于 Percolator 算法的高性能乐观事务。
- 透明分片。TiDB 实现了自动的范围分片,可以弹性地增减节点。