データベースについてまとめてみた
ちょっと調べてみたのでメモメモ。
RDBMS
リレーショナルデータベースシステム。表形式でデータを保持する仕組み。
行単位で取得するとか、更新するとかが得意。
データを結合して取ってくることができる。
- MS SQLServer
- Oracle
- MySQL
- PostgreSQL
- MS Access
オープン系(出身)技術者はDBを基準にシステム構成を読み解く人が多い気がする(自分とか)。
DB定義書みたら大体どんなことをするシステムかわかるよね。
そういや、正規化ってWeb系開発やるようになってから、あんまりきかなくなったような。
ちょっと古いけど、Oracle、MySQL、PostgreSQL の機能比較は下記が参考になる。
http://lets.postgresql.jp/documents/tutorial/rdbms-hikaku
NoSQLタイプ
KVS型(キー・バリュー・ストア)
キーを元にデータ(Value)を操作する。
データの中身を条件に指定して、操作することができない。
- memcached
- kumofs
- Tokyo Cabinet (Kyoto Cabinet)
kumofs は少しいじってみたけど、使い道にちょっと悩む。
キャッシュとかあくまでオンメモリで動作する手軽さとスピード感が売り?なのかな。
memcached は最近プロトコルとしてよくお名前を見かける気がしますよ。
ドキュメント指向型
スキーマレス。表のようなデータ構造の概念を持たない。
ハッシュの塊をキーで引っ張るイメージ…ってNoSQL全部そんな気が。
JOINはできないけれど、条件検索はできる。
- CouchDB
- MongoDB
CouchDB が JSON で、MongoDB が BSON という形式でデータ保存。
CouchDB は直接 Javascript で操作できるのが魅力になるのかな。
MongoDB) 予想するよりもデータ容量を食う。
http://www.mongodb.org/pages/viewpage.action?pageId=17596968
PostgreSQL の VACUUM みたいに repairDatabase() をしないと駄目とかってことはない?
で、カード型とか思い出すんですけど、桐って今どうなってるんだ…って、ググったらまだあった。
列指向型
表形式の概念はあるけれど、列単位でものを考える。
列に対して、取得をするとか、一括更新をするとかが得意。
スキーマレスっぽい? 列を増やすのに定義の変更みたいなことは不要。
大容量向け。
- HBase
- Cassandra
それぞれ、Facebook、Twitter が採用中。
Cassandra は元々 Facebook が開発してたという話だからちょっと面白い。
オープンソース以外だと Bigtable もこのカテゴリなんだと思われる。
http://gihyo.jp/dev/serial/01/various-nosql/0005
上記の記事によると、「何を保証するか」が大きな違いらしい。SPOF(単一故障点)の有無。
CAP定理で考えると、Facebook は AP型 より CP型 を採用したってことかな。