tasukentのブログ

Objective-c、PHP、Javaとか色々試してアウトプットしていきます。

新米エンジニアが押させえておくべきデータベースのいろは

ゴール

  1. DBの種類と特徴を抑える
  2. 用途に応じてDBを考えられるようになる

データベースとデータベース管理システム

「データベース」とは

複数の応用目的で共有を意図して組織的かつ永続的に格納されたデータ群」のことを指す。すこし崩すと、対象とする実世界の状態や構造を表現すべくデータを「体系的」に「組織化」したものがデータベース

「データベース管理システム(DBMS)」とは

データ群を管理し利用しやすくするためのソフトウェアをデータベース管理システム(Database management system,DBMS)と呼ぶ ぶっちゃけDBMSとかもDBに包含して使っていたりするがそっちの方が伝わるのでいいかなと

DBSの発端

DBMSDBMSで管理されるデータベースを一体として捉えたものがデータベースシステム(DBS) 大量のデータを永続化する手段としてはOSより提供されているファイルシステムがあるが以下が問題点となりDBSが開発された模様

  1. データとアプリケーションの相互依存
    • ファイルシステムだとデータの格納やアクセス方法をアプリケーションを意識しないといけない
  2. 整合性維持機能の欠如
    • データの整合性を保つ制約を認識させる機能がない。アプリケーション任せ
  3. 不十分な機密保護
    • ファイルのアクセス権限は付けられるが、そのファイルの中の一部のデータに権限管理することはできない
  4. 複数ユーザの同時アクセス
    • 同時に書き込んだらおかしなことになる。回避する機能は提供されているが、アプリケーション任せ
  5. 不十分な障害時データ保護

DBMSの種類

RDBMS(Relational DataBase Management System)

データベースをリレーション(関係)の集まりとしてモデル化して管理しており、ACID特性をもつ

  • 特徴
    • トランザクションによりデータの一貫性が保証できる
    • 正規化により更新コストが削減できる
    • データ改ざんなどに対してセキュリティが強固
    • 細かなチューニングが可能
    • ナレッジが多い
    • SQLにより柔軟かつ複雑な検索・変更ができる

NoSQL(Not only SQL

  • 非リレーショナルな分散データベースシステム。RDBMSじゃない方
  • 読み書きが非常に高速で柔軟性がある

代表的なRDBMSとその特徴

MySQL

oracle社が管理しているオープンソース製品

  • 特徴
    • 機能は多くないがその分シンプルで早い
    • マルチユーザ対応でWebアプリケーショントとの親和性が高い
    • マルチスレッド
    • 多様な開発言語のAPIが用意されている
  • ライセンス
    • 非商用利用の場合無償
    • 有償のEnterprise Serverも用意されている

PostgreSQL

BSDライセンスのORDBMS(オブジェクトリレーショナルデータベース管理システム

Oracle Database

oracle社が開発・販売しているRDBMS

  • 特徴
    • 完全な行レベルの占有ロックが可能
    • 読み取り一貫性が保証されている
    • UNDO表領域を使って同時実行性とデータの一貫性を確保している
  • ライセンス
    • 有料(16万〜500万円くらい)

SQLite

パブリックドメインな軽量RDBMS

  • 特徴
    • アプリケーションに組み込んで利用されることを想定している
    • Android端末の標準ライブラリとして採用されている
    • ver3.8.11よりFTS5を利用した全文検索機能が導入された。

その他RDBMS

NoSQLの種類

KVS(Key-Value sotre型)

キーと、格納したいデータを紐付け、キーを指定することでそれに対応したデータを格納/取得する。読み書きが非常に高速だが、複雑な検索処理には向いていない

列指向型(テーブル指向型)

列データをファイルシステム上の連続した位置に格納することによって、大量の行に対する少数の列の集約処理や、同一の値をまとめるデータ圧縮などを効率的に行う。大量のデータを対象とした分析やデータマイニングなど適している

  • DBMS
    • Cassandra
      • Amazon Dynamoの分散ハッシュテーブルと、Google Big Tableの列指向データモデルを取り入れて設計された
      • 導入例:Hulu,Digg,facebook,Twitter
    • HBase
      • 負荷に対して非常に高いスケーラビリティと性能を発揮(Hadoop上に構築する)
      • ランダムアクセス、シーケンシャルアクセス共に低レイテンシで行える
      • write性能を重視している
      • 導入例:Facebook Messages

ドキュメント指向型

XMLJSONなどのように半構造化されたドキュメントデータの格納し、各ドキュメントに一意のキーを割り当てることで管理をする。スケーラビリティが高く、サーバを追加しやすい

グラフ指向型

ノード、エッジ、プロパティから構成されるグラフ構造でデータを格納する。データ同士の複雑な関連性を表現できることに強みがある。頻繁に更新される大量の非構造化データを扱う場合に向いている

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

参考