2009年12月7日のブックマーク (40件)

  • CAPとBASEとEventually Consistent

    Windows Mobileアプリ開発のHowTo Windows MobileのOSと各OS毎のエディションの特徴と、それらに伴う使用するSDKの違いを説明させて頂き、Hello Worldを表示するだけの簡単なアプリの作り方をお話させて頂きました。 コンピュータやセンサの小型化が進み、生活の中へと多くのシステムが導入され、人々を支えています。システムでは、センサから人々の行動に関するデータが取得され、コンピュータがそのデータを分析しています。実習では、マイコン(M5Stack)とセンサ(加速度、ジャイロなど)を用いて、「センシング→行動認識」の流れを体験してもらいます。どのような行動をどのような手法(機械学習など)により認識するかについてアイデアを出すところから始めていただき、実装するまでをチャレンジしていただきます。オンライン参加の場合、マイコンとして、M5Stack Grayを郵

    CAPとBASEとEventually Consistent
    tdtsh
    tdtsh 2009/12/07
  • BrewersCapTheorem - ブリュワーの CAP 定理

    BrewersCapTheorem - ブリュワーの CAP 定理 目次 この文書について ブリュワーの CAP 定理 - Amazon と eBay のクールエイド ブリュワーの(CAP)定理 一貫性 (Consistency) 可用性 (Availability) 分割耐性(Partition Tolerance) 定理の重要性 図解で証明 CAP と折り合う 1. 分割耐性を諦める 2. 可用性を諦める 3. 一貫性を諦める 4. BASE に跳ぶ 5. 問題をかわして設計する まとめ 参考文献 ブリュワーの CAP 定理 この文書について "Brewer's CAP Theorem - The kool aid Amazon and Ebay have been drinking" の日語訳です. http://www.julianbrowne.com/article/view

    tdtsh
    tdtsh 2009/12/07
  • 宿便を出す方法!相性の良いサプリメントを紹介!

    モリモリスリムはほうじ茶で水分摂取ができて、腸の活動をよくする成分 キャンドルブッシュが入っています。 黒モリモリスリムはプーアール茶で水分摂取ができて、腸の活動をよくする成分キャンドルブッシュが入っています。 ※モリモリスリム・黒モリモリスリム380円のお試しセットは公式サイトでのみ購入できます。 楽天やアマゾンは取り扱っていません。 薬局など市販もされていません。 >>モリモリスリムの口コミレビューはこちら イサゴールは水に溶かして飲むので水分摂取ができて、腸の活動をよくする成分サイリウム(物繊維)が入っています。 イサゴールは特定保健用品(通称トクホ)で消費者庁にも登録がされています。

    tdtsh
    tdtsh 2009/12/07
  • appengine java night #1

    1. The document discusses the low-level API in Google App Engine for Java. It explains how the low-level API allows direct access to services like Datastore without higher-level frameworks. 2. Key concepts covered include the Datastore service, entities, keys, queries, transactions. It provides code examples for storing and retrieving entities using the low-level API. 3. Alternative high-level API

    appengine java night #1
    tdtsh
    tdtsh 2009/12/07
  • Appengine Java Night #2a

    1) The document discusses Google App Engine's Java data store services including the low-level API which allows direct access to entities, keys, and queries. 2) It covers the DatastoreService which allows storing and retrieving entities and keys, managing transactions, and allocating ids. 3) The document also discusses how to perform queries on the data store using Query and PreparedQuery includin

    Appengine Java Night #2a
    tdtsh
    tdtsh 2009/12/07
  • Appengine Java Night #2 LT

    The document discusses using Protocol Buffers over HTTP for making synchronous API calls from an App Engine application to a backend service. It describes how ApiProxy and Delegate classes are used to make calls via Protocol Buffers, with the Delegate making a sync call via an HTTP POST and returning the response bytes. This allows App Engine applications to use low-level APIs via Protocol Buffers

    Appengine Java Night #2 LT
    tdtsh
    tdtsh 2009/12/07
  • Revision 17 - Tools for Google App Engine/Java - OSDN

    Servletへのアクセスをsecurity-constraintする事を想定し、Client側にAppEngine用のGoogle Account Authentication APIで認証する機能を追加した。

    Revision 17 - Tools for Google App Engine/Java - OSDN
    tdtsh
    tdtsh 2009/12/07
  • Sign in - Google Accounts

    tdtsh
    tdtsh 2009/12/07
  • Sign in - Google Accounts

    tdtsh
    tdtsh 2009/12/07
  • #appengine でスキーマ変更に対応するバッチ処理を行う

    2009/11/05追記ひがさんより指摘を頂いて、30秒制限に関する補足を文中に青字で追記しました。いつもありがとうございます、助かります>ひがさん ここから文 タイトルの処理について、いくつかノウハウを書いておきます。ポイントは以下の2点。 全てのエンティティにスキーマバージョンを保持する ローカル環境からデプロイ環境へ直結してバッチ処理を実行する事で、30秒制限なんて無視してしまう 実例をもとに説明してみます。最近、appengine java night用のまとめページとかに使おうとしているサイトを運営していて、そこに「TwitterでAppEngine関連についてつぶやかれた内容を収集する」という機能を実装しました。しかし、つぶやきを保存する際の投稿者の情報として「Name」を保持しているものの「ScreenName」を保持しておらず、投稿者のタイムラインページへのリンクを作成

    tdtsh
    tdtsh 2009/12/07
  • #appengine java night #3( #ajn3 )に参加した

    今回の編では、TaskQueueをメインテーマにして開催されました。 @bluerabbit777jpさん:実際に作ってわかったApp Engineの困ったところ資料:http://www.slideshare.net/bluerabbit777jp/appengine-java-night-3 大量のメール送信を行うために、「Datastoreにメールをキューしておき、TQでメールを拾う→送信→Datastoreに送信完了フラグを書き込む」というパターン。これは最後の「送信完了フラグの書き込み」のフェーズに失敗する状況だとメールが多重送信されてしまう事がありうる。 fmfm、確かにそうだなぁ。こういったエラーをよしとするポイントが必要になるという事ですね。もちろん、アプリケーションの特性のよってそこへかけるコストと妥協できるボーダーは変わってくるわけですが、完璧を求めることは難しいです

    tdtsh
    tdtsh 2009/12/07
  • 404 shin1のつぶやき ないわー Not Found

    最近ようやくcoffeescriptにもLESSにも慣れてきました。で、そろそろgruntを活用しようかなと先月くらいから使ってみてますが便利です。 *.less →(コンパイル)→ style.css →(圧縮)→ style.min.css *.coffee →(コンパイル)→ *.js →(連結)→ app.js →(圧縮)→ app.min.js *-test.coffee →(コンパイル)→ *-test.js →(連結)→ tests.js app.min.js, tests.jsを読み込んでqunitでテスト index.htmlではapp.min.jsとstyle.min.cssを読み込む こんなかんじの事を簡単にできます。テストもcoffeescriptで書けて良いです。 現在リリースされている grunt v0.3.9 では coffee, less, sqwishに対

    tdtsh
    tdtsh 2009/12/07
  • appengine java night #3

    Aplicaciones de drones en el Perú, experiencias de la PUCP

    appengine java night #3
    tdtsh
    tdtsh 2009/12/07
    GAE 実際に作ってわかった、GAEのこまったことろ
  • appengine4java-scaleout

    MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue

    appengine4java-scaleout
    tdtsh
    tdtsh 2009/12/07
    GAE スケールアウトの真実
  • はてなブログ | 無料ブログを作成しよう

    週報 2024/04/28 川はただ流れている 4/20(土) 初期値依存性 さいきん土曜日は寝てばかり。平日で何か消耗しているらしい。やったことと言えば庭いじりと読書くらい。 ベランダの大改造をした。 サンドイッチ 一年前に引っ越してからこんな配置だったのだけど、さいきん鉢を増やしたら洗濯担当大臣の氏…

    はてなブログ | 無料ブログを作成しよう
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 #ajn3資料

    皆さん、お疲れ様でした~。あっという間に23時半になっていた。いやあ、楽しかったですね。以下に資料を置いておきます。 「ぶいてく流 スケーラブルアプリの作り方」 ご意見、感想をお待ちしております。 <驚いたこと3つ> ・ tx処理でも必ずしもルートエンティティが存在する必要はない。つまり、タイムスタンプはエンティティ単位ではなくキーの単位で管理されている ・ 負荷をかけてあっためることでTaskQueueはスケールしそう ・ runqueryをasyncに実行できること <まとめ> ・ ハッシュタグの検索結果一覧をまとめてみた ・ appengine java night #3に行ってきた。 #appengine #ajn3 (雨の日サービスに早速登録しますた) ・ #appengine java night #3( #ajn3 )に参加した ・ 最近読んだ論文 ・ 恵比寿で働く社長のアメ

    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 分散トランザクションを非同期に実行する

    トランザクションは意識しないのが一番 歴史は繰り返すんだろうか。トランザクションに関しては、こんな感じで話がループしている気がしている。 1) トランザクション宣言を明示的にコードに記述(ホスト、ODBC/JDBC) 2) 生産性が低くなり新しいフレームワークが出現(EJB、Seasar2) 3) 新しいイノベーション誕生(cloud)、トランザクションを明示的に宣言、以下繰り返し トランザクションについては、2年前にも一度述べたことがある。実装が難しく不具合になりやすいので、生産性、品質を上げるには、開発者にトランザクションを意識させないことが一番である、といった感じのことを書いたつもりであった。 【EC開発体験記-トランザクション処理-】古くて新しい永遠のテーマ GAEにおいても方法論は異なるとは思うが、開発者にトランザクション処理を意識させたくないという私のスタンスは今でも変わってい

    【Google App Engine】 分散トランザクションを非同期に実行する
    tdtsh
    tdtsh 2009/12/07
  • 【クラウドコンピューティング】 エンタープライズシステムのクラウド移行について

    世界的な不況が続く中、競争力のある強い体質の企業になるためには、大幅なコスト削減が必要である。とりわけ、ITシステムへのコスト削減圧力は大きく、これに対応するためには、アーキテクチャー見直しや内製化などを含め、抜的な改善していかなければならない。 Privateクラウドは、ITシステムのコスト削減の一手段として考えることができ、こういった課題に対応できる可能性をもつと考えられる。 今回は、Privateクラウドをテーマに思うところを述べてみたい。 Privateクラウドはクラウドではない? 11/22の日経新聞にクラウドの特集があった。 そこには、クラウドの定義ははっきりしないが、「ネットの向こう側にあるソフトなどのIT資産を使う」という概念が基となると書いてあった。また、誤解に関して以下のような感じで書かれてあった。 クラウドがブームになり、最近は関連する一部技術を入れ込んだだけのサ

    【クラウドコンピューティング】 エンタープライズシステムのクラウド移行について
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 頑張って全文検索

    TaskQueueを使った全文検索 非同期処理、並列処理はPDF生成に限った話ではない。これを応用して全文検索も考えることができる。例えば、下図のように、データを分割して複数のTaskで並行処理することで、検索にかかる時間を短縮することができる。これまで説明してきたように、Datastoreでは、前方一致検索はできるが全文検索はできない。もしこれで全文検索が可能になるのであれば嬉しいことである。Indexを使わずに全件検索するなんて無謀のように思えるかもしれない。でもこれこそがクラウドの醍醐味なのだ。 実装は下図のような感じになる。商品マスタ※検索では、商品名、基説明、詳細説明を全件検索して、部分的にでもヒットしたら結果を返すようにした。(※ 今ECを作っているので、このBlogでは唐突に商品マスタなどの単語が現れる) 検索項目 商品名 基説明 詳細説明 URLパラメータ fullte

    【Google App Engine】 頑張って全文検索
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 TaskQueueのスケーラビリティを阻害している原因について

    Request was aborted after waiting too long が出る理由 前記事の実行結果を見てもらえばわかるとおり、"Request was aborted after waiting too long・・"というエラーのせいで、処理が中断されてリトライが頻発しているものが多くある。これがTaskQueueのスケーラビリティを阻害しているのは間違いない。これは、queryの実行時間が10秒を超えると出るようである。(PDF生成処理Taskでは10秒を超えるものがあるのでtaskの経過時間というよりqueryの実行時間によるのだと思う。たぶん) 別にquotaを上回るような処理を流したつもりはないのになぜ出るのか。 この現象については、ココでも質問されているが、Googleからの返事はまだない。 total queue execution rateの定義 Taskの

    【Google App Engine】 TaskQueueのスケーラビリティを阻害している原因について
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 TaskQueueはスケールしない!?3

    TaskQueueを使ってPDFを生成する 先の記事で疎結合、バージョニング、非同期がスケーラブルにするための要素だと述べた。私たちが提供するReflex iTextサービスでは、PDF生成サービス(図中 pdfservice)やデータサービスなどは、独立したサービスとして立てられる。独立したサービスは(カッコつけていえば)サービスコンポーネントとして考えることができる。サービスコンポーネントは、ServiceとReferenceの2つの口をもち、いわゆる芋ずる式に(疎)結合できる。そして、TaskQueueを利用することで、それらを非同期かつ並列に実行することができる。これを、ぶいてく流サービスコンポーネントアーキテクチャーと呼んでいる。 例えば、請求書アプリでは、 http://invoice.latest.reflexcontainer.appspot.com/invoice?inv

    【Google App Engine】 TaskQueueはスケールしない!?3
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 疎結合とバージョニングについて

    ぶいてく流スケーラブル設計3大要素 私たちがスケーラブルなアプリを作る際に重要だと考えている要素は、疎結合、バージョニング、非同期の3つである。 今回は、疎結合、特にバージョニングについて詳しく述べる。非同期(TaskQueue)は次回の予定。 疎結合 GAEといったスケーラブルなプラットフォームを利用することで、単純なWebアプリでもスケーラビリティを得られるわけだが、さらにそれをRESTfulなWebサービスにすることで、より柔軟なスケーラビリティを享受できる。マッシュアップアプリがいい例で、ワンソース・マルチビューを実現できる。それは、この記事や、実装例で示してきたとおりである。これらはReflexやReflexGaeフレームワークにより、EntityからJSONやXML等に変換することで実現している。 バージョニング この記事の最後の一文は、なんのこっちゃ!?と思った方も多いと思う

    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 TaskQueueはスケールしない!?2

    GAEのスケーラビリティ、特にTaskQueueについては、いろいろ調査してわかってきたので、このあたりで報告したいと思う。GAE Night#3で話すネタと若干かぶるかもしれないが、全部は時間の関係で話せないと思うので、あらかじめこのBlogに晒しておくことにする。もちろん、被らないネタもある。(今回はさわりだけで、次回以降に詳細を書く。複数回に分けて書くつもり) GAEのスケーラビリティについて 「リニアにスケールするように作れる」からこそのGoogle App Engineより抜粋 その中でも一番収穫として大きいのは、「Google App Engineを使えば、リニアにスケールするサービスを作ることが可能」だということが実感できたこと。(中略)・・・ ユーザーの数が100万人から1000万人に増えた時には、単にマシンの台数を10倍にすれば良いという話ではなく、それに応じてデータベー

    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 レコードのシーケンス番号をカウンタを使わずにつける

    カウンタとレコードのシーケンス番号 レコードにシーケンス番号(連番)をつけると、全体の件数を取得できたり、Pagingできたりするので、いろいろと好都合である。Pagingだけであれば、わざわざシーケンス番号を付ける必要はないが、大量のレコードを分割してTaskQueueで並列処理させたい場合には、シーケンス番号で範囲指定を行うとよい。(全体の件数はStatics APIでも取得できる) シーケンス番号を付けるには、カウンタを管理するEntityを用意して、挿入のたびにインクリメントする方法が一般的だと思うが、これだと前記事で述べたように、カウンタのEntityとデータのEntityをEntityGroupとして括ってしまうことが大きなボトルネックとなってしまう。しかし、トランザクションで括らないと挿入に失敗することがあるため歯抜けのシーケンス番号となってしまう。 そこで、カウンタのEnt

    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 Keyとカウンタは別々に考えるといいかも

    この記事書いているあいだにこんなニュースを見つけた。これはすごいや。 100万PV/日のmixiモバイルアプリをGoogle App Engineで実装した@gclue_akira氏に直撃インタビュー さて、題 不可能と思い込んでいたことができることもある 何度かイタい目に遭うことで、またどうせ出来ないだろうと思い込んでしまうことを学習性無力感という。長期間にわたって鎖に繋がれたままの犬は、鎖を外してもしばらくは逃げないそうである。GAEはもともと情報が少ないのと、嵌りどころ満載なこともあって、学習性無力感に陥ることがしばしばある。だから、一人悶々とやるより、Blogに晒したり、GAE Nightなどの集まりに出向くなどして、情報共有に努めるのがよろしいかと思う。そこで重要なのは、ありのままの事実を晒すということ。現時点で正しい答えを識っているものは皆無に等しいのだから、誰かに正しい答え

    【Google App Engine】 Keyとカウンタは別々に考えるといいかも
    tdtsh
    tdtsh 2009/12/07
  • 【雑記】 そろそろMVCモデルについて一言いっておくか

    なーんて、MVCを語れるほどの知識はないのだが、琴線に触れてしまったので、私なりに言いたいことを言うことにする。 当は、こんな話より先に、先日参加したGAE Nightの話や、Winnyの金子さんが無罪になった話を書きたいのだけど、ココとか、ココとか、ココとか、ココとか、毎日毎日毎日毎日、MVCを語られると、何かいいたくて、もう我慢できなくなってしまった。(これはエンジニアの性なのか!?) 中島さんのBlogのなかで最も釣られてしまうキーワードは「えせ」。これを使うということは、自分の考えだけが正しくて、他は間違いであるということを暗にいっているようなもの。多くの人はそれに反応してしまうから、感情論になって、あまりよい結論は見い出せなくなってしまっているんじゃなかろうか。中島さんの言っていることは概ね理解できるし、RESTfulな設計などは私の考えと被る部分もあって、ほぼ同意できるのだが

    【雑記】 そろそろMVCモデルについて一言いっておくか
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 TaskQueueはスケールしない!?

    TaskQueueによって、何がどう改善されるかについて、Reflex iTextを使って具体的に調べてみたので報告したい。特に、パフォーマンスについて、先日の記事(ココ)と比較しながら説明する。 やりたいことは単純で、大量のPDFをいかに短時間で生成するかである。前回のテストでは、クライアントから大量のリクエストを投げることでこれを実現しようとしたが、リトライ処理が多発してスケールしなかった。では、TaskQueueを使うとどうなるのだろうか。今回はそこにポイントを絞って調べてみた。 TaskQueue概要 まず、TaskQueueであるが、これはWebHook型のキューシステムで、Task自体を通常のServletとして書くことができる。Googleのサンプルを見ればわかるように、QueueFactory.getDefaultQueue().add()を使って、URLとRequestP

    【Google App Engine】 TaskQueueはスケールしない!?
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 Low level APIで前方一致検索およびPagingについて

    JDOが全然使えないことが明らかになるにつれ、最近ではLow level APIを使う方も多くなってきた。Low level APIは、シンプルで扱いやすく、パフォーマンスにも問題ないことがうけて支持されているのだろう。しかし、機能的には全然足りないので、自分たちで何とか解決しなければならない課題も多い。前方一致検索もその一つである。 Low level APIで前方一致かつPagingが難しい件 前方一致検索は、JDOではcontent.startsWithを使えばできるようであるが、Low level APIでも、検索項目をソートすることで一応できることはできる。しかしPagingについては、2Page目以降を特定する方法が必要ななため、できないと思っていた。 例えば、下図のように、”コーヒー”で前方一致検索した場合に、同じ商品名の”コーヒー010”が複数存在する可能性があるため、次ペ

    【Google App Engine】 Low level APIで前方一致検索およびPagingについて
    tdtsh
    tdtsh 2009/12/07
  • 【雑記】 補償トランザクションの悪夢

    数年前、補償トランザクションを駆使したシステムを構築したのだが、うまくいかずに酷い目にあった経験がある。以下の、Aさん宛てに書いたメール内容を読んでもらえれば想像つくと思うが、これは当に酷いものだった。私はこのとき、補償トランザクションは絶対やるべきではないと心に誓ったのだった。たぶん、スーパーなプログラマーであれば、こんな酷いことにはならないのだろう。でも、普通のプログラマーであれば、十中八九、同様の結果を招くのではないかと感じている。名誉のためにいっておくと、Aさんはかなり優秀なスーパープログラマーの部類に入ると思う。来、補償トランザクションは、とても難しいものなのだが、Aさんだから大丈夫かなと安心もしていた。ソースレベルでは完璧なロジックに見えて、テストにおいても問題ないような結果が出るのが補償トランザクションの罠。そこまで示されて、「何をそんなに心配されるのか」といわれると否定

    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 大量のPDFを生成してわかったGAEの真の実力

    クラウドPDFサービスのパフォーマンス測定について 先日公開したScalable PDFのパフォーマンステストと同様に、クラウドPDFサービス(GAEのReflex iTextサービス)についてもパフォーマンステストを行ったので公開したいと思う。 クラウドPDFサービスは、AmazonEC2のかわりにGAEを使っており、負荷分散機能はGAEまかせとなるが、Reflex iTextのサービスを使っている点はScalable PDFサービスと同じである。ただ、GAEの場合は実行時間など、いろいろな制約があり、リクエストが失敗する前提で設計しなければならないといった考慮が必要となる。今回のテストにおいては、エラー時に時間間隔を置いてリトライする仕組みを取り入れている。 結果としては、以下のように、GAEでも約8千ページを4~5分で処理できたということで、まずまずであったのだが、これがいっぱいいっ

    【Google App Engine】 大量のPDFを生成してわかったGAEの真の実力
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 datastore.Entityにおけるプロパティ変換について

    tdtsh
    tdtsh 2009/12/07
  • 【Reflex iText】 Publicクラウドはサブスクリプションモデルがいい

    publicクラウドのビジネスモデルは「XX放題」 Reflex iTextは、先日、月額3000円で利用できるサービスとして発表させてもらった。Reflex iText Morph AppSpaceやGoogle App Engineなどのクラウドサービスにデプロイして使用する場合は、1インスタンスにつき1ライセンス料が発生します。1ライセンスはトランザクションの量に関係なく固定で月額¥3,000となります。warファイルの提供はありません。基的に弊社にて導入支援を行います。サービスレベルはMorph AppSpaceやGoogle App Engineに依存します。また、利用料は別途お客様負担となります。 Reflex iTextがこのような定額の利用料を徴収するサブスクリプションモデルとしたのは次のような理由による。 7/23に開催された、アカマイ・カスタマ・カンファレンスの「ビジ

    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 Entityとトランザクション3

    Scaleするかどうか、それが問題だで主張したとおり、クラウドではスケールしなければ意味がない。以下は、GAEで大規模な処理をやって、特にトランザクション処理で悪戦苦闘した際のメモである。日の発表資料=>ココにも含まれている。 大量データをINSERTできない件について 先日、Entityとトランザクション2において、Ownedな関連を使ったUpdateサンプルを紹介したわけだが、実はこれ、大量データをINSERTすると急激に遅くなるという問題を含んでいることがわかった。実際にテストしてみたところ、15000件を超えた時点でタイムアウトが頻発、15300件からはとうとう1件も登録できなくなってしまった。 com.google.apphosting.runtime.HardDeadlineExceededError: This request (c1fe232d20adabba) star

    【Google App Engine】 Entityとトランザクション3
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 Entityとトランザクション2

    今回は親子関係をもったEntityのUpdateを中心に解説する。例によって、請求書アプリを題材にしている。ソースは=>ココで、使用しているReflexGaeライブラリは=>ココ 親子関係をもつEntityのUpdate 請求書アプリでは、請求書1枚がEntity1インスタンスとなるように設計されている。1つの請求書(Invoice)が複数の明細レコード(Order)をもち、さらには、Invoiceを親であるInvoiceBaseがListとして複数保持している。また、InvoiceBaseはInvoiceのレコード数、および、Orderのレコード数も保持している。このような関係をownedというが、このような構造をしているのは、EntityGroupとして定義しているからで、1トランザクションで実行する必要があるからである。 これらを更新するには、下図のように、まず、クライアントから受け

    【Google App Engine】 Entityとトランザクション2
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 Entityとトランザクション

    Entity設計について GAEではEntityというモデルを定義してJDOを使ってデータを永続化する。Entityはオブジェクトモデルであり画面など実際の業務アプリケーションや外部インターフェースなどを直感的に表現できるという点で優れている。しかし、階層型ということもあり、リレーショナルなモデルとはあまり馴染まない。もしかしたら、これまでRDB的な設計を中心にやってこられた方にとっては苦痛さえ感じるかもしれない。Entityをうまく設計するためには、ひとまずRDB的な頭をリセットしてオブジェクト的な発想をすることをおすすめする。一度慣れてしまうと誰でも簡単にサクサク作れるようになるだろう。逆に、RDBの呪縛から開放されOOに覚醒してしまうともう後には戻れないので注意が必要である。RDBって不要じゃん?とか、これからの時代はOOでKey/Valueだ!などと思うようになれば覚醒した証拠だ。

    【Google App Engine】 Entityとトランザクション
    tdtsh
    tdtsh 2009/12/07
  • 【Google App Engine】 Pagingをどうやって実現するか

    JDOをそのまま使うとPagingができないことは前記事で述べたとおりだが、DatastoreAPIを使えば可能なので、今回はその方法について述べたいと思う。前記事と同様、請求書アプリを元に説明する。 KeyとCounter まず、基となるEntityのInvoiceBaseとInvoiceの構造から。 InvoiceBaseは、Invoiceレコードを保持するする親のEntityだ。InvoiceBase(親)に紐づくInvoice(子)は1:nのOwnedな関連である。また、Invoiceレコードの件数を格納するcounterプロパティをもつ。InvoiceのKeyは、トランザクションで括る必要があってKeyを連結させているが、拙作ライブラリReflex GAEのAPI、keyUtils.getChildKey()を使って、連結されたInvoiceのKeyを取得している。(Refle

    tdtsh
    tdtsh 2009/12/07
  • ぶいてく

    「知らなかった、を聞く」カンファレンス Builderscon 2017 で発表してきました。 お題は、「フロントエンドエンジニアが主役のBaaSを作った話」です。 まずはじめに、聞きに来ていただいた方、質問をしてくれた方、twitterで呟いてくれた方に御礼申し上げます。大変嬉しゅうございました。 Togetter 資料は、ここに上げています。 感想 当日はどんな内容をしゃべろうかいろいろ考えたのですが、聴衆受けするような流行りの話ではなく、むしろそれを否定し、独自の考え方と経緯などをすべてをさらけ出してみようと思って臨みました。 結果は案の定、玉砕に近い感じになりました。 でも、それでよかったと思っています。いや、逆によくこのテーマで人が集まったものだと驚いているくらいです。辛抱して最後まで聞いていただき感謝しております。 私達は何年もかけて、reflexworks/vte.cxという

    tdtsh
    tdtsh 2009/12/07
    GAE
  • Google App Engineで開発するスケールするアプリケーション(前編)

    はじめに 「人類が使うすべての情報を集め整理する」 この壮大なミッションを掲げ設立されたGoogleは、そのミッションを遂行するべく、マシン・ネットワークなどのインフラ環境に莫大な金額を投資し、独自の技術を開発し続けています。Googleは検索エンジンだけにとどまらず、Gmail、Google Calendar、Google Maps、Google Analystics、Youtube、Google Apps、Google Earthなど、いまや全世界のユーザーが使用するサービスをリリースしており、その扱うデータ量、アクセス数は天文学的な数になることが予想されます。Googleはそれらのデータ量、アクセス数を高速にさばき、なおかつ耐障害性の高いスケーラブルな大規模分散システムを構築しています。 そんな中、2008年4月にGoogle App Engineがリリースされました。Google

    Google App Engineで開発するスケールするアプリケーション(前編)
    tdtsh
    tdtsh 2009/12/07
  • Google App Engineで開発するスケールするアプリケーション一覧

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    Google App Engineで開発するスケールするアプリケーション一覧
    tdtsh
    tdtsh 2009/12/07
  • http://www.hikariauto.co.jp/shop/index.html

    tdtsh
    tdtsh 2009/12/07