1

假设我要使用 PHP 构建一个 Web 应用程序,并使用一个数据库来存储每个用户的数据。我开发网站,获得专用服务器,然后开始为我的产品做广告。随着时间的推移,我的网站吸引了越来越多的人注册,最终他们的所有数据开始填满我服务器中的 TB 级硬盘,直到很明显我需要更多磁盘空间。

我的问题是如何在不盲目地将磁盘添加到同一台服务器的情况下实现这一点,直到我不能再塞进去,而不分离大量的用户数据?如果我的原始服务器上有网站页面以及用户数据,当我添加第二台服务器时,系统会在什么时候说“该数据在该服务器上而不是另一台服务器上”,我将页面放在哪里,如果他们都使用具有不同数据库的同一站点的相同副本,用户在输入我的站点的 url 时会看到哪个服务器?大公司(salesforce、google)如何做到这一点?

4

2 回答 2

1

让我们开始问——你真的需要坚持吗?是的,有时您的应用程序可能只是将源连接到接收器的管道。假设您确实需要持久化数据,开始质疑需求,您将更多地了解如何将存储的数据视为查询以供以后使用。想想写重,读重,混合。在这里,您将发现并非所有数据都被一起查询,并且它们的节奏各不相同。将具有相似节奏的数据存储在同一单元中是有意义的。假设您的应用程序正在生成足够的数据,这些数据需要分布在不同的机器上。您希望优化使用多台机器,以便所有参与的机器处理可比较的计算/存储请求。在这里,您需要确定您的分片策略。既然数据已分发,您可能会面临部分故障,例如在 NS 之间存储用户名称的机器已关闭。如果您需要高可用性,即大多数时候您需要访问所有数据,您需要在多台机器上复制数据,这将减少您的总存储容量,并且根据生成的集群的大小,您可能会面临与一致性相关的问题。根据您对不一致数据的容忍度,您可能希望考虑您的解决方案,该解决方案可能介于最终一致到基于仲裁的解决方案之间,在该解决方案中,当提交一定数量的写入时,您可以获得一条数据。大多数时候您需要访问所有数据您需要在多台机器上复制数据,这将减少您的总存储容量,并且根据生成的集群的大小,您可能会面临与一致性相关的问题。根据您对不一致数据的容忍度,您可能希望考虑您的解决方案,该解决方案可能介于最终一致到基于仲裁的解决方案之间,在该解决方案中,当提交一定数量的写入时,您可以获得一条数据。大多数时候您需要访问所有数据您需要在多台机器上复制数据,这将减少您的总存储容量,并且根据生成的集群的大小,您可能会面临与一致性相关的问题。根据您对不一致数据的容忍度,您可能希望考虑您的解决方案,该解决方案可能介于最终一致到基于仲裁的解决方案之间,在该解决方案中,当提交一定数量的写入时,您可以获得一条数据。

还要考虑某些其他方面,例如生存时间、仅最后 N 项、“旧/未使用”数据的存档/无效。

希望这可以帮助您考虑最终的解决方案。

于 2013-06-26T12:41:09.843 回答
-2

在Amazon Web 服务Windows Azure之上构建您的应用程序并让他们担心这一点,因为它相当复杂。

于 2013-06-18T10:23:33.783 回答