【发布时间】:2018-06-13 21:22:29
【问题描述】:
我有一个以标准化格式交付的 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)?
提前致谢。
【问题讨论】:
-
如果您使用简单的 RDS(诚然,一台合理的机器),正确的索引是否不适用于整个数据集?这听起来有点像XY Problem,因为您提出了解决方案而不是问题。
-
请说明您的意思。你的“SQL 数据库”是什么,redshift 是什么?(redshift 不会在内部进行分区)如果你使用的是 redshift 频谱/雅典娜,那么你可以将你的数据发布到 s3 存储桶中,但这些数据通常会很大。充实的主要内容是您在尝试什么?用例是什么?数据现在在哪里,您要克服哪些问题?
-
当前的 SQL 数据库是 SQL Server 2016。用例是从这个表中拉取一个项目的数据需要很长时间,所以我试图将非常大的表逐项划分为许多表因为我总是一次只想要一件东西。当我说很长时间时,我的意思是查询需要几分钟,但如果我想提取这些数据来构建项目的完整历史记录(操作数据),则可能需要数周时间。如果我按项目对其进行分区,则查询将减少到毫秒而不是分钟。但是分区仍然需要很长时间。
-
更具体地说,我正在查看股票级别的财务数据。我有一个代表公司特征的巨大值表。我有大约 4 万家公司和大约 5000 个特征。此外,该数据库是高度规范化的,因此实际的公司名称和日期在其他表中。我只想一次查看一个特征,因此将大表按特征划分为单独的表会产生 5000 个表,每个表都包含所有公司针对该特定特征的历史数据。
标签: sql amazon-web-services amazon-redshift database-partitioning