SQL Databases Don't Scale (简译)

我经常问的一个问题是:你是如何来扩展SQL Database的?有很多的方法可以做到,比如使用缓存,共享或者用其他的技术将压力从数据库释放,但实际上我们没有。SQL Database从根本上来说是不具有扩展性的,我们也没有魔法使它忽然具有扩展性。

什么是扩展性?

必须具有几下几点:

   1. 横向扩展:更多的server可以带来更高的性能。
   2. 对应用程序的透明性:扩展的实现对于业务逻辑来说是透明的,逻辑上只有一个server服务于业务。
   3. 单点失败不会导致故障:单个server或者节点的宕机不会导致系统的失败。

接下来,让我们看一些技术如何“扩展”SQL Database以及他们为什么没有达到以上几点。

纵向扩展

一种方法去扩展SQL Database是买更大的server或者存储。这带来的问题是:

   1. 运输变的复杂
   2. 原来的机器落后,升级变的浪费资源
   3. 你不知道到底类似容量这样的问题会变的有多大

这个不符合扩展性的第一条。

分区,共享

根据逻辑对数据进行分区。这种方法也是纵向扩展的一种方法,它紧密依赖于应用并且你需要仔细的去计划你的schema。

这种方法对于程序来说是不透明的,必须和业务结合在一起,不符合扩展性的第二条。更严重的问题是,数据库是关系数据库,存储的数据也是相关的,这样的相关数据分布在多个server上,你需要为这样重复的关系服务,而且当他们返回时必须在客户端重新构建这样的关系。

只读的Slave

MySql的杀手级应用就是配置方便的master-slave复制,你可以用一个read-only-slave来处理你的读应用而把所有的 insert update delete都由master来处理。

这种方式是最好的扩展方式,这也是很多大型的MySql在使用的方法。对于读扩展来说这样的方法是好的,对于写扩展来说这样的效率还是不行的,而且当你维护master server的时候,也会造成整个系统的宕机。

原文:http://adam.blog.heroku.com/past/2009/7/6/sql_databases_dont_scale/

你可能感兴趣的:(sql,数据库,server,database,insert,扩展)