タグ

ブックマーク / koherent.hatenadiary.org (3)

  • App Engine上で順位・平均・中央値等を計算するライブラリを作る - $koherent->diary

    先日のエントリー「Google App Engineでランキングやページングを実現する」にたくさんのブックマークをいただきありがとうございます。まさかここまで盛り上がると思っていなかったので驚いています。 前のエントリーでSkip ListではなくB-treeによる実装について書きましたが、色々と検討した結果Skip Listでライブラリを実装しようと思います。ライブラリはGoogle App Engine for Java (GAE/J) 用で、次の機能を実装したいと思います。 ソートキー(得点など)から順位計算 ソートキーから値を取得 順位から値を取得 ソートキーで範囲検索(inclusive、exclusive設定可) 順位で範囲検索(inclusive、exclusive設定可) 範囲(全体も可)に対して次の項目を計算 個数 合計値 平均値 中央値 最小値 最大値 ディスカッション

    App Engine上で順位・平均・中央値等を計算するライブラリを作る - $koherent->diary
  • Google App Engineでランキングやページングを実現する - $koherent->diary

    昨日一昨日、Google App Engine (GAE)に関する日最大の勉強会(だと思う)appengine ja night #7 (ajn7)が行われました。 その中で『ランキング問題』が話題に上がりました。『ランキング問題』とは、何十万件もの点数のデータがあるときに、App Engine上で、「◯点は何位です」と高速に求めることは難しい、という問題です。(◯ページ目を表示、というページングもこれと同じ種類の問題になります。) ajn7では「上位でない限り正確な順位は必要ないのではないか」という話になりましたが、Skiplistを用いた検索アルゴリズムを使えば正確かつ高速に順位を求めることができるのではないかと思い、実装&検証してみました。 ランキング(順位取得)のデモ 下記ページで順位取得のデモを動かしています。スコア(点数)を入力すると順位と取得にかかった時間が表示されます(時

    Google App Engineでランキングやページングを実現する - $koherent->diary
  • Google App EngineのDatastoreをMapでラップする - $koherent->diary

    Google App Engine for Javaで、ちょっとしたデータを永続化するためだけにDatastoreを触るのは面倒です。そこで、Datastoreをjava.util.Mapでラッピングしたクラスを作ってみました。(もうすでに誰かが作ってそうなにおいがぷんぷんするんですが軽く調べてみると見つからなかったので。) 他にもMemcacheのラッパークラス等も作りました。下記が作ったもの一覧です。 DatastoreMap: Datastoreをjava.util.Mapでラッピングしたクラス。 MemcacheMap: Memcacheをjava.util.Mapでラッピングしたクラス。 CachedDatastoreMap: オブジェクトを透過的にMemcacheにキャッシュするDatastoreMap。 App Engineにあまり詳しいわけではないので、おかしなところがあれ

    Google App EngineのDatastoreをMapでラップする - $koherent->diary
  • 1