【发布时间】:2016-03-18 11:48:39
【问题描述】:
我已经看到应用程序具有集群 Web 服务器(例如 10 到 20 个服务器)以具有可扩展性,它们可以在其中分发 在网络服务器之间加载。但我一直看到所有网络服务器都使用单个数据库。
现在考虑任何有数百万用户在任何时间点访问应用程序的电子商务或铁路网络应用程序。 为了在网络服务器端进行扩展,我们可以拥有服务器集群,但是我们如何扩展数据库呢?因为我们不能像多个网络服务器一样拥有多个 DB,因为一个 dB 的状态将与另一个 DB 不同:)
更新:- 是否无法在关系 DBMS 中缩放数据库,而只能在 mongo db 等 NO SQL DB 中缩放?
【问题讨论】:
-
更多关于如何扩展关系数据库和无 sql 数据库的技巧jamesgolick.com/2010/3/30/what-does-scalable-database-mean.html
-
一些 RDBMS 确实支持集群。不过通常不便宜。示例:Oracle RAC.
-
集群并不是分散数据库负载的唯一解决方案。您还可以使用分片,即将数据库内容分布在多个服务器上,每个服务器只保存部分数据库。我记得看过一个关于使用 PostgreSQL 做这件事的大型电子商务供应商的讨论。
-
@JBNizet
You can also use sharding, i.e. spread database contents across multiple servers, with each server holding only part of the database但通常所有应用程序服务器都需要访问所有部件/数据库对象(我相信当您说部件时,您的意思是表、过程等数据库对象)。根据哪个应用服务器需要哪些 db 对象的标准来隔离 db 是不是太乏味了? -
没有。分片的意思是单个表的数据分布在多个服务器上。见en.wikipedia.org/wiki/Shard_%28database_architecture%29。例如,您可以想象您的电子商务网站在查找鞋子时将访问数据库 1,在查找 T 恤时将访问数据库 2,在查找裤子时将访问数据库 3,尽管鞋子、T 恤和裤子都存储在相同的概念表“产品”。您的铁路应用程序可以在 db1 中查找从巴黎的出发时间,在 db2 中查找从马赛的出发时间。
标签: java database scalability