tips
(随時更新) グローバルなタイムスタンプ 「System#currentTimeMillis()の値」と「memcacheに記録した前回の値+1」と比較して大きい方を返す こういう部分で分散システムを意識しなきゃならない(しないとハマる)のがApp Engineの罠 ライトバックキャッシ…
ぶいてくさんのエントリ:【Google App Engine】 Entityとトランザクション3 先日、Entityとトランザクション2において、Ownedな関連を使ったUpdateサンプルを紹介したわけだが、実はこれ、大量データをINSERTすると急激に遅くなるという問題を含んでいる…
bluerabbitさんのエントリ:google app engineではマスタの取り込みが辛い しかも、マスタが正しく取り込まれたかを検証するのがまた困難で件数チェックだけでも1000件の制約にかかったりするわけです。そこで前のエントリーの 1000件以上取得する方法とかご…
shin1ogawaさんのわかりやすGAE/Jまとめ: http://www.slideshare.net/shin1ogawa/gaejava
これは大変ありがたいまとめ! JDOだと1000件以上取得できるとは知らなかった。。http://shin1o.blogspot.com/2009/08/appengine-1000.html http://shin1o.blogspot.com/2009/08/appengine-1000_15.html * Low-level APIのPreparedQueryだと1000件の上限があ…
例えばDatastore APIで多数のエンティティに読み書きしていると、数100回〜数1000回に1回くらい?(すごくおおざっぱな印象)の割合で延々とブロックされて、 com.google.appengine.api.datastore.DatastoreTimeoutException: Unknownが出たり、もしくは30秒…
http://code.google.com/intl/en/appengine/docs/java/mail/overview.html For security purposes, the sender address of a message must be the email address of an administrator for the application, or the Google Account email address of the curr…
http://code.google.com/p/asynctools/ asynctools is a library allowing you to execute Google App Engine API calls in parallel. API calls can be mixed together and queued up and then all are kicked off in parallel. Callbacks can be used to o…
以前のエントリに、ひがさんからご丁寧なコメントをいただいて、もったいないので新しいエントリにさせていただきました。 AMFでの通信なら、persistentなうちにクライアントが触る可能性のある関連は触っておくのが一番無難な気がします。 この辺は、EJB3(E…
大きめのコンポジットインデックスを作ろうとしたら、管理コンソールのインデックス状態が「Error」となってしまいました。大きめといっても、2M件くらいなので“爆発”状態ではないのですが。。MLで問い合わせしてみました。http://groups.google.com/group/g…
は、ここが参考になりそうです(試してない)。http://www.datanucleus.org/products/accessplatform_1_1/jdo/fetchgroup.html
ローカルの開発環境とクラウドの本番環境では、Datastoreのパフォーマンスがずいぶん違います。ローカルのDatastoreはいわばエミュレーターなので、本番環境のDatastoreのもっさり感(とくに更新処理)をちゃんと再現してくれません。まして、先のエントリで…
ローカルの開発環境ではDatastoreに保存したデータがlocal_db.binというファイルに格納されます。SDK 1.2.2からはこの内容がWebブラウザから閲覧できるようになって便利になりました。しかしやはりあくまでデバッグ用ということで簡素な作りになっているよう…
現在、既存DB(全テーブル合計で100万レコードくらい)をDatastoreにインポートする作業を進めています。現状ではバルクアップロードの機能がサポートされていないので、アップロード用の簡単なツールを作って、100件ずつサーバに投げて25秒過ぎた時点で中断…
はありません、とMLで教えてもらいました。http://groups.google.com/group/google-appengine-java/browse_thread/thread/35ede3e4a299a2e6/bb64cb6dd3e6c913#bb64cb6dd3e6c913 As long as your query consists entirely of equality filters and does not h…
MLで聞いたら教えてもらえました。ありがたや。。http://groups.google.com/group/google-appengine-java/browse_thread/thread/e6bfcbfafd4f6e1e You can try using ApiProxy: import com.google.apphosting.api.ApiProxy; ... String version = ApiProxy.g…
App EngineでXPathを使うときはXalanが必要でした。以下のまとめを参考にしたところ動きました。http://jx-script.blogspot.com/2009/05/gaejxml.html http://groups.google.com/group/google-appengine-java/browse_thread/thread/dda1848382d3da8/ee9b0761…
SDKを1.2.2にアップデートしたところ、Datastoreを使う単体テストが通らなくなってしまいました(NoSuchMethodExceptionが出る)。一瞬はまりましたが、原因は、単体テスト用にEclipseのビルドパスで「外部JAR」として参照していたSDKの各種JARファイルが1.2…
Datastoreのエンティティでは、String型のフィールドに500文字バイト以上の文字列を保存することができません。代わりに「com.google.appengine.api.datastore.Text」型を使います(この型のフィールドにはインデックスを張れません)。しかし、いま作ってい…
Datastoreの鬼門である集計関数の代わりのカウンター等を実装するとき、sharded counterより高速なものを求めると、「とりあえずmemcacheに書き込んで、cron/TQでDatastoreに非同期に保存する」ような仕組みがほしくなります。カウンターに限らず、「ライト…
Datastoreでトランザクション管理をするには、 try { tx.begin(); <更新処理> pm.makePersistent(members); tx.commit(); } finally { if (tx.isActive()) { tx.rollback(); } }といったコードを書きます。これを毎回書くのが面倒なので、AOPやテンプレー…
Bigtableの概要 Bigtableとは 構造化データを管理するための分散化ストレージ 膨大な数の汎用サーバーをつなげてペタバイト規模のデータを扱えるよう設計されている Bigtableの歴史 およそ7人年の開発作業を経て、2005年4月からプロダクション利用を開始 200…
<Google App Engine Stackの構成(引用元)> GAE Stackの特徴 現在の利用状況 8万以上のアプリを収容 140M PV/day 20万人以上の開発者が利用 統合環境を提供 サーバーの構築や管理が不要。デプロイが容易 ログ管理、管理コンソールや各種ツールを提供 スケ…
(随時更新中です。間違いなどありましたらコメントをお願いします!)このページのtinyurl: http://tinyurl.com/gaetips Datastoreのtips Bigtableの内部構造 BigtableによるDatastoreの実装 Datastoreによるクエリの実装 トランザクションとエンティティグ…
クエリ=インデックス+スキャン すべてのクエリは「インデックス+スキャン」に変換される Bigtableはクエリをサポートしていない。GAEのアプリが実行するすべてのクエリは、インデックスとスキャンの組み合わせに変換される Datastoreのインデックスとは …
Bigtableにできること Bigtableは「ソート済みのExcel表」のようなデータ構造 個々のセルは過去の履歴を残せる 巨大なkey-value store。個々の行の「キー」があれば「値」を高速に取得できる キーの辞書順でソートされている スキーマレス(各行ごとにカラム…
Datastoreのトランザクション エンティティグループ単位でACIDを保証 Bigtableは行単位のACIDしか保証しない。Datastoreではエンティティグループ単位でのACIDを保証している 楽観的排他制御(optimistic lock)を実装 エンティティグループのrootエンティテ…
Datastoreのパフォーマンス Datastoreのパフォーマンスは、エンティティの数とは無関係 保存されているエンティティが1件でも、1000件でも、1000万件でも、パフォーマンスに変化はない Datastore performance doesn't depend on how many entities you have …
開発環境のDatastore 開発環境ではトランザクションはサポートされない ロールバックしても値は元に戻らない http://groups.google.com/group/google-appengine-java/browse_thread/thread/815312d5d152a5c5