【问题标题】:How to handle 20M+ records from tables with same structure in MySQL如何在 MySQL 中处理具有相同结构的表中的 20M+ 记录
【发布时间】:2021-03-28 16:02:22
【问题描述】:

我必须处理从大约 50 个不同来源收集和转换的 2500 万行数据。每个来源导致大约 500.000 到 600.000 行。每条记录都有相同的结构,不管来源(比如说:id、title、author、release_date)

为了灵活性,我希望为每个源创建一个专用表,(然后我可以从源中清除/删除数据并非常快速地重新加载/上传数据(使用 LOAD INFILE))。这样,似乎很容易截断表,而不会从其他来源删除行。

但是我不知道如何在不同的表中选择具有相同作者的记录,以及蛋糕上的分页(LIMIT 关键字)。

是将所有内容存储到单个大表中并解决索引/备份 25M+ 数据库的痛苦的唯一解决方案,或者是否有一种抽象层可以将 50 个表虚拟合并为一个虚拟表。

这可能是 dba 的常见问题,但我还没有找到任何答案... 非常感谢任何帮助/想法。谢谢

【问题讨论】:

  • 听起来你在描述分区
  • 您所描述的是分区。不过,我对 MySQL 的了解还不够,不知道这是否适合您。

标签: mysql sql merge bigdata


【解决方案1】:

这可能是MySQL partitoning 的好地方。

这让您可以处理大量数据,同时让您有机会在需要时非常高效地在特定分区(例如 truncate 或事件 drop)上运行 DML 操作,而不会影响其余部分你的数据。 LOAD DATA 语句也支持分区选择。

您可以像使用普通表一样跨分区运行查询,或者在需要时针对特定分区(这可以非常有效地完成)。

在您的特定用例中,list partitioning 似乎是一个相关的选择:您有一个预定义的源列表,因此通常每个源都有一个分区。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2013-07-02
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多