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

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

2009-08-01から1ヶ月間の記事一覧

SQL脳からBigtable脳へ

GAE

ひがさんのブログ:SQL脳からBigtable脳へ Google App Engineを使って一番悩むのは、RDBMSが使えなくなって、Bigtableを使わなければならなくなったことでしょう。 「これまでSQLでこう書いていたのが、Bigtableではそのまま実現できない、どうすればいいん…

Datastore Low level APIのわかりやすいまとめ

#appengine JavaのLow-Level API(低レベルAPI)入門shin1ogawaさんの大変ありがたいまとめ! 英訳してGoogleのApp Engineドキュメントに掲載してほしいくらいですね。 個人的な思いとしては、GAE/JのDatastoreについてJDOから入るのは間違いの元だと思ってる…

Datastoreで実装したファイルシステム「GaeVFS 」

http://code.google.com/p/gaevfs/ GaeVFS is an Apache Commons VFS plug-in that implements a distributed, writeable virtual file system for Google App Engine (GAE) for Java. GaeVFS is implemented using the GAE datastore and memcache APIs. Th…

App Engineは「ACID保証しない」ではなく「ACID保証したくなくなる」

App Engine未体験の方の中には、「App Engineはトランザクションをサポートしていない」ような印象を持っている方もいるかもしれませんが、そんなことはありません。App Engineのドキュメントに The App Engine datastore is strongly consistent, but it's …

cronでお手軽に並列バッチ処理

あるカインドのエンティティを全部削除したい等のバッチ処理は、1つのcronジョブでちまちまやっていると時間がかかります(1回25秒で2〜300件くらい)。そんなときは同じURLで複数のcronジョブを並列で走らせれば早いです。並列実行できる処理に限りますが。…

App Engine開発でまず用意したくなるものリスト

(随時更新) グローバルなタイムスタンプ 「System#currentTimeMillis()の値」と「memcacheに記録した前回の値+1」と比較して大きい方を返す こういう部分で分散システムを意識しなきゃならない(しないとハマる)のがApp Engineの罠 ライトバックキャッシ…

owned関連がスケールしないみたい

ぶいてくさんのエントリ:【Google App Engine】 Entityとトランザクション3 先日、Entityとトランザクション2において、Ownedな関連を使ったUpdateサンプルを紹介したわけだが、実はこれ、大量データをINSERTすると急激に遅くなるという問題を含んでいる…

データのインポートやバッチ処理がとても面倒

bluerabbitさんのエントリ:google app engineではマスタの取り込みが辛い しかも、マスタが正しく取り込まれたかを検証するのがまた困難で件数チェックだけでも1000件の制約にかかったりするわけです。そこで前のエントリーの 1000件以上取得する方法とかご…

shin1ogawaさんのわかりやすGAE/Jまとめ

shin1ogawaさんのわかりやすGAE/Jまとめ: http://www.slideshare.net/shin1ogawa/gaejava

1000件以上のクエリ結果件数の取得

これは大変ありがたいまとめ! 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やMemcacheのAPIコールは、ときどき固まる

例えばDatastore APIで多数のエンティティに読み書きしていると、数100回〜数1000回に1回くらい?(すごくおおざっぱな印象)の割合で延々とブロックされて、 com.google.appengine.api.datastore.DatastoreTimeoutException: Unknownが出たり、もしくは30秒…

Mail APIではFromアドレスが制限される

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…

クエリやURLフェッチを並列実行するasynctools

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…

いつのまにかチケット駆動開発してた

チケット駆動開発のFAQ http://forza.cocolog-nifty.com/blog/2009/08/faq-611b.htmlチケット駆動開発って何だろう。。と思って読んだら、ここ数年の私の開発方法とよく似てた。私はこんな感じ: タスク(=チケット)管理ツールとしてJiraを使う 発注元の方…

App EngineでOpen Session In View

以前のエントリに、ひがさんからご丁寧なコメントをいただいて、もったいないので新しいエントリにさせていただきました。 AMFでの通信なら、persistentなうちにクライアントが触る可能性のある関連は触っておくのが一番無難な気がします。 この辺は、EJB3(E…

大きなコンポジットインデックスは自作した方が早いかも

大きめのコンポジットインデックスを作ろうとしたら、管理コンソールのインデックス状態が「Error」となってしまいました。大きめといっても、2M件くらいなので“爆発”状態ではないのですが。。MLで問い合わせしてみました。http://groups.google.com/group/g…

JDOでのeagar loadingの指定方法

は、ここが参考になりそうです(試してない)。http://www.datanucleus.org/products/accessplatform_1_1/jdo/fetchgroup.html

Desinger×Engineer勉強会#2のお知らせ

Be Proudさん主催の勉強会「Desinger×Engineer勉強会#2」にて発表します。http://atnd.org/events/1313・タイトル:「Adobe AIR×Google App Engineの移行tips」 ・内容:Adobe AIR+RoRで構築された既存サービスをGoogle App Engineに移行 した際の苦労話を…

プロファイリングツールがほしい

ローカルの開発環境とクラウドの本番環境では、Datastoreのパフォーマンスがずいぶん違います。ローカルのDatastoreはいわばエミュレーターなので、本番環境のDatastoreのもっさり感(とくに更新処理)をちゃんと再現してくれません。まして、先のエントリで…

ローカルのDatastoreは壊れやすい

ローカルの開発環境ではDatastoreに保存したデータがlocal_db.binというファイルに格納されます。SDK 1.2.2からはこの内容がWebブラウザから閲覧できるようになって便利になりました。しかしやはりあくまでデバッグ用ということで簡素な作りになっているよう…

Datastoreの更新スピードのナゾ

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