MySql对大型数据库有用吗?

时间:2011-04-27 15:06:25

标签: php mysql database

我在公司工作,我们总是访问外部网站以获取信息。该网站由一家过时的软件开发公司开发,该公司甚至没有网站。由于数据库的内容提供商仅使用这个极其功能失调的网站来上传他们的数据,因此他们几乎在我的州拥有垄断权。这个网站的问题是它太慢了,甚至没有功能。

控制连接速度和浏览器类型之类的东西,显然问题出在网站本身。因此,我正在考虑重做网站,然后将其提供给内容提供商,作为上传数据的方法。基本上,这个项目需要一个非常大的数据库来存储数十万个名称,地址和其他类型的数据。

我对数据库的唯一体验是MySql,我对动态内容的唯一体验是PHP。所以,是的,我正在试图弄清楚旧的PHP + MySQL组合是否适合存储和表示大量数据。我只在小项目上完成了这项工作,但我认为包含动态内容占位符的整个HTML模板都可以正常工作。

当然,我真的不知道为什么这个网站这么慢。也许它根本不是数据库。也许是服务器或其他东西。但我想要完成的关键是改善这个网站的速度和功能。我没有其他类型的数据库的经验,所以你可以提供任何提供这样的项目的提示/建议将非常感激。此外,关于如何通常建立一个需要代表来自极大型数据库的动态数据的快速且功能性站点的任何提示也会有所帮助。

*编辑:我正在学习python,所以如果你认为这是一个更好的副脚本语言,那么我当然可以尝试实现与上面的初始计划不同的东西。

8 个答案:

答案 0 :(得分:15)

如果你做了一个好的设计,你可以在MySQL中拥有非常大的数据库(this other question may help you)。正确定义索引优化您的查询(EXPLAIN是您的朋友)。选择一个好的数据库引擎

要从MySQL中获得最佳效果,还有很多工作要做。

编辑:更多想法......

构建数据和表格的方式也非常重要,以便于编写,恢复或在两者之间找到折衷(取决于用例)。

此外,如果它增长,您可以使用群集,在多台计算机中的多个MySQL数据库之间对数据进行分区(例如,使用主从模式),这是另一种选择。

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

还有像Vitess这样的工具,它们以与NoSQL数据库类似的方式帮助扩展MySQL数据库。

答案 1 :(得分:12)

如果PHP / MySQL可以scale to Facebook's usage,它可以扩展到你的。它不一定是适用于所有情况的最佳解决方案,也不一定是一项简单的任务。

答案 2 :(得分:3)

你只是真正开始以数百万的速度达到mysql的限制(如果确实需要的话,仍然可以将其推得更远)。你可以看看mysql的分拆,或者如果你使用数十亿,看看像Cassandra这样的东西。

性能明智,php不是禁食,但应该足够快。尝试使用后台任务/ cron作业来完成耗时的工作,以及大量的缓存。

答案 3 :(得分:3)

是的,您可以使用PHP和MySQL创建大型应用程序。您还需要使用其他一些帮助工具,这将有助于扩展您的应用程序,例如负载平衡器。

现在问题是你无法通过默认安装MySQL本身来做到这一点。您需要了解如何在多个服务器上平衡负载。然后如何使用群集或分片。只要您的系统是在可扩展的架构之上开发的,您就可以完成所有工作。

当您只是部署第一个版本时,不要开始担心数百万条记录。缩放逐渐发生。您无法部署仅在一天内扩展的应用程序。你必须每天优化它。记住唐纳德克努特的话“过早的优化是所有邪恶的根源”

类似HighScalability的网站可以帮助您了解在LAMP堆栈之上设计更好的架构:)

= H =

答案 4 :(得分:0)

就我个人而言,我使用MySQL作为大规模数据库与基于PHP的报告网站混合使用。我们有成千上万的行,每天有大约20多列数据,每天都有来自服务器的多个连接。 MySQL应该能够轻松地执行大多数与普通MSSQL,PostgreSQL,Oracle等相同的功能......关键是你的查询并确保它们是最好的,你可以写它们以减少负载服务器本身。祝你的项目好运!

答案 5 :(得分:0)

MySQL可以处理很多,您只需要确保使用适合您需要的正确数据库引擎。我出于性能原因使用InnoDB,但你可以使用任何不是M​​yISAM的东西。

答案 6 :(得分:0)

在你的课程中,PHP和MySQL可以处理大量数据,如果你有一个良好的结构化(很好的标准化),那么你没有什么可担心的。

MySQL用于非常大的项目,其中一些是:

  • 的YouTube
  • drupal的
  • 的wordpress

答案 7 :(得分:0)

有几点可以提出你的问题。

我注意到的第一个项目是你提到存储“数十万”行。这不是很大。我的带有512M内存的386服务器可以处理那么多行,只有很小的延迟。如果您正确设计数据库,那么您真正的问题将是关于将要发送到您的服务器的带宽(每秒请求数)。

MySQL可以扩展,但它不是很好。 Facebook确实将PHP / MySQL用于他们的一些服务,但是对于更快和更多带宽的任务,他们使用hadoop。他们也使用PHP,但是为了更快的应用程序,他们使用hip-hop将其转换为c ++并进行编译。

MySQL可以扩展,但是如果你没有正确配置它,那么当表格太大时它会失败。 PostgreSQL开箱即用的扩展性更好,但如果配置正确,则可以很好。

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