我正在开发一个小型快递应用程序,目前允许用户登录(通过护照),并查看有关他们的朋友的信息,即购买历史,喜欢等。理想情况下,我希望每个用户都有一张随附的个人资料照片和项目在他们的购买历史中附上产品照片。简化的用户模型如下所示
{
"name": "Homer Simpson",
"purchases": "Duff"
}
如果我想要一张个人资料照片,有没有一种直接的方式在沙发基地做,或者我应该将它存储在像S3这样的东西
{
"name": "Homer Simpson",
"profile_pic" : "http://s3.something.com/profilepics/homer.jpg",
"purchases": "Duff"
}
答案 0 :(得分:8)
我可以给你两个论据,说明为什么我不将它们存储在数据库中(Couchbase或其他)。
1)使用每个工具以获得最佳效果。 Couchbase可以通过RAM中的托管缓存提供您提供的示例文档。您将获得亚毫秒的响应时间。 S3非常适合提供像图像这样的静态内容。 Couchbase能否从RAM中快速提供该图像?当然,但是你将会使用更多的资源来实现这一目标,并引导我进入我的#2论点。
2)通过将图像存储在DB,Couchbase或其他方式中,您将使用最昂贵且高性能的资源来处理静态且不经常更改的内容。想想与S3相比,EC2实例上的存储成本。如果要将其存储在数据库中,则必须将其存储,复制,备份等,并将其与关键数据放在一起。 S3非常适合以极其合理的价格提供高耐用性。数据库中的图像听起来是个好主意,但随着时间的推移,它们会成为你脖子上的链条。除非您现在开始使用用户帐户到期策略,否则您可能需要2年时间才能从1.5年前使用您的服务退出并多次支付每KB的用户存储,备份和复制图像。同样,这并不是Couchbase的唯一选择。
使用具有指向S3中图像的指针的文档是我的意见。你将获得两全其美。没有太多额外工作的性能和成本效益。