【问题标题】:Learning about MySql for large database/tables?为大型数据库/表学习 MySql?
【发布时间】:2011-08-01 22:49:34
【问题描述】:

我已经在我的一个新网站上工作了几天,它将从 MySql 数据库中检索几乎所有最常用的内容。似乎数据库和网站仍在开发中,目前表真的很小,速度还不是问题。

但你知道他们说什么,现在稍微努力工作可以让你日后头疼。 现在我只有 17 岁,我曾经学过的唯一数据库是通过 Microsoft Access,我们实际上已经完成了数据库 - 我们学习了 3NF,但仅此而已。

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

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

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

    具体和 MySQL 相关的,可以谷歌一下 craigslist.org 对 MySQL 的使用。

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

    【讨论】:

    • 非常感谢,我一定会在凌晨 3 点之前重新访问这些网站,以便我可以正确地吸收信息! :)
    【解决方案2】:

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

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

    SQL 会进行分片,但从根本上来说并不是为了很好地分片而设计的。有一整类存储替代品统称为NoSQL,旨在解决这个问题(MongoDBCassandraHBase 是少数)。

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

    为特定项目选择数据库平台时,请尽早并经常对解决方案进行基准测试,以了解它是否能满足您设想的性能要求。有一个框架可以帮助您了解可扩展性,并帮助您决定是否投入精力来改进解决方案的数据存储部分,并帮助您了解最好的时间投入在哪里。

    【讨论】:

    • 我不得不说你在这里的 facebook 链接真的引起了我的注意;我为这个潜在网站考虑的一件事是类似于 facebook 的墙,所以能够阅读他们的问题是对这个想法的一个很好的洞察力。我肯定会研究 NewSql。
    【解决方案3】:

    没有人知道如何设计数据库。它是经过大量阅读和大量工作之后的。一个好的设计是多年的产物。正如您只看过 Access 一样,您对数据库一无所知。通过 Amazon.com 搜索,您将获得大量标题。对于刚开始的人,任何人都会这样做。

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

    如果您打算使用高性能数据库,您应该有一些想法。它们在每个应用程序中的设计。一个好的设计取决于越来越多地了解应用程序的用户如何与系统交互、使用模式等。你从书中学到的东西会给你提供选择,使用它们将很大程度上取决于场景。

    祝你好运!

    【讨论】:

    • 我已经编程了 6 或 7 年,诚然直到去年左右才使用“真正的”语言。但这是我第一次认真地接触数据库——所以我正在寻找我能找到的所有阅读材料,这样我在现实世界中犯的错误就会更少! :)
    【解决方案4】:

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

    看看this question

    【讨论】:

    • Google 实际上并没有使用昂贵的硬件,他们选择使用大量廉价的计算机,这些计算机具有内置的软件可靠性和冗余性。见:perspectives.mvdirona.com/2008/06/11/…
    • @xordon 哦,好吧,我想我错了。感谢您指出。
    • 啊,是的,我很喜欢阅读有关 google 的服务器的文章,如果我没记错的话,他们会尝试平衡成本、功率和性能,以找到最好的整体计算机 :) 但整个过程非常有趣” 14 天”部分。
    【解决方案5】:

    看看 Sphinx 服务器。

    http://sphinxsearch.com/

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

    【讨论】:

    • 好的,干杯,该页面已添加书签,我可能会在今晚阅读它,届时我将能够在计算机上使用相当长的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多