我计划推出一个漫画网站,提供漫画条(图像)。
我几乎没有提供/缓存图像的经验。
所以这是我正在考虑的两种方法:
1. 使用 LinkProperty
class Comic(db.Model)
image_link = db.LinkProperty()
timestamp = db.DateTimeProperty(auto_now=True)
优点: 图片是从磁盘空间中获取的(磁盘空间便宜,我理解吗?) 我可以轻松设置app.yaml的过期日期,以缓存内容到用户的浏览器中 我可以设置memcache以更快地检索实体(用于高流量)
2. 使用BlobProperty
我使用了这个教程,效果非常好。 http://code.google.com/appengine/articles/images.html
附带问题:我能否说使用BlobProperty有点像“保护”我的图片免受外部链接的影响?这意味着人们不能直接链接到漫画条
我对第二种方法有一些担忧。
- 我显然可以将这些实体缓存在memcache中,以实现更快的读取。
但是:
将图片存储在内存缓存(memcache)中是一个好的选择吗?我的图片很大(每张图片100-200kb)。我认为memcache只允许缓存4GB的数据?或者说每个memcached实体最多只能缓存1 MB,但是实体数量没有限制...
如果appengine的内存缓存(memcache)失败了怎么办?-> 解决方案:我需要返回到数据存储(datastore)。
如何在用户的浏览器中缓存这些图片?如果我使用方法1,我可以在app.yaml中轻松添加内容的过期日期,从而使图片在用户端被缓存。
想听听您的想法。 我应该使用方法1还是方法2?方法1听起来非常简单明了,我应该对它保持警惕吗?
[编辑] 如何解决这个两难问题?
两难问题:我最不想做的事情就是防止人们获取图片的直接链接并将其放在bit.ly上,因为用户将自动被重定向到我的服务器上的图片 (如果用户从主页面本身访问,则不会出现广告/内容等)。