我正在开发一个需要扩展到多台服务器的 Web 应用程序。我需要多台 Web 服务器来运行我的应用程序代码,并且数据库的读取和写入操作会非常繁重。显然我不能只使用一个数据库。
我处理过一个主服务器和多个从服务器的数据库复制。这样,我们就有多个只读 API 服务器,每个服务器都有一个专用服务器和一个专用(复制)从属数据库。
但是我该如何处理写入?由于瓶颈,将所有写入都放在一个数据库中似乎不是一个好主意,相反,我希望写入多个单独的数据库。但是这样我就会有多个主数据库,我可以想象如果主数据库不同步,那将是一场灾难。而且,我可以想象会出现主键冲突。
另一种选择是拥有多个具有相同架构的数据库,但每个数据库都不是另一个数据库的副本。但这听起来很可怕,因为其中一个数据库可能会崩溃,然后我会丢失数据。这似乎是一场维护噩梦,但也许我错了。
什么样的架构适合我所描述的需求?哪种架构好、经过测试、实用且可扩展?文章链接或直接发帖都很好。
答案1
这里没有什么接近一刀切的解决方案,但如果你想超越传统的关系数据库解决方案,那么我建议你谷歌一下“NoSQL”并开始阅读。
答案2
简短回答:分片
长答案:您要么在 SQL db(通常是 mysql)之上开发自己的“nosql”层,要么使用众多热门 nosql 工具之一(mongodb、cassandra、redis 等)。
然而由于您的帖子中没有包含任何指标,因此您实际上极不可能需要这样做,如果您这样做,那么您将处于数字模式。最有可能的是,您需要大量的 RAM 和一些时间来调整 SQL 查询,或者价值几千美元的 SSD/高端存储。
答案3
如果您可以将数据以不同方式放入标准关系表,那么我会考虑 NoSQL。
一个重度写入风格的集群数据存储将是 cassandra (NoSQL) 它被设计为非阻塞写入... :D
否则..尝试使用 SQL 进行分片,就像大公司有时做的那样,在主<--->主配置中运行 mysql..
写入和读取的数据是什么类型的?