【问题标题】:How to handle a MySQL table which is keep increasing quickly?如何处理不断快速增长的 MySQL 表?
【发布时间】:2021-06-24 22:56:27
【问题描述】:

我有一个名为transactions 的表,如下所示:

id | user_id | business_id | amount | tracking_code | status | created_at | updated_at

如您所见,这是一个保存所有事务的表。目前它有超过 5000 万行,每天大约有 4k 新行被添加到其中。我担心未来一两年业务规模扩大,我最终会得到一张非常大的桌子。

目前,我们在此表上有两个索引,以获得更好的搜索性能。引擎也是innodb

知道一般应该如何处理吗?

在硬件资源方面,我完全可以在需要的时候增加服务器硬件。但我想,未来的问题将是管理数据而不是资源。

【问题讨论】:

    标签: mysql database performance cluster-computing data-management


    【解决方案1】:

    不用担心有多少 CPU 和它们的速度。这很少是 MySQL 的限制因素。

    您需要created_at 还是updated_at

    不要为压缩而烦恼;这不太可能值得。

    在实际(和保守)的情况下使用较小的数据类型。

    坚持使用 InnoDB。有很多原因;此处不再赘述。

    请告诉我们SHOW CREATE TABLE 和一些关键问题。我们可能会提供更多提示。

    【讨论】:

      【解决方案2】:

      磁盘空间很便宜。你有,什么,3.2 GB 的数据和索引中的一些因素。如果应用程序不需要所有数据都在线,那么您可以选择归档旧数据(转储然后从表中删除)。您可以查看compression 作为选项。可能与一些alternative storage engines结合使用

      【讨论】:

        【解决方案3】:

        我不会担心在可以将索引保存在内存中的机器上拥有 10 亿行的应用程序性能。

        但是,如果您知道表正在快速增长,我建议将 id 列设为 BigInt,因为 32 位整数将被限制为 2^31-1= 2,147,483,647 行

        您的表格和搜索引擎的性能取决于:

        1. 这些查询对该特定表执行了多少次联接?
        2. 您的索引设置得如何?貌似不错
        3. 托管数据库的机器中有多少 RAM?
        4. 与它相关的处理器的速度和数量?
        5. 查询中返回的行大小/数据量。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-06
          • 1970-01-01
          • 1970-01-01
          • 2011-08-28
          • 2012-09-21
          相关资源
          最近更新 更多