我很好奇,知道在用户写入和读取数据一样多的情况下,大型网站如何在不同的数据库服务器之间传播负载。 当有一个主服务器接受写入的标准解决scheme时,以及只让用户读取数据的多个从服务器不起作用,因为它只是简单地将主服务器变成瓶颈。
对于那些使用负载平衡器 – >多个Web服务器 – >多个数据库服务器来pipe理大型站点的人来说,如何在DB服务器之间平均分配负载,以便用户(最好)不必等待掌握更新从站,或者(最坏的情况下)用户最终从未被更新的从站读取脏数据?
谢谢。
您可以使用更复杂的方法来存储数据基本上denormalise并将其分割成块,您可以在服务器之间进行负载平衡。 寻找碎片。
一般的答案似乎是尽可能使单个写入数据库机器越来越强大,然后再转移到其他方法。
在大多数情况下,解决问题的最好方法是重新考虑您的网站如何工作以减less写入次数/使其可批量化。
你需要的是一个适当的多主数据库。 据我所知,迄今为止,唯一一个以可靠的方式实现这一点的数据库引擎是Oracle。 这有什么解释为什么所有的大男孩使用甲骨文。
尽pipe如此,MySql确实支持多主复制,尽pipe(AFAIK)并不是完整的产品版本。 有关更多详细信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-multi-master.html 。
我认为你正在谈论MySQL,根据你的条款。 不幸的是,这个DBMS缺乏对分布式写入的支持,只有NDB支持这种写入。
http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-overview.html
http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-nodes-groups.html
另一个解决scheme可以是:使用基于您的客户端GEO位置的DNS级别分区parsing不同的IP地址连接到哪里,并基本上通过这个信息分离数据。 这种解决scheme存在问题,例如,如果您有一个查询,例如您想知道全球有多less项目,那么这将不会很好。
这取决于网站和网站的一部分。
一些作品将有一个写服务器,然后将复制到一堆读服务器。
该网站的其他部分将有很多服务器,每个服务器都只包含一小部分数据。 例如,每个数据库服务器上有几百万个客户帐户,其中包含应用程序中的逻辑,以便根据您的UserId知道您所在的服务器。
解决scheme是重新考虑您的应用程序,以便您可以在多个数据库服务器之间拆分数据。 有时很容易…有时候不是。