footmark

ひよっこエンジニアの足跡

KVS 超入門

最近(個人的に)KVSというワードをよく耳にするのですが、「正直全く分からないっ!」ということで勉強+所感を書いてみました。

KVSって?

Key Value Storeの略で、「キー」と「値」から成る、シンプルなデータストアです。
いわゆる連想配列の上位互換に当たるデータベースという解釈で良いと思います。
連想配列というと、僕はソートされていないというイメージなのですが、KVSは主キーでソートされます。(KVSによるかも?)
表にするとこんな感じ。

学籍番号(主キー) 氏名 性別 生年月日
10001 田中太郎 1992/04/20
10002 佐藤健太 1992/10/10
10003 鈴木一樹 1992/06/03

繰り返しになりますが、見た目はキーと値から成るので本当に簡単。
勉強する前、

ケイブイエス!」
「キーバリューストア!」

と周りが言っているのを聞いて、ガクブル((((;゚Д゚))))していたのが懐かしいです。

揮発性KVSと永続性KVS

KVSについて調べているうちに、さっきと言ってること違うじゃん!となることがあったんですが、どうやらKVSには揮発性KVSと永続性KVSがあるようです。
揮発性KVSと永続性KVSは、それぞれ真逆の特徴を持っています。

揮発性KVS

オンメモリストレージでデータを扱う高速のデータベースです。
分散キャッシュサーバ等に使用されます。
速い反面、データベースやOSの再起動でデータが消去されます。
また、データが一定量を超えた場合も古いデータが消去されます。

永続性KVS

オンディスクストレージでデータを扱うデータベースです。
揮発性KVSと比較して、速度は落ちますが、データの記憶容量と永続性の高さが特徴です。

KVSとRDB

先日、周りで「データの管理はRDB(Relational Database)でする?KVSでする?」というディスカッションがあったのですが、KVSとRDBの違いはどうでしょうか。
以下、RDBと比較したKVSの特徴です。

分散化のコストが低い

これが一番の特徴だと思います。
KVSはデータ(キー)同士に関連性がない分、分散化(e.g. 複数台のサーバを使用)のコストが低くなっています。
この特徴もあって、分散KVSとも言われます。

分散化によって、負荷分散や可用性の向上等が制限なく可能です。

分散による自由

分散が容易であるということは、アプリケーションに対して都合の良い位置にデータベースを用意できるので、データ運用の効率化を高めることができます。

所感

近年、GoogleFacebook等、IT企業の間でKVSが流行っていますが、その理由は、
KVSは分散化のコストが低い=大量のサーバに分散させた力技ができる
からかなあと考察します。
こうやって調べているとKVSのメリットばかりが目に付いてしまいますが、案外そういった力技のできる環境でないと恩恵を得られないのではと。

また、極論ですが、揮発性KVSも永続性KVSもRDBもはたまたXMLなんかを使う場合も、結局はケースバイケースなんだなあと改めて思ってしまいました。