搞定系统设计:面试敲开大厂的门
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 数据库

随着用户基数的增长,一台服务器已经无法满足需求,我们需要多台服务器:一台用于处理Web应用/移动应用的流量,另一台用作数据库(如图1-3所示)。把处理Web应用/移动应用流量(网络层)的服务器与数据库(数据层)服务器分开,我们就可以对它们分别进行扩展。

图1-3

1.2.1 使用何种数据库

你可以选择传统的关系型数据库,也可以选择非关系型数据库。我们来看看它们的区别。

关系型数据库通常也叫作关系型数据库管理系统(RDBMS)或者SQL数据库,其中最流行的有MySQL、Oracle、PostgreSQL等。关系型数据库通过表和行来表示和存储数据。你可以使用SQL对不同的数据库表执行连接(join)操作。

非关系型数据库又叫作NoSQL数据库。流行的非关系型数据库有CouchDB、Neo4j、Cassandra、HBase、Amazon DynamoDB等[2]。它们可以分为四类:键值存储、图存储、列存储和文档存储。非关系型数据库一般不支持连接操作。

对于大多数开发者而言,关系型数据库是最好的选择,因为它们已经有40多年的历史,而且一直表现不错。但如果它们无法满足你的特殊使用场景要求,你就需要考虑关系型数据库之外的选项。当需要满足如下条件时,非关系型数据库可能是一个正确的选择:

• 你的应用只能接受非常低的延时。

• 应用中的数据是非结构化的,或者根本没有任何关系型数据。

• 只需要序列化(JSON、XML、YAML等格式)和反序列化数据。

• 需要存储海量数据。