sql - 如何使用AWS快速分区100亿行SQL表?

标签 sql amazon-web-services amazon-redshift database-partitioning

我有一个以规范化格式提供的数据 SQL 数据库,其中包含多个包含数十亿行数据的表。我决定按 itemId 将大型表分区为单独的表,因为当我查询数据时,我一次只关心 1 个项目。在对数据进行分区后,我最终会得到 5000 多个表。问题是,对数据进行分区大约需要 25 分钟才能为 1 项构建一个表。

5000 items x 25 minutes = 86.8 days

对整个 SQL 数据库进行完全分区需要超过 86 天的时间。我的整个数据库大约有 2.5TB。

我可以利用 AWS 在项目级别上进行并行化吗?我是否可以使用 AWS 数据库迁移服务以当前形式托管数据库,然后使用 AWS 流程搅动所有 5000 个查询,将大表划分为 5000 个较小的表,每个表包含 200 万行?

如果不是,我是否需要投入更多硬件才能使其运行得更快(CPU 或 RAM)?

提前致谢。

最佳答案

这似乎不是一个好的策略。一方面,简单的算术是,10,000,000,000 行(每项 5,000 行)会在表中产生 2,000,000 个分区。

Redshift 中的限制(默认情况下)为 1,000,000 partition per table :

Amazon Redshift Spectrum has the following quotas when using the Athena or AWS Glue data catalog:

  • A maximum of 10,000 databases per account.
  • A maximum of 100,000 tables per database.
  • A maximum of 1,000,000 partitions per table.
  • A maximum of 10,000,000 partitions per account.

您应该重新考虑您的分区策略。或者您的问题可能不适合 Redshift。可能还有其他更适合您的用例的数据库策略。 (但是,这不是推荐特定软件解决方案的论坛。)

关于sql - 如何使用AWS快速分区100亿行SQL表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846460/

相关文章:

MySQL 数据透视表显示一周中每个工作日的出勤情况

MySQL:外键始终为0

mysql - 表之间的内连接,耗时

amazon-web-services - 此处不应出现 "advanced_security_options"类型的 block

database - 将数据从 firebase 加载到 amazon redshift

MySQL:合并两个表(相同模式)并创建一个新表 - SINGLE QUERY

amazon-web-services - Azure有像AWS的CloudFormation一样的IaC工具吗?

amazon-web-services - AWS CodePipeline : How to pass output from CloudFormation action to a CodeBuild action

java - Redshift 的分隔符转义边缘情况

amazon-web-services - AWS Redshift 是否支持 postgis 扩展?