2

私は次のことをしたい:

PreparedQuery pq = datastore.prepare(q);
int count = pq.countEntities(FetchOptions.ALL);

ただし、すべてのオプションはありません。では、どうすればいいですか?

コンテキストとして、テーブル内のオレンジ色のすべてのエントリをカウントしたいとします。

を使用して直接これを行うことができない場合、 Datanucleus の JPADatastoreServiceを使用できますか? 彼らは appengine データストアをサポートしていますか?SELECT COUNT(*) ...

4

4 に答える 4

2

マークされた答えは正しくありません。1000 で最大になります

これは、正しいカウントを取得する方法です

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
 Query query = new Query("__Stat_Kind__");
 Query.Filter eqf = new Query.FilterPredicate("kind_name",
                            Query.FilterOperator.EQUAL,
                            "MY_ENTITY_KIND");
query.setFilter(eqf);
Entity entityStat = ds.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");
于 2016-03-23T15:49:27.480 に答える
1

これは古いですが、抜け道を探している新しい開発者に役立つはずです。

これを行う最善の方法は、シャーディング カウンター テクニックを使用することです。時間の経過とともにスケーリングすることがわかっているエンティティを節約し、シャーディング カウンターを使用して、レコードが挿入されるか、エンティティ グループが新しいレコードによって更新されるときに、レコードの総数を取得します。これにより、カウンターの合計数とそれに対応するカウントを取得できます。これを合計すると、データストア テーブルまたは種類の合計要素の実際のカウントが得られます。

方法については、このリンクを使用してください。理解を深めるために、Google i/o 2008 on scaling web applications hereをご覧ください。その後、appengine のドキュメントに移動してすぐに理解できるようにします。また、 github サンプル テストもあります。

追加の例については、簡単な例を説明したこのリンクのブログ チュートリアルを使用してください。

于 2016-11-03T11:10:49.560 に答える