【问题标题】:Best way to link datastore entity to its blobstore image?将数据存储实体链接到其 blobstore 映像的最佳方法?
【发布时间】:2014-08-07 20:13:05
【问题描述】:

假设我有一个电子邮件地址簿模型:

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 作为基本 URL,后修复所需的大小:

alice.image+'=sx'

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

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

【问题讨论】:

  • stackoverflow.com/questions/9362001/… 可能是一件有趣的事情。如果您确定您的 blob 不会大于 1Mb,并且您并没有真正考虑成本,那么将它们保存在数据存储中会更简单。如果您查看成本或有 > 1Mb blob.... 需要 blobstore
  • @Julldar 我不是在比较存储 blob 的位置 - 我在问如何最好地从 Datastore 实体引用我的 Blobstore blob .
  • 那么在这种情况下,是的,第 2 次 > 第 1 次,仅仅是因为您削减了一次,因此您的通话次数更少,结果更便宜,结果更快......对于第 3 次......可能需要谷歌工程师权衡一下,我不知道他们如何神奇地处理其中一些事情

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


【解决方案1】:

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

嗯,有点。事实证明,答案是“一开始这不是一个真正的问题”。

虽然get_serving_url() 给人的印象是正在做一些花哨的事情,但实际上“服务 URL”只不过是对所提供的BlobKey 进行后修复。

更重要的是,提供size=x 只是附加=sx - 这样做没有什么特别的,或多或少是有效的。我的第二个和第三个选项,真的是一样的。

最后,__BlobInfo__ 实体种类使用BlobKey 作为其键名,因此也很容易从其他实体访问。


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

imgBlob = db.LinkProperty()

然后很容易:

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

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 2015-08-15
    • 2011-09-07
    • 2012-12-21
    • 2011-09-14
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多