什么是在AWS中用于大量易变数据集的推荐可扩展数据库平台 - elasticsearch,Redis或DynamoDB?

时间:2013-11-04 01:29:20

标签: redis elasticsearch amazon-dynamodb autoscaling

我们平台的用户将在我们的系统上拥有大量存储数据。通过应用程序,一旦连接,该数据将被传输到它们,不再需要保留在我们的服务器上。在任何给定时间都可能有数百或数千个用户连接,执行下载。

这是建议的架构:

用户管理,配置和数据下载统计信息将在SQL Server数据库中维护,同时将Redis或DynamoDB用于大型数据集。

选择Redis或DynamoDB的原因是基于成本 - 比运行另一个SQL Server实例和性能更便宜。数据格式类似于datamart - 没有连接的平面表。

最初查询很简单 - 在日期范围内获取用户X的所有数据,并可选择删除。

由于我们可能希望使用 elasticsearch 添加对该数据的某些字段的自由文本搜索,因此从一开始就可以使用更好的选项。

我希望这是自动缩放,但不确定哪种数据库最适合用于此方案。

2 个答案:

答案 0 :(得分:4)

以下是AWS ReInvent数据库+搜索层的一些很好的讨论:

https://youtu.be/K7o5OlRLtvU?t=1574

What Data Store Should I Use ?

答案 1 :(得分:0)

我不会单独使用Elastic-search,因为它不会为写入容量提供自动缩放功能。实际上,增加索引的碎片数量并非易事。其次,它只能处理JSON格式,这可能是一个问题。

Redis可能是一个好主意,因为它非常快,一切都在RAM中完成,并且它提供了有限的生存时间的键,这对你来说很有趣。不幸的是,如果您的数据大小超过亚马逊实例的RAM容量,则必须对Redis数据库进行分片。 Redis不支持它,你必须在你的应用程序代码上处理它。而且,据我所知,Redis不处理复杂的查询。您还需要将数据保存在Redis数据结构中,这可能是您的问题

DynamoDB非常好地处理自动缩放,但另一方面它是一个键/值数据库,所以它不允许你进行诸如“在日期范围之间获取用户X的所有数据”之类的查询。 DynamoDB还允许您以任何格式保存数据。

解决方案将根据您的数据大小使用DynamoDB或Redis,并使用ElasticSearch以仅使用元数据(用户和日期)索引您的密钥。就像你的索引会很小,如果由于ElasticSearch太疯狂而失去索引能力,你就可以保存用户的数据。