mysql数据库有2TB的数据。
我有一个主从奴隶复制运行。 使用数据库的应用程序只读取(SELECT)2个从机之一的查询,并在主机上写入(DELETE / INSERT / UPDATE)查询。 应用程序读取的方式多于写入。
如果读取(SELECT)查询有问题,我们可以添加另一个从属数据库并告诉应用程序,还有另一个从属数据库。 所以它的规模很好
目前,由于写入,主磁盘运行40%的磁盘io。
所以我想在未来如何扩展数据库。 因为有一天主人会超负荷
那可能是什么解决scheme?
也许MySQL集群? 如果是这样,将数据库切换到ndb有什么缺陷或限制?
非常感谢… 🙂
对于缩放MySQL没有一个通用的答案。 几个一般的技巧:
只要你可以“对angular”地缩放,即。 只要你仍然能够在商品硬件上运行,就把它保存在一台MySQL服务器上。 这可能意味着2个四核CPU,64+ GB RAM,8个磁盘RAID 10或更高。 什么是“商品硬件”的上端每年越来越快。
看看Brad Fitzpatrick关于扩展LiveJournal的介绍。 就缩放LAMP而言,它们非常经典。 在本演示文稿的第25 – 26页中,您将看到MySQL复制最终将面临的问题:写入会消耗所有可用的磁盘I / O。
阅读“ 高性能MySQL ”。 这是一本很好的书籍, 作者看到许多高负载的MySQL安装 。
避免分片(在很多MySQL服务器上传播数据)尽可能长。 当你开始分片时,你会放弃关系数据库的大部分好处,并且会减慢开发速度。 如果您必须进行分片,请考虑使用带有内置多服务器模型的NoSQL数据存储,而不是使用fx Riak,Cassandra,HBase和MongoDB。 理想情况下,在MySQL和NoSQL之间进行“function划分”,这样您就可以继续使用MySQL来获得适合RDBMS的较less的热数据,并且您可以使用NoSQL引擎来处理不需要与MySQL连接的“热”数据数据。
也许MySQL集群? 如果是这样,将数据库切换到ndb是否有任何缺陷或限制?
在“ Web操作 ”中,Baron Schwartz有关于MySQL的一章。 他几乎只是说“不! 在网站环境中使用MySQL Cluster / NDB。 Quote:“..它不能很好地执行连接和GROUP BY查询,并且Web应用程序需要这些。”
通过将数据库分解为分布在多个机器上的碎片,MySQL集群将获得可写入性的可扩展性。 但是,这会大大减慢从多个片段中提取数据的复杂查询。 只有你可以确定这对你的应用程序性能的影响。
您可能需要手动分割数据,而不是让集群引擎为您做。 这将需要更多的configuration,但是如果你了解你的应用程序如何使用数据库,你可能会想出一个允许大多数查询只访问一个分片的分片scheme。
请记住,MySQL的复制是单线程的,所以你的复制可能不会受到主容量的限制,而是受到主站的限制,并且不会同步。 从这篇文章 :
复制重放过程在副本上的单个线程中执行,因此,即使在主服务器上进行适度繁忙的写入负载也没有希望,在主服务器上同时发生许多更新。
您可以考虑将信息本身集中起来。如果可能的话 – 在不同服务器之间分开写入消费表。