4000 個のオブジェクトをすべて更新しようとしてProfileEntity
いますが、次の例外が発生します。
javax.persistence.QueryTimeoutException: The datastore operation timed out, or the data was temporarily unavailable.
これは私のコードです:
public synchronized static void setX4all()
{
em = EMF.get().createEntityManager();
Query query = em.createQuery("SELECT p FROM ProfileEntity p");
List<ProfileEntity> usersList = query.getResultList();
int a,b,x;
for (ProfileEntity profileEntity : usersList)
{
a = profileEntity.getA();
b = profileEntity.getB();
x = func(a,b);
profileEntity.setX(x);
em.getTransaction().begin();
em.persist(profileEntity);
em.getTransaction().commit();
}
em.close();
}
からすべてのレコードを照会するには時間がかかりすぎると思いますProfileEntity
。どうすればいいですか?
- 私は Google App Engine を使用しているため、UPDATE クエリは実行できません。
編集 18/10
この 2 日間で私は試しました:
Thanos Makris が提案したようにバックエンドを使用しましたが、行き止まりになりました。ここで私の質問を見ることができます。
Map-Reduce で DataNucleus の提案を読んでいますが、本当に迷子になりました。
私は別の方向を探しています。この更新は 1 回だけなので、200 オブジェクトごとに手動で更新できるかもしれません。
最初の 200 個のオブジェクトを照会し、その後 2 番目の 200 個のオブジェクトなどを照会することは可能ですか?