【问题标题】:Appengine blobstore as filesystem restrictions and questionsAppengine blobstore 作为文件系统的限制和问题
【发布时间】:2012-09-11 06:47:47
【问题描述】:

在接下来的几天里,我必须开始编写一些报告生成函数。我需要 write 调用是原子的,并让我知道存储时是否出现故障。

appengine 上的一项实验性功能允许将 blobstore 用作文件系统。 (https://developers.google.com/appengine/docs/java/blobstore/overview)。

我有以下问题:

1) 使用如图所示的文件服务api,是否有任何额外费用?唯一受到影响的配额是 Blobstore 中的数据量吗?

2) 数据实际上是在什么时候写入的?我在这个例子中使用 out.close()?

3) 在写通道上使用 closeFinally() 后,可以重新打开并追加数据吗? (不,答案在Create CSV file and save to Blobstore

4) 如果写通道打开了,你还能读到数据吗?需要敲定吗?

5) 写操作是原子的吗?即,在写入写入通道时,是否有可能发生故障并最终丢失数据?

6) 当写入通道未最终确定时,这些数据存储在哪里?

7) 如果未最终确定,写入通道中的数据是否会过期?

【问题讨论】:

    标签: java google-app-engine blobstore


    【解决方案1】:
    1. 每天的写入(或数据写入)量是有限制的,它是无证的 AFAIK,但相当高。没有额外的变化。
    2. 文件在 closeFinally 时传输到 blobstore。
    3. blobstore 是不可变的。您不能附加 blob。
    4. 您只能从已完成的 blob 中读取。
    5. 是的,如果您不最终确定文件,它将完全丢失。
    6. 在实例 AFAICT 的内存中。
    7. 是的,见 #5

    【讨论】:

    • 非常感谢!在文档中它提到您可以关闭写入​​通道,重新打开它并继续写入,即使跨请求也是如此。由于多个请求不会发送到同一个实例,你知道这也是如何处理的吗?
    • 在最终确定之前我真的没有说它将 blob 保存在哪里,我注意到编写非常大的 blob 会炸毁我的实例内存(但也许它与它自己的数据有关)所以我认为实例内存是他们保存它的地方。但话又说回来,也许他们将数据保存在所有实例都可以访问的其他地方。
    • 酷。关于#5,文件系统文档声明它是可能的。您可以使用序列键来防止这种情况发生。尽管如果您使用多个实例来生成报告的不同部分并且它们都写入同一个位置,这将很难实现。 developers.google.com/appengine/docs/java/javadoc/com/google/…
    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多