我目前正在为我的应用程序创建一个方案,我想知道我的想法是否正确
示例:电子商务网站
在 DynamoDb 中,我会将产品(product_id,元数据链接到 S3)
S3,我会用它来存储搜索数据格式(SDF/JSON)(产品名称、产品描述、价格等)
Amazon CloudSearch 将用于索引 S3 中的文档,并能够搜索它们。Redis 将用于缓存结果
我的方案对吗?s3 可以成为一个好的“数据库”吗?
这里甚至需要 DynamoDb 吗?
我目前正在为我的应用程序创建一个方案,我想知道我的想法是否正确
示例:电子商务网站
在 DynamoDb 中,我会将产品(product_id,元数据链接到 S3)
S3,我会用它来存储搜索数据格式(SDF/JSON)(产品名称、产品描述、价格等)
Amazon CloudSearch 将用于索引 S3 中的文档,并能够搜索它们。Redis 将用于缓存结果
我的方案对吗?s3 可以成为一个好的“数据库”吗?
这里甚至需要 DynamoDb 吗?
如果您认为 S3 只是您的产品的记录源,并且您不期望大量的读/写,那么它可以工作,但您必须认识到它比使用真正的数据库要慢得多。不仅慢 1-2 倍,而且慢很多数量级。我们使用 S3 来存储 Postgres 中存储的实时数据的审计数据 - 很有魅力,但这是一次写入且很少读取的数据。必须检索审计记录的检索时间大于 50 毫秒。当您需要一次处理多条记录时,这种速度通常是不可接受的。
如果您仍然要使用 dynamoDB,为什么不直接使用它来存储您要在 s3 上存储的内容呢?为了坚持保持简单的概念,我将使用以下堆栈:
再次,为了简单起见,如果您已经在使用 dynamoDB 并且不打算使用任何 Redis 的专用数据类型,请跳过 Redis 进行缓存 - 即:您的缓存只不过是字符串的键等。如果您使用 Redis,请使用您计划利用它的其他数据类型,或者如果您希望缓存更接近您的应用程序 - 即:您计划在网络服务器上使用 Redis。
Dynamo 用于存储写入扩展数据。如果您的应用程序不需要对 product_id 和元数据进行大量写入,我认为 RDS/MySQL 会更好。
在设计应用程序时,您确实应该从一开始就让事情尽可能简单。随着时间的推移,情况总是会变得更糟:)
S3
不是一个好的数据库。它不是为此而设计的,而且速度太慢。它仅用于文件存储。如果您想坚持使用DynamoDB
,则应将所有产品信息(包括元数据)放入其中。
CloudSearch
可能是一个不错的选择。您还可以在DynamoDB
. 它需要更多的设计和编程,但可能值得考虑。这是一篇关于这个问题的优秀博客文章的链接:http: //blog.coredumped.org/2012/01/amazon-dynamodb.html。
所以,