SQL or NoSQL

nosql

最近的 NOSQL meetup 又把SQL数据库的 scale 问题抛出来了。NoSQL guys 对 SQL 不满的主要原因是:SQL 数据库不能很好的 scale。我们可以通过 caching,用 master-slave 分担负载,给数据库横向/纵向分区等技术来减轻 SQL 数据库的负担,但是还不能真正做到 scale。目前最好的方法还是修改应用程序的代码把数据库分散存储在不同的数据库服务器上。随着 Web 应用的规模越来越庞大,这些方法始终没有解决 SQL 数据库 scale 的根本问题。Google/Amazon/Yahoo/Facebook 等都陆续自立门户,纷纷推出了自己超大规模 scale 的数据存储方案,这些方案用来处理海量数据,已经不能叫它们传统的数据库了,更像是分布式键值/文件存储系统。

什么是 scale

什么才算是真正的 scale?

How well a solution to some problem will work when the size of the problem increases, when the size decreases the solution must fit.

我对 scale 的理解是至少要满足下面三个条件:

1、扩展伸缩。加入一个新的数据库服务器后,原先的数据库的容量就扩大,性能也能增大。能立刻自动的把数据部署到新的数据库服务器上,不需要应用程序干预。拿掉一个服务器后,反过来也一样。

2、应用程序透明。对应用程序来说应该是透明的,应用程序不关心也不应该知道数据存储是怎么存储的,存储在哪个服务器上。

3、自动接管/自愈。一台服务器坏了或者 down 了不丢失数据,不影响其他数据库服务器和整个数据库的运行。

一个好例子就是RAID5:

继续阅读 »