【问题标题】:How to handle admin only GAE-Datastore updates如何处理仅限管理员的 GAE 数据存储更新
【发布时间】:2013-07-19 12:31:08
【问题描述】:

我创建了我的第一个 App Engine 项目。我正在使用云端点和数据存储为移动应用程序提供后端。用户将只使用现有内容,他们无法更改数据存储内容。

所以数据存储区的内容将由我专门管理。我有不到 10 种实体,大约 5000 个对象。这些对象大约需要每月进行两次部分更新。

为了在我这边生成这些对象,我使用了一些本地 sqlite 数据库,并且我还汇总了一些来自网络的信息。

我的问题是进行这些数据存储更新的最佳方式是什么?我的第一个想法是使用端点进行插入/更新操作,并确保它们只能由我访问。然后,每月两次,我会使用我的“管理员客户端”来生成新内容,并使用安全的 Web 服务来更新数据存储内容。

但我想知道是否有更合适的方法。尤其是在效率和数据一致性方面。如果用户在更新过程中询问内容会发生什么,他将获得部分最新的内容。

也许我可以使用另一个我不知道的 API?或者只是在应用引擎端使用某种脚本?

编辑

我的一个Entity 很少有EmbeddedEntities。这对我来说不是强制性的,但我认为这样检索它们会更便宜,而且我不需要从其他地方访问它们。

但是对于这个模型,我找不到如何使用 bulkloader 上传我的数据,也找不到 RemoteApi。在这两种情况下,embeddedEntities 都没有填充:对于DataViewer 中嵌入实体的每个字段,我都有<missing>,并且在我的端点中没有返回任何内容。如果我使用我的插入端点,它就可以工作。此外,需要明确的是,尽管嵌入了实体,但一切正常。

我的模型

@Entity
public class MyEntity {

    @Id
    private Long id;
    private String name;
    private MyEmbeddedEntity embeddedEntity;
    ...
    @Embedded
    public MyEmbeddedEntity getEmbeddedEntity() {
        return embeddedEntity;
    }
}

RemoteApi

EmbeddedEntity embeddedEntity = new EmbeddedEntity();
embeddedEntity.setProperty("name", "testEmbedded");

Entity entity = new Entity("MyEntity", 1L);
entity.setProperty("name", "test");
entity.setProperty("embeddedEntity", embeddedEntity);

...

datastore.put(entity);

批量加载器

我已经使用 create_bulkloader_config 生成了 yaml 配置。我设置了 simplexml 连接器,其中 xpath_to_nodes=/list/MyEntities 对应于我的 xml 的结构。

我用@Embedded 注解尝试了不同的方法。我也尝试过使用不同的实体键。如果我使用我的端点插入一个实体,并使用批量加载器和相同的 yaml 配置导入数据,我生成的 xml 不包含嵌入的实体(而它们在 DataViewer 中可见)。

【问题讨论】:

  • 你考虑过使用remote_api吗?

标签: google-app-engine google-cloud-datastore backend google-cloud-endpoints


【解决方案1】:

您可以使用 bulkuploader,或编写自己的上传器版本(在 app.yaml 中使用“login: admin”来保护处理程序)。

您可以使用事务(如果您的数据模型允许)来避免更新过程中出现问题,或者您可以在上传过程中使用临时属性,例如“ready: true|false”。

【讨论】:

  • 我添加了更多关于我尝试使用 remote_api 和 bulkloader 的信息。对于您编写我自己的上传器版本的想法,您的意思是拥有一个只有我可以访问的自定义 servlet?我将如何从我的计算机访问此 servlet 并进行身份验证?我的要求之一是能够从我的计算机上对数据存储进行这些更新,而无需编写太多代码。我喜欢 remote_api 的想法,因为我可以从一个简单的纯 java 项目中做到这一点。 bulkloader 是一个可以运行的脚本,所以也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 2015-03-05
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多