【问题标题】:5 node m4.large Instances vs m4.2xlarge RDS5 节点 m4.large 实例与 m4.2xlarge RDS
【发布时间】:2018-09-16 01:42:46
【问题描述】:
我问这个问题是为了获得对亚马逊服务的一些看法。
我目前在 m4.2xlarge 实例上运行 RDS,但在大型数据库上遇到性能问题。所以我决定研究大数据。我正在考虑开始将 hadoop 与 5 个 Amazon m4.large 或 m4.xlarge 实例一起使用。
有没有人在这方面有任何类似的经验或建议?
【问题讨论】:
标签:
amazon-web-services
amazon-ec2
bigdata
amazon-rds
【解决方案1】:
Hadoop 和 RDS 是非常不同的技术,不可互换。
RDS 提供非常快速的事务处理 (OLTP)。 Hadoop 更适合批处理 (OLAP)。随着 Spark 的出现,这条线正在发生变化。有适用于 Hadoop 的 SQL 查询应用程序,但它们不会取代最强的 SQL 数据库:复杂查询、表连接等。
对于传统的 SQL 服务器来说,数据太大了。那时我会研究 Redshift。您将不得不重新考虑数据的存储方式、查询格式等。
您没有提供给您带来问题的性能领域的详细信息。对于读取问题,请查看更广泛的扩展(读取副本)。对于写入问题,您需要扩大规模(更大/更快的机器、更快的存储、更多内存等)。在某些情况下,仅优化您的查询可能会产生重大影响。
总之,您的问题需要更多数据才能创建信息丰富的答案。
【解决方案2】:
John Hanley 是对的,RDS 和 Hadoop 是截然不同的野兽。问题是,您使用的是哪种数据?
如果数据和您的用例本质上是关系型的(外键、索引、唯一性约束、ACID 事务、需要高效连接和任意查询),那么最好使用“网络规模”SQL 数据库——在这种情况下,我建议您看看 Amazon Aurora。它是 MySQL 或 PostgreSQL 的直接替代品,具有更好的性能和可扩展性。
如果您的数据属于关系型,但您的用例更倾向于商业智能(星形/雪花模式、柱状聚合、任意向下钻取),并且您对写入延迟的依赖程度较低,那么您最好使用像这样的数据仓库红移。
如果您的数据更像查找表,并且您的大部分查询是指向大型命名空间的点查询(想想 GUID、cookie ID、IDFA 等设备 ID),那么您可能需要一个 Key-价值存储 - DynamoDB 显然是 AWS 上的选择,但对于某些工作负载(以及小于 100GB 的数据集),您也可以考虑在 ElastiCache 上使用 Redis。
如果您的数据更像事件(例如,您正在存储横幅展示或物联网消息),那么您可能需要一个允许您实时获取新数据的堆栈;如果不是专门的时间序列数据库,Druid 或 HBase+Phoenix 可能是这里的答案。
最后,如果您的数据很大,并且您的常见用例涉及对高 TB 或 PB 数据的复杂和任意(非预先计算)查询,那么 Hadoop 将是一个不错的选择,因为它便宜得多将数据存储在 S3 上并根据需要启动 EMR 集群,而不是运行将数据存储到数据库或数据仓库堆栈所需的硬件。如果这是您所走的路线,您通常可以通过将数据以列格式(如 Parquet)存储在磁盘上并使用 Spark SQL 或 Presto(AWS 上的 Athena)等方式进行查询,从而获得非常显着的性能提升。但是,一旦您切换到这种“纯”大数据堆栈,您就处于 OLAP 领域,这意味着您可能会在几分钟到几小时内查看查询时间,而不是几毫秒到几秒,因此需要注意这一点.