过去的几十年里,数据仓库已经成倍的增长,随着数据的增长,如何保持数据库的高性能已经是我们面临的一个严峻的挑战。在接下来的文章里,我们将讨论不同的数据库架构是如何处理这种快速增加的可扩展性的需求,并且他们是如何以最低的消耗来达到这样的效果。
很明显,对于这样的系统单个CPU或者DISK有很大的性能缺陷,因此,所有高性能计算都需要多CPU和多DISK来协同。可是,不同的数据库对于如何使用这样的资源有自己不同的架构。以下我们将分类讨论每一种架构的优缺点:
- 通过并行提高性能
- shared memory
优点:多个CPU共享内存与磁盘,信息可以方便的被所有CPU共享,编程简单,避免了复杂的锁机制。
缺点:所有的I/O请求都须在一个总线上传递,带宽成为瓶颈。二级缓存需在多处理器中保持同步,增加了硬件的复杂性,造成这样的系统CPU很少有超过16个,具有很低的扩展性。
SQL Server,MySql
- shared disk
优点:每个CPU都有独立的内存,他们共享磁盘,如NAS或者SAN。
缺点:多个CPU交换信息的子系统可能成为瓶颈。没有共享池在多个CPU间共享信息,如锁表信息等。所有的I/O请求都须在一个总线上传递,带宽成为瓶颈。
改进:增加缓冲池。首先检查自己的缓冲池,没有的话在其他node检查缓冲池,没有的话访问磁盘。
Oracle RAC,Sybase IQ
- shared nothing
优点:每个CPU都有独立的内存和磁盘,彼此互不影响,有自己独立的锁机制控制表访问。具有最好的扩展性。
缺点:可能比较贵。
改进:用便宜的服务器来扩展。
Teradata,IBM DB2,Greenplum
- 硬件加速
用专用服务器,如IBM或者HP的Grid服务器,比较便宜,Teradata的服务器很贵。
- 软件帮助扩展
- 面向列的数据库架构。
已往的数据库都是面向行的,每次读取会浪费很多IO读取不必要的列。面向列解决了这个问题,提供了极高的性能。
- 采用压缩来传输数据。
简单的翻译了一下文章的大体意思,做个记录。