我正在寻找为我的网站后端构建可扩展的数据库解决方案。我最近一直在阅读有关数据库设计的内容,我似乎已经开发了一个可能有用的想法。我认为这是一种使用同步数据维护n个数据库的新方法,但我可能错了。所以我要求评估这个想法并告诉我它是否疯狂。 (或者如果它已经存在并且已经实施)
在此方案中,有一组服务器节点。一个节点运行查询负载均衡器(让我们称之为 A ),其余节点运行典型的dbms,让我们统一调用这些节点 N 。
每个N都与其他N断开连接。 ie) N 中的节点不需要与任何其他节点通信。每个 N 仅与 A 建立连接。
这个过程就像这样
假设它已正确实施,这会导致 N 中的所有节点都具有同步的数据库内容。只读数据的查询需要发送到一个节点。
这个想法似乎特别适合我,因为在我的系统中,写操作很少,不到1%。
关于这个想法的几个问题
答案 0 :(得分:7)
许多读取的少数写入的典型设置是具有读取/写入主数据库和n个只读数的从属数据库。复制由RBDMS处理。只读查询可以在所有n个只读节点之间进行负载平衡,如果您的读/写主机暂时关闭,至少您的应用程序将能够为读取操作提供服务。您不需要中央“A”代理来确定查询是读取还是写入。发出查询的客户端应该足够聪明,知道它是在读还是写。这样你就不会在“A”服务器上出现瓶颈。
您提出的设置有明显的缺陷,如果您同时写入n个节点,如果其中一个或多个写入失败怎么办?
答案 1 :(得分:1)
您的方案仅适用于无限可用节点。你是如何处理节点停机的?如果某个节点因任何原因而关闭并错过了更新,则会在下次询问时提供脏数据。
答案 2 :(得分:1)
不是您问题的直接答案,但SQL Server 2008已经支持与您所描述的内容等效的内容。它被称为Peer-to-Peer Transactional Replication。我相信其他RDBMS也可以。我认为MySQL称之为主 - 主复制。