MySQLをKVS的に使う
- とはいえ、KVSなんてよく使われるので別に書くほどのことでもないと思ってたりする
- ストックとかせずに流し読んでへー、知ってたとか思って下さい
- じゃ、なんで書いたの?
- 知らないヒトと出会ってしまったから
- あと、この辺の記事見たから
- 今年はYAPC行きたかった。。
- もっとヒドイなスキーマを目の当たりにしたけど、記憶の片隅にも留めたくないので語りません
KVSとは?
- key-value-store(キーと値のペア)
- ハッシュとかマップとか連想配列って言った方がなじみ深いと思う
MySQLでKVS?
- 別に難しい話じゃない
- あくまでkye-valueの形を作るだけ
必要なもの
- キーと値の組み合わせ
- それらを格納するテーブル
どうやって使うの?
- 例えば、以下の様なモデルがあったとして
- サンプルはPerl/JavaScriptをそれなりに分かっているという前提
foo = [bar => 'baz', hoge => 'fuga']
- こうなる
- PKがauto_incrementかどうかは知りません
- キーを複合にしたい場合はlabelが増えると思います
| id | label| value | etc |
| 1 | bar| baz| etc |
| 2 | hoge | fuga | etc |
何が便利なの?
- カラム追加が頻繁に起こりうるテーブルに対して、動的に行を列として代入可能
- keyが悲しくも予約語なので、カラム名は(プルダウンリストから推測しやすい)label-valueがいいと思います
本当に便利なの?
- キーが膨れてしまった時点でカオスになります
- 万能に見えて乱用したくなりますが、キーが増えると管理出来なくなります
- 確実に増えるカラムは素直にALTERかけましょう
- 使用上の注意をよく読み用法、用量を守り正しくお使い下さい
- あくまでレコード量、更新頻度、インデックスとの相談です
よくわかんない
- 補足テーブルと言った形で使います
** 例えば、以下の様なテーブルがあるとします
| id | prop1 | prop2 |
| 1 |マサカリ | 投げる |
| 2 | 椅子 | 投げる |
** そこに補足情報を付けます
| id | label | value |
| 1 | マサカリ |脳天に |
| 2 | 椅子 |思いっきり |
- 補足情報を付けるとこうなります
| id | prop1 | label |prop2 |
| 1 | マサカリ | 脳天に |投げる |
| 2 | 椅子 | 思いっきり |投げる |
結論
- ニヤニヤしてくれたら嬉しい