2011-06-27 7 views
0

私はGoogleのアプリケーションエンジンのドキュメントを読んできましたが、実際に話していることを把握するのは非常に簡単ではありません。私は新しいアプリケーションをコーディングし始め、すでにHigh Replication Datastoreの例に従っています。グループに複数のエンティティを保存し、それらを照会して、それらを私のJSPページに表示できるようにする。私の質問は、単一の値を保存し、必要に応じて後で更新する方法です。基本的には、私が今までに与えた最大のIDを保存する必要があります。次に、グループに新しいエンティティを追加する必要がある場合、この単一の最大ID値を読み取り、1だけインクリメントしてインクリメントされた値を元に戻すだけです。最後に、IDとして新しいエンティティにインクリメントされた値を割り当てる必要があります。App Engine Datastore - Javaで単一の値を保存して更新する方法

私は、JavaサーブレットとJSPでコーディングしていることに言及する必要があります。だから、Pythonコードは私にとっては役に立たない。私の既存のコードは以下の通りです。 "long ID = getNewID();"という行は、この増分値を私に与え、増分した値をデータストアに戻すことになっています。私はgetNewID()メソッドをコーディングするための助けに感謝します。

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 

    Key doctorTableKey = KeyFactory.createKey("doctorTable", "doctorTableName"); 
    Entity doctor = new Entity("doctorEntity", doctorTableKey); 

    long ID = getNewID(); 
    String ID = getNewID(datastore, doctor); 
    if(ID != -1){ 
     String name = req.getParameter("name"); 
     String lastname = req.getParameter("lastname"); 

     doktor.setProperty("ID", ID); 
     doktor.setProperty("name", name); 
     doktor.setProperty("lastname", lastname); 
     doktor.setProperty("city", req.getParameter("city")); 

     datastore.put(doctor); 
     resp.sendRedirect("/doctorAdd.jsp?name=" + name + " " + lastname); 
    }else{ 
     resp.sendRedirect("/doctorAdd.jsp?name=ERROR!!!!"); 
    } 

答えて

2

独自のIDをカウンタで設定しないでください。 AppEngineのデータストアは、エンティティに最初に挿入されたときにエンティティにIDを自動的に割り当てます。カウンターを使用する際の問題は、これがすべてのインサートが触れる必要がある中心点であることです。 App Engineは、同じエンティティグループへの高頻度書き込みへのスケーリングのために設計されていません(異なるエンティティグループは問題ありません)。実際、エンティティグループごとに、平均して1秒あたり約1回の書き込みを推奨します。

つまり、固定カウンタはパフォーマンスを低下させます。他の理由がない場合は、appエンジンのデフォルトID割り当てシステムを使用してください。 App EngineのIDはシーケンシャルIDではないため、シーケンシャルではありません。

+0

私はドキュメントまたは(code.google.comページ以外の)簡単なサンプルコードを教えてもらえますか? – newwebdev

+0

このIDは別のエンティティグループで使用します。元のエンティティグループでは、私は医者についての情報を持っています。第2のエンティティグループでは、医者が行った操作を行います。したがって、第2のエンティティグループのIDは、第1のエンティティグループの医師を指し示す。これは、それをデータストア内のリレーショナルデータベースにすることのようなものです。これは良いデザインですか? – newwebdev

+0

@newwebdev、有限の固定セットのエンティティグループを持つべきではありません。これにより、パフォーマンスが低下します。エンティティグループの作成は非常に安価な操作です。たとえば、すべての医師をエンティティグループのルートにし、医師が実行するすべての操作を同じエンティティグループに含めることができます。次に、このエンティティgroup_の内部に逐次カウンタを持つことができます。だから、あなたは、医師Xのために手術#13をすることができます。しかし、すべての医者のための単一のグローバルカウンターを持つことは悪い考えです。 – bdonlan

関連する問題