Skip to content

DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1)

DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1) published on DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1) への1件のコメント

コホート分析とは

定義に関してはWikipediaを見れば大体わかるかと。日本語のエントリーがないので、大雑把に説明すると、ユーザーをグループ(コホートと呼ばれる)に分割し、各コホート毎に指標(例えば、ユーザーごとの滞在時間)を集計して分析することをコホート分析(cohort analysis)と呼ぶ。

よくある質問として「セグメント分けとどう違うの?」っていうのがあって、セグメントは例えば性別とか年代とかのユーザーの属性によって分割するのに対して、コホートは登録日時、初回ログイン日時といった、ユーザーの行動を元にグループ分けするというのが違い、だと思う。

Continue reading DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1)

Googleがやってる位置ゲーIngressが面白い

Googleがやってる位置ゲーIngressが面白い published on Googleがやってる位置ゲーIngressが面白い へのコメントはまだありません

仕事関係の知り合いに誘われて、IngressっていうGoogleが出している位置ゲーみたいなのをやってるんだけど、これが個人的にはヒット。

何するゲーム?

プレーヤーは、開始時に青か緑のチームを選ぶんだけど、自分のチーム(というか軍団?)の勢力を拡大するのが一応目的みたいな感じ。

具体的に何をするかというと、地図上のスポット(ゲーム内用語ではPortal)を制圧したり取り返したりして陣地を作っていく、みたいな感じ。

Continue reading Googleがやってる位置ゲーIngressが面白い

Amazon RDS (MySQL)のslow query logを集計する

Amazon RDS (MySQL)のslow query logを集計する published on Amazon RDS (MySQL)のslow query logを集計する へのコメントはまだありません

RDSではslow query logはテーブルに書きだされる。

Amazon RDSのMySQLでは、デフォルトではslow query logはmysqlデータベースのslow_logというテーブルに保存される(※)。

今までの普通のMySQLであれば、slow query logを有効化するとデフォルトではファイルに書きだされて、それをmysqldumpslowで集計・解析するってのが一般的だったと思うけど、テーブルに書きだされると、それにもう一手間必要になってくる。

※以前は、slow_logテーブルに書き出す以外に選択肢は無かったと思うけど、最近はファイルに書き出すことも出来るらしい。

大まかな方針

  1. slow_logテーブルから通常のslow query logファイル形式にエクスポート
  2. mysqldumpslowで集計

slow_logをエクスポートするツール2つ

pythonのスクリプト

AWSのフォーラムのスレッド(AWSにログインしていないと見られない)で見つけたこちらのスクリプト。

mysql関連のモジュールがないと動かないので、今回は使用せず。

シェルスクリプト

MySQL Performance Blogの記事で紹介されていたこちらのツール群。そこにexport-slow-log-tableというスクリプトがあるので、それを使う。先頭に以下の行を追加して、

#!/bin/bash

.my.cnf にホスト名、ユーザー名、パスワードを以下のように記載して、

[client]
host=xxx.yyy.ap-northeast-1.rds.amazonaws.com
user=awsuser
password=secretpassword

スクリプトを実行すればOK。

その後

あとは通常通り、エクスポートしたファイルをmysqldumpslowで集計する。

集計が終わったらslow_logテーブルの内容は不要だと思うので、以下のストアドプロシジャでローテートしておく。

CALL mysql.rds_rotate_slow_log;

まとめ

Amazon RDS (MySQL) では、デフォルトではslow query logはslow_logというテーブルに書き込まれるので、それをファイルにエクスポートしてmysqldumpslowで集計する方法を紹介した。で、その結果を利用してボトルネックの調査・分析をする、という流れ。

slow query logを定期的に確認してパフォーマンスを改善させる運用フローを作っておくと、システムの規模が大きくなった時にも安心。

初心者向けFirefox拡張の作成(Add-on SDKを使用)

初心者向けFirefox拡張の作成(Add-on SDKを使用) published on 初心者向けFirefox拡張の作成(Add-on SDKを使用) へのコメントはまだありません

Firefox拡張(extension)の作り方は大きく分けて3通り。詳しくは以下のサイトを参照。

Firefox 拡張の作り方 (2013 年版)

今回は、一番初心者向けとされるAdd-on SDKを使用する方法について記述する。ドキュメントはこちらのサイトの左上にある「Documentation」のリンクから適当にたどる。

Continue reading 初心者向けFirefox拡張の作成(Add-on SDKを使用)

地方の名産が分かるサイト

地方の名産が分かるサイト published on 地方の名産が分かるサイト へのコメントはまだありません

サイトのコンセプト・目的

日本って各地にいろんな美味しい食べ物、名産があるけど、そういうのに関する情報がまとまったサイトがあるといいなと思って、こんなのを・・・

Locatab (ロカタブ)

地方の美味しいものって、下関のフグとか仙台の牛タンみたいな有名なものもあるけど、大体はそれほど有名じゃないけど実際食べてみると美味いってものが多いと思うので、そういうあまり有名でないものもすぐ見付かるようにしたいってのがコンセプトかな。そうすれば、旅行とかする人に取っても有益だし、その地方の人にとってもPRになるはず。

仕組み

裏側の仕組みとしては、食べ物関係のWebサイトから情報を収集・分析して、「そのエリアで食べるべき食べ物」を表示する、みたいな感じ。

自分自身、コンセプトとしては結構面白いと思ってるんだけど、データとか分析の精度とかはまだまだ改善する必要がある気がする。

SquerylでORDER BY NULLS FIRST (又はLAST)を実行するには

SquerylでORDER BY NULLS FIRST (又はLAST)を実行するには published on SquerylでORDER BY NULLS FIRST (又はLAST)を実行するには へのコメントはまだありません

本記事は、MLで質問して返ってきた内容をまとめただけ。

ORDER BYを指定した時のNULLの扱い

SQLでORDER BYを指定した時、その列にNULLがあった場合、その行はどこに来るのか?デフォルトだと「最小の値」として処理されるんだけど、いくつかのDBMSではNULLS FIRSTあるいはNULLS LAST句を付けることによってその動作を制御することが出来る。

SquerylでNULLS FIRST/LASTを扱うには

以下の様なのを作って、

import org.squeryl.dsl.ast.{FunctionNode, ExpressionNode}
import org.squeryl.internals.StatementWriter

object OrderBy {
  def nullsLast(col: ExpressionNode) = new FunctionNode("", None, Seq(col)) {
    override def doWrite(sw: StatementWriter) = {
      col.write(sw)
      sw.write(" nulls last")
    }
  }

  def nullsFirst(col: ExpressionNode) = new FunctionNode("", None, Seq(col)) {
    override def doWrite(sw: StatementWriter) = {
      col.write(sw)
      sw.write(" nulls first")
    }
  }
}

後は、クエリーを組み立てる所で以下のようにするだけ。

import com.example.OrderBy.nullsLast
// ...
        orderBy(nullsLast(someColumn) desc))

分かってしまえば簡単だった。

WordPressに移行した!

WordPressに移行した! published on WordPressに移行した! へのコメントはまだありません

経緯

放置に至るまで

昔からMovableTypeでほそぼそ続けてきたブログだけど、2012年の途中くらいから忙しくなってしばらく放置してたら・・・

  1. スパムコメントが大量についてSQLiteのデータファイルが肥大化して2GBくらいになった。
  2. それが原因でApacheのメモリを大量に食うようになった。
  3. レンタルサーバー会社によって、自分のアカウントが隔離病棟みたいなインスタンス(しかもそれ以前より値段が高い)に強制的に移された上で、「状況が改善されたら元のに戻してやる」と言われた。
  4. .htaccess で deny all にしてブログを閉鎖。

すぐ復旧させようと思ってたんだけど、はてダに書いてた方のブログをメインにしたら、何か復旧の意欲が失せて、結局1年以上放置してたことになるのか・・・

そうだ、クラウドソーシングを使おう!

復旧させたいなぁとかずっとモヤモヤしつつも時間がとれずに放置してたんだけど、ここ最近仕事で活用している「クラウドソーシング」をプライベートでも使えばいいのでは?と閃いて、blog移行の案件の募集をしたら、意外に募集があったのでそのうちの一人にお願いすることに。

クラウドソーシング経由で一緒に仕事をした技術者、デザイナーはこれまで10人以上いたけど、今回ブログ移行をお願いした人はたまたま凄いしっかりした人で、想像してたのよりあっさり移行ができた。感謝感謝。

これからこのブログをどうしよう

はてダ使用前、つまりこのブログがメインだった時は、プライベート+技術情報っていう内容だったんだけど、これからどうしよう。

とりあえず、今はてダに書いているような技術系のエントリーは今後こっちに書いていこうと思う。

プライベートは・・・別にブログじゃなくて今のままFacebookとかでいいか。

今年の6月に会社を作ったので、会社関係は会社のブログに載せようっと。