目次
トグルデータベースとは何ですか?
名前が示すように、データベースはデータを保存する場所です。では、データベースを使用せずにソフトウェア システムを開発する方法はあるのでしょうか。 小さな静的テキストのみを含む初期の静的 Web ページの場合は、データベースがなくても問題はありません。しかし、現代のシステムはますます複雑になり、アプリケーションはより豊富になるため、データを保存するためにデータベースを使用する必要があります。例: Youtube では、さまざまな種類やサイズのデータを保存するために、大規模で複雑なデータベースが必要です。
もちろん、データベースにもより正確な定義があります。以下は Oracle からの定義です。
データベースは、構造化された情報またはデータの組織化されたコレクションであり、通常はコンピューター システムに電子的に保存されます。 データベースは通常、データベース管理システム (DBMS) によって制御されます。データおよび DBMS とそれに関連するアプリケーションはデータベース システムと呼ばれ、単にデータベースと呼ばれることもよくあります。
現在実行されている最も一般的なタイプのデータベースのデータは、通常、データの処理とクエリの効率を高めるために、一連のテーブルの行と列としてモデル化されています。 これにより、データへのアクセス、管理、変更、更新、制御、整理が容易になります。 ほとんどのデータベースは、データの書き込みとクエリに構造化照会言語 (SQL) を使用します。
データベースには大きく分けて SQL (リレーショナル データベース) と NoSQL (非リレーショナル データベース) の 2 種類があり、多くの読者はこれらのデータベースの名前を聞いたことがあると思いますが、このうちリレーショナル データベースは構造化されたデータを持ってデータベースを構築します。リレーショナル モデル上で、直接的かつ直観的な方法でデータ テーブルにデータを表示します。非リレーショナル データベースは、比較的離散的で特定のデータ モデル用に構築された非構造化データであり、最新のアプリケーションで簡単に拡張できる柔軟な構造でデータを保存します。 NoSQL データベースは、開発の容易さ、機能性、大規模なパフォーマンスで知られています。
データベースの利点
データベースには企業の従業員情報、顧客情報、取引記録などのすべての情報が保存されているため、データベースはあらゆる企業や組織にとって非常に重要です。
基本的に、データベースには次の利点があります。
ビッグ データの管理: リポジトリを使用すると、他のツールでは不可能な大量のデータを簡単に処理できます。
データの一貫性: いつでも正しいデータを取得できます。
データ セキュリティ: データベースはデータ セキュリティを保証し、許可されたユーザーのみがデータにアクセスできるようにします。
データの整合性: データベースは、データに対してさまざまな制限を使用することでデータの整合性を保証します。
システムの可用性: データベースはさまざまなサーバーに複製 (レプリケーション) でき、同時に更新できます。
スケーラビリティ: データベースは単一ノードの負荷を管理するためにパーティション化され (パーティション)、システムのスケーラビリティが向上します。
酸
ACID は、原子性、一貫性、分離性、耐久性という 4 つの単語で構成されます。これらの 4 つの特性は、データのインポートまたは更新時にプロセスが正しいことを保証するために必要な機能でもあります。
データベース システムにおいて、トランザクション (Transaction) とは、データベース操作で構成される完全なロジックを指します。例: 銀行振込、元の口座からのお金の引き落とし、相手の口座へのお金の追加、この 2 つのデータベースの操作。は完全なロジックを構成しており、切り離すことはできません。このようなプロセスにも ACID の特徴が含まれています。 次に、ACID について簡単に説明します。
原子性
アトミック保証トランザクションは分割不可能な単位として扱われます。つまり、トランザクション内のすべての操作が成功する必要があり、そうでなければどの操作も成功しません。 これは、データの不整合の発生を防ぐために重要です。
一貫性
一貫性により、データベースへのすべての更新の一貫性が保証されます。つまり、複数のトランザクションが同時にデータにアクセスした場合でも、データベースは有効な状態を維持する必要があります。
分離
分離により、トランザクションは互いに独立して実行されます。つまり、トランザクションの操作が別のトランザクションの操作に干渉することがなくなり、この機能はデータ破損の発生を防ぐために非常に重要です。
耐久性
耐久性により、トランザクションが一度送信されると、その効果は永続的になります。つまり、停電やその他のシステム障害が発生した場合でも、トランザクションによってデータベースに加えられた変更が失われることはありません。
リレーショナルデータベース
ACID の特徴について説明した後、データベースの説明に戻りましょう。リレーショナル データベースの人気と優位性は、シンプルさ、堅牢性、柔軟性、パフォーマンス、スケーラビリティ、共通データの管理の比較的容易さなど、さまざまな理由によるものです。
リレーショナル データベースは基本的に、原子性、一貫性、分離性、耐久性 (ACID) の特性を提供するため、本質的に優れたデータベース特性です。まだ私たちを覚えています システム設計における抽象化の適用 – システム設計 02 抽象化の概念について言及されていますが、ACID も抽象概念であり、データ対話操作の複雑さを簡素化します。もちろん、リレーショナル データベースが主流になる理由には、シンプルさ、安定性、柔軟性、パフォーマンス、スケーラビリティ、互換性も含まれます。
一般的な DBMS には次のようなものがあります。
MySQL、Oracle データベース、Microsoft SQL Server、IBM DB2、Postgres、SQLite。
リレーショナルデータベースの例
まず、リレーショナル データベース (RDB) は、テーブル、列、および列に情報を構築します。 RDB では、データ テーブルを集約することで情報間の関連性や関係性を確立できるため、データ ポイント間の関係を理解し、詳細な分析を容易に行うことができます。
関連データベースは、1970 年代に IBM の EF Codd によって開発されたもので、共通の属性を使用して任意のデータ テーブルを他のデータ テーブルに関連付けることができます。関連データベースは、企業がデータの関連付けを確立するのに役立つ Excel のコレクションと考えることができます。 Excel と同様に、各スプレッドシートは情報を格納するデータ テーブルであり、データ列 (プロパティ) とデータ列 (レコード) によって表されます。
Googleクラウドの例
「顧客」データ テーブルには、顧客関連の情報が含まれています。
顧客ID(主キー)、顧客名、請求先住所、配送先住所
「顧客」データ テーブルでは、顧客 ID は、関連データベース内で顧客を識別するために特に使用される主キーのセットです。顧客IDは顧客ごとに異なります。
「注文」データ テーブルには、注文に関連するトランザクション情報が含まれます。
注文ID(主キー)、顧客ID(主キー)、注文日、発送日、注文状況
中小企業が 2 つのデータ テーブルを使用して製品の注文を処理するとします。最初のデータは、顧客番号、顧客名、住所、配送先住所、請求先住所、電話番号、その他の連絡先情報を記録する顧客情報テーブルを表します。このデータは一意であり、繰り返されないため、このときの主キーは顧客番号に設定できます。
2 番目のテーブルは、顧客番号、注文番号、注文された製品、数量、サイズ、色などの製品注文情報を記録する顧客注文データ テーブルを表します。このときの主キーは注文番号に設定でき、重複しません。次に、共通のインデックス キーである顧客番号を使用して、2 つのデータ テーブルを関連付けます。最後に、会社の注文処理アプリケーションが注文をデータベースに送信すると、データベースは顧客注文テーブルにアクセスし、正しい製品注文情報を抽出し、テーブルから顧客番号を使用して顧客の請求および出荷情報を照会します。貨物情報テーブル。
リレーショナル データベース (SQL) を選択する理由
通常、データベース形式が指定されていない場合、開発中にデフォルトでリレーショナル データベースが使用されます。その利点の中には、ACID トランザクションと関連プログラミングの抽象化が挙げられます。このような抽象的な概念により、ソフトウェア エンジニアにとってもデータベースの使用が非常に便利になります。その利点については、別途説明します。
リレーショナル データベースの利点
柔軟性: SQL のコンテキストでは、データ定義言語 (DDL) の正式名は (Data Definition Language) です。DDL は、テーブル、列、テーブルの名前変更、その他の変更を含むデータベースを変更するための柔軟性を提供します。
冗長性の削減: データの冗長性とは、データベース内に同じデータまたは情報が複数存在することを指します。一般的なファイル システムでは、ファイル間につながりがないため、1 つの情報が複数のファイルに存在することがあります。リレーショナル データベースの最大の利点の 1 つは、冗長性の削減です。データの冗長性を排除する目的は、データの一貫性を維持するために更新中に発生する可能性のある問題を回避することです。
同時実行性: 同時実行性が高い状況では、多くのユーザーが同時にデータをデータベースに読み書きします。したがって、データの不整合を避けるために、これらの操作を調整する必要があります。たとえば、複数の人が同時に航空券を予約する場合、同時書き込みを避ける必要があります。 リレーショナル データベースの同時実行性は、データへのトランザクション アクセスを通じて処理されます。
バックアップとリカバリ: リレーショナル データベースにより、データの状態が常に一貫していることが保証されます。ほとんどのクラウドベースのリレーショナル データベースは、データ損失を回避し、回復プロセスをより簡単かつ迅速にするために継続的なミラーリングを実行します。
リレーショナル データベースの欠点
インピーダンスの不一致
ここでまず、インピーダンス不整合とは何なのかを丁寧に説明する必要があります。データベース インピーダンスの不一致とは、さまざまなソフトウェア コンポーネントまたはシステムで使用されるデータ構造とモデルの間に一貫性が欠如している場合に、ソフトウェア開発でよく発生する問題を指します。
データベースでは、インピーダンスの不一致は、オブジェクト指向プログラミング (OOP) モデルとリレーショナル データベース管理システム (DBMS) で使用されるリレーショナル モデルの間の違いを指します。
ここで、いわゆる不一致の意味を簡単に説明するための図も見つけました。図の上部は、ツリー、配列、リンク リスト、ハッシュなどのメモリ データ構造です。右下の部分は関連データベースです。 2 つのデータの保存方法が矛盾していると、データベースの運用時に問題が発生します。インピーダンスの不一致 (Impedance Mismatch) も、連想データベースの重要な欠点です。
非リレーショナルデータベース
NoSQLとは何ですか?
NoSQL 手段 SQLだけではないは非リレーショナル データベースです。つまり、データの保存に従来のリレーショナル データベース モデルを使用しません。 NoSQL データベースは通常、キーと値のペア、ファイル、グラフ、ワイド テーブルなど、より柔軟で拡張可能なデータ モデルを使用します。
NoSQL データベースの種類
キーと値のデータベース
キーと値のデータベースは、ハッシュ テーブルなどのキーと値のメソッドを使用して、キーと値のペアの形式でデータを保存します。キーは主キーとして機能し、値は単純なスカラー値から複雑なオブジェクトまで何でも可能です。一般的なキーと値のデータベースには、Amazon DynamoDB、Redis、Memcached DB などがあります。
使用シナリオ:
- キャッシュ: キーと値のデータベースは、頻繁に使用されるデータにすばやくアクセスできるようにするためのキャッシュとしてよく使用されます。たとえば、Web アプリケーションはキーと値のデータベースを使用してページ コンテンツをキャッシュできます。
- セッション データ: キーと値のデータベースを使用して、ユーザーのログイン情報やショッピング カートの内容などのセッション データを保存できます。
- 構成データ: キーと値のデータベースは、アプリケーション設定やシステム パラメーターなどの構成データを保存するために使用できます。
- カウンタ: キーと値のデータベースを使用して、Web サイトのトラフィック統計などのカウンタを保存できます。
文書データベース
XML、JSON、BSON、およびその他の形式のドキュメントはすべて、ファイル データベース内の保存形式であり、これらのファイルは、マップやコレクションを含むことができる特別なデータ構造で構成されています。一般的なファイル データベースには、MongoDB と Firestore が含まれます。
使用シナリオ:
- コンテンツ管理システム (CMS): CMS はドキュメント データベースを使用して、記事、ページ、メディア ファイルなどのコンテンツを保存します。
- 電子商取引 Web サイト: 電子商取引 Web サイトは、ファイル データベースを使用して製品情報、顧客情報、および注文情報を保存します。
- ソーシャル メディア アプリケーション: ソーシャル メディア アプリケーションは、ドキュメント データベースを使用してユーザー データ、投稿、コメントを保存します。
- アプリケーション ログ: アプリケーション ログは、ファイル データベースを使用してアプリケーション ログ データを保存します。
- モノのインターネット (IoT) デバイス: モノのインターネット (IoT) デバイスは、ファイル データベースを使用してセンサー データとデバイスのステータスを保存します。
グラフデータベース
グラフ データベースは、グラフを使用してデータを保存します。グラフはノードとエッジで構成され、ノードはエンティティ間の関係を表します。一般的なグラフ データベースには、OrientDB と InfiniteGraph があります。
使用シナリオ:
- ソーシャル ネットワーク分析: ソーシャル ネットワーク分析では、グラフ ライブラリを使用して、友人、家族、同僚間の関係など、ソーシャル ネットワーク内の関係を分析します。
- レコメンデーション システム: レコメンデーション システムは、グラフ データベースを使用して、ユーザーの興味や他のユーザーとの関係に基づいて製品やサービスをユーザーに推奨します。
- 不正検出: 不正検出では、グラフ データベースを使用して、既知の詐欺師に関連するトランザクションの特定など、不正行為を検出します。
- ナレッジ グラフ: ナレッジ グラフは、グラフ データベースを使用して、エンティティ、概念、それらの間の関係など、現実世界に関する知識を保存およびクエリします。
- サプライ チェーン管理: サプライ チェーン管理では、グラフ ライブラリを使用して、サプライヤー、メーカー、小売業者間の関係など、サプライ チェーン内の関係を管理します。
列型データベース
列型データベース データを行ではなく列に格納するデータベースです。データを行に格納する従来のリレーショナル データベースとは異なり、列指向データベースは同一の値を多数格納できるため、データを効果的に圧縮できます。一般的な列指向データベースには、HBase、Hypertable、Amazon Redshift などがあります。
使用シナリオ:
- 科学コンピューティング: 科学コンピューティングでは、カラム型データベースを使用して科学データを分析します。
- 財務分析: 財務分析では、列指向データベースを使用して財務データを分析します。
- Advertising Analytics: Advertising Analytics は、列型データベースを使用して広告キャンペーンのパフォーマンスを分析します。
NoSQLデータベースの利点
シンプルな設計: リレーショナル データベースとは異なり、NoSQL は、結合操作が必要な複数のテーブルではなく単一のファイルにすべての従業員データを保存するなど、インピーダンスの不一致に対処する必要がありません。 この戦略により、コードの作成、デバッグ、保守がよりシンプルかつ簡単になります。
水平スケーリング: まず、大規模なクラスター上でデータベースを実行できるため、NoSQL が推奨されます。 NoSQL データベースは通常、複数のノードにデータを分散し、ノード間でデータとクエリのバランスを自動的にとります。
可用性: データの可用性を高めるために、アプリケーションのダウンタイムなしでノードの交換を実行できます。 非リレーショナル データベースのほとんどのバージョンは、高可用性と災害復旧を確保するためにデータ レプリケーションをサポートしています。
低コスト: 多くの RDBMS はライセンスに非常に高価ですが、多くの NoSQL データベースはオープンソースで無料で利用できます。 同様に、一部の RDBMS は高価な独自のハードウェアとストレージ システムに依存していますが、NoSQL データベースは安価な汎用サーバーのクラスターを使用することがよくあります。
NoSQLデータベースの欠点
標準化の欠如: NoSQL は特定の標準に準拠していません。たとえば、アプリケーションをあるタイプの NoSQL データベースから別のタイプに変換するのは困難です。
一貫性: NoSQL データベースに障害が発生した場合は、一貫性と可用性を考慮する必要があります。非リレーショナル データベースではデータの整合性が悪く、データの一貫性は強くありません。
複雑:NoSQL データベースのモデルとインターフェイスは、リレーショナル データベースのモデルとインターフェイスよりも複雑である場合があります。非リレーショナル データベースにはいくつかの種類がありますが、リレーショナル データベースのインターフェイスはそれほど変わりません。
リレーショナル データベースと非リレーショナル データベースのどちらを選択すればよいでしょうか?
選択には多くの要因が影響します。次の表では、リレーショナル データベースと非リレーショナル データベースを比較しています。
リレーショナルデータベース | 非リレーショナルデータベース |
---|---|
構造化: データはテーブルに格納され、各テーブルは行と列で構成されます。行はデータ レコードを表し、列はデータ属性を表します。データは事前定義された形式に準拠する必要があります。 | 柔軟性: JSON、BSON、グラフィックスなどのさまざまな形式でデータを保存できます。データ構造は、構造化、半構造化、または非構造化のいずれかになります。 |
OLTP (オンライン トランザクション処理) に適しています: 注文、トランザクション、ログインなど、頻繁な読み取りおよび書き込み操作の処理に適しています。 | OLAP (オンライン分析処理) に適しています: 販売傾向、顧客行動、市場分析など、複雑なクエリと分析の処理に優れています。 |
スケールアウトが困難: データ量が増加すると、パフォーマンスが低下する可能性があります。より多くのデータを処理するには、さらにサーバーを追加する必要があります。 | スケールアウトが簡単: ノードを追加することで、パフォーマンスのボトルネックを発生させることなく、より多くのデータを処理できます。 |
ACID は、原子性、一貫性、分離性、耐久性を保証します。複数のユーザーが同時にアクセスしている場合でも、データは常に一貫しています。 | ACID の保証がない場合があります。データが複数のノード間で複製される場合など、特定の状況ではデータに一貫性がない可能性があります。 |
モデルとインターフェイスはより複雑になる場合があります。SQL などのクエリ言語の知識が必要です。 | モデルとインターフェイスは一般にシンプルになり、使いやすく、理解しやすくなります。 |
成熟したテクノロジー: 何十年も前から存在しており、広範なサポートとツールが提供されています。 | 新しいテクノロジー: まだ開発中のため、成熟したツールやサポートが不足している可能性があります。 |
関連記事
DNSとは何ですか?ドメインネームシステム入門 – システム設計 06
システム設計コンポーネントの構成要素の概要 – システム設計 05