假设我是使用PHP构建Web应用程序并使用数据库来存储每个用户的数据。我开发网站,获取专用服务器,并开始宣传我的产品。随着时间的推移,我的网站会有越来越多的人注册,最终他们的所有数据都开始填满我服务器中的TB级硬盘,直到显然我需要更多的磁盘空间。
我的问题是如何在没有盲目地将磁盘添加到同一服务器的情况下实现这一目标,直到我无法再填充,而不会分离大量用户数据?如果我的原始服务器上有网站页面以及用户数据,当我添加第二台服务器时,系统会说“该数据在该服务器而不是另一台服务器上”,我在哪里放置页面,当用户输入同一网站的相同副本和不同的数据库时,用户在输入我网站的网址时会看到哪个服务器?大公司(salesforce,google)如何实现这一目标?
答案 0 :(得分:0)
让我们开始问 - 你真的需要坚持下去吗?是的,有时您的应用程序可能只是将源连接到接收器的管道。假设您确实需要保留数据,开始质疑需求,您将更多地了解如何查询存储的数据以供以后使用。认为写重,读重,混合。在这里,您将确定并非所有数据都在一起查询,并且它们的节奏也不同。将相同节奏的数据存储在同一单元中是有意义的。假设您的应用程序正在生成足够的数据,需要在不同的计算机上分发。您希望最佳地使用多台计算机,以便所有参与计算机处理可比较的计算/存储请求。在这里,您需要确定分片策略。现在数据已经分发,您可能会面临部分失败,例如,存储名称介于N-S之间的用户的计算机已关闭。如果您需要高可用性,即在大多数情况下需要访问所有数据,您需要在多台计算机上复制数据,这将减少您的总存储容量,并且根据生成的群集的大小,您可能会遇到与一致性相关的问题。根据您对不一致数据的容忍度,您可能希望考虑您的解决方案,该解决方案可能介于最终与基于法定数量的解决方案之间,当您提交一定数量的写入时,您可以获得一段数据。
还要考虑其他一些方面,例如生存时间,仅限N个项目,“旧/未使用”数据的归档/失效。
希望能帮助您思考最终的解决方案。
答案 1 :(得分:-2)
在Amazon Web services或Windows Azure之上构建您的应用,让他们担心这一点,因为它相当复杂。