タグ

datastoreに関するdotredのブックマーク (17)

  • JavaScriptでクリーンアーキテクチャはどうすればいいのか(DataStore編)

    DataStoreとは? DBやExternal InterfacesへのGateway(の様子) DBやExternal interfacesとはつまり、データの入手先・保存先のこと Gateway? どういうことだってばよ? gateway.q(from:"勤務実績")と唱えるだけで、必要な結果が得られる 勤務実績がどのDBにあってもよい DBMS、WebSite、ファイル、、、全てOK! データへのアクセス手段をドライバとして提供する必要がありますな 複数のデータソースを一個に 役割名はGateway(入出力どちらもあるから) DBの足りない値を補完(表示順序値とか)できる RDBのview張るようなもん? COMPANY.tables = { "勤務実績": "labor_cost", "所属部門": "departmentList", "従業員": "users" } COMPA

    JavaScriptでクリーンアーキテクチャはどうすればいいのか(DataStore編)
  • Go の型は First-class ではない

    Go の型は First-class ではない、ということにゴールデンウィーク最終日に気づき、悶々としています。(何も Go が悪いわけではない) ことの発端は、以下の様な関数を定義したところから始まります。 func getName(x interface{}) string { return reflect.TypeOf(x).Elem().Name() } この関数に、任意の型のポインタをわたすと、型の名前を取得できます。けど、ポインタを渡さなければならないのですね。 var foo *Foo name := getName(foo) foo は使わないのに! 使わないというのはウソですね。けど、ちょっと違うんですよ。まあこれは私がPython 脳だからであって、別にGoが悪いわけじゃない。 何をしたいかと言うとですね、Google App Engine datastore のクエリ

  • Google App Engine / Python 上での開発で最初から知ってればよかった、ってことをいくつか - Masatomo Nakano Blog

    ここ数ヶ月、Google App Engine/Pythonを使い、初めてちょっとしたものを作ってみているのだけど、開発初期から知っておけばよかったなー、と思うノウハウ/tips的なものをずらずらと書いてみる。 基的な環境設定は、 以前書いた まま。 0. 公式ドキュメントを良く読む 言うまでもなく、だけど、 マニュアル はもちろん、 この辺 の下の読み物も、流し読みだけでもしておいたほうがいい。 datastoreとmodel的なところ 1. key nameを使いこなす key nameは、レコードの作成時に指定できる(RDBでいう)primary keyの別名みたいなもの。primary key自体は自動的で作成されるので開発者が指定できるのはkey nameだけ。 key nameをうまく使うことで、datastoreを使いやすくすることができる。特にdatastore上で"un

  • Google App Engine ~ データストアまとめ | R-Labs

    こんばんは。システム部の佐々木です。 前回分でGAE/J データストアについて投稿が終了したので今回はまとめです。 前回までの投稿はこちら。 Google App Engine ~ データストアAPIで簡単CRUD Google App Engine ~ エンティティグループとトランザクション Google App Engine ~ クエリとその制限 Google App Engine ~ インデックスの仕組み また、ブログ中には記載はなかったのですが、データストアには他にも制限があります。 (制限に関する内容ばかりで申し訳ないのですが、、、^^;) 1.1回のクエリで取得できるエンティティ数は1000件まで。 http://code.google.com/intl/en/appengine/docs/java/datastore/overview.html 2.ストレージサイズ、

  • GAE/Python - DataStoreの使い方をまとめてみた

    DataStoreとは 記事内のDataStoreは、GoogleAppEngineのデータストアのことを指す。GoogleAppEngineは、ファイルの書き込みが一切できないため、DataStoreを使う以外にデータを永続化する方法はない。短期であればmemcachedに保存することもできるが、memcachedに保存されたデータは保存期間が保証されないため、一時データをキャッシュして高速化(or 負荷軽減)以外には実質つかえない。 DataStoreの特徴 DataStoreの特徴は、スケーラブルであること。データ数が1万件でも1億件でもほぼ同じ時間で結果が返ってくる(らしい)。ただし、通常のRDBでは簡単にできる操作がDataStoreでは非常に重い処理だったり、不可能だったりするので注意。 苦手な処理 件数のカウント ⇒件数のカウントは、データ全体を取ってくる処理に近いだけの処

  • 図解 インデックス爆発 - 後ろ回しゲロ

    Google App EngineのDatastoreにはインデックス爆発という現象があります。 こちらで公式に説明されているのですが、 http://code.google.com/intl/ja/appengine/docs/java/datastore/queriesandindexes.html#Big_Entities_and_Exploding_Indexes 自分にとってはすごく分かりにくく、理解するのにとても苦労しましたので、自分なりにメモを残しておきます。 まず2,3の前提を。 基的な事ですが用語が統一されてなくて惑わされましたw 複合インデックス=カスタムインデックス=コンポジットインデックス です。 またGoogle App Engine for Javaでは WEB-INF/appengine-generated/datastore-indexes-auto.xm

    図解 インデックス爆発 - 後ろ回しゲロ
  • App Engineで動く並列処理フレームワーク ElShard - GeekFactory

    App Engineで大量のデータを並列処理するフレームワーク ElShard を作っています。batch addとdeleteのサンプルができたので、とりあえずまとめてみます。 ElShardは、入力リストを分割して処理して集約する考え方に基づいています。並列処理はApp EngineのTaskQueueで実現しています。タスク間では10kBのペイロードしかやり取りできないため、データをやり取りする用途には適していません。そのため、実際のデータはDatastoreに格納しておき、キーをタスク間でやり取りすることになります。 現段階では集約をどうやって実現するか未定ですが、キーでソートされるというDatastoreの性質をうまく利用できる気がします。Matcher APIが使えるといいなぁ。 リストを処理する ElShardでは、InputとTaskの2種類のタスクを組み合わせてジョブネッ

    App Engineで動く並列処理フレームワーク ElShard - GeekFactory
  • Google App Engineでの検索パターン - 市中弾き語りの刑

    id:higayasuo さんにTwitter上でいろいろ教わったので、メモ。 検索条件が複雑な場合 業務アプリなどでよく見かける、複雑(不特定)な条件で、かつ、特定の並び順でデータを抽出するような場合のパターンです。 例えば、 データを抽出する条件が 「場所」「日時」「部署」「担当者」...と複数あったとして、 それぞれの項目が、 ユーザーによって指定されたり、されなかったりした場合、ソートがあるために、 入力、未入力の組み合わせの数だけ複合インデックスが必要ですが、 (Datastoreではフィルターとソートのプロパティが異なると複合インデックスが必要です。) これを全て静的に(事前に)定義するのは非現実的です。 で、id:higayasuo さんのアドバイス adhokなqueryはeq filterだけqueryで実行してnot_eqやsortはin-memoryでやるのが最も簡単

    Google App Engineでの検索パターン - 市中弾き語りの刑
  • GAE/Pyでbulkloaderを使ってデータをアップロードする - すぎゃーんメモ

    bulkloaderとは remote_apiを使ってコンソールからDatastoreにデータをアップロードするためのツール。 初期データとして大量のデータをDatastoreに突っ込んでおきたいときなどに便利。 逆にDatastoreにある内容をダウンロードすることもできる。削除をするようには作られていない? 今のところPython版のみ。Java版もそのうち出る? http://code.google.com/intl/ja/appengine/docs/python/tools/uploadingdata.html 簡単な使用例 例えばアプリケーション内で、model.pyというファイルでこんなクラスを作るとする。 from google.appengine.ext import db class PersonalData(db.Model): name = db.StringPro

    GAE/Pyでbulkloaderを使ってデータをアップロードする - すぎゃーんメモ
  • Google App EngineでlimitをつけるとQueryが超速くなる件について - kissrobberの日記

    appengine ja night11で紹介した裏技1について、もうちょっときちんと測定した結果を書いときます。 limit無し測定で使ったプログラム List<Key> keys = null; log.info("log 0."); keys = Datastore.query(getMeta()).query().asKeyList(); log.info("limit無し. :" + keys.size()); limit有り測定で使ったプログラム List<Key> keys = null; log.info("log 0."); keys = Datastore.query(getMeta()).query().limit(110000).asKeyList(); log.info("limitあり. :" + keys.size()); データ件数100,450件での測定結

    Google App EngineでlimitをつけるとQueryが超速くなる件について - kissrobberの日記
  • Google App Engine: Datastore のクエリを 理解しよう

    2010-07-31に開催された appengine ja night 9で 発表した資料です。 GAEのDatastoreのクエリについて。Read less

    Google App Engine: Datastore のクエリを 理解しよう
  • Datastoreのデータを表示・編集したい - やさしいデスマーチ

    GoogleAppEngineで開発をしている時にDatastoreのデータを直接扱いたい場合、管理コンソールを使えばだいたいの事は可能です。ですが、Keyの編集やBlobデータのアップロードなど細かい事は出来ませんし、ウェブのインターフェイス故に限界もあります。また、テストデータを作りたい場合などは、Excelのようにコピーをしながら簡単に作り、保存なんかもしたいわけです。 そこで新しいプロジェクトKotanを作ってみました。スクリーンショットはこんな感じ。 デモサイトはこちら。 ただし、Java Web Startで起動し嘘証明書を許可しなければ使えません。また、データアクセスをする為にGoogle Accountによる認証も必要になります。 技術的には、単純なSwingのクライアントアプリです。Commons Http Clientを使いサーバと通信を行いますが、GoogleのAcc

    Datastoreのデータを表示・編集したい - やさしいデスマーチ
  • Uploading Data - Google App Engine - Google Code

    Uploading Data The bulkloader.py tool included with the Python SDK can upload data to your application's datastore. With just a little bit of set-up, you can create new datastore entities from CSV files. Most spreadsheet applications can export CSV files, making it easy for non-developers and other application to produce data that can be imported into your application. Setting Up remote_api Instal

  • Song of Cloud: SDK 1.2.8 Release Notesで語られなかったこと

    先日App Engine SDK 1.2.8 for Javaがリリースされました。 公式のリリースノートに記載されていない非常に重要な機能追加がありますので、ここで紹介します。基的にすべてデータストアのお話です。しかもLow-Level API。 ご指摘いただきまして、ミスリードしそうな個所について修正しました。今後もわかったことがあれば追記していく予定です。 プロダクション環境でカーソルが予想外の動きをしました。このため、開発環境と両方で動くコードに更新しました カーソルの追加 これまでデータストアでページング処理を行う場合には、ページング用のプロパティを用意したり、ページング用のインデックスを用意したりと、様々な力技が提案されてきました。 しかし、今回のアップデートでCursorという「クエリの現在位置を覚えておくオブジェクト」がひっそりと追加されました。これを利用すると簡単にペー

  • Images Python API の使用 - Google App Engine - Google Code

    概要 CGI 環境 データの格納 概要 エンティティとモデル データの作成、取得、削除 キーとエンティティ グループ クエリとインデックス トランザクション 型とプロパティ クラス GQL リファレンス リファレンス Model Expando PolyModel Property Query GqlQuery キー 関数 例外 サービス Memcache 概要 Memcache の使用æ

  • App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ

    Google App EngineではRDBMSのようなUnique Indexをサポートしていません。ユニーク制限を実現する場合は、トランザクション中でKeyを使ったgetとputを組み合わせる必要があります。 ここでは、email addressがユニークだったらそれを確定してtrueを返し、そうでない場合にはfalseを返すコードを考えます。 最初にトランザクションを使わないコードを見てみましょう。KeyFactory.createKeyの最初に引数は、kindといってテーブル名みたいなものです。 public boolean putUniqueEmailAddress(String value) { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Key key = KeyFactory.cr

    App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ
  • Google App Engine入門:Datastore上で「ユニーク制限」を実現する方法

    Google App Engine のDatastoreには、通常のリレーショナルデータベースと比べた時にいくつかの制限があるが、その一つが「このプロパティの値は常にユニークでなければならない」という指定(ユニーク制限)ができないことである。 Invoice IDのように自動生成するものであれば、アプリケーション側でなんとかすることも簡単だが、メールアドレスやハンドル名など、ユーザーが入力するものになると、ユニークであることをきちんと判定した上でEntityを作ることが必要になる。 もちろん、単純に「有無をチェックして、なければ作る」というプログラムではスレッド間の競合に対応できないので、そこはトランザクションを使ってアトミックに処理をする必要がある。 App Engine上でトランザクションを実現するには、エンティティグループという仕組みを使って行うが、気をつけなければいけないのは、エン

  • 1