はじめに
データベースは、多くの現代的なアプリケーションやツールにとって不可欠なコンポーネントです。ユーザーとして、ウェブサイトを閲覧したり、スマートフォンでアプリケーションを使用したり、食料品店で商品を購入したりする際に、毎日数十から数百のデータベースと対話している可能性があります。開発者として、データベースはアプリケーションのライフサイクルを超えてデータを永続化するために使用されるコアコンポーネントです。しかし、データベースとは一体何であり、なぜこれほど一般的なのでしょうか?
この記事では、以下について説明します。
- データベースとは何か
- 人々やアプリケーションがさまざまな種類のデータを追跡するためにどのように使用されるか
- データベースが提供する機能
- どのような種類の保証をするか
- 他のデータストレージ方法とどのように比較されるか
最後に、アプリケーションが複雑な機能を可能にするために、データの保存と取得のためにどのようにデータベースに依存しているかについて説明します。
データベースとは?
データベースとは、将来の処理、検索、または評価のためにデータを整理および保存するために使用される論理構造です。コンピューターのコンテキストでは、これらの構造はほとんど常にデータベース管理システムまたはDBMSと呼ばれるアプリケーションによって管理されます。DBMSは、コンピューターのディスク上の専用ファイルを管理し、ユーザーとアプリケーションに論理インターフェースを提供します。
データベース管理システムは通常、特定のパターンに従ってデータを整理するように設計されています。 データベースの種類またはデータベースモデルと呼ばれるこれらのパターンは、個々のデータがどのように保存および管理されるかを決定する論理的および構造的な基盤です。 データベースには多くの異なる種類があり、それぞれに独自の利点と制限があります。 データを行と列で構成された相互参照テーブルに整理するリレーショナルモデルは、多くの場合、デフォルトのパラダイムと見なされています。
DBMSは、コマンドラインクライアント、API、プログラミングライブラリ、管理インターフェースなど、さまざまな手段を介して管理するデータベースにアクセスできるようにすることができます。 これらのチャネルを通じて、データをシステムに取り込み、必要に応じて整理し、要求に応じて返すことができます。
データの永続性 vs 一時的なストレージ
データベースは、ディスクまたはインメモリのいずれかにデータを保存します。
ディスクストレージは一般的に永続的であると言われます。これは、データベースアプリケーションまたはコンピューター自体が再起動した場合でも、データが後で使用するために確実に保存されることを意味します。
対照的に、インメモリストレージは一時的または揮発性であると言われます。 一時的なストレージは、アプリケーションまたはシステムのシャットダウン後も存続しません。 インメモリデータベースの利点は、通常非常に高速であることです。
実際には、多くの環境で、これらの両方のタイプのシステムを組み合わせて使用して、各タイプの利点を活用します。 一時的なレイヤーへの新しい書き込みを受け入れるシステムの場合、これは一時的なデータを定期的にディスクに保存することで実現できます。 他のシステムは、読み取りアクセスを高速化するために、永続データの読み取り専用インメモリコピーを使用します。 これらのシステムは、データをリフレッシュするために、いつでもバッキングストレージからデータをリロードできます。
バッキングストレージタイプ | 再起動後もデータは存続しますか? | 利点 | 例 |
---|---|---|---|
ディスク上 | はい | データの寿命 | MySQL |
インメモリ | いいえ | 運用速度 | memcached |
データを管理するためにデータベースと対話する
データベースシステムは、ディスクまたはインメモリにデータを保存する方法を処理しますが、ユーザーまたはアプリケーション用のインターフェースも提供します。 データベースのインターフェースは、外部の当事者が実行できる操作を表現でき、システムがサポートするすべてのデータ型を表現できる必要があります。
Wikipediaによると、データベースは通常、次の4種類の対話を許可しています
- データ定義:データ構造の定義を作成、変更、および削除します。 これらの操作は、データベースがデータを受け入れて保存する方法に影響を与えるプロパティを変更します。 これは、データベースの種類によっては、他の種類よりも重要です。
- 更新:データベース内のデータを挿入、変更、および削除します。 これらの操作は、管理されている実際のデータを変更します。
- 検索:保存されたデータへのアクセスを提供します。 データはそのまま取得することも、より有用な形式に加工するためにフィルタリングまたは変換することもできます。 多くのデータベースシステムは、これを実現するために豊富なクエリ言語を理解しています。
- 管理:ユーザー管理、セキュリティ、パフォーマンス監視など、データ自体には直接関係しないが必要なその他のタスク。
以下でこれらについてもう少し詳しく見ていきましょう。
データ定義は、システム内のデータの形状と構造を制御します
データベース内でデータが取る構造を作成および制御することは、データベース管理の重要な部分です。 これは、データをシステムに取り込む前に、データの形状または構造を制御するのに役立ちます。 また、データが特定のパラメーターに準拠していることを確認するための制約を設定することもできます。
リレーショナルデータベースのように、非常に規則的なデータを操作するデータベースでは、これらの定義はデータベースのスキーマとして知られています。 データベーススキーマは、特定のデータベースに受け入れられるためにデータをどのようにフォーマットする必要があるかの厳密な概要です。 これは、個々のレコードに存在する必要がある特定のフィールドと、データ型、フィールド長、最小値または最大値などの値の要件をカバーします。 データベーススキーマは、データベース所有者がシステムに保存されるデータを影響および制御するために持つ最も重要なツールの1つです。
規則性よりも柔軟性を重視するデータベース管理システムは、スキーマレスデータベースと呼ばれることがよくあります。 これは、これらのデータベースに保存されているデータには構造がないことを意味するように思われるかもしれませんが、通常はそうではありません。 代わりに、データベースの構造は、データ自体と、データに関するアプリケーションの知識と関係によって決定されます。 データベースは通常、依然として構造に準拠していますが、データベース管理システムは制約の適用にはあまり関与していません。 これは、状況に応じて利点と欠点がある設計上の選択です。
データをシステムに取り込み、変更、および削除するためのデータ更新
データ更新には、次の操作が含まれます。
- システムに新しいデータを入力する
- 既存のエントリを変更する
- データベースからエントリを削除する
これらの機能は、すべてのデータベースに不可欠であり、多くの場合、データベースシステムが処理するアクションの大部分を構成します。 これらのタイプの活動(システム内のデータに変更を引き起こす操作)は、総称して書き込み操作と呼ばれます。
書き込みアクションは、時間の経過とともに変化するデータソースにとって重要です。 データを削除するという破壊的なアクションでさえ、システム内のデータを変更するため、書き込み操作と見なされます。
書き込み操作はデータを変更する可能性があるため、これらのアクションは潜在的に危険です。 ほとんどのデータベース管理者は、誤ったデータや悪意のあるデータ改ざんの可能性を最小限に抑えるために、特定のアプリケーションプロセスへの書き込み操作を制限するようにシステムを構成しています。 たとえば、Webサイトのパフォーマンスや訪問者の行動に関する質問に答えるために既存のデータを使用するデータ分析には、読み取り権限のみが必要です。 一方、ユーザーの注文を記録するアプリケーションの部分は、データベースに新しいデータを書き込むことができる必要があります。
情報を抽出したり、特定の質問に答えたりするためのデータの検索
データを保存することは、必要なときにデータを取得する方法がない限り、あまり役に立ちません。 データを返すことは、データベースに現在保存されている情報に影響を与えないため、これらのアクションは読み取り操作と呼ばれます。 読み取り操作は、データベースに既に保存されているデータを収集する主な方法です。
データベース管理システムには、ほとんどの場合、プライマリキーと呼ばれる一意の識別子によってデータにアクセスする簡単な方法があります。 これにより、キーを提供することで、任意のエントリにアクセスできます。
多くのシステムには、特定の基準に一致するデータセットを返すか、エントリに関する部分的な情報を返すためにデータベースをクエリする洗練された方法もあります。 このタイプのクエリの柔軟性は、データベース管理システムが基本的なデータストレージ機能に加えて、データプロセッサとして機能するのに役立ちます。 特定のクエリを開発することにより、ユーザーは必要な情報のみを返すようにデータベースシステムに促すことができます。 この機能は、プロパティによって特定のレコードを特定および変更するために、書き込み操作と組み合わせて使用されることがよくあります。
すべてをスムーズに実行し続けるためのデータベースシステムの管理
データベースがしばしばサポートするアクションの最後のカテゴリは、管理機能です。 これは、データ自体に直接影響を与えることなく、データベース環境をサポートするのに役立つ広範で一般的なアクションのクラスです。 このグループに当てはまる可能性のある項目には、次のようなものがあります。
- ユーザー、権限、認証、および認可の管理
- バックアップの設定と保守
- ストレージのバッキングメディアの構成
- レプリケーションおよびその他のスケーリングの考慮事項の管理
- オンラインおよびオフラインのリカバリオプションの提供
この一連のアクションは、最新のアプリケーションに共通する基本的な管理上の懸念事項と一致しています。
管理操作は、コアデータ管理機能の中心ではないかもしれませんが、これらの機能は、多くの場合、同様のデータベース管理システムを区別します。 データのバックアップと復元を簡単に行えること、既存のシステムにフックするユーザー管理を実装できること、または需要を満たすためにデータベースをスケーリングできることは、本番環境で運用するための不可欠な機能です。 これらの領域に注意を払わないデータベースは、実際の環境で採用されるのに苦労することがよくあります。
データベースはどのような責任を負うのか?
上記の記述を考えると、データベースが負う主な責任をどのように一般化できるでしょうか? 答えは、使用されているデータベースの種類とアプリケーションの要件に大きく依存します。 それでも、すべてのデータベースが提供しようとしている共通の責任のセットがあります。
忠実な記録と再構成を通じてデータ整合性を保護する
データの整合性は、データベースシステムの基本的な要件であり、その目的や設計に関係なく必要です。 データベースにロードされたデータは、予期しない変更、操作、または消去なしに確実に取得できる必要があります。 これには、データのロードと取得の信頼できる方法、および物理メディアに保存するために必要に応じてデータをシリアル化およびデシリアライズ化する方法が必要です。
データベースは、チェックサムのように、データの書き込みまたは取得時にデータを検証する機能や、予期しないシャットダウンによって引き起こされる問題を先行書き込みログなどの手法を使用して保護する機能に依存していることがよくあります。 データ整合性は、データストアが分散されるほど難しくなります。これは、システムの各部分が各データアイテムの現在の目的の状態を反映する必要があるためです。 これは多くの場合、システム内でデータが変更されるたびに、複数のメンバーからのより堅牢な要件と応答によって実現されます。
デプロイ環境の要件を満たすパフォーマンスを提供する
データベースは、有用であるためには適切に実行する必要があります。 必要なパフォーマンス特性は、アプリケーションの特定の要求に大きく依存します。 すべての環境には、読み取り要求と書き込み要求の独自のバランスがあり、それらのカテゴリ両方で許容可能なパフォーマンスが何を意味するかを決定する必要があります。
データベースは一般に、特定のタイプの操作を実行するのが得意です。 運用パフォーマンス特性は、多くの場合、使用されるデータベースの種類、データスキーマまたは構造、および操作自体の反映です。 場合によっては、インデックス作成などの機能(一般的にアクセスされるデータの代替パフォーマンス最適化ストアを作成する)により、これらのアイテムの取得が高速になる場合があります。 また、データベースが要求されているアクセスパターンに適合していない場合もあります。 これは、必要なデータベースの種類を決定する際に考慮すべきことです。
安全な同時アクセスを可能にするためのプロセスの設定
これは厳密な要件ではありませんが、実際的には、データベースは同時アクセスを許可する必要があります。 これは、複数の当事者が同時にデータベースを操作できる必要があることを意味します。 レコードは、任意の数のユーザーが同時に読み取り可能であり、別のユーザーによって現在ロックされていない場合は書き込み可能である必要があります。
同時アクセスは通常、データベースがユーザーアカウント、アクセス許可システム、認証および認可メカニズムなどの他の基本的な機能を実装する必要があることを意味します。 また、複数のユーザーが同じデータを同時に操作しようとするのを防ぐための戦略も開発する必要があります。 レコードロックとトランザクションは、多くの場合、これらの懸念に対処するために実装されます。
個別にまたは集計してデータを取得する
データベースの基本的な責任の1つは、要求に応じてデータを取得する機能です。 要求は、単一のレコードに関連付けられた個々のデータの一部である場合もあれば、多くの異なるレコードで見つかったデータを取得することを含む場合もあります。 これらのケースの両方が、ほとんどのシステムで可能である必要があります。
ほとんどのデータベースでは、取得中にデータベース自体によってある程度のデータ処理が提供されます。 これらには、次のタイプの操作を含めることができます。
- 基準による検索
- フィルタリングと制約の遵守
- 特定のフィールドの抽出
- 平均、ソートなど
これらのオプションは、必要なデータと最も役立つ形式を明確にするのに役立ちます。
データベースの代替手段
次に進む前に、データベースを使用しない場合のオプションを簡単に見ておく必要があります。
データを保存するほとんどの方法は、何らかの種類のデータベースとして分類できます。 いくつかの例外には、次のものがあります。
ローカルメモリまたは一時ファイルシステム
アプリケーションによっては、役に立たないデータや、アプリケーションのライフサイクルにのみ関連するデータが生成される場合があります。 このような場合、アプリケーションが終了すると不要になるため、そのデータをメモリに保持するか、一時ファイルシステムにオフロードすることをお勧めします。 データが役に立たない場合は、出力を完全に無効にするか、/dev/null
に記録することをお勧めします。
アプリケーションデータをローカルファイルシステムに直接シリアル化する
データベースが不要になる可能性のあるもう1つのインスタンスは、少量のデータを直接シリアル化およびデシリアル化できる場合です。 これは、同時実行性がほとんどまたはまったくない、予測可能な使用パターンを持つ少量のデータにのみ実用的です。 これは適切にスケーリングされませんが、ローカルログ情報の出力など、特定のケースに役立つ可能性があります。
ファイルのようなオブジェクトをディスクまたはオブジェクトストレージに直接保存する
アプリケーションからのデータは、データベースに保存する代わりに、ディスクまたは代替ストアに直接書き込むことができる場合があります。 たとえば、データが画像ファイルやオーディオファイルなどのファイル指向形式ですでに整理されており、追加のメタデータを必要としない場合は、ディスクまたは専用のオブジェクトストアに直接保存するのが最も簡単な場合があります。
データベースは何に使われるのか?
完全に静的ではないほとんどすべてのアプリケーションとWebサイトは、環境内のどこかのデータベースに依存しています。 データベースの主な目的は、多くの場合、使用されるデータベースの種類、保存されるデータ、および採用されるアクセスパターンを決定します。 多くの場合、異なる要件を持つ異なるタイプのデータを処理するために、複数のデータベースシステムがデプロイされます。 一部のデータベースは、さまざまなデータセットの性質に応じて、複数の役割を果たすのに十分な柔軟性を備えています。
一般的なWebアプリケーションがデータベースと接する可能性のあるタッチポイントについて説明するために、例を見てみましょう。 アプリケーションには基本的なストアフロントが含まれており、在庫で追跡するアイテムを販売することを想定しています。
サイトデータの保存と処理
データベースの主な用途の一つは、サイトに関連するデータを保存および処理することです。これらの項目は、サイト上の情報の整理方法に影響を与え、多くの場合、サイトの「コンテンツ」の大部分を構成します。
上記の例のアプリケーションでは、データベースは、製品情報、在庫詳細、ユーザープロファイル情報など、サイトのコンテンツの大部分を生成します。これは、製品リスト、製品詳細ページ、またはユーザープロファイルを表示する必要があるたびに、データベースまたは何らかの中間キャッシュが参照されることを意味します。
データベースは、現在および過去の注文の表示、送料の計算、割引コードの確認や頻繁な顧客向け特典の計算による割引の適用にも関与します。当社のサンプルサイトでは、データベースシステムを使用して、製品情報、在庫、ユーザー情報を組み合わせて注文を正しく構築します。注文に記録される複合情報は、注文処理の追跡、返品の許可、注文のキャンセルまたは変更、またはより良い顧客サポートを可能にするために、再びデータベースに保存されます。
より良い意思決定を支援するための情報分析
最後のカテゴリのアクションは、ウェブサイトの基本的な機能に関連していました。これらはアプリケーション層のデータ要件を処理するために非常に重要ですが、全体像を表しているわけではありません。
ウェブアプリケーションがユーザー登録と注文処理を開始すると、異なる製品がどのように売れているか、最も収益性の高いユーザーは誰か、売上に影響を与える要因は何かなど、詳細な質問に答えられるようにしたいと思うでしょう。これらは、組織のトレンドとパフォーマンスに関する最新のインテリジェンスを収集するために、いつでも実行できる分析的な質問です。
これらのタイプの操作は、多くの場合、ビジネスインテリジェンスまたはアナリティクスと呼ばれます。これらは全体として、組織が過去に何が起こったかを理解し、情報に基づいた変更を行うのに役立ちます。データベースシステムは、これらのプロセス中に使用されるデータの大部分を保存し、それに関する質問に答えるための適切なツールまたはクエリ機能を提供する必要があります。
当社のサンプルアプリケーションでは、製品のトレンド、ユーザー登録数、最も多く出荷している州、または最もロイヤルティの高いユーザーは誰かなどの質問に答えるためにデータベースをクエリできます。これらの比較的基本的なクエリを使用して、製品のパフォーマンスに影響を与える要因をより良く理解し、制御するためのより複雑な質問を構成できます。
ソフトウェア構成の管理
一部のタイプのデータベースは、ネットワーク上の他のソフトウェアの構成値のリポジトリとして使用されます。これらは、ネットワーク上の構成値の単一の真実の情報源として機能します。新しいサービスが起動されると、構成データベースのネットワークアドレスで特定のキーの値を確認するように構成されます。これにより、サービスをブートストラップするために必要なすべての情報を1か所に保存できます。
ブートストラップ後、アプリケーションは構成に関連するキーの変更を監視するように構成できます。変更が検出されると、アプリケーションは新しい構成を使用するように自身を再構成できます。このプロセスは、多くの場合、管理プロセスによって調整され、新しいサービスが起動するにつれて古いサービスを停止させ、アクティブな構成を時間の経過とともに変更して可用性を維持することにより、新しい値を徐々に展開します。
当社のアプリケーションでは、このタイプのデータベースを使用して、アプリケーション環境全体の永続的な構成データを保存できます。アプリケーションサーバー、ウェブサーバー、ロードバランサー、メッセージングキューなどは、構成データベースを参照して本番環境設定を取得するように構成できます。アプリケーションの開発者は、中央の場所で構成値を調整することにより、環境の動作を変更できます。
ログ、イベント、およびその他の出力の収集
アクティブにリクエストを処理しているアプリケーションを実行すると、多くの出力が生成される可能性があります。これには、ログファイル、イベント、およびその他の出力が含まれます。これらはディスクまたは他の管理されていない場所に書き込むことができますが、これにより有用性が制限されます。このタイプのデータをデータベースに収集すると、操作が容易になり、パターンを特定し、予期しない事態が発生した場合、または過去のパフォーマンスについて詳しく知る必要がある場合にイベントを分析することが容易になります。
当社のサンプルアプリケーションでは、分析を容易にするために、各システムのログを1つのデータベースに収集する場合があります。これにより、問題の原因を分析したり、環境全体の健全性を理解しようとしたりする場合に、イベント間の相関関係を見つけるのに役立ちます。
別途、インフラストラクチャとコードによって生成されたメトリクスを時系列データベース、つまり時間の経過に伴う値を追跡するように特別に設計されたデータベースに収集する場合があります。このデータベースは、アプリケーションの開発および運用チームにパフォーマンス、エラー率などに関する情報を提供するために、リアルタイム監視および視覚化ツールを強化するために使用できます。
さまざまな役割はデータベースとどのように連携しますか?
データベースは、組織内の多くの異なる役割の仕事にとって不可欠です。小規模なチームでは、1人または少数の個人がさまざまな役割の職務を遂行する責任を負う場合があります。大企業では、これらの責任は多くの場合、専任の個人またはチームによって実行される個別の役割に分割されます。
データアーキテクト
データアーキテクトは、データベースシステムの全体的なマクロ構造、アプリケーションおよび開発チームに公開するインターフェース、および組織のデータニーズを満たすために必要な基盤となるテクノロジーとインフラストラクチャを担当します。
この役割の人は一般的に、さまざまなアプリケーションで使用される適切なデータベースモデルと実装を決定します。彼らは、オプションを調査し、テクノロジーを決定し、既存のシステムと統合し、組織の包括的なデータ戦略を開発することにより、データベースの決定を実装する責任があります。彼らはデータシステムを全体論的に扱い、さまざまなプロジェクトのデータモデルの決定と実装に関与します。
DBA(データベース管理者)
データベース管理者、またはDBAは、データシステムを円滑に稼働させ続ける責任を負う個人です。彼らは、新しいデータシステムの計画、ソフトウェアのインストールと構成、他の当事者向けのデータベースシステムのセットアップ、およびパフォーマンスの管理を担当します。また、データベースのセキュリティ保護、問題の監視、および使用パターンに合わせてシステムを最適化するための調整も担当することがよくあります。
データベース管理者は、個々のデータベースシステムと、パフォーマンスを最大化するために基盤となるオペレーティングシステムおよびハードウェアと適切に統合する方法の両方の専門家です。彼らは、データベースを使用するチームと広範囲に協力して、容量とパフォーマンスを管理し、チームがデータベースシステムの問題をトラブルシューティングするのを支援します。
アプリケーション開発者
アプリケーション開発者は、さまざまな方法でデータベースと対話します。彼らは、データベースと対話するアプリケーションの多くを開発します。これは非常に重要です。なぜなら、これらはほとんどの場合、個々のユーザーまたは顧客がデータベースシステムによって管理されるデータと対話する方法を制御する唯一のアプリケーションであるからです。パフォーマンス、正確性、信頼性は、アプリケーション開発者にとって非常に重要です。
開発者は、データをディスクに永続化するために、アプリケーションに関連付けられたデータ構造を管理します。プログラミングデータをデータベースシステムにマッピングして、コンポーネントが調和して動作できるようにするメカニズムを作成または使用する必要があります。アプリケーションが変更されると、データベースシステム内のデータとデータ構造を同期させておく必要があります。開発者としてデータベースを操作する方法については、記事の後半で詳しく説明します。
SRE(サイト信頼性エンジニア)および運用専門家
SRE(サイト信頼性エンジニア)および運用専門家は、インフラストラクチャおよびアプリケーション構成の観点からデータベースシステムと対話します。彼らは、追加の容量のプロビジョニング、データベースシステムの立ち上げ、データベース構成が組織のガイドラインに一致していることの確認、稼働時間の監視、バックアップの管理を担当する場合があります。
多くの点で、これらの個人はDBAと重複する責任を負っていますが、データベースのみに焦点を当てているわけではありません。運用スタッフは、データベースシステムを含む、組織の残りの部分が依存するアプリケーションシステムが確実に確実に機能し、ダウンタイムが最小限になるようにします。
ビジネスインテリジェンスおよびデータアナリスト
ビジネスインテリジェンス部門とデータアナリストは、主にデータベースシステム内で既に収集および利用可能なデータに関心を持っています。彼らは、データ内のトレンドとパターンに基づいて洞察を開発し、将来のパフォーマンスを予測し、組織に変更の可能性についてアドバイスし、マーケティングや販売などの他の部門からのデータに関する質問に答えるために働きます。
データアナリストは通常、データシステムへの読み取り専用アクセスのみで作業できます。彼らが実行するクエリは、プライマリアプリケーションで使用されるクエリとはパフォーマンス特性が大きく異なることがよくあります。このため、プライマリデータベースシステムのリソース使用量に影響を与える可能性のある、長時間実行されるパフォーマンス集約型集計クエリを実行できるように、データベースレプリカまたはコピーで作業することがよくあります。
開発者としてデータベースを操作するにはどうすればよいですか?
では、アプリケーション開発者として実際にデータベースを操作するにはどうすればよいでしょうか?基本的なレベルでは、アプリケーションが状態を管理および永続化する必要がある場合、データベースの操作はコードの重要な部分になります。
アプリケーションとデータベース間のデータ変換
データベースと通信するための既存のインターフェースを作成または使用する必要があります。通常のネットワーク機能を使用してデータベースに直接接続したり、単純なライブラリや高レベルのプログラミングライブラリ(クエリビルダーやORMなど)を活用したりできます。
ORM、またはオブジェクト-リレーショナルマッパーは、リレーショナルデータベースにあるテーブルをオブジェクト指向プログラミング言語で使用されるクラスに、またその逆に変換するマッピングレイヤーです。この変換は多くの場合役立ちますが、完璧ではありません。オブジェクト-リレーショナルインピーダンスミスマッチは、リレーショナルデータベースとオブジェクト指向プログラムがデータを構造化する方法の違いによって引き起こされる摩擦を説明するために使用される用語です。
リレーショナルデータベースとオブジェクト指向プログラミングは2つの特定の設計上の選択肢を記述していますが、アプリケーション層とデータベース層間の変換の問題は、データベースのタイプやプログラミングパラダイムに関係なく存在する一般的な問題です。データベース抽象化レイヤーは、これら2つのコンテキスト間の変換を担当するソフトウェアのより一般的な用語です。
データベースとの構造変更の同期維持
アプリケーションを開発する際に発見する重要な事実の1つは、データベースがコードベースの外に存在するため、データ構造の変更に対処するために特別な注意が必要になることです。この問題は、一部のデータベース設計でより顕著です。
アプリケーションのデータ構造をデータベースと同期するための最も一般的なアプローチは、データベースマイグレーションまたはスキーママイグレーション(どちらも口語的には単にマイグレーションとして知られています)と呼ばれるプロセスです。マイグレーションには、アプリケーションのデータモデルの進化に合わせてデータベースの構造を更新することが含まれます。これらは通常、進化ごとに1つずつ、データベースを新しい形式に変換するために必要なステートメントを含む一連のファイルの形式を取ります。
データへのアクセス保護と入力のサニタイズ
開発者としてデータベースを操作する際の重要な責任の1つは、アプリケーションがデータへの不正アクセスを許可しないようにすることです。データセキュリティは、多くの利害関係者がいる広範囲にわたる多層的な問題です。最終的に、セキュリティに関する考慮事項の一部は、あなたが面倒を見る義務になります。
アプリケーションは、ルーチンタスクを実行するためにデータベースへの特権アクセスを必要とします。安全のため、データベースの認証フレームワークは、アプリケーションが実行できる操作のタイプを制限するのに役立ちます。ただし、アプリケーションがそれらの操作を適切に制限していることを確認する必要があります。たとえば、アプリケーションがユーザープロファイルデータを管理する場合、ユーザーがそのアクセスを操作して他のユーザーの情報を表示または編集できないようにする必要があります。
特定の課題の1つは、ユーザー入力のサニタイズです。入力のサニタイズとは、ユーザーから提供されたデータを操作する際に特別な予防措置を講じることを意味します。悪意のある者が通常のユーザー入力メカニズムを使用して、アプリケーションをだまして機密データを明らかにするという長い歴史があります。これらのシナリオから保護するようにアプリケーションを作成することは、重要なスキルです。
結論
データベースは、最新のアプリケーション開発に不可欠なコンポーネントです。アプリケーションとその環境に関連するステートフル情報を保存および制御することは、信頼性、パフォーマンス、および柔軟性を必要とする重要な責任です。
幸いなことに、さまざまなタイプのアプリケーションの要件を満たすように設計された多くの異なるデータベースオプションがあります。次の記事では、利用可能なさまざまなタイプのデータベースと、それらをさまざまなタイプのアプリケーション要件に合わせて使用する方法について詳しく見ていきます。
Prismaは、アプリケーションからデータベースを簡単に操作できるようにする方法の1つです。Prismaが提供するものについての詳細は、Why Prisma?ページをご覧ください。
Prismaデータベースコネクタを使用すると、Prismaをさまざまなタイプのデータベースに接続できます。詳細については、ドキュメントをご覧ください。
FAQ
データベースは、ディスクまたはメモリのいずれかにデータを保存します。ディスクストレージは一般的に永続的であると言われ、データベースアプリケーションまたはコンピューター自体が再起動した場合でも、データが後で使用するために確実に保存されることを意味します。
データベース管理者、またはDBAは、データシステムを円滑に稼働させ続ける責任を負う個人です。彼らは、新しいシステムの計画、ソフトウェアのインストールと構成、他の当事者向けのデータベースシステムのセットアップ、およびパフォーマンスの管理を担当します。
データベース抽象化レイヤーは、コンピューターアプリケーションとデータベース間の通信を統合するアプリケーションプログラミングインターフェースです。
データベース管理とは、データライフサイクル全体で必要な条件を満たすために、データの操作と制御のために行われるアクションを指します。
データベース管理タスクには、パフォーマンスの監視とチューニング、ストレージと容量の計画、バックアップとリカバリデータ、データアーカイブ、データパーティショニング、レプリケーションなどが含まれます。
データベース管理システム(DBMS)は、データの保存、取得、およびクエリの実行に使用されるソフトウェアシステムです。これらは、エンドユーザーとデータベース間のインターフェースとして機能し、CRUD操作を実行します。