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