我目前正在为我的应用程序创建一个方案,我想知道我的想法是否正确
示例:电子商务网站
在 DynamoDb 中,我会放置产品(product_id,S3 的元数据链接)
S3,我会用它来存储搜索数据格式 (SDF/JSON) (产品名称、产品描述、价格等)
Amazon CloudSearch 将用于索引 S3 中的文档,并能够搜索它们。 Redis 将用于缓存结果
我的方案对吗? s3 可以成为一个好的“数据库”吗?
这里甚至需要 DynamoDb 吗?
最佳答案
如果您认为 S3 只是您产品的记录源并且您不期望大量的读/写,那么它可以工作,但您必须认识到它会比使用真正的慢得多数据库。不仅慢 1-2 倍,而且慢很多。我们使用 S3 为存储在 Postgres 中的实时数据存储审计数据 - 很有魅力,但这是一次写入很少读取的数据。当它确实必须检索审计记录时,检索时间 > 50 毫秒。当您需要一次操作多条记录时,这种速度通常是 Not Acceptable 。
如果您无论如何都要使用 dynamoDB,为什么不直接使用它来存储您要存储在 s3 上的内容呢?为了坚持保持简单的概念,我将使用以下堆栈:
- dynamoDB 作为记录系统并进行一些搜索
- Cloudsearch 提供比 dynamodb 更灵活的搜索 提供
- 用于静态文件(产品图片等)的 S3
再一次,为了简单起见,如果您已经在使用 dynamoDB 并且不打算使用任何 Redis 的专用数据类型,请跳过 Redis 进行缓存 - 即:您的缓存只不过是字符串的键等。如果您计划利用 Redis 的其他数据类型,或者如果您希望缓存更接近您的应用程序,请使用 Redis - 即:您计划在网络服务器上使用 Redis。
关于amazon-s3 - DynamoDb + S3 + CloudSearch + Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12258110/