たぶん忘れるメモ

記憶力はないのです。

データベースについてまとめてみた

ちょっと調べてみたのでメモメモ。

RDBMS

リレーショナルデータベースシステム。表形式でデータを保持する仕組み。
行単位で取得するとか、更新するとかが得意。
データを結合して取ってくることができる。

オープン系(出身)技術者はDBを基準にシステム構成を読み解く人が多い気がする(自分とか)。
DB定義書みたら大体どんなことをするシステムかわかるよね。
そういや、正規化ってWeb系開発やるようになってから、あんまりきかなくなったような。

ちょっと古いけど、OracleMySQLPostgreSQL の機能比較は下記が参考になる。
http://lets.postgresql.jp/documents/tutorial/rdbms-hikaku

NoSQLタイプ

KVS型(キー・バリュー・ストア)

キーを元にデータ(Value)を操作する。
データの中身を条件に指定して、操作することができない。

  • memcached
  • kumofs
  • Tokyo Cabinet (Kyoto Cabinet)

kumofs は少しいじってみたけど、使い道にちょっと悩む。
キャッシュとかあくまでオンメモリで動作する手軽さとスピード感が売り?なのかな。
memcached は最近プロトコルとしてよくお名前を見かける気がしますよ。

ドキュメント指向型

スキーマレス。表のようなデータ構造の概念を持たない。
ハッシュの塊をキーで引っ張るイメージ…ってNoSQL全部そんな気が。
JOINはできないけれど、条件検索はできる。

CouchDB が JSON で、MongoDB が BSON という形式でデータ保存。
CouchDB は直接 Javascript で操作できるのが魅力になるのかな。

MongoDB) 予想するよりもデータ容量を食う。
http://www.mongodb.org/pages/viewpage.action?pageId=17596968
PostgreSQL の VACUUM みたいに repairDatabase() をしないと駄目とかってことはない?

で、カード型とか思い出すんですけど、桐って今どうなってるんだ…って、ググったらまだあった。

列指向型

表形式の概念はあるけれど、列単位でものを考える。
列に対して、取得をするとか、一括更新をするとかが得意。
スキーマレスっぽい? 列を増やすのに定義の変更みたいなことは不要。
大容量向け。

  • HBase
  • Cassandra

それぞれ、FacebookTwitter が採用中。
Cassandra は元々 Facebook が開発してたという話だからちょっと面白い。
オープンソース以外だと Bigtable もこのカテゴリなんだと思われる。

http://gihyo.jp/dev/serial/01/various-nosql/0005

上記の記事によると、「何を保証するか」が大きな違いらしい。SPOF(単一故障点)の有無。
CAP定理で考えると、Facebook は AP型 より CP型 を採用したってことかな。