こっちは本物のMapReduceだ! グーグルがAppEngine-MapReduceをオープンソースで開発中 グーグルはGoogle App Engine上でMapReduce処理を実現するオープンソースを開発中だと、先日行われたイベントGoogle I/Oで明らかにしています。プロジェクトのホームページもGoogle Code上に「appengine-mapreduce - Project Hosting on Google Code」として公開されています。 Reduce処理やJava版はこれから 1つ前の記事「グーグルによるMapReduceサービス「BigQuery」が登場。SQLライクな命令で大規模データ操作」では、グーグルがSQLライクな命令を用いて大規模データ処理のサービスを提供することをお伝えしました。 記事でも書いたとおり、これは内部でMapReduceを使っているかど
理由は解りませんが、残念ながらデプロイ環境では動作しないようです。 Google APP Engineでは、従来のシステムのRDBMSに相当する(実際はKVSですが)データストアをデータの保存、検索に使用します。 このデータストアにはいくつかの制限があるのですが、その中でも大きいのが範囲検索です。イコールで無いクエリは、一つのプロパティ(RDBMSにおけるカラム)に対してしかかけられません。 しかし、緯度経度や時刻のようにとりうる値の上限と下限がわかっている場合においては、複数のプロパティにまたがる範囲検索が可能です。 方法 まず対象となるプロパティの値について以下の正規化を施します。 数値は文字列に変換し、桁をそろえる。 とりうる最小の値が負の数の場合は、その絶対値を足してとりうる最小の値が0になるように 例えば緯度ならばとりうる最小の値は-90度なので90を足す。 小数点以下の桁数は一
There is a caching reverse proxy in front of Google Appengine that can decrease both the cost and response time of your application. Now, I read a lot of articles about Appengine, but I only discovered this last week by accident. Here's how you use it: set the "Cache-Control" header in your HTTP response to "public; max-age=300;". That will instruct the "Google Frontend" to cache the response for
App Engineではどの言語を使えばいいのか - yvsu pron. yasで書いたとおり、App Engineで使う言語は、素のSDKで比べるとPythonの方がJavaより断然出来がいい。 ただ、仕事で使う場合は、素のSDKで開発することはなく、何らかのフレームワークを使うことが普通です。App Engineに特化したKay frameworkやSlim3のレベルで比べるとそんなに違いはありません。 これは、単純なリクエストの処理だと、Javaの方が10倍速いが、実際に行われている処理で比べるとそんなに違いはないのと似ています。 私は、Javaを使っているので、Javaへの評価が良くなりすぎないように、意識的にJavaのデメリットを強調し、Pythonのメリットを強調していますが、実際の仕事で使うレベルにおいては、差はほとんどないということです。 んんーーーー。 たまには本音を書
昨日一昨日、Google App Engine (GAE)に関する日本最大の勉強会(だと思う)appengine ja night #7 (ajn7)が行われました。 その中で『ランキング問題』が話題に上がりました。『ランキング問題』とは、何十万件もの点数のデータがあるときに、App Engine上で、「◯点は何位です」と高速に求めることは難しい、という問題です。(◯ページ目を表示、というページングもこれと同じ種類の問題になります。) ajn7では「上位でない限り正確な順位は必要ないのではないか」という話になりましたが、Skiplistを用いた検索アルゴリズムを使えば正確かつ高速に順位を求めることができるのではないかと思い、実装&検証してみました。 ランキング(順位取得)のデモ 下記ページで順位取得のデモを動かしています。スコア(点数)を入力すると順位と取得にかかった時間が表示されます(時
グーグルは「Google App Engine Blog」にて、データストアに2つの新機能、Eventual Consistency(結果整合性)とDatastore Deadline(データストアデッドライン)を追加したことを明らかにしました。これにより開発者は、データの一貫性と可用性のどちらを重視するのか、選べるようになりました。 プライマリが落ちていたらコピーを他のデータストアから取得 Google App Engine Blog: Read Consistency & Deadlines: More control of your Datastore Eventual Consistency(結果整合性)オプションは、プライマリのデータストア以外のデータストアにコピーされたデータを読み込むことを許すオプションです。 グーグルの解説によると、これまでのGoogle App Engin
News, notes, tips and tricks from the Google App Engine Team Since App Engine debuted 2 years ago, we’ve written extensively about best practices for writing scalable apps on App Engine. We make writing scalable apps as easy as possible, but even so, getting everything right can be a challenge - and when you don’t, it can be tough to figure out what’s going wrong, or what’s slowing your app down.
News, notes, tips and tricks from the Google App Engine Team Today we are excited to announce the release of version 1.3.2 of the App Engine SDK for both the Java and Python runtimes. 1.3.2 includes a number of changes and bug fixes. For this release, we have concentrated on removing a number of limitations that have been affecting developers: Blobstore API - A new method (fetch_data for Python, f
App Engineで使える言語は基本的にはPythonとJavaです。それでは、どちらを選ぶのが良いのでしょうか。 それ以外の言語の人向けの話は後から出てくるのでしばらくこのままお読みください。 趣味ならば単に好きなものを選ぶだけでいいのですが、仕事で使うためには、長所と短所をきちんと把握した上で選ぶ必要があります。また、ここでの話は言語としての一般的な話ではなくApp Engineで使うとき限定の話としてお読みください。 まず安定度ですが、インフラ部分の安定度は、どちらも基本的に同じです。もしかすると、まったく同じものを使っているのかもしれません。 その上で動くAPIの部分は、インフラと直接結びついている低レベルな部分と低レベルなAPIの上に構築された高レベルな部分とに分けて考える必要があります。 低レベルなAPIはLLAPIと呼ばれたりしますが、安定度は、PythonとJavaも同じ
先日セッションデータを消したかったのは、Datastore使用量が1GBを超えて一日0.01$の課金がかかってたからなのです。日曜日くらいに無事消えました。 Google App Engine/Javaでセッション情報を定期的に消す処理 130万件を消す処理に5日以上かかった計算に。もちろん、もう少しちゃんと組めばもっと早く終わると思うのですが、それはつまり、130万件を消去する処理を書くには単純なコードでは無理ということです。※急いでなかったので30分に13回程度の処理しか行ったためで、ちゃんと処理をすると3時間かからないくらいにはなりそうです。(23:08追記) まあ、日数がかかるのはいいとして。 セッション情報がたまってるときのエンティティサイズはこのように360MB程度になっていました。 ただ、このときデータストア使用量は1GBを超えて、0.01$の課金がかかっています。 これが、
Google App EngineにはTransactionは1つのEntity Group内でしかできないという制限があります。詳しくは、App EngineのEntityGroupを理解しよう - yvsu pron. yasを参照してください。 そうするとある口座から別の口座にお金を振込むような送金のパターンで、Transactionを利用することができません(すべての口座を1Entity Groupに押し込むと更新がぶつかって現実的ではないから)。送金パターンで整合性を保つためには、理論的には次のようになります。 http://songofcloud.gluegent.com/2009/11/blog-post_18.html 実装するとこんな感じ。 http://blog.notdot.net/2009/9/Distributed-Transactions-on-App-Engi
本稿の前編では、Webシステムをスケールさせるための一般的な手法や考え方、そしてGoogle App Engineの概要と特徴について説明しました。中編となる本稿ではミニブログサービスのTwitterとGoogle App Engineを連携させるレコメンドアプリケーションの設計について説明し、後編では実装編として実際のソースコードに基づき説明します。 はじめに Google App EngineはGoogleのインフラを使用し、開発したアプリケーションをインターネットで公開できるサービスです。Google App Engineの特徴はアクセスや負荷に応じてシステムが自動にスケールする仕組みと、Google独自のスケーラブルなデータベースであるBigtableを使用できることです。BigtableはKey-Value方式のデータベースで、ペタバイト級のデータを扱うことができます。そのような
送金のトランザクション処理パターンでは、Google App Engine (GAE)のEntity Groupにまたがるトランザクション処理を行う方法について紹介しました。また、それに少しだけ最適化を施した結果、下図のような処理になりました。 しかし、このトランザクション処理はいくつかの制約があります。 (a) 送金中に合計金額がずれる (b) 送金先の口座に制約をかけられない このトランザクションはEventual Consistency (結果整合性)というレベルの整合性保証しかしないため、2つのEntity Groupの値にずれが発生する場合があります(a)。たとえば、口座(A)から口座(B)に1000円だけ送金する場合、(1)と(2)の間は「口座(A)から出金したが、口座(B)に入金されていない」という状態になります。 また、送金元の口座に制約はかけられますが、送金先の口座に制約
ちょうどAppEngineでXMPPやメール受信を試していて何に使えるかな?とネタを探していたところ、彼女を作ってる人が居たので僕も彼女を作ってみました。 僕の彼女はこんなのです。 XMPPで話しかけるとズレた返信を返してくれる。 メールにも答えてくれる。 彼女の詳細は以降で説明します。 XMPP彼女 現時点でAppEngineの日本語ドキュメントにはXMPPの記述が無いのですが、英語に切り替えるとServiceメニューの下にXMPPが登場します。使い方は結構簡単で以下のポイントを押さえればすぐに使えました。 まずXMPPメッセージの受信を行うには app.yaml に以下のような設定を追加してやります。これにより /_ah/xmpp/message/chat/ でXMPP受信用のハンドラを割り当てできるようになります。 inbound_services: - xmpp_message 後
こんにちは。typesterの陰謀によりVimmerはモテないというデマが流れておりますが、残念ながらそれがデマだということを身をもって証明できないでいるVimmerの外村です。 先日、お悩み相談の記事がホットエントリーに入ったら彼女ができるという噂が立ち、何を間違えたかホットエントリーに入ってしまったのでどうしようかと思ったのですが、プログラマたるもの問題があればプログラムで解決すべきだろうと考えました。 というわけで彼女を作ってみました。どういうものかというと、 僕だけに定期的につぶやく 僕のリプライだけに反応してリプライを返してくれる まさに僕だけのボット彼女です。今回はこれをGoogleAppEngine+JRubyで実装したので、環境をつくるところか実際に動かすところまで説明します。 1. 環境をつくる まずはGoogleAppEngineのアカウントがないと始まらないので以下か
(随時更新中です。間違いなどありましたらコメントをお願いします!) このページのtinyurl: http://tinyurl.com/gaetips Datastoreのtips Bigtableの内部構造 BigtableによるDatastoreの実装 Datastoreによるクエリの実装 トランザクションとエンティティグループ Datastoreのtips List Proprtyとmerge joinの使い方 GAE一般のtips GAEのサーバー構成とリクエストの流れ Task Queue APIの使い方 開発環境とプロダクション環境の違い Flex/AIR+GAEのtips GAE/JにBlazeDSを組み込む BlazeDSの本番環境へのデプロイでハマる Datastore APIの取り扱いでハマる App Engine開発の便利な参考ページ TOPGATEさんのGoogle
Google App Engine(GAE)の可能性はJavaをサポートしたことによってその可能性を飛躍的に向上させた。JavaVM上で実装された言語であれば何でも動作する。JRubyもその一つで、Ruby on RailsもGoogle App Engine上で動作する。 GAEのパワーを素早くゲットする とは言えやはりマイノリティだけに色々な準備が必要とされていた。そのため敬遠していた人も多いだろうが、Rails on GAEによって大きく舵を切ることになりそうだ。 今回紹介するオープンソース・ソフトウェアはRails on GAE、GAEでRuby on Railsを動かすためのプラグインだ。 Rails on GAEはRuby on RailsをGAEで動作させるために必要なタスクを予めインストールすることで、後は順番に従って進めるだけでJRuby on Railsができるようにな
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く