其他 Some history about NoSQL and NewSQL

yfractal · 2021年01月25日 · 最后由 piecehealth 回复于 2021年01月26日 · 354 次阅读

Some History

下面这段,主要是对 What's Really New with NewSQL[1] 中 A Brief History of DBMSs 这一章的摘录。

2000 年以前,数据库更关心一致性和正确性。比如一些金融系统,正确性远远比性能要重要。

到 2000 的时候,互联网开始高速发展。带来了两个问题,一个是大量的在线用户,以及希望应用可以时刻在线。

人们开始发现,单机的数据库无法满足这样的需求,而且靠着升级硬件也不太划得来(affordable)。

这个时候就开始使用分库、分表的方式扛流量。通过这样的手段把流量分散到不同的数据库实例上。

之后大家又发现,同准确性和一致性比起来,在互联的场景下,更重要的是可用性和性能。

而且大家觉得 MySQL 这种关系型数据库太麻烦了,写应用也不那么顺手。

于是在 00 年代中晚期(mid to late late 2000s),大家搞起了 NoSQL。

首先 NoSQL 为了性能,牺牲了一致性。并且使用了不同的数据模型,比如 Key/Value,图,文件。

相应的数据库有 Google 的 Big Table,Amazon 的 Dynamo,Facebook 的 Cassandra,以及 MoongoDB。

到了 00 年代晚期的时候,大家又觉得有些应用事务和强一致性是必要的,如果让开发者去处理不一致,会耗费过多的经历。并且这个时候硬件也比之前有了很大的改善。

人们希望数据库可以像 NoSQL 一样可以很好的扩展,并且保证 ACID,于是又搞起了 NewSQL。比如 Google 的 Spanner,PingCAP 的 TiDB。

Some Thought

下面说点个人的想法,不见得对,说错了的话还望大家指正。

分库、分表以及 NoSQL 之所以兴起,有两个前提,一个是大流量和全天在线的需要,一个是当时的单机硬件不足以支撑这样的场景。

并且,多数的时候我们认为,MySQL 这种关系型数据库,由于使用树来存储,当数据量大到一定程度的时候,需要多次访问磁盘,所以性能上不去。

但实际上这些假设不一定都成立。

首先说数据库和磁盘的关系,现在有了 SSD,访问磁盘的速度已经比以前快太多了。

如果优化的好的话,访问数据库的瓶颈不在磁盘而是在内存 [2]。

因为数据库有 memory buffer,如果数据 locality 很好的话,几乎都是在访问内存。

再加上,现在的硬件越来越便宜,我们大可把内存加的大一点,让数据尽可能命中 memory buffer。

而且很多流量也没到单机 MySQL 的上限。

不过问题是,MySQL 确实远比 Key/Value Storage 麻烦。

References

[1] A. Pavlo, et al., What's New with NewSQL?, in SIGMOD Record (vol. 45, iss. 2), 2016

[2] Joseph Hellerstein and Michael Stonebraker. "Architecture of a Database System"

对运维来讲 nosql 肯定方便一点;对开发来说还是 sql 数据库写业务简单,完全不需要提前设计 key 跟索引。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号