groupIds,updatedのインデックス定義不足

38 views
Skip to first unread message

aquilegia

unread,
Jun 22, 2010, 11:38:51 PM6/22/10
to OpenSocial Pages
なかじまんさん

こんにちは、aquilegiaです。

GAEにOpenSocial Pageをデプロイ後、ページを追加して
osapi.newBatch()
.add('activities', osapi.activities.get({userId: '@owner', groupId:
"@ramen"}))
.execute(/*省略*/);
を実行したところ、「インデックスが必要だよ」という下記エラーログが出力されました。
====================
(省略)
javax.servlet.ServletContext log: [DEBUG] Fails to invoke method.
com.google.appengine.api.datastore.DatastoreNeedIndexException: The
index for this query is not ready to serve. See the Datastore Indexes
page in the Admin Console.. <datastore-index
kind="ActivityEntity" ancestor="false" source="manual">
<property name="groupIds" direction="asc"/>
<property name="updated" direction="desc"/>
</datastore-index>


at
com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:
40)
at
com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:
67)
at
(省略)
====================

エラーログを参考(※)に「/(プロジェクト名)/war/WEB-INF/datastore-indexes.xml」へ
インデックス定義を追加したところ、エラーを回避できました。
(※:source属性をautoへ変更)
====================
<datastore-index kind="ActivityEntity" ancestor="false" source="auto">
<property name="groupIds" direction="asc"/>
<property name="updated" direction="desc"/>
</datastore-index>
====================

groupIdsとupdatedの組み合わせは頻繁に使う条件に思われるので
問題なければ上記インデックス定義を標準として追加して頂けないでしょうか。

以上、宜しくお願い致します。

nakajiman

unread,
Jun 23, 2010, 6:04:50 AM6/23/10
to OpenSocial Pages
連絡ありがとうございます。

インデックスに追記します(抜けていました)。

アクティビティを最新のものから取得するため updated の降順としたいだ
けなのですが、データストアは desc だと、インデックスが別途必要とな
り、それに引きずられて、組み合わせパターンのインデックスが発生して
しまっています。

updated の降順であることは絶対条件ではないので、インデックスを増やさ
ずにソートできる方法があればいいんですが...

aquilegia

unread,
Jun 30, 2010, 8:31:57 AM6/30/10
to OpenSocial Pages
対応ありがとうございます!

インデックスを増やさずにソートする方法については
最初に総数を取って末尾のn件を取れって降順にメモリソートすれば
インデックスを増やさずに済みそうですが分かりずらいので今の方法が良いと思います。

nakajiman

unread,
Jul 2, 2010, 12:10:36 AM7/2/10
to OpenSocial Pages
ソートの他にも updateSince パラメータによる指定した日時移行というフィルタがあります。
といったことも考慮すると、あまり凝ったことをせず、Date 型のインデックスのままが無難
というのが妥当そうですという結論です。
Reply all
Reply to author
Forward
0 new messages