何かの映画に出てくる役名とか女優さんの名前じゃありません。
Key-Value Store(KVS)のひとつであるCassandraです。
最近話にあがるのがKVSなのです。
RDBMSと違って分散データ管理が主なところで、複数のサーバにノードを立ててデータを分散管理します。
メリットとしては、一箇所にデータが蓄積されるわけではないので、スケールを大きくすることが容易になります。つまり、「ディスクがいっぱいになったから移行しよう」ではなく、「ディスクがいっぱいになったからサーバ追加しよう」という感じです。
細かなところはとりあえず置いといて、容量が足りなくなったらサーバ追加で用が済むのがKVSの大きなメリットだと思います。
じゃあデメリットはというと、これは個々のKVSそれぞれにもあるのですが、KVS全体としては、KVSの略どおり、Key(キー)とValue(値)で管理されており、キーを指定しないと値が取得できないのが開発する上では難点です。
KVSによっては値でデータ取得可能なのもあるのですが、基本はキーで全てコントロールします。
また、まだまだ導入実例が少ないため、管理できる技術者もあまりいない、というのもデメリットのひとつかと思います。
CassandraはFacebookが開発したKVSなので、かなり大規模なものでも利用可能かと思います。先日TwitterもKVSへ移行するかどうか検討したぐらいですからね。
ちなみに、KVSってNoSQLとも言われているらしいです。NoSQLは「No SQL (SQLは不要)」ではなく「Not Only SQL (SQLだけじゃないよね)」ということです。
つまり、SQLとKVSを組み合わせれば今までSQLだけでは限界であった単純構成な大量データ格納、取得をKVSで行うことができる、ということだと勝手に解釈しています。
例えば、KVSのインデックス(キー)をSQLのDBに保持して、そこで該当した結果からキーをもとにでデータを取得することができる、というイメージです。
もちろん2回(またはそれ以上)のアクセスがあるので速度は問題になるとは思いますが、その点を見なければいい感じでシステムを組むことができそうな気がします。
CassandraはJavaで書かれていますが、C++で書かれているKVSとかもあるのでそちらもこれから勉強してみたいですね。
