有名どころのデータベースの違い
有名どころのデータベースの違いを調べてみました。
調査対象は、DB-Engines Ranking の上位5個とします。
まずは、それぞれの特徴とマニュアルまとめてみます。
1. Oracle Database
Oracle社が開発・販売しているリレーショナル・データベース
-
-
特徴
-
優れたロック機能
-
行レベルロック
-
トランザクションによってアクセス中の行のみをロックする
-
複数のユーザーが同一の表の別の行に同時にアクセス出来るので、パフォーマンスが大幅に向上する
-
-
読み取り一貫性
-
同時実行性とデータの一貫性を確保している
(UNDO表領域に更新前確定データを一時的に保存することで対処している)
-
-
-
管理の自動化
-
メモリ管理の自動化
-
昔は共有メモリとUNDO領域の管理にデータベース管理者は悩まされていたが、OracleDB自身が自動的にチューニングしてくれる
-
-
ディスク管理の自動化
-
物理ディスクなどの記憶域をASMで管理することで、不可分散を考慮しながら自動でデータを配置してくれるので、どのディスクに何を格納するかを意識する必要がない
-
-
索引の自動化
-
Automatic Indexing機能で、データベースの利用状況に応じて索引の作成を自動で実施できる
-
-
メンテナンスの自動化
-
統計情報の収集や、チューニングアドバイザによる高付加のSQLのパフォーマンス調査と推奨事項の生成が自動で出来る
-
-
-
堅牢性が高い
-
-
Winsows/Linux等どのプラットフォームでも全く同じDBが動作する
-
-
- マニュアル
Oracle Database ドキュメント | Oracle Technology Network | Oracle 日本
-
2. MySQL
Oracle社が管理しているオープンソース型のデータベース管理システム
3. Microsoft SQL Server
Microsoft社が開発・提供している法人向けのリレーショナル・データベース
-
-
特徴
- WindowsOSとの相性が良い
- WindowsOSと相性が良く、マウスでの作業が出来るなど操作性は高い
- 新しいバージョンでは、Linuxでも動作させることが可能
- Microsoft社が独自に拡張したSQL「Transact-SQL」も利用できる
- データベースの操作を行う標準のSQLに加え、「Transact-SQL」も利用できる
- 「Transact-SQL」では、フロー制御言語やデータベース向けの関数、ストアド・プロシージャの作成が可能となり、複雑な制御を記述出来る
- OracleDBでいうPL/SQLのようなもの
- WindowsOSとの相性が良い
-
4. Postgre SQL
Unix系のOSにも対応している、オープンソース型のリレーショナルデータベース
-
-
特徴
-
追記型アーキテクチャーを採用
-
テーブルやインデックスの共有バッファー内のページにおいて、挿入や更新時にはレコードを次々に追記していき、削除や更新時に不要になったレコードは削除マークを付けたまま残しておく
-
OracleDBは、UNDOセグメントやロック機能を用いて読み取り一貫性を実現しているので追記型アーキテクチャではない。削除された領域は再利用可能
-
-
何もしないと今後参照されることのない不要レコードが徐々に増加していくことでデータファイル容量が肥大化する
-
不要レコードの領域を回収して再利用可能な状態にするために、定期的にVACUUM処理をする必要がある(最新バージョンでは自動化済み)
-
-
ライセンスコストがかからない
-
商用に耐えうる機能群を搭載
-
標準SQLに準拠
-
マルチバイト対応しているので、日本語にも対応している
-
パラレルクエリによる処理の高速化が可能
-
オンラインバックアップに対応
-
-
-
5. MongoDB
ドキュメント型のNoSQL
-
-
特徴
-
ドキュメント指向データベース
-
データを行と列で保存するのではなく、複数のJSONに似たドキュメントやコレクションでデータを表示する
-
ネストされたドキュメントや配列などのタイプのキーと値のペアを使用し、ドキュメント毎に異なる構造をとることも可能
-
データの一貫性が重要なシステムは、OracleDBなどリレーショナル・データベースの方が向いている
-
-
-
インメモリで動作するため処理速度が速い
-
データをメインメモリ(RAM)に読み込んでから処理するため、処理するデータ量が増えても処理速度が速い
-
-
負荷分散や冗長化による処理の高速化
-
データを複数のサーバに分割して保存、処理出来る「シャーディング」機能を使い、不可を複数のサーバに分散させて全体の処理能力を向上させることが可能
-
-
-
マニュアル
-