こんにちは、なかにしです。
Expressの勉強にあたり「MongoDB」というNoSQL型のDBを使っていくので、その辺をまとめようと思います。
いってみよう!
それぞれの代表例
RDB | Oracle, MySQL, Access, PostgreSQL, Microsoft SQL Server, SQLite |
NoSQL | MongoDB, DynamoDB, Apache Cassandra, FireStore, Redis |
特徴
DB | データの格納形式 | 処理速度 | 拡張性 | 複雑な処理 | データ操作言語 |
---|---|---|---|---|---|
RDB | 表 | 普通 | 普通 | 可能 | SQL |
NoSQL | ドキュメントなど | 早 | 高 | 可能だが難しい | JS,Javaなど |
一言で言えばRDBは「堅牢、着実」、NoSQLは「柔軟、速度重視」って感じですね。
堅牢であるが故にホイホイ拡張はできませんが、「ちゃんとやって」くれます。
ここで言う「ちゃんとやって」とはACID(アシッド)特性を守るかどうか、という話です。
ACID特性についての説明は以下です。
DBについて学ぶ上で超絶大事な概念です。
・Atomicity / 原子性 トランザクションの中の全て処理が実行されるか、全ての処理が実行されないかを保証する性質。 例) 処理途中でミスったら処理開始前の状態に戻ります。 ・Consistency / 一貫性 トランザクションの開始時と終了時における整合性を保証する性質。 例) 「数字しか入れられない」カラムに「数字以外」をInsertしようとするとエラーが出ます。 ・Isolation / 独立性 複数のトランザクションがお互いに独立して順番に実行されることを保証する性質。 例) 「僕の口座に10万振り込む」「僕の口座から20万引き出す」トランザクションが同時に発生したとき、片方のトランザクションを待機させ、もう片方を先に処理しきることで整合性を保ちます。 ・Durability / 永続性 トランザクションの完了通知(コミット)が発生した時点で、永続的な結果になることを保証する性質。 例) コミット終了後、大規模な通信障害が起きたとしても影響はありません。 何もしない限り、3年後でも10年後でも同じデータが残っています。
ちなみにNoSQLは「トランザクション」自体がない場合が多いです。
向き不向き
NoSQL
NoSQLはトランザクションなどの機能を捨て、リレーションを捨て、シンプルなデータ構造で速度に全振りしているイメージです。
処理速度はRDBより早く、SQLを使用する必要がありません。
シンプル故、拡張も楽です。
大容量のデータを扱う、もしくは音声データや映像データなどRDBで処理が難しいデータを扱う際に重宝します。
ゲームやIoTの分野でよく使われています。
RDB
堅牢なので、重要なシステム向きです。
歴史がある分情報も沢山ありますし、
対応できるエンジニアもNoSQLよりも多いことが予想されます。
金融機関や公的なシステムでよく使われています。
おわりに
大手とベンチャーの違いみたいな感じでしたね。
今までRDBばかりだったので、NoSQLにも触ってくぞ~~