新米エンジニアが押させえておくべきデータベースのいろは
ゴール
- DBの種類と特徴を抑える
- 用途に応じてDBを考えられるようになる
データベースとデータベース管理システム
「データベース」とは
「複数の応用目的で共有を意図して組織的かつ永続的に格納されたデータ群」のことを指す。すこし崩すと、対象とする実世界の状態や構造を表現すべくデータを「体系的」に「組織化」したものがデータベース
「データベース管理システム(DBMS)」とは
データ群を管理し利用しやすくするためのソフトウェアをデータベース管理システム(Database management system,DBMS)と呼ぶ ぶっちゃけDBMSとかもDBに包含して使っていたりするがそっちの方が伝わるのでいいかなと
DBSの発端
DBMSとDBMSで管理されるデータベースを一体として捉えたものがデータベースシステム(DBS) 大量のデータを永続化する手段としてはOSより提供されているファイルシステムがあるが以下が問題点となりDBSが開発された模様
- データとアプリケーションの相互依存
- ファイルシステムだとデータの格納やアクセス方法をアプリケーションを意識しないといけない
- 整合性維持機能の欠如
- データの整合性を保つ制約を認識させる機能がない。アプリケーション任せ
- 不十分な機密保護
- ファイルのアクセス権限は付けられるが、そのファイルの中の一部のデータに権限管理することはできない
- 複数ユーザの同時アクセス
- 同時に書き込んだらおかしなことになる。回避する機能は提供されているが、アプリケーション任せ
- 不十分な障害時データ保護
- ファイルシステムは障害に対する対策が手薄
DBMSの種類
RDBMS(Relational DataBase Management System)
データベースをリレーション(関係)の集まりとしてモデル化して管理しており、ACID特性をもつ
- 特徴
NoSQL(Not only SQL)
- 非リレーショナルな分散データベースシステム。RDBMSじゃない方
- 読み書きが非常に高速で柔軟性がある
代表的なRDBMSとその特徴
MySQL
- 特徴
- 機能は多くないがその分シンプルで早い
- マルチユーザ対応でWebアプリケーショントとの親和性が高い
- マルチスレッド
- 多様な開発言語のAPIが用意されている
- ライセンス
- 非商用利用の場合無償
- 有償のEnterprise Serverも用意されている
PostgreSQL
BSDライセンスのORDBMS(オブジェクトリレーショナルデータベース管理システム)
Oracle Database
- 特徴
- 完全な行レベルの占有ロックが可能
- 読み取り一貫性が保証されている
- UNDO表領域を使って同時実行性とデータの一貫性を確保している
- ライセンス
- 有料(16万〜500万円くらい)
SQLite
- 特徴
その他RDBMS
NoSQLの種類
KVS(Key-Value sotre型)
キーと、格納したいデータを紐付け、キーを指定することでそれに対応したデータを格納/取得する。読み書きが非常に高速だが、複雑な検索処理には向いていない
- DBMS例
列指向型(テーブル指向型)
列データをファイルシステム上の連続した位置に格納することによって、大量の行に対する少数の列の集約処理や、同一の値をまとめるデータ圧縮などを効率的に行う。大量のデータを対象とした分析やデータマイニングなど適している
- DBMS例
ドキュメント指向型
XMLやJSONなどのように半構造化されたドキュメントデータの格納し、各ドキュメントに一意のキーを割り当てることで管理をする。スケーラビリティが高く、サーバを追加しやすい
- DBMS例
- MongoDB
- スキーマを持たない
- トランザクションやJOINはサポートしていないがほぼRDBMSと同等に使える
- 導入例:foursquare,bit.ly,sourceforge
- MongoDB
グラフ指向型
ノード、エッジ、プロパティから構成されるグラフ構造でデータを格納する。データ同士の複雑な関連性を表現できることに強みがある。頻繁に更新される大量の非構造化データを扱う場合に向いている
2015年8月度DBランキング
TOP10(出典:DB-Engines Ranking)
ここは月一回で更新されるのでウォッチしておくと良いかも
Rank | DBMS | Database Model | Score (Aug 2015) | DIFF(Jul 2015) |
---|---|---|---|---|
1. | Oracle | Relational DBMS | 1453.02 | -3.70 |
2. | MySQL | Relational DBMS | 1292.03 | +8.69 |
3. | Microsoft SQL Server | Relational DBMS | 1108.66 | +5.60 |
4. | MongoDB | Document store | 294.65 | +7.26 |
5. | PostgreSQL | Relational DBMS | 281.86 | +9.04 |
6. | DB2 | Relational DBMS | 201.23 | +3.12 |
7. | Microsoft Access | Relational DBMS | 144.20 | -0.10 |
8. | Cassandra | Wide column store | 113.99 | +1.28 |
9. | SQLite | Relational DBMS | 105.82 | -0.05 |
10. | Redis | Key-value store | 98.81 | +3.73 |