了解大型数据库/表的MySql?

时间:2011-08-01 22:49:34

标签: php mysql

我已经在我的新网站上工作了几天,它将从MySql数据库中检索几乎所有最常用的内容。看起来数据库和网站仍处于开发阶段,目前这些表格非常小​​,速度也不用担心。

但是你知道他们说了什么,现在一点努力工作可以让你后来头疼。 现在我只有17岁,我所教过的唯一数据库是通过Microsoft Access,我们几乎完成了数据库 - 我们学到了3NF,但那就是它。

我记得曾经读过一次,当我想从数据库中随机抽取数据时,大型数据库需要几秒钟/几分钟来完成一个查询,所以这让我想到了。在几分之一秒内,我可以向谷歌提交搜索,谷歌处理查询并返回结果,然后我的浏览器呈现它 - 所有这一切都在眨眼之间完成。谷歌有数十亿条记录可供搜索。他们也同时为数百万用户做这件事。

我在想,他们是怎么做到的?我知道他们拥有庞大的数据中心,但仍然存在。

我意识到它可能归结为数据库的设计,如何优化,以及显然的配置。我想这真的是我的问题。有人可以告诉我如何为数百万/数十亿行设计高性能数据库(是的,我很乐观),并可能指出一些好的阅读材料来帮助我进一步学习?

此外,我的所有查询都是通过PHP完成的,如果这与任何答案都相关。

5 个答案:

答案 0 :(得分:1)

博客http://highscalability.com/有一些很好的文章和指示公司如何处理大问题。

与MySQL有关,你可以通过Google for craigslist.org使用MySQL。

http://www.slideshare.net/jzawodn/mysql-and-search-at-craigslist

答案 1 :(得分:0)

查看Sphinx服务器。

http://sphinxsearch.com/

Craigslist将其用于搜索引擎。基本上,你给它一个源,它索引你想要的任何东西(mysql数据库/表,文本文件等)。如果它适用于craigslist,它应该适合你。

答案 2 :(得分:0)

首先是好消息...... MySQL可以很好地扩展(取决于硬件)至少数亿行。

一旦达到某一点,单个数据库服务器将无法管理负载。那时你进入partitioningsharding领域......使用多种不同方案中的任何一种将负载分散到多个数据库服务器上(例如,将不相关的表放在不同的服务器上,传播单个跨多个服务器的表,例如,使用ID或日期范围作为分区键。

SQL会进行分片,但是并没有从根本上设计好分片。有一整类存储替代方案,统称为NoSQL,旨在解决这个问题(MongoDBCassandraHBase只是一些问题。

当您大规模使用SQL时,会遇到许多问题,例如在数据库服务器场中更改数据模型,无法跟上数据备份等等。这是一个非常复杂的主题,以及解决问题的人它很少见。有关这些问题的一瞥,请查看http://gigaom.com/cloud/facebook-trapped-in-mysql-fate-worse-than-death/

为特定项目选择数据库平台时,请尽早对解决方案进行基准测试,以了解其是否符合您预期的性能要求。拥有一个框架可以帮助您了解可扩展性,并帮助您决定是否投入精力改进解决方案的数据存储部分,并帮助您了解最佳投资时间。

答案 3 :(得分:0)

没有人能说出如何设计数据库。它经过多次阅读和许多小时的工作。一个好的设计虽然是很多年的产品。正如您刚刚看到的Access,您不了解数据库。通过Amazon.com搜索,您将获得大量的游戏。对于正在开始的人,任何人都会这样做。

我的意思是没有不尊重。我去过那里,我也是一些学习编程/数据库设计的人的导师。我知道你们未来的工作没有灵丹妙药或捷径。

如果您打算使用高性能数据库,您应该记住一些事情。它们的设计在每个应用程序中。一个好的设计取决于学习越来越多的应用程序用户与系统的交互方式,使用模式等。你将从书本中学到的东西会给你选择,使用它们将在很大程度上取决于场景。

祝你好运!

答案 4 :(得分:0)

并非所有这些都归结为数据库的设计,尽管这确实是它的重要组成部分。制造谷歌的人是天才,如果我对谷歌没有完全错误,你将无法确切地知道他们是如何做的。此外,我知道多年前他们有超过10,000台计算机处理查询,而今天他们可能还有更多。我还怀疑他们缓存了大多数最近/热门的关键词。并且所有网站都使用未知算法进行索引和分析,这将确保计算机不必查看每个页面上的所有单词。 实际上,Google会每14天抓取整个互联网,因此当您进行搜索时,搜索整个互联网。您的搜索会被细分为关键字,然后这些关键字会用于缩小相关网页的数量 - 我相信在您考虑访问google.com之前,所有网页都已经过重要和/或相关关键字的分析。

查看this question