【问题标题】:DynamoDb + S3 + CloudSearch + RedisDynamoDb + S3 + CloudSearch + Redis
【发布时间】:2012-09-04 06:47:28
【问题描述】:

我目前正在为我的应用程序创建一个方案,我想知道我的想法是否正确

示例:电子商务网站

在 DynamoDb 中,我会将产品(product_id,元数据链接到 S3)

S3,我会用它来存储搜索数据格式(SDF/JSON) (产品名称、产品描述、价格等)

Amazon CloudSearch 将用于索引 S3 中的文档,并能够搜索它们。 Redis 将用于缓存结果

我的方案对吗? s3能成为一个好的“数据库”吗?

这里还需要 DynamoDb 吗?

【问题讨论】:

    标签: amazon-s3 redis amazon-dynamodb amazon-cloudsearch


    【解决方案1】:

    如果您认为 S3 只是您的产品的记录源,并且您不期望大量的读/写,那么它可以工作,但您必须认识到它比使用真正的记录要慢得多数据库。不仅慢 1-2 倍,而且慢很多数量级。我们使用 S3 为存储在 Postgres 中的实时数据存储审计数据 - 很有魅力,但这是一次写入很少读取的数据。必须检索审计记录的检索时间大于 50 毫秒。当您需要一次处理多条记录时,这种速度通常是不可接受的。

    如果您仍然要使用 dynamoDB,为什么不直接使用它来存储您要在 s3 上存储的内容呢?为了坚持保持简单的概念,我将使用以下堆栈:

    • dynamoDB 成为记录系统并进行一些搜索
    • Cloudsearch 提供比 dynamodb 更灵活的搜索 提供
    • S3 用于静态文件(产品图片等)

    再一次,为了简单起见,如果您已经在使用 dynamoDB 并且不打算使用任何 Redis 的专用数据类型,请跳过 Redis 进行缓存 - 即:您的缓存只不过是字符串的键等。如果您计划利用 Redis 的其他数据类型,或者如果您希望缓存更接近您的应用程序,请使用 Redis - 即:您计划在 Web 服务器上使用 Redis。

    【讨论】:

    • 不错的答案。我会做一些测试,可能只是放弃在 s3 之上拥有数据库
    • 测试是任何架构的关键——谁知道,也许考虑到您的记录访问模式,S3 可能会工作。例如,如果您有一组不经常更改的项目,那么您“可以”将它们保留为 JSON/XML/等。在 S3 文件中,然后在服务器启动时将它们读入缓存层。如果您的测试表明它是有道理的,那就去做吧。但是,我确实认为,如果您尝试将圆钉 (S3) 强制插入方孔(数据库功能),您最终会感到头疼。
    • 好答案。实际上,我有一个相关的问题 - 您是直接从 UI 访问 CloudSearch,还是有某种后端(例如在 EC2 上运行的 webapp 或 lambda)来调用 CloudSearch?我正在寻找最佳实践。
    【解决方案2】:

    Dynamo 用于存储写入扩展数据。如果您的应用程序不需要对 product_id 和元数据进行大量写入,我认为 RDS/MySQL 会更好。

    【讨论】:

    • S3 怎么样?我的意思是,将其用作“数据库”是否很好?
    • S3 是一个很好的“数据库”来存储文档。但是,如果你想使用 CloudSearch,你不需要直接使用 S3。我相信 CloudSearch 是建立在 S3 之上的。
    • 关于使用 s3 作为数据库的信息并不多……我真的很好奇为什么不……我的意思是 s3 不是典型的文件系统……它实际上是一个关键/value 存储看起来像一个文件系统。我想与它一起使用 dynamodb ..所以我可以轻松过滤一个项目,找到它在 s3 上的存储位置,然后阅读它.. 我不确定在这种情况下使用 cloudsearch 是否好.. 我想使用它只有当我需要复杂的查询时
    • @Goran:这是速度/延迟的问题
    • 我明白,但是如果我将结果缓存到redis?这有关系吗?
    【解决方案3】:

    在设计应用程序时,您确实应该从一开始就让事情尽可能简单。随着时间的推移,它总是会变得更糟:)

    S3 不是一个好的数据库。它不是为此而设计的,而且太。它仅用于文件存储。如果你想坚持DynamoDB,你应该把你所有的产品信息都放进去,包括元数据。

    CloudSearch 可能是一个不错的选择。您还可以在DynamoDB 之上建立自己的“索引”。它需要更多的设计和编程,但可能值得考虑。这是一篇关于这个问题的优秀博文的链接:http://blog.coredumped.org/2012/01/amazon-dynamodb.html

    所以,

    • 是否甚至需要 DynamoDB:是的,或者 RDS、Mongo、...任何真正的数据库,取决于您的需要。
    • S3 是一个好的数据库吗:我不这么认为。

    【讨论】:

    • S3 不会用作常规数据库。我知道 S3 比示例 Mongodb 慢,但这就是我使用 Redis 的原因。我将缓存查询,这里也是 cloudsearch。哦,把所有东西都放在 Dynamo 中真的不是一种选择..
    • 嗯,我建议的核心是:KISS。保持愚蠢简单。使用适合您需要的任何数据库引擎/缓存层,但要保持简单,否则维护起来会非常混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2020-06-19
    相关资源
    最近更新 更多