如果有0.1M流量,如何提高数据库性能

时间:2015-05-15 12:21:57

标签: mysql database-performance

我正在开发一个网站,我对性能感到担忧。

在当前系统中,存在诸如向单个表添加10,000行的事务。无关紧要,插入需要大约0.6秒。

但我担心如果有100,000个并发用户会发生什么,并且有1000个用户想要一次向一个表添加10,000行。

与单个用户相比,这对性能有何影响?如果在这种情况下有大量流量,我该如何改善这些交易呢?

3 个答案:

答案 0 :(得分:3)

速度是强制性的时候,我们解决这个问题的方法就是让硬盘变得更快。 您提到了交易,这意味着您需要持久的数据(ACID的D)。这个要求排除了MyISAM存储引擎或任何类型的NoSQL,因此我将重点放在关系数据库的内容上。

它的工作方式是:每秒获得一定数量的输入输出操作或每个硬盘驱动器的IOPS。硬盘驱动器也有一个名为bandwith的度量标准。您感兴趣的指标是写入速度。 这里的一些粗略计算是这样的 - 每秒MB的数量除以IOPS的数量=每IOPS可以挤出多少数据。

对于机械驱动器,这个神奇的IOPS数量在150到300之间 - 非常低。鉴于它们的带宽大约为100 MB /秒,每次写入会得到真正少量的写入和带宽。这就是固态硬盘推出的地方 - 它们的IOPS数量从大约5 000开始(有些甚至达到80 000),这对数据库来说非常棒。

在RAID中连接这些驱动器可为您提供超快速的存储解决方案。如果您能够在一次交易中挤出10 000个插入,则磁盘将尝试通过1 IOPS挤压所有10k插入。

另一种策略是对表进行分区,并在MySQL存储数据的位置设置多个驱动器。

这就是你可以使用单个MySQL安装。有将策略分发到多个MySQL节点等的策略,但我认为这超出了你的问题的范围。

TL; DR:你需要更快的磁盘。

答案 1 :(得分:1)

如果您尝试扩展以每秒插入数百万行,则会遇到更大的问题。这可能每月累计数万亿行。在本月底之前,这是数百TB。你有足够大的磁盘场吗?你能买得起足够的SSD吗?

另一件事。拥有万亿行,除了简单的auto_increment之外,拥有任何索引都是非常具有挑战性的。没有任何索引,您如何计划访问数据?一万亿行的表扫描需要一天。

另外,你说了10万用户;你暗示它们是同时连接的吗?这也是一个挑战。

一次性生成10K行的用户有哪些?网络带宽怎么样?

等。等

如果你真的有这样的任务,Sharding可能是唯一的解决方案。除 SSD,RAID,IOP等等外,还有

答案 2 :(得分:0)

您必须从软件和硬件角度考虑很少的东西。

必须考虑的事情:

  
      
  1. 使用SSD驱动器以获得更好的IO。
  2.   
  3. 如果你有巨大的流量,那么拥有10GB的网络是件好事。
  4.   
  5. 使用mysql 5.6或更高版本,他们在性能方面比以前的版本有了很大改进。
  6.   
  7. 使用批量插入而不是顺序插入,如果可以将所有数据存储在文件中并使用load_data_infile,则更好。这将是   比常规插入快20倍。
  8.   

Mysql提供了多种扩展方式。它取决于您的产品要求您想要的方式。