gpt4 book ai didi

mysql - 如何为数十亿行和数百GB的大型表配置mysql

转载 作者:行者123 更新时间:2023-11-29 16:02:35 25 4
gpt4 key购买 nike

在 MySQL 数据库中,我有一些用于报告目的的大型表。目前最大的有超过40亿行,数据大小超过300GB,索引约250GB。平均行大小为 84B。该表本身由 20 个数字列和 1 个日期列组成。其中,10列是外键,其他列是指标。因为它与报告有关,并且日期是每个请求的关键组成部分,所以该表使用以下内容按日期分区:PARTITION BY HASH ( YEAR(date) * 12 + MONTH(date))分区 96这些表使用 MyISAM 引擎而不是 InnoDB。我考虑过迁移到 InnoDB,但对于 SELECT 请求来说,获取结果的时间恰好是一场噩梦(比使用 MyISAM 的同一张表长数百倍)。

我最初看到这种分区(我没有创建它)的假设是,使用 where date = now() 运行请求将使 MySQL 只读取与该日期的哈希匹配的分区,而不是所有分区(就像某些主索引一样),并且写入请求只会锁定受影响的分区。然而,就性能而言,这似乎并不令人遗憾。

所以我想了解一些关于在如此大的表中使用 MySQL 的最佳方法的信息?我知道分区总是被认为更好,但是考虑到锁问题和索引,我想知道将表拆分为多个子表然后 UNION JOIN 或使用 VIEW 进行 SELECT 请求是否会更好?

    CREATE TABLE `report_table` (    `date` date NOT NULL,    `key_1` int(11) NOT NULL,    `key_2` int(11) NOT NULL DEFAULT '0',    `key_3` int(11) NOT NULL DEFAULT '0',    `key_4` int(11) NOT NULL DEFAULT '0',    `key_5` int(11) NOT NULL DEFAULT '0',    `key_6` int(11) NOT NULL DEFAULT '0',    `key_7` int(11) NOT NULL DEFAULT '0',    `key_8` int(11) NOT NULL DEFAULT '0',    `key_9` int(11) NOT NULL DEFAULT '0',    `metric_1` int(11) NOT NULL DEFAULT '0',    `metric_2` int(11) NOT NULL DEFAULT '0',    `metric_3` int(11) NOT NULL DEFAULT '0',    `metric_4` int(11) NOT NULL DEFAULT '0',    `metric_5` int(11) NOT NULL DEFAULT '0',    `metric_6` int(11) NOT NULL DEFAULT '0',    `metric_7` int(11) NOT NULL DEFAULT '1',    `metric_8` float(27,10) DEFAULT '0.0000000000',    `metric_9` float(27,10) DEFAULT '0.0000000000',    `metric_10` float(27,10) DEFAULT '0.0000000000',    `metric_11` float(27,10) DEFAULT '0.0000000000',    PRIMARY KEY (`date`,`key_1`,`key_1`,`key_1`,`key_1`,`key_1`,`key_1`,`key_1`,`key_1`,`key_1`)    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci    /*!50100 PARTITION BY HASH ( YEAR(date) * 12 + MONTH(date))    PARTITIONS 96 */

最佳答案

最好使用当前流行的技术(例如 Apache Spark/Apache Flink)进行处理。由于您的数据巨大,这些处理引擎提供了有史以来最好的性能。在这里您也可以控制您的分区。请看一下 Apache Spark,它和 Hadoop 一样简单。事实证明,Spark 比专为处理 BIGDATA 而设计的 Hadoop 快 10 到 100 倍。

关于mysql - 如何为数十亿行和数百GB的大型表配置mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56056579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com