【问题标题】:MySQL performance and design for very large tablesMySQL 性能和超大表的设计
【发布时间】:2013-01-05 08:18:48
【问题描述】:

我正在设计一个新的 MySQL 数据库(使用 InnoDB 作为引擎),它将托管记录大量数据的表(每天大约 200 万条记录,保存 5 年的数据 = 大约 3 650 000 000行)。现在,显然将所有这些存储在一个表中并不是一个非常聪明的主意,所以这些几乎是我的选择:

  1. 在表上使用分区(在这种规模下这真的会带来多大的改进?)
  2. 生成一个新表以包含每个月的数据(因此,每个表大约有 60 000 000 行)

还需要注意的是,我将不得不进行某种多主复制(或集群)。

现在,我认为 选项 2 可能更好,因为它允许查询尽可能小的数据集(当用户指定要搜索的日期时),并且还将简化 5 年后的数据归档(只需移动整个表)。但是,使用选项 2 意味着我将不得不使用连接、联合,或者我必须运行多个单独的查询才能生成结果集(如果您需要按其他方式排序,则不首选后者日期)。

所以,我的问题是,除了使用联接之外,有没有一种方法可以真正将重点放在速度上,跨多​​个表并行运行查询?。我在想像 Google 这样的人,他们能够通过或多或少地做这类事情来达到他们的搜索速度。

谢谢!

【问题讨论】:

    标签: mysql optimization


    【解决方案1】:

    伙计,我建议您使用一些基于大数据的数据库,例如 Mongodb。在那里,您可以获得高效处理大数据和快速查询处理等功能。

    【讨论】:

    • 是的,我听说过一些关于 MongoDB 和 PostgreSQL 的好消息。不过,我在过去 10 年里一直在使用 MySQL,它并不是一个糟糕的系统,所以希望能坚持使用熟悉的方式。像 MongoDB 这样的东西能处理这么大的表吗,还是我还需要拆分表?
    • 是的,MongoDB 可以处理这个问题。在 Mysql 中,而不是使用您的第二个选项,我建议使用一些基于行的机制来实现它,例如如果有超过 x 行,您将创建一个新表。并为将用于查询的列放置索引
    • 我找到了这个链接,这表明我应该能够很容易地使用 MySQL,即使我认为负载很大(如果其中一位 FB MySQL 工程师看到了这篇文章,他们可能会大笑并喃喃自语“业余......”)。 Facebook shares some secrets on making MySQL scale.
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 2016-04-03
    • 2012-06-14
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多