将数据存储区实体链接到其blobstore映像的最佳方法是什么?

时间:2014-08-07 20:13:05

标签: google-app-engine google-cloud-datastore blobstore

我们说我的电子邮件地址簿有一个型号:

class contact(db.Model):
    email = db.EmailProperty()
    image = #Hmm.

我的联系人'图像将存储在Blobstore中,并以各种尺寸提供。

所以,我应该使用db.ReferenceProperty(BlobInfo),以便我可以通过以下方式提供服务:

get_serving_url(alice.image.key, size=x)

或者我应该使用db.StringProperty,以便我不必进行第二次阅读以获取密钥:

get_serving_url(alice.image, size=x)

或者我应该使用db.LinkProperty作为基本网址,后期修复所需的尺寸:

alice.image+'=sx'

我不会预见需要除钥匙以外的任何东西,所以我认为第二个比第一个更好。

虽然我不确定第三个是否最好,因为我不确定它是否与创建一个唯一的URL一样高效,可以缓存以避免重复生成相同的缩略图 - 或者这是否处理两种情况下都是自动化的?

1 个答案:

答案 0 :(得分:1)

经过一些实验,我想我可以回答我自己的问题。

好吧,有点儿。事实证明答案是"这并不是一个真正的问题,从#34开始。

虽然get_serving_url()给人的印象是正在做一些奇特的事情,但实际上是“提供服务的网址”。只不过是提供BlobKey的后期修复。

更重要的是,提供size=x只会附加=sx - 这样做并没有什么特别的,或多或少的效率。我的第二个和第三个选项,实际上是相同的。

最后,__BlobInfo__实体类型使用BlobKey作为其关键名称,因此也可以轻松地从另一个访问。


我决定使用,并建议任何有同样困境的人,我的第三个选择:

imgBlob = db.LinkProperty()

然后很容易:

  • 附加任何调整大小/裁剪要求
  • 在不重载put()
  • 的情况下提供默认值/ make