初めての 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 では表示されます)。