上QQ阅读APP看书,第一时间看更新
1.2 易于扩展
应用程序的数据集大小正以惊人的速度在增长。可用带宽的增加和存储价格的下降,使得即使是小规模的应用程序所需要存储的数据量,也超出了很多数据库的处理能力。TB 级别的数据量,过去听起来是天文数字,现在已经司空见惯了。
随着所需存储数据量的增长,开发人员面临一个艰难的决定:应该如何扩展数据库?这可以归结为两种选择:纵向扩展(提高配置)和横向扩展(将数据分布到更多机器上)。纵向扩展通常是阻力最小的途径,但它也有缺点:大型机器一般非常昂贵,而且在最终达到物理极限时,就无法再升级到更高的配置了。另一种方式是横向扩展:如果想增加存储空间或增加读写操作的吞吐量,那么可以购买额外的服务器,并将它们添加到集群中。这既便宜又便于扩展,但管理 1000 台机器比管理 1 台机器困难得多。
MongoDB 的设计采用了横向扩展。面向文档的数据模型使跨多台服务器拆分数据更加容易。MongoDB 会自动平衡跨集群的数据和负载,自动重新分配文档,并将读写操作路由到正确的机器上,如图 1-1 所示。
图 1-1:使用分片将 MongoDB 横向扩展至多台服务器
MongoDB 集群的拓扑结构,或者说其连接的是一个集群还是单个节点,对应用程序来说都是透明的。这使得开发人员能够专注于应用程序的开发,而无须考虑扩展问题。同样,如果需要扩展现有部署的拓扑结构以支持更多负载,那么也无须更改应用程序的逻辑。