我相对于在AWS上设置PostgreSQL数据库比较新。我正在尝试弄清楚Amazon RDS实例类型之间的实际区别。以下是有关我的组织和用例的一些背景信息:
- 我们主要是由少于5个用户的数据分析师/数据科学家组成的小团队
- 我们不需要100%的正常运行时间。我可能会在正常工作时间打开数据库,然后关闭。我们的用例主要是为了分析/数据科学目的,没有实时应用程序运行在其上。
- 现在我们只需要一个数据库。
- 数据库将包含大约300-500GB的数据。大多数表很小(不到1GB)。但是,有一些表非常大。最大的表将是大约80GB,并且将经常查询。还有一些其他的表大约10GB。
db.t2.micro
只是为了获得一些经验,开发并测试我所需的内容。然而,这很难让我理解与其他实例的比较。我们的团队现在也非常注重预算,因此我正在尝试在提升之前确定范围。
我正在尝试执行的示例操作
- 从CSV加载表格:我们有很多存储在磁盘上的CSV文件,我将把它们加载到PostgreSQL数据库中。我刚刚测试了一个,创建了一个表格,并使用
\copy
将一个11 GB文件(35,401,551行和40列)的CSV加载到表格中,这需要大约27分钟。升级实例会有帮助吗?如果有,我不确定我想要升级到什么? - 从该表格中进行
select count(*)
查询需要大约15分钟(第一次运行时;第二次运行时需要大约3分钟,可能是因为缓存统计数据?但对我来说3分钟仍然很慢)。同样,我不确定升级实例是否有帮助?我还应该指出,我没有添加主键或索引。因此,可能有其他优化性能的方法而无需升级实例?例如,分区可能会有所帮助:https://www.postgresql.org/docs/10/ddl-partitioning.html。该表格具有一个state
列,这是用户经常使用的第一个过滤器之一,因为用户通常只想查看一个或一组特定的州。 - 一个简单的分组查询:
select ColA, count(*) group by ColA
需要大约2.5分钟
编辑 我注意到了一些其他有用的资源:
- https://www.apptio.com/blog/ec2-m5-vs-t3/ 关于选择 m5 vs t3 的文章
select count(*)
),我都在使用 CPU?所以我拥有的 CPU 越多,这些操作就会越快?或者当涉及到这些select
查询时,CPU 和内存之间有什么区别呢? - Vincent