我问这个问题是为了获得有关亚马逊服务的一些意见。
我目前在m4.2xlarge实例上运行RDS,但我在大型数据库上遇到性能问题。所以我决定研究大数据。我想开始使用带有5个亚马逊m4.large或m4.xlarge实例的hadoop。
有没有人在这个问题上有任何类似的经验或建议?
Hadoop和RDS是非常不同的技术,不可互换。
RDS提供非常快速的事务处理(OLTP)。 Hadoop更适合批量处理(OLAP)。随着Spark的出现,这条线正在发展。有针对Hadoop的SQL查询应用程序,但它们不会替换最强的SQL数据库:复杂查询,表连接等。
有一点,数据对于传统的SQL服务器来说太大了。那时我会调查Redshift。您将不得不重新考虑数据的存储方式,查询格式等。
您没有提供有关性能问题的详细信息。对于读取问题,请查看扩展范围(read-replicas)。对于写入问题,您需要扩展更大(更大/更快的机器,更快的存储,更多的内存等)。在某些情况下,只是优化查询会产生重大影响。
总之,在创建信息性答案之前,您的问题需要更多数据。
约翰汉利是对的,RDS和Hadoop是非常不同的野兽。问题是,您使用的是哪种数据?
如果数据和您的用例本质上是关系性的(外键,索引,唯一性约束,ACID事务,需要有效的连接和任意查询)那么您可能最好使用“webscale”SQL数据库 - 在这种情况下我建议看一下Amazon Aurora。它是MySQL或PostgreSQL的直接替代品,具有更好的性能和可扩展性。
如果您的数据是关系型的,但您的用例更多地是针对商业智能(星形/雪花模式,柱状聚合,任意下钻),并且您对写入延迟的依赖性较小,那么您可能最好使用像Redshift这样的数据仓库。
如果您的数据更像查询表,大部分查询都是点查询到大型命名空间(想想GUID,cookie ID,设备ID,如IDFA),那么您可能会想要一个键值存储 - DynamoDB将是AWS上的明显选择,但对于某些工作负载(以及小于100GB的数据集),您也可以考虑在ElastiCache上使用Redis。
如果您的数据更像事件 - 比如说,您正在存储横幅广告展示或IoT消息 - 那么您可能需要一个允许您实时摄取新数据的堆栈;德鲁伊或HBase + Phoenix可能就是这里的答案,如果不是专用的时间序列数据库。
最后,如果您的数据很大并且您的常见用例涉及高TB级或数PB级数据的复杂和任意(非预先计算)查询,那么Hadoop将是一个很好的选择,因为存储您的数据要便宜很多S3上的数据并根据需要启动EMR集群,而不是运行将数据存储到数据库或数据仓库堆栈所需的硬件。如果这是你走的路线,你通常可以通过在磁盘上以柱状格式(如Parquet)存储数据并使用Spark SQL或Presto(AWS上的Athena)查询数据来获得非常显着的性能提升。但是,一旦你切换到这种“纯粹的”大数据堆栈,你就处于OLAP领域,这意味着你可以在几分钟到几小时内查看查询时间,而不是在几毫秒到几秒内,所以这是需要注意的事情。 。