MySQL适合大型数据库吗?

13

我在一家公司工作,我们经常需要访问一个外部网站来获取信息。这个网站是由一个过时的软件开发公司开发的,甚至连网站都没有。在我的州,他们基本上垄断了市场,因为数据库的内容提供商只使用这个极度失灵的网站上传他们的数据。这个网站的问题是它太慢了,以至于无法正常运行。

排除连接速度和浏览器类型等因素后,很明显问题出在网站本身。所以,我正在考虑重建这个网站,然后将其提供给内容提供商作为上传数据的手段。基本上,这个项目需要一个非常大的数据库来存储成千上万个名称、地址和其他类型的数据。

我唯一接触过的数据库是 MySql,而且实际上我唯一接触过的动态内容是 PHP。所以,我正在尝试弄清楚旧的 PHP + MySQL 组合是否适合存储和表示大量的数据。我只在小项目上做过这个,但我认为整个 HTML 模板并使用动态内容占位符的方法应该可以很好地工作。

当然,我真的不知道为什么这个网站会这么慢。也许根本不是数据库的问题,也许是服务器或其他什么原因。但我想要实现的关键是提高这个网站的速度和功能。我没有其他类型数据库的经验,所以任何关于如何完成这样一个项目的建议 / 建议都将不胜感激。此外,任何有关如何通常制作一个需要从极大数据库中呈现动态数据的快速和功能性的站点的技巧也会很有帮助。

*编辑:我正在学习 Python,如果你认为这是一种更好的辅助脚本语言,那么我肯定可以尝试实现与上述初始计划不同的东西。


11
说实话,PHP和MySQL可以处理它。只要你知道你在做什么。我经常看到人们编写次优的查询或低效的PHP代码,然后归咎于PHP / MySQL。如果你知道你在做什么,PHP和MySQL可以搞定它。如果你不知道你在做什么,即使你转向Python或Postgre,情况也不会改变。那里也会很糟糕。 - Tjirp
我们需要知道数据量有多大,以及需要运行它的硬件规格是多少?但你肯定要和这家公司沟通:如果你正在为数据访问付费,那么你可能可以要求他们加快速度,或者如果你愿意提供帮助(他们可能不接受),他们可能只想通过付费来改进它,你应该讨论一下以获得他们对你计划的认可。 - Rup
1
缩放到1亿: MySQL是更好的NoSQL - ᴀʀᴍᴀɴ
是的,它可以。我自2012年以来一直在运行一个金融系统(MySQL+Java-jsp)。目前我的数据库大约有100 GB。 - Dupacteli
8个回答

18
如果你设计得好,MySQL 可以承载非常大的数据库(这个问题可能会帮助您)。要正确定义索引优化你的查询(EXPLAIN在这里是你的朋友)。选择一个好的数据库引擎

有很多事情可以做,以从 MySQL 中获得最佳效果。

编辑:更多想法...

同样重要的是您结构化数据和表格的方式,以便于编写、恢复或在两者之间找到一种折衷方案(根据用例而定)。

此外,如果它增长了,您可以使用集群,将数据分区到几个MySQL数据库中的几台机器上(例如使用主从模式),这是另一种选择。

为了提高性能,还应考虑使用某种重复查询的缓存

还有像Vitess这样的工具,可以像 NoSQL 数据库一样帮助扩展 MySQL 数据库。


13
如果PHP/MySQL可以扩展到Facebook的使用情况, 那么它也可以适用于您的情况。这不一定是所有情况下最好的解决方案,而且扩展并非总是一项简单的任务。

2
在抱怨MySQL性能时,许多人忽略的最重要的事情之一就是索引。在没有索引和有索引的情况下查询一张有几万行数据的表格会有很大的差别,在一个慢速服务器上从几秒钟降到了几毫秒(当时运行在一台旧的Pentium2 266 MHz的机器上)。有了索引,使用php/MySQL仍然非常快。 - David Mårtensson

5
是的,您可以使用PHP和MySQL创建大型应用程序。您还需要使用一些其他辅助工具来帮助扩展您的应用程序,例如负载均衡器。
现在的问题是,您不能仅使用MySQL的默认安装来实现这一点。您需要了解如何在多个服务器上平衡负载。然后学习如何使用群集或分片。只要您的系统是建立在可扩展的架构之上,就可以做任何事情。
当您部署第一个版本时,请不要开始担心数百万条记录。缩放是逐渐发生的。您无法在一天内部署可扩展的应用程序。您必须逐日进行优化。请记住唐纳德·克努斯(Donald Knuth)的名言“过早的优化是万恶之源”。
像HighScalability这样的网站可以帮助您了解如何在LAMP堆栈之上设计更好的架构。

2
这句话是 Donald Knuth 说的,而不是 Martin Fowler(可能引用了 Donald Knuth 的话)。 - Walter Tross

4

只有当你的数据量达到百万级别时,你才会真正触及mysql的限制(如果确实需要,仍然可以推动更远)。您可以看看mysql的分支,或者如果您使用的是数十亿级别的数据,请考虑使用Cassandra。

在性能方面,php并不是最快的语言,但应该足够快。尝试使用后台任务/定时任务来处理耗时的工作,并进行大量缓存。


2

你的问题中有几个要点需要提出。

我注意到的第一项是你提到了存储“数十万”行数据。这不算很大。我的386服务器只有512M内存,也可以处理那么多行数据,只会有很小的延迟。如果你正确设计了数据库,那么你真正的问题将是即将到来的带宽(每秒请求数)将会对你的服务器造成影响。

MySQL可以扩展,但效果并不理想。Facebook确实在一些服务中使用PHP/MySQL,但对于更快速和带宽密集的任务,他们使用hadoop。他们也使用PHP,但对于更快速的应用程序,他们使用hip-hop将其转换为C++并编译。

MySQL可以扩展,但如果你没有正确配置它,当表格变得太大时,它将彻底失败。PostgreSQL默认情况下可以更好地扩展,但如果正确配置了,两者都能很好地运行。

看起来你的应用程序比你所习惯的要大,但实际上并不是“那么”大。在你的特定情况下,我更担心的是响应时间而不是数据库扩展。


1

就个人而言,我曾将MySQL作为大规模数据库与基于PHP的报告网站混合使用。我们有好几千行数据,每天都有20多列数据来回流动,并且不断地与服务器建立多个连接。MySQL应该能够执行与普通MSSQL、PostgreSQL、Oracle等相同的大部分功能...关键在于你的查询,确保它们是最好的,以减少服务器本身的负载。祝你的项目好运!


1

MySQL 可以处理很多数据,你只需要确保使用适合你需求的正确数据库引擎。出于性能原因,我主要使用 InnoDB,但你也可以使用除 MyISAM 之外的任何引擎。


MyISAM 对于某些数据表现良好,如果您主要插入和读取数据,但很少更新或删除数据,则 MyISAM 可能比其他许多存储引擎更快,因为它使用乐观锁定。 - David Mårtensson

1

当然,PHP和MySQL可以处理大量数据,如果你的数据拥有良好的结构(规范化),那么就没有什么好担心的。

MySQL被用于许多非常庞大的项目中,其中一些项目包括:

  • YouTube
  • Facebook
  • Drupal
  • WordPress

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接