2011-04-27 316 views
9

我为一家公司工作,我们总是访问外部网站获取信息。该网站由一家过时的软件开发公司开发,甚至没有网站。由于数据库的内容提供商仅使用这个功能异常严重的站点上传数据,因此他们在我所在的州几乎是垄断企业。这个网站的问题是,它太慢,它甚至不起作用。是MySql适合大型数据库吗?

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

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

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

*编辑:我正在学习python,所以如果你认为这将是一个更好的side-scripting语言,那么我当然可以尝试实现一些不同于上面的初始计划。

+8

诚实。 PHP和MySQL可以处理它。只要你知道你在做什么。所有人经常看到人们编写次优查询或缓慢的PHP代码,并将其归咎于PHP/MySQL。如果你知道你在做什么。 PHP和MySQL可以处理它。如果你不知道你在做什么。如果你转向Python或Postgre,那不是问题。它也会吸引我们 – Tjirp 2011-04-27 15:11:32

+0

我们讨论的内容有多大?您需要运行多大的硬件?但是你一定要和这家公司谈谈:如果你向他们支付数据访问费用,那么你可以让他们加快速度,或者如果你愿意为他们提供帮助 - 他们可能不接受,他们可能只是想要为了改善它而付钱 - 你也许应该讨论这一点,以便与你的计划达成一致。 – Rup 2011-04-27 15:11:38

回答

13

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

有很多事情要做,以获得最好的MySQL。

编辑:一些更多的想法...

这也是很重要的,你的结构化数据和表格,使容易将它们写,恢复或是寻找两者之间的折中方式(视用例)。

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

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

还有类似Vitess的工具可以像NoSQL数据库那样帮助扩展MySQL数据库。

3

你只能真正开始在数以百万计的MySQL的极限(如果真的需要的话,仍然可以将它推得更远)。你可能会看看mysql的分拆,或者如果你使用了数十亿美元,看看像Cassandra这样的东西。

表现明智,php不是禁食,但应该足够快。尝试为耗时的作业使用后台任务/ cron作业,并进行大量缓存。

0

就我个人而言,我使用MySQL作为大型数据库与基于PHP的基于报表的网站混合使用。我们拥有数千行数十行数据,并且每天都有大约20多列数据来源与数据连接到服务器。 MySQL应该很容易执行与普通MSSQL,PostgreSQL,Oracle等大部分相同的功能......关键在于你的查询,并确保它们是最好的,你可以编写它们来减少负载服务器本身。祝你的项目好运!

12

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

+2

当抱怨MySQL性能时,许多人错过的最重要的事情之一就是索引。查询带有几条10000行而没有索引和索引的表格会对速度很慢的服务器(在旧的pentium2 266 MHz上运行)从几秒到几毫秒产生巨大影响;)。有了索引,它仍然闪电般地使用php/MySQL。 – 2011-04-27 15:27:40

0

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

+0

MyISAM适用于某些数据,如果您大多数情况下插入并读取数据,但很少更新或删除,MyIsam可能比其他许多快速因为它使用乐观锁定。 – 2011-04-27 15:21:29

2

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

现在事情是你不能这样做,默认安装MySQL本身。您需要了解如何平衡多个服务器上的负载。然后如何使用群集或碎片。所以只要您的系统是在可扩展架构的基础上开发的,您就可以做所有事情。

当您刚刚部署第一个版本时,不要担心数百万条记录。缩放会逐渐发生。您无法部署只在一天内扩展的应用程序。你必须每天优化它。还记得Martin Fowler的报价“过早的优化是所有罪恶的根源”

网站的喜欢HighScalability可帮助您了解在LAMP堆栈:)

= H =

+0

引用来自Donald Knuth,而不是Martin Fowler(可能引用Donald Knuth)。 – 2012-06-08 23:37:54

0

你当然PHP的顶部设计出更好的架构MySQL可以处理大量的数据,如果你有一个良好的结构化(规范化),那么你就没有什么可担心的。

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

  • 的YouTube
  • Facebook的
  • Drupal的
  • WordPress的
0

有几个点提出你的问题。

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

MySQL可以扩展,但它不是很好。Facebook的某些服务使用PHP/MySQL,但他们使用hadoop的速度更快,带宽更密集。他们也使用PHP,但为了更快的应用程序,他们使用嘻哈将其转换为C++并编译它。

MySQL可以扩展,但如果你没有正确配置它,那么当表格变得太大时,它会惨败。 PostgreSQL可以更好地扩展,但是如果配置正确的话,可以很好地进行扩展。

看起来你的应用程序比你以前的应用程序要大,但实际上并不“那么大”。在特定情况下,我会担心响应时间比数据库缩放更多。