0

初めての App Engine プロジェクトを作成しました。クラウド エンドポイントとデータストアを使用して、モバイル アプリのバックエンドを提供しています。ユーザーは既存のコンテンツのみを使用し、データストアのコンテンツを変更する方法はありません。

したがって、データストアの内容は私が独占的に管理します。エンティティは 10 種類未満、オブジェクトは約 5000 あります。これらのオブジェクトは、月に約 2 回、部分的な更新が必要になります。

私の側でこれらのオブジェクトを生成するために、いくつかのローカル sqlite データベースを使用し、Web からいくつかの情報も収集します。

私の質問は、これらのデータストアの更新を行う最善の方法は何ですか? 私が最初に考えたのは、挿入/更新操作にエンドポイントを使用し、私だけがアクセスできるように保護することでした。次に、月に 2 回、「管理クライアント」を使用して新しいものを生成し、安全な Web サービスを使用してデータストアのコンテンツを更新します。

しかし、これにはもっと適切な方法があるのではないかと思います。特に効率性とデータの一貫性に関しては。更新プロセス中にユーザーがコンテンツを要求した場合、部分的に最新のものが表示されます。

たぶん、私が知らない別の API を使用できますか? それとも、単にアプリ エンジン側である種のスクリプトを使用しますか?

編集

私の 1 つEntityはほとんどありませんEmbeddedEntities。私にとっては必須ではありませんが、その方法でそれらを取得する方が安価であり、他の場所からそれらにアクセスする必要はないと考えました。

しかし、このモデルでは、バルクローダーを使用してデータをアップロードする方法も、RemoteApi も見つかりません。どちらの場合も、embeddedEntities は埋められません: に<missing>埋め込まれたエンティティのすべてのフィールドがありDataViewer、エンドポイントには何も返されません。挿入エンドポイントを使用すると機能します。また、明確にするために、エンティティが埋め込まれているにもかかわらず、すべてが機能します。

私のモデル

@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 構成を生成しました。xml の構造に対応する xpath_to_nodes=/list/MyEntities を使用して、simplexml コネクタを設定します。

@Embedded アノテーションを使用してさまざまなアプローチを試しました。また、さまざまなエンティティ キーを試しました。エンドポイントでエンティティを挿入し、bulkloader と同じ yaml 構成でデータをインポートすると、生成された xml には埋め込みエンティティが含まれません (DataViewer では表示されます)。

4

1 に答える 1

1

bulkuploader を使用するか、独自のバージョンのアップローダを作成できます (ハンドラを保護する app.yaml で「login: admin」を使用します)。

トランザクションを使用して (データ モデルで許可されている場合)、更新プロセス中の問題を回避できます。または、アップロード プロセス中に「ready: true|false」などの一時的なプロパティを使用できます。

于 2013-07-19T12:47:38.573 に答える