Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome or Safari browser. Firefox 10 (to be released soon) will also handle it.

SQLがむずかしくて生きるのがつらい

2013/04/17
MySQL Casual Talks Vol.4

@kamipo
github/kamipo

むずかしいと思うところ

ウェブアプリケーションの場合

むずかしいと思うところ

当初の見込みに反してサービスが大ヒットしたり 長いこと運用することになったサービスだと データがめっちゃ増えてて検索の絞り込みが効かなくなっていく(遅くなっていく)

 

生きるのがつらいところ

こういうふうにしていた

MySQLのHandler APIを直に叩くUDFを書けば SQLではうまく絞り込めなくて無駄な行に触ってしまう検索を 可能な限り必要な行だけ取ってくることでSQLとくらべて 数倍から数十倍効率よく検索できてうれしい。

こういうふうにしていた

UDFでHandler APIを叩いて複数行取ってきても 普通のやり方ではUDFは1つの値しか返せない。 kazuhoさん方式ではUDF内でテンポラリテーブルにINSERTしていて pixiv方式ではJSONにシリアライズして1つの値として返して アプリケーション側でデシリアライズしていた。

複数行取ってきてるんだからそのまま複数行で返したい

ストレージエンジンを書けば複数行返せる

mruby_storage_engine

ストレージエンジンの処理をmrubyで書けるやつを作った
https://github.com/kamipo/mruby_storage_engine

ストレージエンジンの処理を書けてうれしいこと

example (JSON parse)

CREATE TABLE t (
  user_id int,
  status_id int,
  data varchar(255)
) ENGINE=MRUBY
  COMMENT=' # mruby handler
  def json_get(json, key)
    json = JSON.parse(json)
    json[key]
  end
  ';

さいごに

SQLを勉強しましょう

おしまい

Use a spacebar or arrow keys to navigate