DB - 什么是NewSQL?

发布时间 2023-05-04 17:56:45作者: frank_cui

NewSQL这个词至少2011年开始就出现了,不过从一开始就没有特别清晰的定义,现在也差不多。不过,NewSQL出现在NoSQL之后,可以认为是分布式数据库自然演变的一部分,NewSQL尝试解决NoSQL碰到的阻力

NoSQL一般解释为Not Only SQL,实际上NoSQL最常见有4种,Key-Value Store、Document Store、Column Oriented、Graph,通常是选择Weak Consistency(Eventual Consistency)换取更好的性能和扩展性,通常对SQL支持比较弱。

NewSQL则是尽可能支持SQL(如果说NoSQL只支持10-30% SQL Like,NewSQL支持70%以上SQL,大概是这样),在Consistency Model上更倾向Strong而不是Weak,大约是Linearizability,还有最关键的(个人观点)扩展性上更强调写能力的扩展,MySQL MGR或者是1主(可读写)15备(只读)这种应该算不上New,NewSQL应该支持多个(至少3个以上吧)主(可读写),在数据存储层通常采用Paxos或Raft共识算法支持多份副本(顺便说一句,不要以为因为有Multi-Paxos,采用Paxos的数据库实现并发性能就必然好于Raft),而不是一主多备来支持多份副本,为了优化写能力单机存储引擎通常采用有利于写的LSM-Tree而不是有利于读的B+ Tree。

Consistency Model、对SQL的良好支持这些方面NewSQL和NoSQL相比更接近传统的RDBMS,同时在扩展性(需要强调写能力的扩展,这是难点)上接近NoSQL(NoSQL绝大部分天然支持分布式,扩展性良好)。

NewSQL听起来挺不错的,也是有代价的,比如NewSQL维护比单机数据库复杂、某些分布式数据库要求必须用SSD。2019年OceanBase获得 TPC-C基准测试排名榜首,细看其成本不低,性价比不如传统的RDBMS。传统的单体数据库虽然不能在每年一度的网购狂欢时支持那么高的并发量,但是单机支持50万tpmC是很轻松的(其实对很多客户、大部分场景够用了,TiDB Blog也建议如果没有必要支持高并发用单体数据库就好了),而且交易响应时间通常是5毫秒内,而NewSQL这些分布式数据库交易响应时间可能是20-30毫秒,NewSQL良好支持高并发但是交易响应时间有所牺牲。