ウェブアプリケーションの場合
当初の見込みに反してサービスが大ヒットしたり 長いこと運用することになったサービスだと データがめっちゃ増えてて検索の絞り込みが効かなくなっていく(遅くなっていく)
MySQLのHandler APIを直に叩くUDFを書けば SQLではうまく絞り込めなくて無駄な行に触ってしまう検索を 可能な限り必要な行だけ取ってくることでSQLとくらべて 数倍から数十倍効率よく検索できてうれしい。
UDFでHandler APIを叩いて複数行取ってきても 普通のやり方ではUDFは1つの値しか返せない。 kazuhoさん方式ではUDF内でテンポラリテーブルにINSERTしていて pixiv方式ではJSONにシリアライズして1つの値として返して アプリケーション側でデシリアライズしていた。
ストレージエンジンの処理をmrubyで書けるやつを作った
https://github.com/kamipo/mruby_storage_engine
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
';
Use a spacebar or arrow keys to navigate