スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

Datastoreの更新スピードのナゾ

現在、既存DB(全テーブル合計で100万レコードくらい)をDatastoreにインポートする作業を進めています。現状ではバルクアップロードの機能がサポートされていないので、アップロード用の簡単なツールを作って、100件ずつサーバに投げて25秒過ぎた時点で中断する仕組みにしています。

このアップロード作業で不可解な現象が起きています。エンティティの追加処理のスピードが、当初は0.15s/1件くらいだったのに、数時間も続けていると段々遅くなってきて1.2s/1件くらいになってしまいます。

(CPU時間グラフ。スループットに比例しています。谷部分はアップロード作業を手動で中断した時間です)

最初は、インデックスやエンティティグループの設計が原因かと疑いました(といっても、まだ全然クエリは使ってないし、マルチプロパティインデックスも作成していません)。数10万件規模になると、インデックスの更新処理が重たくなるのかな〜と。1件の更新に1.2sもかかってしまっては、使い物になりません。

しかし上記グラフにあるように、突然スループットが元に戻ったりするのです。。ということは設計に依存するものではなさそうです。同じクライアントから大量に更新処理を投げると帯域制限がかかるのかな? ナゾなので、MLで聞いてみようと思います。

8/6追記

今日のグラフ。数時間前からまたスループットが復活して、現在は結構速いです。

8/11追記

GoogleのJeffさん、調べてくれるといって音沙汰なし。。アップロード作業は問題なく終了しましたが、今後は1.2sなんてスピードにならないことを祈るのみ。

http://groups.google.com/group/google-appengine-java/browse_thread/thread/a2879fe567fb8881#