はじめに
データベースを扱う場合、テクノロジー、最適な使用方法、および環境の他の部分との関連性を理解するために、学ぶ必要のある用語がたくさんあります。この用語集は、データベースコミュニティで使用される一般的な用語を収集し、知識を深めるのに役立つ定義とコンテキストを提供することを目的としています。
この用語集は、作成中の生きたドキュメントです。新しいトピックを追加し、既存のエントリを改良するために更新していく予定です。近い将来追加したい用語のバックログがありますが、取り上げてほしいことがあれば、GitHub issue を開いて提案を追加してください。
用語集
- 1NF
- 1NF(第一正規形)は、各テーブル列に単一の値のみが含まれるデータベース正規化のタイプを表します。ネストされたテーブルが値として含まれている列または複数の値を持つ列は、1NF に準拠していません。
- 2NF
- 2NF(第二正規形)は、次のデータベース正規化のタイプを表します。1)1NF の要件を満たしていること、2)候補キーのサブセットに直接結び付けられた値がないこと。言い換えれば、リレーションが 2NF に準拠しているのは、1NF に準拠しており、候補キー以外のすべての値が複合キー全体に依存しており、候補キーの一部だけに依存していない場合です。たとえば、`book` テーブルに `title` と `author` で構成される候補キーがある場合、著者の生年月日を記述する `dob` フィールドも含まれている場合、2NF に準拠できません。その列の値は `author` の値にのみ依存しており、値が同期しなくなると矛盾が生じる可能性があります。
- 3NF
- 3NF(第三正規形)は、次のデータベース正規化のタイプを表します。1)2NF の要件を満たしていること、2)各非キー属性がキー属性に推移的に依存していないこと。たとえば、`user` テーブルに主キーとして `user_id` 列、`user_city` 列、および `user_state` 列がある場合、`user_state` が `user_city` を介して `user_id` に推移的に依存しているため、3NF に準拠していません(都市と州は独自のテーブルに抽出され、まとめて参照される必要があります)。
- 4NF
- 4NF(第四正規形)は、次のデータベース正規化のタイプを表します。1)BCNF の要件を満たしていること、2)すべての非自明な多値依存関係について、依存関係の決定属性が候補キーであるか、そのスーパーセットであること。言い換えれば、フィールドに互いに独立した複数の依存フィールドがある場合、4NF ルールに違反する冗長性につながる可能性があります。
- ACID
- ACID — 原子性、一貫性、独立性、および永続性という単語から作成された頭字語 — は、データベーストランザクションが提供することを意図した特性のセットを表します。原子性は、トランザクション内のすべての操作が正常に完了するか、ロールバックされることを保証します。一貫性は、データベースではなくアプリケーションによって維持されるプロパティと見なされることが多いですが、すべての関連値が一度に更新されるようにするためにトランザクションを通じて達成されることがよくあります。トランザクションの独立性は、同時トランザクションが独立して実行できるようにすることを目的としています。永続性とは、トランザクションがコミットされたときに不揮発性ストレージに保存されることを意味します。
- アクセス制御リスト(ACL)
- アクセス制御リスト(多くの場合、ACL と略されます)は、各ユーザーまたはプロセスがどのリソースに対してどのアクションを実行できるかを指示するセキュリティポリシーリストです。さまざまな種類の ACL がありますが、それぞれがシステムによって許可されるアクセス許可とアクセスパターンを記述しています。
- アクティブレコード ORM
- アクティブレコード ORM は、データベース内の各テーブルをアプリケーション内のクラスとして表現しようとすることで機能するオブジェクトリレーショナルマッパーです。テーブル内の各レコードは、クラスのインスタンスとして表現されます。データベースエントリは、アプリケーションでこれらの表現と対話することで追加および管理されます。
- アンチキャッシュ
- アンチキャッシュは、データがより高速なインメモリキャッシュに見つからず、より低速な永続ストレージから取得する必要がある場合に使用できる戦略です。この手法では、トランザクションを中止し、より低速なメディアからメモリにデータをフェッチする非同期操作を開始します。トランザクションは後で再試行でき、情報はメモリから提供される準備が整います。
- 原子性
- 原子性は、主にデータベーストランザクションに関連付けられる品質であり、トランザクションにカプセル化された操作がオールオアナッシング方式で処理されることを意味します。これにより、エラー状態が発生する前に一部の操作が実行され、データが矛盾する部分的な更新が発生するのを防ぎます。トランザクションの場合、すべての操作がコミットされるか、すべての操作がロールバックされて、データベースがトランザクション開始時と同じ状態になります。
- 属性
- 属性は、データベース内の特定のエンティティを記述する特性です。ER(エンティティ関係)モデルでは、属性はエンティティに関する情報を追加する関係ではない追加のプロパティです。
- 認証
- 認証は、ID を検証するアクションです。コンピューティングとデータベースでは、認証は主に、アクセスを要求する人またはプロセスが、特定の ID で操作できることを検証するための資格情報を持っていることを証明する方法として使用されます。実際的な用語では、これには、ID(ユーザー名など)と関連する認証資料(パスワード、証明書またはキーファイル、または ID に関連付けられた人が所有するハードウェアデバイスによって生成された秘密など)の提供が含まれる場合があります。認証は、ユーザーがシステムでアクションを実行する権限を持っているかどうかを判断するために認可と組み合わせて使用されます。
- 認可は、特定のユーザーまたはプロセスが特定のアクションを実行することを許可されるべきかどうかを判断するアクションです。認可には、誰がどのアクションを実行することを許可されるべきかを記述するガイドラインのセットに対して、要求されたアクションをチェックすることが含まれます。認可は通常、リクエストの前に信頼できる認証プロセスが行われ、サブジェクトの ID を確認することに依存しています。
- 可用性
- 可用性は、システムが実行されており、作業を実行できる程度を表すプロパティです。データベースのようなコンピューティングシステムに関して言えば、単一のマシンの場合、可用性はそのコンピューター上のアプリケーションの稼働時間と同義です。分散システムの場合、可用性は、システムの一部が利用できなくなった場合に、システムがどの能力で機能し続けることが許可されるかを指示するルールに従います。
- BASE
- BASE — ほとんど利用可能、ソフトステート、および結果整合性という単語から作成された頭字語 — は、一部の NoSQL データベースの特性のセットを表します。ACID 準拠(原子性、一貫性、独立性、および永続性)によって記述されたプロパティに準拠しない特定のデータベースの説明として提供されています。BASE データベースは、ネットワークパーティションの場合に厳密なデータ一貫性を犠牲にして、利用可能な状態を維持することを選択します。ソフトステートコンポーネントは、システムのさまざまなメンバーがシステム内で最も正しい値をネゴシエートするため、システムの状態が変動する可能性があるという事実を指します。結果整合性は、システムが最終的に十分な時間が与えられ、その間に新しい矛盾が導入されないと仮定して、一貫性を達成するという、もう 1 つの関連するステートメントです。
- BCNF
- BCNF(ボイスコッド正規形)は、次のデータベース正規化のタイプを表します。1)3NF の要件を満たしていること、2)各依存関係の決定属性(別の属性の値を指示する属性)が、依存属性の _スーパーセット_ であるか、候補キーであるか、または候補キーのスーパーセットであること。
- ブルーグリーンデプロイメント
- ブルーグリーンデプロイメントは、2 つの同一のインフラストラクチャセット間でアクティブなトラフィックを管理することにより、ほとんどまたはまったくダウンタイムなしでソフトウェアアップデートをデプロイする手法です。新しいリリースは、非アクティブなインフラストラクチャグループにデプロイされ、個別にテストできます。新しいバージョンをリリースするには、トラフィックルーティングメカニズムを切り替えて、現在のインフラストラクチャから新しいバージョンを含むインフラストラクチャにトラフィックを転送します。以前アクティブだったインフラストラクチャは、次のアップデートのターゲットとして機能するようになりました。この戦略は、ルーティングメカニズムがデプロイの成功に応じて前後に簡単に切り替えて、ロールバックまたはフォワードできるという点で役立ちます。
- ボトルネック
- コンピューティングでは、ボトルネックは、システムのパフォーマンスまたは容量が単一コンポーネントを中心とした競合によって制限される場合に発生します。データベースでは、これはデータベースが実行されているハードウェアまたは利用可能なネットワーク環境に関連している可能性があります。アプリケーションの使用パターンも、どのリソースが最も競合しているかに影響を与える可能性があります。ボトルネックを解決するには、まずシステムのパフォーマンスを制限しているリソースを特定し、追加の容量を追加するか、使用率を下げる対策を講じる必要があります。
- CAP 定理
- CAP 定理は、分散データベースに関するステートメントであり、どのシステムも、一貫性、可用性、およびパーティション耐性の 3 つの品質のうち、最大 2 つしか提供できないと述べています。一般に、パーティション耐性は、すべてのネットワークパーティションを回避する唯一の方法が非分散システムを持つことであるため、すべての分散システムの機能である必要があることに同意しています。したがって、各分散システムは、パーティションの場合にデータの整合性を優先するか(パーティションの場合に新しい変更を受け入れないことによって)、またはシステムの可用性を優先するか(パーティション中に新しい変更を導入できるようにするために、ある程度の一貫性を犠牲にすることによって)を決定する必要があります。
- CRUD
- CRUD — 作成、読み取り、更新、および削除を表す頭字語 — は、保存されたデータを操作するために使用する基本的な操作を表します。SQL では、CRUD のコンポーネントは、`INSERT`、`SELECT`、`UPDATE`、および `DELETE` 操作に大まかに対応していますが、他の多くの操作はよりきめ細かいアクションを容易にします。より一般的には、CRUD は、ユーザーインターフェイスと API のコンテキストでも、システムが許可する可能性のあるアクションのタイプの説明としてよく議論されます。
- キャッシュ
- キャッシュは、価値の高いデータまたは頻繁に要求されるデータのより高速な取得を可能にするように設計されたシステムのコンポーネントです。一般に、キャッシュは、長期的な不揮発性ストレージに焦点を当てた一般的な用途の永続メディアよりも高性能またはクライアントに近いメディアにデータの有用な部分を格納することで機能します。一般に、キャッシュは高性能である傾向がありますが、容量がより制限され、より高価になる傾向があります。
- キャッシュアサイド
- キャッシュアサイドは、アプリケーションとデータベース間の通常のパスの外側にキャッシュを配置するキャッシュアーキテクチャです。この構成では、アプリケーションはキャッシュにデータがある場合はそこからデータをフェッチします。データがキャッシュにない場合、アプリケーションは元のデータソースに個別のクエリを発行してデータをフェッチし、後続のクエリのためにそのデータをキャッシュに書き込みます。キャッシュとバッキングデータソース間の最小限のクロスオーバーにより、このアーキテクチャは利用できないキャッシュに対して回復力があります。キャッシュアサイドは、読み取り負荷の高いワークロードに適しています。
- キャッシュの無効化
- キャッシュの無効化は、キャッシュから特定のアイテムをターゲットにして削除するプロセスです。ほとんどの場合、これはレコードを更新する際の手順の一部として実行され、キャッシュ内のデータがクライアントに古いデータを提供しないようにします。
- カナリアリリース
- カナリアリリースは、ソフトウェアの新しいバージョンを少数のサーバーサブセットにデプロイして、影響が限定された環境で新しい変更をテストするリリース戦略を表します。テストグループのデプロイと結果の動作が観察され、チームは変更をロールバックするか、より広範囲のホストに変更のデプロイを続行するかを決定できます。カナリアリリースは、問題によって影響を受けるクライアントの数を制限しながら、本番環境でテストする方法です。
- 候補キー
- リレーショナルデータベースの候補キーは、最小スーパーキーの用語です。言い換えれば、候補キーは、特異性に役立たない列を含めずに、リレーション内の各レコードを一意に識別するために使用できる列または列の組み合わせです。`cars` テーブルでは、一意の `car_id` 列は候補キーになります。また、`make`、`model`、および `year` 列の組み合わせも候補キーになります(重複を排除するのに十分な特定性があると仮定)。ただし、`car_id` と `make` は、このインスタンスでは `make` が各行の一意性を絞り込むために何もしていないため、候補キーにはなりません。
- カスケード
- リレーショナルデータベースでは、カスケードは、他のテーブルに関連エントリを持つレコードの削除または更新を処理する方法のオプションです。カスケードとは、操作(削除または更新)を子、依存行にも適用する必要があることを意味します。これは、削除の場合に孤立した行を回避し、更新の場合に同期していない値を回避するのに役立ちます。
- Cassandra
- Apache Cassandra は、大量のデータの操作と管理に焦点を当てた分散型のワイドカラム NoSQL データベースです。Cassandra は非常に優れたスケーリングを行い、クラスター内の各ノードは読み取りまたは書き込みを受け入れることができます。データは、一意に識別可能で、パーティションキーに基づいてパーティション化された行に格納されます。各パーティションキーは、内部で定義された列名と値の両方を持つデータの行を返します。つまり、同じカラムファミリ内の各行には異なる列が含まれる場合があります。
- チェック制約
- チェック制約は、リレーショナルデータベースに追加できる最も柔軟なテーブルまたは列制約である可能性があります。これは、システムによって提案されたデータが受け入れられるために満たされる必要のあるブール条件として定義されています。条件の性質がかなりオープンエンドであるため、チェック制約を使用して、システムに入ってくるデータが期待に準拠していることを保証するために、さまざまなタイプの要件をモデル化できます。
- クラスター
- コンピューティングでは、クラスターは、共有タスクを支援するために専用のコンピューターのグループです。データベースクラスターは、単一のコンピューターにデプロイされたデータベースと比較して、特定タイプのアクションの容量、可用性、およびパフォーマンスを向上させるために使用されます。さまざまなクラスタ化システムがさまざまなレベルのパフォーマンスまたはフォールトトレランスを達成するために採用している、さまざまなトポロジ、テクノロジー、およびトレードオフがあります。さまざまな実装の多様性のため、すべてのクラスタ化データベースシステムに適用される特定の特性を一般化することは困難な場合があります。
- 照合順序
- データベースの照合順序とは、さまざまな文字システムの順序付けおよび比較特性を指します。ほとんどのデータベースでは、照合順序の設定を割り当てることができます。これは、システム内のテキストがどのようにソート、表示、および相互に比較されるかに影響します。照合順序は、文字セット、言語コンテキスト、および大文字と小文字、アクセント、その他の文字修飾子に対する感度または非感度に関するさまざまなオプションを記述するラベルのセットを使用して定義されることがよくあります。
- コレクション
- ドキュメントデータベースでは、コレクションはドキュメントのグループをまとめて格納するために使用されるコンテナです。コレクションには、アプリケーションおよびデータベース設計者によって割り当てられたセマンティックな意味がある場合がありますが、それ以外の場合は、システム内でさまざまなドキュメントセットを相互に分割する単なる方法です。異なるコレクションには異なるプロパティを割り当てることができ、特定ドキュメントコレクションを対象とするアクションを実行できます。
- 列
- 列は、テーブル指向データベースのコンポーネントであり、その列に格納されている各値のタイプをラベル付けし、場合によっては定義します。従来のリレーショナルデータベースでは、一連の列のプロパティは、テーブルのプロパティ全般を定義する主要な方法の 1 つです。テーブルに追加された各行は、テーブルの列に関連付けられた要件に準拠する値を提供する必要があります。非リレーショナルデータベースでは、列は多くの異なるプロパティを持つことができます。ただし、一般に、レコードがその列に格納することを選択した値の特性をラベル付けおよび定義するために使用されます。
- 列データベース
- 列データベースまたは列指向データベースは、従来のリレーショナルデータベースに似たテーブル指向データベースであり、レコードごとではなく列ごとにバックグラウンドでデータを格納します。これは、単一の列に関連付けられたデータが、単一のレコードに関連付けられたすべてのデータをグループ化するのではなく、まとめて格納されることを意味します。これにより、使用パターンに応じて異なるパフォーマンス特性が得られる可能性がありますが、通常はユーザーが日常的にテーブル内のデータを操作する方法には影響しません。文献でしばしば混同されますが、列データベースは、ワイドカラムデータベースまたはカラムファミリデータベースと混同しないでください。
- カラムファミリ
- カラムファミリは、キーと値のペアのグループを格納するデータベースオブジェクトです。各キーは行識別子であり、各値は列名と値のグループです。全体として、カラムファミリはリレーショナルデータベースのテーブルに似たものを構築します。ただし、各行は独自の列を定義できるため、行の長さは異なり、表現される列または格納されるデータ型で互いに一致する必要はありません。
- コマンドクエリ責務分離
- コマンドクエリ責務分離は、基盤となるデータベースへの影響に基づいて操作を分離できるアプリケーション設計パターンです。一般に、これは通常、データを読み取るクエリとデータを変更するクエリに対して異なるメカニズムを提供することを意味します。これら 2 つのコンテキストを分離すると、各ユースケースを個別にスケーリングするためにインフラストラクチャとシステムを変更でき、パフォーマンスが向上します。
- コミット
- データベースのコンテキストでは、データのコミットとは、提案されたアクションのセットを実行して永続的に保存するプロセスです。多くのデータベースは、システムによって受信された各ステートメントを自動的にコミットするように構成されていますが、たとえばトランザクションは、複数のステートメントをグループ化してグループとしてコミットすることにより、データベースのコミット動作を制御できるメカニズムの 1 つです。データベースでのコミットは、システムで永続的なアクションを実行する責任がある実際のアクションです。
- 複合キー
- リレーショナルデータベースでは、複合キーは、テーブル内の任意のレコードを一意に識別するために使用できる 2 つ以上の列で構成されるキーです。たとえば、サイズと色の組み合わせごとに単一のレコードのみを格納する `shirts` テーブルがある場合、`color` 列と `size` 列の組み合わせによって定義された複合キーを持つことができます。
- 並行性
- 並行性とは、システムが全体的な結果に影響を与えることなく、複数のタスクを一度に処理できる能力です。並行性により、システムは操作を並行して実行でき、タスクグループの相対的なパフォーマンスが向上します。
- コネクションプーリング
- コネクションプーリングは、アプリケーションとデータベース間の接続を管理することにより、パフォーマンスを向上させ、接続枯渇を回避するために使用される戦略です。これは、データベースへの接続のプールを維持することによりこれを行います。接続を開いたままにして複数のクエリに再利用することにより、アプリケーションは接続を確立するたびにオーバーヘッドを回避でき、データベースの接続制限はプーリングコンポーネントによって管理できます。
- 一貫性
- 一貫性は、データシステムのプロパティであり、個々のデータエンティティが競合せず、変更が導入されても意図した情報をモデル化し続けることを意味します。各データと変更は、データ構造に課せられたルールに準拠していることを保証するために検証する必要があり、他のデータに影響を与える可能性のある変更(たとえば、同時に異なるアカウントを借方記入および貸方記入するなど)のバランスを取るように注意する必要があります。
- 制約
- 制約とは、特定の列またはテーブルに課せられた制限であり、システムによって受け入れられる値の範囲に影響を与えます。制約は、データベースシステムが値を要件に準拠させるために強制できるルールを定義するために使用されます。
- カーソル
- データベースカーソルは、クライアントがレコードとクエリ結果を制御された正確な方法で反復処理する方法です。カーソルは主に、処理のために次の行を反復的に返すことにより、クエリに一致する結果を 1 つずつページングするために使用されます。これにより、結果をキューとしてアクセスすることにより、不明な数のレコードを操作するのに役立ちます。カーソルはデータベースシステムのリソースを消費し、ロックを引き起こす可能性があり、多くの場合、そうでなければ必要となるよりもはるかに多くのネットワークラウンドトリップが発生するため、カーソルを使用する場合は注意が必要です。
- ダークローンチ
- ダークローンチは、組織がユーザーエクスペリエンスに影響を与えることなく、本番環境コンテキストで新しい変更をテストするのに役立つデプロイおよびリリース戦略です。ダークローンチには、元の機能と並行して新しいコードをリリースすることが含まれます。リクエストとアクションはミラーリングされ、古いコードと新しいコードの両方に対して実行されます。ユーザーの視点からのシステムの動作は元のコードによってのみ影響を受けますが、新しいコードは実際のデータでテストして、機能を確認し、パフォーマンスと機能の問題をキャッチできます。適切に精査されたら、新しいコードパスのみを使用するようにアプリケーションを変更できます。
- データ
- 最も広い意味で、データは事実または情報の断片です。それらは、何かに関する情報を含む測定値または値です。一部のコンテキストでは、データは情報とは異なると定義されています。情報は分析または処理されたデータであり、データは生の値のみで構成されます。ただし、実際には、これらの用語は同義語としてよく使用され、通常、解釈または文脈化するために必要な関連するコンテキストとともに事実をカプセル化します。データは、ほぼすべての通信と活動に不可欠なコンポーネントであり、収集、分析、および文脈化されるにつれて意味と価値を獲得できます。
- データ定義言語(DDL)
- データ定義言語(DDL)は、データベース構造とオブジェクトを定義するために使用されるコマンドまたはアクションのセットです。これらは、リレーショナルデータベースおよびその他のデータベースの重要なコンポーネントであり、SQL などの言語でデータを管理するために利用可能なコマンドのサブセットとして表現されます。データ定義言語は、データを保持する構造とフレームワークを記述、作成、および変更することに専念する言語の部分です。
- データの独立性
- データの独立性とは、データベースクライアントまたはアプリケーションを、データを表現および格納する責任がある基盤となる構造から分離することを記述するために使用される用語です。データベースが構造を抽象化し、リレーションに属性が追加された場合(論理的独立性)、またはストレージメディアの詳細が変更された場合(物理的独立性)でも、ユーザーアプリケーションが実行を継続できるようにする場合、データの独立性が達成されます。
- データマッパーORM
- データマッパーORM、または単にデータマッパーは、データベース表現とアプリケーションに存在するデータ構造の間を変換する仲介役として機能するアプリケーションコンポーネントです。データマッパーを使用すると、アプリケーションロジックとデータベースデータ表現を独立した状態に保つことができます。データマッパーは、これら 2 つのメディア間でデータを管理および変換するため、各表現は独立しており、インテリジェントに構造化できます。
- データ型
- データ型は、有効な値の制約を表すカテゴリまたは属性です。たとえば、整数型は、変数またはフィールドに対して整数のみが適切で予期されることを指定します。データ型を使用すると、フィールドまたはコンテナを定義するときに、データに関する期待と要件を指定できます。プログラミング言語またはアプリケーションは、導入されたデータが必要な基準を満たしていることを検証できます。データ型は、データの一部に対して実行できる利用可能な操作を決定するのにも役立ちます。
- データベース
- データベースは、データを整理、構造化、および保存するために使用される構造です。データベースは、多くの場合、データベース管理システムによって管理されます。データベース管理システムは、データベースと管理するデータを操作および対話するためのインターフェイスを提供します。データベースは、高度に構造化することも、より柔軟なデータストレージパターンを許可することもでき、クエリ、リコール、および取得時にデータを結合できる方法で、さまざまな種類のデータを保存できます。
- データベース抽象化レイヤー
- データベース抽象化レイヤーは、基盤となるデータベーステクノロジー間の違いを抽象化して、アプリケーションレイヤーに統一されたエクスペリエンスまたはインターフェイスを提供しようとするプログラミングインターフェイスです。データベース抽象化レイヤーは、さまざまな製品間の実装の違いを正規化し、基盤となるテクノロジーが進化しても安定した状態を維持できるため、開発者にとって役立つことがよくあります。ただし、抽象化のリーク、実装固有の機能または最適化をユーザーからマスクする、および解除が困難な依存関係を作成するなど、いくつかの課題もあります。
- データベース管理者(DBA)
- データベース管理者(DBA)は、データベースシステムと、ソフトウェアおよびハードウェアの関連エコシステムの構成、管理、および最適化を担当する役割です。彼らが関与する可能性のある責任には、アーキテクチャ計画、構成、スキーマと変更管理、移行、レプリケーションとロードバランシング、シャーディング、セキュリティに関する考慮事項、バックアップ戦略の管理などが含まれます。データベース管理者は通常、データベース設計と理論の専門知識を持ち、組織がデータベーステクノロジーの選択と実装に関する意思決定を行うのを支援できることが期待されています。多くの現代の組織では、従来 DBA が保持していた責任は、開発チームと運用チームのさまざまなメンバーの間で分散されるか、ジョブのインフラストラクチャ管理部分の一部を簡素化するために外部プロバイダーにオフロードされるようになりました。
- データベースエンジン
- データベースエンジンは、データがどのように格納および取得されるか、およびシステムおよびデータとの対話をサポートするためにサポートされているアクションを定義する責任を負うデータベース管理システムの一部です。一部のデータベース管理システムは、さまざまな機能と設計を提供する複数のデータベースエンジンをサポートしていますが、他のシステムは、ソフトウェアの目標に合わせて設計された単一のデータベースエンジンのみをサポートしています。
- データベース管理システム(DBMS)
- データベース管理システム(DBMS)は、DBMS または単に「データベース」とも呼ばれ、データを整理および管理する責任を負うアプリケーションです。DBMS は、さまざまなパラダイムに従い、特定の目標を優先することができます。一般的に、少なくとも、データの永続化、データの整理と分類、データの取り込み、操作、およびクエリを担当します。ほとんどの場合、DBMS はクライアント/サーバーモデルを提供します。サーバーはデータの制御と管理を担当し、クライアント、ライブラリ、または API を使用してサーバーと対話し、データの追加またはクエリ、データ構造の変更、またはシステムの他の側面を管理できます。
- データベースモデル
- データベースモデルとは、データベース管理システムがデータを保存、整理、およびアクセスするために使用する全体的な戦略です。利用可能なデータベースモデルは多数ありますが、リレーショナルモデルはおそらく最も一般的なタイプであり、高度に構造化されたテーブルを使用して特定の形式でデータを保存します。その他のデータベースタイプには、ドキュメントデータベース、ワイドカラムデータベース、階層型データベース、キーバリューストアなどがあります。一部のデータベースシステムは「マルチモデル」として設計されており、同じシステム内で異なるタイプのモデルを持つデータベースをサポートすることを意味します。
- データベースプロキシ
- データベースプロキシは、データベースクライアントとデータベースサーバー間の接続を管理するソフトウェアコンポーネントです。データベースプロキシは、接続数を制限された数に整理したり、データベース層の透過的なスケーリングを可能にしたり、デプロイメントや同様のシナリオのためにトラフィックをリダイレクトしたりするなど、多くの理由で使用されます。データベースプロキシは通常、アプリケーションに対して透過的に設計されており、アプリケーションはバックエンドデータベースに直接接続しているかのようにプロキシに接続できます。
- データセット
- データセット(データセットと綴られることもあります)は、データの単一のコレクションです。通常、これは特定のタスク、アプリケーション、または関心領域に適用可能な関連データのまとまりを表します。通常、データセットは、データ自体と、それを解釈するために必要な構造とコンテキストの組み合わせです。多くの場合、さらなる分析と解釈のための生データとして機能できる定量的および定性的な値の組み合わせで構成されています。
- 非正規化
- 非正規化とは、データベース内のデータと構造が「非正規化」される、つまり正規化された状態から取り出されるプロセスです。正規化されるはずのデータ構造が適切に定義されていないか、または管理が不十分な場合、これは偶発的に発生する可能性があります。ただし、特定のシナリオでは意図的に実行されることもよくあります。非正規化は、値を異なる場所に冗長に保存することで、データへの高速アクセスを可能にする傾向があります。この欠点は、書き込みパフォーマンスが低下し、同じデータを表すために複数の場所が使用されるため、データが同期しなくなる可能性があることです。
- ダーティリード
- ダーティリードとは、あるトランザクションが別のトランザクションによってコミットされていないデータを読み取ることができる特定の種類のアノマリーです。2番目のトランザクションがコミットされずにロールバックされた場合、最初のトランザクションはデータベースの実際の状態を反映していない値を使用することになります。ダーティリードは、トランザクションの特定の分離レベルで発生する可能性があり、並行してデータを操作する際に不整合を引き起こす可能性のあるリスクを表します。
- 分散データベース
- 分散データベースとは、複数の物理システムにまたがるデータベースシステムです。データは、パフォーマンスまたは可用性のために多数のマシンに分散されます。分散システムはデータベースをスケールアウトしてより多くの負荷を処理するのに役立ちますが、複雑さも大幅に増大し、整合性やパーティションの課題、場合によってはデータ書き込みの増加などのパフォーマンスへの悪影響につながる可能性があります。
- ドキュメント
- ドキュメントデータベースのコンテキストでは、ドキュメントは、関連する記述データを含む単一のレコードまたはオブジェクトを表す情報のコンテナと見なされます。ドキュメントは、システムの他のドキュメントと一致する必要のない柔軟な構造を持つことができ、ネストされることもよくあります。ドキュメントは通常、JSONやYAMLなどのデータシリアライズ形式で表され、ドキュメントをラベルとメタデータで整理できます。
- ドキュメントデータベース
- ドキュメントデータベースとは、項目をドキュメントと呼ばれる個々のオブジェクトで表すデータベースモデルです。ドキュメントは整理のためにグループ化できますが、同じ構造を共有する必要はなく、問題の項目を記述するために必要なデータを一意にキャプチャするように設計できます。ドキュメントデータベースは通常、異なるドキュメントをリンクするための堅牢な結合操作をサポートしていませんが、その柔軟性と、プログラム的なデータ構造を表現する際の柔軟性と容易さによる迅速な生産性向上のためにしばしば賞賛されています。
- 永続性
- 永続性とは、プログラムのクラッシュが発生した場合でも存続する永続ストレージにデータがキャプチャされたことを意味するデータの品質です。通常、これは状態を維持するために電気を必要としないハードドライブのような不揮発性ストレージメディアにデータをフラッシュすることを意味します。
- エンコーディング
- エンコーディングとは、書き言葉で使用されるコンポーネントを表すことができる文字システムと、コンピュータが保存および操作できるデジタル表現の間を翻訳するシステムです。さまざまなエンコーディングシステムが、幅広い文字範囲で開発されてきました。一部は特定の言語または言語ファミリー(ASCIIなど)を対象としていますが、他のものは、さまざまな言語(UTFユニコードバリアントなど)に適した、はるかに大きな文字セットの表現を提供しようとしています。
- 暗号化されたトランスポート
- 暗号化されたトランスポートとは、メッセージを受信者に送信する前に暗号化するあらゆるタイプの通信プロセスです。トランスポート暗号化は、プライバシーを確保(他の人が機密情報を見るのを防ぐ)だけでなく、改ざんを回避(データの操作を明らかにする)ためにも必要です。TLS/SSL暗号化、VPN、プライベートネットワークなど、データベースをデプロイする際に使用できるさまざまな暗号化されたトランスポートシステムがあります。
- 一時性
- 一時性とは、データまたは状況が永続的ではないことを示す特性です。多くの点で、永続性の反対です。データベースでは、永続化したいデータなどの特定の項目は、一時的であってはなりません。ただし、データベースとクライアント間の接続を暗号化するために使用される秘密鍵などの他のコンポーネントは、鍵の漏洩が将来または過去のセッションに影響を与えるのを防ぐことで、一時的であることの恩恵を受けることができます。
- 一時ストレージ
- 一時ストレージは、揮発性または非永続ストレージとも呼ばれ、多くの場合、特定の条件に関連付けられた短時間だけ持続するストレージメディアです。たとえば、アプリケーションでは、メモリに保存されているデータは、プロセスが実行されている間だけ存続します。同様に、一時ディレクトリに保存されたデータは、システムが再起動するまでのみ利用可能です。多くの場合、一時ストレージは、一時データや、データがより永続的なメディアに保存される前の保持領域として役立ちます。
- 結果整合性
- 結果整合性とは、特定の分散コンピューティングまたはデータベースシステムによって実装される整合性/可用性戦略の説明です。分散システムのCAP定理は、システムがネットワークパーティションに直面した場合に、可用性とデータ整合性のどちらを優先するかを選択する必要があると述べています。結果整合性システムは、サーバーのピアが操作を確認するために利用できない場合でも、要求を処理し続けることで可用性を優先する選択をします。最終的に、パーティションが解決されると、整合性ルーチンが実行され、不整合なデータの最も正しい状態を決定しますが、異なるサーバー上のデータが一致しない時間が発生します。
- エビクション
- キャッシュのコンテキストでは、エビクションとは、データの一部がキャッシュから削除されるプロセスです。これは、現在の値が操作によって無効になったために発生する可能性もあれば、最も古いデータまたは最も使用されていないデータを削除するように設計されたポリシーの結果として自動的に発生する可能性もあります。
- 展開と縮小パターン
- 展開と縮小パターンとは、既存のアプリケーションに影響を与えずにデータベーススキーマに新しい変更を導入するための戦略です。これは、最初に既存の構造と並行して新しいまたは変更された構造を追加し、次に両方の構造を同時に使用するようにアプリケーションロジックを拡張することにより、慎重に制御された段階で変更を導入することで機能します。最終的に、テスト後、アプリケーションは元の構造への書き込みを停止し、削除できます。
- 抽出、変換、ロード (ETL)
- 抽出、変換、ロード(ETLと略されることが多い)とは、データソースから管理システムにデータをコピーおよび処理するプロセスです。最初に、データが現在のシステムから抽出され、宛先システムからアクセスできるようになります。次に、データが新しいシステムの要件と形式に合わせて操作および変更されます。最後に、再構築されたデータが新しいシステムにロードされます。
- フィーチャーフラグ
- フィーチャーフラグまたはフィーチャートグルは、外部スイッチまたはコントロールの背後に機能をゲーティングするプログラミング戦略です。スイッチは通常、最初にフィーチャーをアクティブにしないことを示すように設定されます。組織の準備が整うと、スイッチをアクティブにすることができ、プログラムは新しい機能の使用を開始します。これにより、新しい機能をすぐにアクティブ化せずにデプロイできます。これにより、新しいソフトウェアのデプロイとソフトウェアのリリースが分離され、変更の導入方法と本番環境でのより大規模なテストをより細かく制御できるようになります。
- フィールド
- データベース列、またはフィールドは、データベーステーブル内の特定のタイプのデータのコンテナです。リレーショナルデータベースのデータベースフィールドは、テーブル内の各行が同じ特性を持つ同じ数のフィールドを含むという意味で、規則的です。データベースフィールドに含めることができる値は、フィールドに割り当てられたデータ型と、有効な値をさらに制限する制約によって制御できます。
- フラットファイルデータベース
- フラットファイルデータベースとは、ファイルに保存されたデータベースまたはデータベースのような構造です。これらは、構造とデータベースに含まれるデータを統合された形式で定義します。CSV(カンマ区切り値)ファイルのようなフラットファイルデータベースの多くの例はプレーンテキストで記述されていますが、バイナリ形式も存在します。フラットファイルデータベースとより複雑なタイプの違いの1つは、ストレージ形式自体が、データベースシステムではなく、データ間の関係を記述する責任を負うことが多いことです。
- 外部キー
- 外部キーとは、2つのテーブル間のデータ整合性を維持するために使用されるリレーショナルデータベース内の指定された列または列のグループです。あるテーブルの外部キーは、別のテーブルの候補キー(通常は主キー)を参照します。候補キーが参照されているため、データベース内の各行は一意になり、2つのテーブルを行ごとに行リンクできます。これらの指定された列の値は、2つのテーブル間で同一のままであることが期待されます。外部キー制約により、データベースシステムはこの要件を強制的に適用し、値が同期しなくなるのを防ぐことができます。
- 全文検索
- 全文検索とは、データベースシステム内のドキュメントの完全なテキストを検索できる技術と機能のファミリーを指します。これは、メタデータ、部分的なテキストソース、およびその他の不完全な評価のみに依存する検索機能とは正反対です。全文検索は、ドキュメント内のテキストを分析および分類するために、自然言語対応パーサーを使用した非同期インデックス作成に依存しています。
- グラフデータベース
- グラフデータベースとは、グラフ構造を使用してデータ間の関係を保存および定義するNoSQLデータベースです。グラフデータベースは、エンティティを表し、プロパティまたは属性を含むことができるノードを使用して構築されます。ノードはエッジを使用して相互に接続されており、ノードをリンクするだけでなく、関係の性質を定義する役割も果たします。たとえば、ノードは「教師」のプロパティを持つ人を記述する場合があります。「教える」を指定するエッジを持つクラスノードに接続されている可能性がありますが、「結婚している」を指定するエッジを持つ別の人物ノードに接続されている可能性があります。
- GraphQL
- GraphQLは、データのクエリと操作に使用できる言語であり、APIの構築によく使用されます。クライアントは必要な正確なデータを指定でき、サーバーは提供された構造に従って応答を作成します。GraphQLの強みは、カスタム構造を使用してデータを返し、さまざまなバックエンドからデータをステッチし、単一のAPI呼び出しで複雑なクエリに答えることができることです。
- HTAPデータベース
- HTAPデータベース(ハイブリッドトランザクショナル/分析データベース)とは、高速で信頼性の高いトランザクション処理の利点と、同じマシン上で同時に重く複雑な分析ワークロードを処理できる能力の両方を提供しようとするデータベースのカテゴリです。これらのデータベース製品は、事後分析を行うのではなく、意思決定の方法に迅速に影響を与えることができるリアルタイム分析を可能にしようとしています。
- 階層型データベース
- 階層型データベースとは、ツリーのような構造に自身を編成するデータベースモデルです。各新しいレコードは、単一の親レコードに添付されます。レコードがデータベースに追加されると、ルートレコードからレコードがますます広がるにつれて、ツリーのような構造が現れます。レコード間のリンクをたどって他のレコードに到達できます。階層モデルを使用するシステムの例には、LDAP(ライトウェイトディレクトリアクセスプロトコル)やDNS(ドメインネームシステム)などがあります。
- 水平スケーリング
- 水平スケーリング(スケールアウトとも呼ばれます)とは、特定のタスクを実行できるユニットの数を増やすスケーリング戦略です。これは多くの場合、リクエストに応答できるワーカープール内のコンピュータの数を増やすことを意味します。スケールアウトには、コスト、柔軟性、および処理できるトラフィックレベルなど、多くの利点がありますが、特にデータが関係する場合、調整と複雑さの点で複雑さを増す可能性があります。
- ホットバックアップ
- ホットバックアップとは、データベースシステムがアクティブに使用されている間に行うデータベースシステムのバックアップです。可能であれば、データベースシステムをオフラインにして操作を実行する必要がないため、しばしば好ましいです。ホットバックアップは、データベースの特定の部分をロックする必要がある場合や、通常のデータベースタスクに使用できるIOPS(1秒あたりの入出力操作数)を減らす可能性があるため、常に可能であるとは限りません。
- インメモリデータベース
- インメモリデータベースとは、データセット全体をコンピュータのメモリにロードして処理できるデータベースシステムです。この処理モデルは、すべてのデータがすでにメインメモリにあり、低速なストレージからデータを取得する遅延がないため、大きなパフォーマンス上の利点を提供します。インメモリデータベースを使用する場合は、マシンの再起動時にデータを永続化またはインメモリ情報を再投入するための戦略を持つように注意する必要があります。
- インデックス
- データベースインデックスとは、テーブル内のレコードをより高速に見つけることができるように作成された構造です。インデックスを使用すると、データベースシステムは、特定の列の値に対して別の構造を保持することにより、データを効率的にルックアップできます。インデックス付き列をターゲットとするクエリは、各行を1行ずつチェックするよりも効率的なルックアップ戦略を使用することにより、テーブル内の該当する行を迅速に特定できます。インデックス付き列は読み取り操作を改善しますが、テーブルとインデックスの両方を更新する必要があるため、書き込み操作にオーバーヘッドを追加します。テーブルインデックスを設計する際には、これら2つの考慮事項のバランスを取ることが重要です。
- インジェスト
- データのインジェストとは、新しいデータをデータシステムにインポートする行為です。これは、1回限りのデータロード操作である場合もあれば、他のシステムによって生成されたデータの継続的な消費である場合もあります。データインジェストは、分析データベースやビッグデータストアを設定および更新する際の一般的な段階です。これらは多くの場合、さまざまなソースからのデータを統合するためです。
- 内部結合
- 内部結合とは、結合列の値が両方のテーブルに存在する場合にのみ行を返すことによって2つのテーブルを結合するリレーショナルデータベース操作の一種です。内部結合では、両方のテーブルの結合列に一致が必要です。一方のテーブルまたは他方のテーブルから欠落している行を埋めるために`NULL`値を使用する行はありません。
- インタラクティブトランザクション
- インタラクティブトランザクションとは、クライアントがアドホックな方法でトランザクション操作を手動で指定できるデータベーストランザクション機能です。トランザクションが、ポーズなしで順番にすべて実行できるクエリのグループをラップするのではなく、インタラクティブトランザクションを使用すると、開発者はデータベース操作を一時停止して、トランザクション処理を続行する前に他のロジックを実行できます。これにより、トランザクション処理に柔軟性がもたらされますが、注意深く管理しないと、不要なトランザクション実行時間につながる可能性があります。
- 分離
- データベースのコンテキストでは、分離とは、トランザクション内およびトランザクション間でデータと操作がどのように表示されるかを記述するプロパティです。分離レベルは、データベース管理者またはクエリ作成者が設定して、分離レベルとパフォーマンスのトレードオフを定義できます。分離は、ACIDの頭字語で説明されている主要な保証の1つです。
- 分離レベル
- 分離レベルとは、データベースがトランザクションを処理するときに行うことができる分離とパフォーマンスの間のさまざまなタイプのトレードオフを記述するものです。分離レベルは、トランザクション間で発生する可能性のあるデータリークの種類または発生する可能性のあるデータアノマリーを決定します。一般に、分離レベルが高いほど、処理が遅くなる代わりに多くの保証が提供されます。
- 結合
- リレーショナルデータベースでは、結合とは、共有の「結合」列または列に基づいて2つのテーブルを接続する操作です。結合列内の値は、各テーブル内で一意である必要があります。結合操作は、結合列の値に基づいて行を照合して、各テーブルの列で構成される拡張された仮想行を作成します。他のテーブルに一致する相手がない行でユーザーが何をしたいかに基づいて、さまざまなタイプの結合が利用可能です。
- キー
- データベースのコンテキストでは、キーとは、個々の行を一意に識別するために使用できる属性、列、または属性または列のグループのことです。一部のデータは、その自然な一意性(ナチュラルキー)のためにキーとして使用できますが、他のデータセットは、各レコードを識別するためにキー(サロゲートキーと呼ばれる)を生成する必要がある場合があります。各テーブルまたはデータコレクションには、行を一意に識別する複数のキー(候補キーと呼ばれる)を持つことができますが、通常、行にアクセスするための主な方法として指定されたメインキー(主キーと呼ばれる)があります。
- キーバリューデータベース
- キーバリューデータベースまたはキーバリューストアとは、キーを使用して任意の構造でデータを保存および取得できるデータベースモデルです。キーは、レコードを識別してアクセスするために使用され、レコードは単一の値またはより複雑なデータの構造で構成できます。キーバリューデータベースの各レコードは独自の構造を定義できるため、リレーショナルデータベースにあるような統一されたテーブル構造はありません。キーバリューデータベースは非常に柔軟性があり、多くのオブジェクト指向開発者にとってなじみのあるモデルを使用しているため、便利です。
- レフト結合
- レフト結合とは、指定された最初のテーブルのすべての行が返されるリレーショナルデータベースの結合操作であり、2番目のテーブルに一致する行が見つかったかどうかは関係ありません。結合操作は、各テーブルの指定された比較列に同一の値を持つレコードを照合することにより、仮想行を構築します。レフト結合の結果には、列の値が一致する両方のテーブルの行が含まれ、さらに最初または左側のテーブルからの一致しないすべての行が含まれます。これらの行の場合、2番目または右側のテーブルに関連付けられた列は、一致する行が見つからなかったことを示すために`NULL`値で埋められます。
- レクシーム
- レクシームとは、自然言語処理および全文検索のコンテキストで関連する意味の言語レベルの単位です。通常、テキストがインデックス化されると、個々のトークンに分割され、辞書、シソーラス、その他の単語リストなどの言語レベルのリソースを使用してレクシームとして分析され、それらをさらに処理する方法を理解します。
- ロケール
- データベースおよび一般的なコンピューティングでは、ロケールは、操作を実行し、結果をレンダリングするときに使用する必要がある地域、言語、国、およびその他のコンテキストデータを指定します。データベースでは、ロケール設定は、列の順序、値間の比較、スペル、通貨識別子、日付と時刻の書式設定などに影響を与える可能性があります。データベースサーバーレベルで正しいロケールを定義するか、データベースセッション中に必要なロケールを要求することは、操作が実行されることで期待される結果が得られることを保証するために不可欠です。
- ロック
- データベースでは、ロックとは、特定の操作中に整合性を維持するために、データベースレコードまたはテーブルの変更を防ぐために使用される手法です。ロックは、ロックされたリソースへのアクセスをすべて防ぐことも、特定の操作のみが実行されるのを防ぐこともできます。ロックは、特定のレコードまたはテーブル全体に対して発行できます。ロックは、同時操作がロックされたデータにアクセスするのを防ぐため、ロックされたデータがパフォーマンスに影響を与え、リソースの競合につながる可能性があります。
- MariaDB
- MariaDBは、Oracleによる買収後、コミュニティ内でプロジェクトの将来の方向性について不確実性が残ったため、MySQLのドロップイン代替を提供することを目標に開発されたオープンソースのリレーショナルデータベースシステムです。最初のフォーク以来、各プロジェクトは2つのデータベースシステム間のギャップを広げる機能を追加してきました。
- マイクロサービスアーキテクチャ
- マイクロサービスアーキテクチャとは、コンポーネントの開発、デプロイメント、および運用に影響を与えるアプリケーションおよびサービス設計です。マイクロサービスアプローチは、アプリケーションの機能を分解し、各責任を個別のサービスとして実装します。内部関数呼び出しではなく、サービスは明確に定義されたインターフェースを使用してネットワーク経由で通信します。マイクロサービスは、各コンポーネントを独立してコーディングおよび反復処理できるため、開発を高速化するのに役立つことがよくあります。また、各サービスを必要に応じてスケーリングできるため、スケーラビリティにも役立ちます。多くの場合、サービスオーケストレーションソフトウェアの助けを借りてスケーリングできます。
- 移行(データベース、スキーマ)
- データベースまたはスキーマの移行とは、データベース構造を新しい設計に変換するために使用されるプロセスです。これには、データベースまたはテーブルの既存のスキーマを変更する操作と、既存のデータを新しい構造に合わせて変換する操作が含まれます。データベースの移行は、多くの場合、互いに構築され、バージョン管理で順序付けられたリストとして保存されるため、現在のデータベース構造は、移行ファイルを順番に適用することで、以前のバージョンから構築できます。多くの場合、開発者は、以前は存在しなかった列や、簡単に元に戻すのが難しいデータへの変更など、新しい構造に合わせて既存のデータを最適に変更する方法について決定を下す必要があります。
- MongoDB
- MongoDBは、今日使用されている最も人気のあるドキュメント指向のNoSQLデータベースシステムです。データは、データ保存時に指定できるJSONのような構造を使用して保存されます。各ドキュメントは、必要なだけ複雑または単純な独自の構造を持つことができます。MongoDBは、データをプログラムまたはインタラクティブに管理およびクエリするための非SQLメソッドとコマンドを提供します。MongoDBは、高速なパフォーマンス、スケーラビリティ、および迅速な開発ペースを可能にすることで知られています。
- モノリシックアーキテクチャ
- モノリシックアーキテクチャとは、従来のアプリケーションを指すために使用される用語です。モノリスでは、開発を容易にするために内部的にさまざまな部分が分割されている場合でも、構築されると、アプリケーションは多くの異なる機能と責任を持つ単一の項目になります。モノリスは、外部世界とさまざまな方法でインターフェースできますが、プログラム内のさまざまな機能の通信と調整は内部的に行われます。モノリシックアーキテクチャは実装が容易であると考えられることもありますが、アプリケーション全体を単一のユニットとしてスケールアップおよびスケールダウンする必要があるため、スケーリングと可用性の点で柔軟性に欠けます。
- 多版数同時実行制御 (MVCC)
- 多版数同時実行制御(MVCC)とは、行およびテーブルのロックの代替として、データベースシステム内のデータへの同時アクセスを許可するための戦略です。MVCCは、データのセットにアクセスする各ユーザーに対して一貫性のあるデータ状態を表す「スナップショット」を取得することで機能します。MVCCの目標は、読み取りクエリが書き込みクエリをブロックせず、書き込みクエリが読み取りクエリをブロックしないシステムを提供することです。各クライアントは、自分だけがユーザーであるかのようにデータを読み取って使用できますが、データベースシステムは、各ユーザーによって読み取りおよび更新されているデータの複数のバージョンを追跡します。同じデータの更新によって引き起こされる競合を解決するために、ロックまたは通常のトランザクションロールバックおよび競合管理戦略が使用されます。
- MySQL
- MySQLは、今日利用可能な最も人気のあるリレーショナルデータベースシステムの1つです。1995年に最初にリリースされ、2010年にOracleによって買収されたMySQLは、強力で使いやすいリレーショナルシステムとしての長い歴史があります。幅広いストレージエンジンを提供し、非常に幅広いコミュニティサポートを誇っています。多くの人気のあるオープンソースおよび商用プロジェクトで使用されており、長年にわたって多くのインターネットサービスにとって重要なソフトウェアの一部と見なされていました。
- Neo4j
- Neo4jは、高性能なグラフ指向データベースシステムです。グラフデータ構造を備えたACID準拠のトランザクションを提供し、Cypherクエリ言語を使用して保存されたデータを管理およびクエリします。Neo4jを使用すると、開発者はグラフ指向のデータワークロードを簡単にスケールでき、さまざまな言語でクライアントを提供できます。
- ネットワークデータベース
- ネットワークデータベースとは、階層型データベースよりも複雑な関係を持つことができるデータオブジェクトを考案した初期のデータベースモデルです。ネットワークデータベースでは、ノードの関係を単一の親とゼロ以上の子供に制限する代わりに、複数の親を持つノードを表すことができました。これにより、より複雑な構造を表すことができましたが、一般的に、このモデルはリレーショナルデータベースの導入によって取って代わられました。
- NewSQL
- NewSQLとは、リレーショナルデータベースシステムの構造と整然とした保証、およびNoSQLデータベースに関連付けられた高性能とスケーラビリティの間のギャップを埋めようとする、より新しいリレーショナルデータベース製品のカテゴリの記述子です。NewSQLはかなり緩いカテゴリ分けですが、一般的にSQLまたはSQLのようなクエリ、トランザクション保証、および柔軟なスケーリングと分散処理を可能にするデータベースを指すために使用されます。
- NoSQL
- NoSQLデータベース(非リレーショナルデータベースまたはNot only SQLデータベースとも呼ばれることもあります)とは、一般的なリレーショナルデータベースモデルから逸脱するあらゆるタイプのデータベースシステムをカバーする幅広いカテゴリです。非リレーショナルデータベースは以前から存在していましたが、このカテゴリは一般的に、キーバリュー、ドキュメント指向、グラフ指向、カラムファミリストアなどの代替モデルを使用する新しい世代のデータベースを指すために使用されます。これらは一般的に、柔軟性とスケーラビリティに重点を置いて、リレーショナルモデルに適していないデータを管理するために使用されます。
- ノード
- データベースでは、ノードはデータベースの単一のインスタンスを指すことがよくあります。ノードという用語は、分散データベースのインフラストラクチャアーキテクチャについて話すときによく使用されます。分散データベースでは、複数のサーバーがリクエストの処理に関与している場合があります。
- 非再現読み取り
- 非再現読み取りとは、特定のトランザクション分離レベルで発生する可能性のある不要な整合性の問題の一種です。非再現読み取りは、トランザクション内の繰り返しの読み取り操作が、トランザクション外のコミットに基づいて異なるデータを返す場合に発生します。この分離の違反は、一部のトランザクション分離レベルが防止するように設計されている動作の種類の1つです。
- 正規化
- データベース正規化とは、データ冗長性を排除し、不整合が導入される機会を排除するためにデータベースを構造化するプロセスです。正規化は、多くの場合、「正規形」の観点から議論され、各形式は以前の形式よりも追加のチェックと保証を追加します。実際には、データ正規化は多くの場合、データ整合性の保証とパフォーマンスのトレードオフであるため、構造は可能な限り最高の正規化レベルに置かれることはほとんどありません。
- OLAPデータベース
- OLAPデータベース(オンライン分析処理データベース)とは、主に分析と洞察の生成に使用されるように設計されたデータベースシステムです。OLAPに使用されるデータベースは、リアルタイムトランザクション処理(OLTPデータベース)に関与するものと同じタイプのパフォーマンス特性を必要としません。代わりに、通常は、大規模なデータセットのインジェストと処理、複雑で実行時間の長いクエリの実行、およびビジネス上の意思決定を支援するためのレポート、グラフ、および洞察の生成のために設計されています。
- OLTPデータベース
- OLTPデータベース(Online Transaction Processing database、オンライン トランザクション処理データベース)とは、主に高速でほぼリアルタイムなデータベース処理を容易にするように設計されたデータベースシステムです。通常、OLTPデータベースは、多数のクライアントが同時にデータにアクセスする可能性があり、迅速な応答時間が要求されるアプリケーションで使用されます。OLTPデータベースは、信頼性と処理速度のために最適化されています。
- ORM
- ORM(Object Relational Mapper、オブジェクト リレーショナル マッパー)とは、多くのデータベースで使用されるリレーショナルモデルと、クライアントアプリケーションで使用されるオブジェクト指向データモデルの間を翻訳するように設計されたデータベースツールです。このツールは、データベースオブジェクトをコードで表現し、プログラミングオブジェクトをデータベースに格納するのに適切な形式に変換する方法を提供します。ORMは便利なツールとなり得ますが、通常は完璧な抽象化ではなく、異なるモデルがデータの表現方法で対立する問題を引き起こす可能性があります。
- オブジェクト関係インピーダンスミスマッチ
- オブジェクト関係インピーダンスミスマッチとは、多くのデータベースで使用されるデータのリレーショナルモデルと、多くのアプリケーションで使用されるデータのオブジェクト指向ビューの間に存在する一般的な緊張関係を表す用語です。インピーダンスミスマッチとは、2つのモデル間の違いを指し、表現間の忠実な翻訳を困難または不可能にします。これは、継承、カプセル化、型の違い、異なる整合性保証など、この領域で発生する可能性のある多くの異なる種類の問題を指す広範な用語です。
- 楽観的コンカレンシー制御
- 楽観的コンカレンシー制御(Optimistic Concurrency Control、OCCと略されることもあります)とは、データベースシステムが競合する同時操作を処理するために使用する戦略です。楽観的コンカレンシー制御は、同時トランザクションが互いに干渉しない可能性が高いと仮定し、それらの処理を進めることを許可します。トランザクションがコミットを試みたときに競合が発生した場合、その時点でロールバックされます。OCCは、ワークロード内のほとんどのトランザクションが互いに競合しないと考える場合に魅力的なポリシーです。実際に競合が発生したトランザクションのみがパフォーマンスのペナルティを受け(ロールバックされて再起動する必要があります)、競合しないすべてのトランザクションは、競合が発生するかどうかを待つことなく実行できます。
- 外部結合
- 外部結合(outer join)とは、2つのテーブルを結合するリレーショナルデータベース操作の一種で、コンパニオンテーブルに一致するレコードがない場合でも、コンポーネントテーブルごとのすべての行を返します。結合操作は、各テーブルの指定された比較列で同一の値を持つレコードを照合することにより、仮想行を構築します。外部結合の結果には、列の値が一致した両方のテーブルの行が含まれ、さらに各テーブルから一致しないすべての行が含まれます。これらの行では、他のテーブルに一致するものがない列は、一致する行が見つからなかったことを示すために `NULL` 値で埋められます。
- パラメーター化クエリ
- パラメーター化クエリ(parameterized query、プリペアドステートメントとしても知られています)とは、ユーザー入力を文字列連結ではなくパラメーターとして受け取るように設定されたデータベースクエリです。パラメーター化クエリを使用すると、不明な入力を事前に含むクエリを指定し、後でステートメント内で置換される値を指定できます。これにより、注意深く作成された入力を使用して、データベースシステムに値を実行可能なSQLコードとして誤解させるSQLインジェクションの脆弱性を防ぐことができます。
- 永続性
- 永続性(persistence)とは、データがそれを生成したプロセスよりも長く存続することを示すデータの品質です。永続性は、ほとんどのデータベースシステムの重要な部分であり、データベースプロセスまたはサーバー自体が再起動された後でも、データを再度ロードできるようにします。アプリケーションとデータベースは、単一システム永続性、リモート永続性、クラスタ永続性など、さまざまなタイプの障害条件から保護するさまざまなレベルの永続性を持つことができます。
- 永続ストレージ
- 永続ストレージ(persistent storage)とは、システムの電源が切断された後もデータを維持できるストレージ媒体を指します。永続ストレージは、より永続的なデータリポジトリを維持するために必要です。多くの場合、永続ストレージはインメモリデータのような一時ストレージよりも低速であるため、データベースシステムは、両方のタイプのデメリットを利用してバランスを取るために、必要に応じて2つのストレージシステム間でデータをやり取りするためのさまざまなプロセスを使用します。
- 悲観的コンカレンシー制御
- 悲観的コンカレンシー制御(Pessimistic Concurrency Control、PCCと略されることもあります)とは、データベースシステムが競合する同時操作を処理するために使用する戦略です。楽観的コンカレンシー制御とは対照的に、悲観的コンカレンシー制御は、競合の可能性が発生するとすぐにトランザクションを短絡させます。この戦略は、頻繁に競合が発生する場合に役立ちます。なぜなら、システムが競合のためにコミットできないトランザクションを実行するのに時間を浪費しないようにするためです。代わりに、競合が発生する可能性がある場合は、よりシリアル化された実行アプローチを強制します。これは遅くなりますが、非生産的な処理を回避します。
- ファントムリード
- ファントムリード(phantom read)とは、特定の種類の分離レベルでトランザクション内で発生する可能性のある分離異常の一種です。ファントムリードは、トランザクション外で行われた変更により、トランザクション中に `SELECT` 操作に対して異なる行が返される場合に発生します。たとえば、テーブル内のすべてのレコードを `SELECT` しようとした場合、最初は8行が返される可能性がありますが、別のトランザクションが追加の行をコミットした場合、元のクエリを繰り返すと異なる結果が表示されます。
- PostgreSQL
- PostgreSQLは、さまざまなSQL標準への準拠で知られる、人気のある高性能リレーショナルデータベースシステムです。PostgreSQLは、さまざまなユースケースに対して複数のエンジンを提供するのではなく、単一の柔軟なデータベースエンジンを提供することに重点を置いています。非常に拡張性が高く、幅広いコミュニティ追加機能とクライアントアプリケーションがあります。
- 精度 (検索)
- 検索パフォーマンスのコンテキストでは、精度(precision)とは、取得された結果が与えられたクエリにどれだけ関連しているかの尺度です。具体的には、検索精度は、返されたすべての結果のうち、関連する結果の数の比率として定義されます。精度の高いクエリは、クエリに適用できない項目を多く取得しません。
- 主キー
- 主キー(primary key)とは、データベース行を一意にアドレス指定するための主要な方法として指定されたデータベースキーの一種です。他のキーが個々の行を取得できる場合でも、主キーは、システムがユニークネスと `NULL` 整合性チェックを強制することで、この目的のために特別にマークされます。主キーは、自然キー(レコード間で自然に一意であるキー)またはサロゲートキー(主キーとして機能するために特別に追加されたキー)のいずれかであり、単一または複数の列から形成できます。
- クエリ
- データベースでは、クエリ(query)とは、クエリ言語を使用してデータベース管理システムにリクエストを行うために使用されるフォーマットされたコマンドです。データベースシステムは、クエリを処理して、実行するアクションとクライアントに返すデータを理解します。多くの場合、クエリは、特定のパターンに一致するデータをリクエストしたり、既存の構造に新しいデータを挿入したり、既存のレコードに対する変更を修正および保存するために使用されます。データ項目をターゲットにするだけでなく、クエリは多くの場合、テーブル構造やサーバー設定などの項目を操作することもでき、システムに対する一般的な管理インターフェースになります。SQL(Structured Query Language、構造化クエリ言語)は、リレーショナルデータベースで使用される最も一般的なデータベースクエリ言語です。
- クエリビルダー
- クエリビルダー(query builder)とは、アプリケーション開発で使用されるデータベース抽象化であり、データベースに対するプログラミングを容易にします。ORMと同様に、クエリビルダーは、アプリケーション内からデータベースシステムを操作するためのインターフェースを提供します。ただし、アプリケーションオブジェクトをデータベースレコードに直接マッピングしようとする代わりに、クエリビルダーは、データベース操作に密接に対応するネイティブ関数とメソッドを提供することに重点を置いています。これにより、SQL(または他のデータベース言語)文字列を直接操作するよりも、より安全で柔軟な方法でプログラムでクエリを構築できます。
- クエリ言語
- クエリ言語(query language)とは、データベース内のデータを検索、取得、操作することを専門とするプログラミング言語の一種です。SQL(Structured Query Language、構造化クエリ言語)は、世界で最も一般的なクエリ言語であり、主にリレーショナルデータベースシステム内のデータを管理するために使用されます。クエリ言語操作は、手順の焦点とターゲットに基づいて、データ構造を定義するために使用される場合はデータ定義言語(Data Definition Language、DDL)、システム管理タスクに使用される場合はデータ制御言語(Data Control Language、DCL)、データを変更するために使用される場合はデータ操作言語(Data Manipulation Language、DML)に分類できます。
- クエリプランナー
- クエリプランナー(query planner)とは、クライアントから提供されたクエリを、データベースを実際に検索し、目的の応答を構築するために使用できるステップに変換する責任を負うデータベースシステムの内部コンポーネントです。適切に設計されたクエリプランナーは、複数の潜在的なソリューションを検討し、最も最適化された結果が得られるオプションを選択できます。場合によっては、クエリプランナーが最適なソリューションを選択せず、データベース管理者が選択基準を手動で調整する必要があります。
- Raftコンセンサスアルゴリズム
- Raftコンセンサスアルゴリズム(Raft consensus algorithm)とは、ノードのクラスタ全体で情報共有、管理責任、および障害復旧を調整するように設計されたアルゴリズムです。このアルゴリズムは、各メンバーがデータ操作に同意することを保証する方法を提供し、ネットワークパーティションまたはノードの停止の場合にリーダー選出のメカニズムを含みます。一般的に、Paxosのような代替案よりも実装が簡単なアルゴリズムと考えられています。 Paxos.
- リードコミット分離レベル
- リードコミット分離レベル(read committed isolation level)とは、最小限の分離保証を提供するリレーショナルデータベースシステムのトランザクション分離レベルです。リードコミットレベルでは、トランザクションはダーティリード(まだコミットされていない他のトランザクションからデータを読み取ることができる現象)がないことが保証されています。非再現リード、ファントムリード、およびシリアライズ異常は、この分離レベルでも依然として可能です。
- 読み取り操作
- 読み取り操作(read operation)は、一般に、変更せずにデータを取得する操作として定義されます。読み取り操作は、基になるデータが不変であるかのように動作する必要があります。取得したデータを変更して形式を変更したり、フィルタリングしたり、その他の変更を加えたりする場合がありますが、データベースシステムに格納されている基になるデータは変更されません。
- リードスルーキャッシュ
- リードスルーキャッシュ(read-through caching)とは、キャッシュがバックエンドデータソースへのパスにデプロイされるキャッシング戦略です。アプリケーションは、すべての読み取りクエリをキャッシュに直接送信します。キャッシュに要求された項目が含まれている場合、すぐに返されます。キャッシュリクエストがミスした場合、キャッシュはバックエンドデータベースからデータをフェッチして、項目をクライアントに返し、将来のクエリのためにキャッシュに追加します。このアーキテクチャでは、アプリケーションはすべての書き込みクエリをバックエンドデータベースに直接送信し続けます。
- リードアンコミット分離レベル
- リードアンコミット分離レベル(read uncommitted isolation level)とは、本質的に分離を提供しないリレーショナルデータベースシステムのトランザクション分離レベルです。リードアンコミット分離レベルを使用して実行されるトランザクションは、ダーティリード、非再現リード、ファントムリード、およびシリアライズ異常の影響を受ける可能性があります。一般的に言って、リードアンコミットレベルは、ほとんどのユーザーの分離に対する期待を満たしていないため、あまり役立ちません。
- 再現率
- 検索パフォーマンスのコンテキストでは、再現率(recall)とは、クエリが取得できた関連項目の数の尺度です。再現率は、具体的には、クエリによって返された関連する結果の数と、データセット内の関連するエントリの総数との比率として定義されます。再現率の高いクエリは、検索クエリに関連する可能性のある項目の多くを取得します。
- レコード
- データベースでは、レコード(record)とは、通常は単一のエンティティを表すデータのグループです。リレーショナルデータベースでは、レコードはテーブル内の行と同義です。各レコードには、それに関連付けられた複数のデータまたは属性(これらはリレーショナルテーブルのフィールドになります)がある場合があります。
- Redis
- Redisは、キャッシュ、メッセージキュー、または構成ストアとして頻繁にデプロイされる、人気のある高性能キーバリューストアです。Redisは主にインメモリデータベースですが、オプションでデータを不揮発性ストレージに永続化できます。幅広い型、柔軟なデプロイメントオプション、および高いスケーラビリティを備えています。
- リレーショナルデータベース
- リレーショナルデータベース(relational database)とは、テーブルとして知られる事前定義されたデータ構造に従ってデータ項目を編成するデータベースモデルです。テーブルは、特定の制約と型を持つさまざまな列を定義し、各レコードはテーブル内の行として追加されます。高度に規則的なデータ構造を使用することで、リレーショナルデータベースシステムは、個々のクエリに答えるためにさまざまなテーブル内に保持されているデータを組み合わせる多くの方法を提供します。リレーショナルデータベースの名前は、規則的なデータを操作するために使用できるさまざまな操作を記述する代数関係に由来しています。ほとんどの場合、リレーショナルデータベースは、ユーザーがアドホックな方法で複雑なクエリを表現できるようにするSQL(Structured Query Language、構造化クエリ言語)を使用してデータベースシステムと対話します。
- リレーショナルデータベース管理システム (RDBMS)
- リレーショナルデータベース管理システム(Relational Database Management System、RDBMSとしても知られています)とは、リレーショナルデータベースを管理するデータベースソフトウェアです。実際には、RDBMSという用語はリレーショナルデータベースと互換的に使用されることが多いですが、厳密に言えば、RDBMSは1つ以上のリレーショナルデータベースを管理します。
- 再現可能リード分離レベル
- 再現可能リード分離レベル(repeatable read isolation level)とは、リードコミットレベルよりも優れた分離を提供するが、シリアライザブルレベルほど分離されていないリレーショナルデータベースシステムのトランザクション分離レベルです。再現可能リード分離レベルでは、ダーティリードと非再現リードの両方が防止されます。ただし、ファントムリードとシリアライズ異常は依然として発生する可能性があります。これは、個々のレコードの読み取りは安定した状態を保つことが保証されていますが、範囲クエリ(複数の行を返す `SELECT` ステートメントなど)はトランザクション外のコミットの結果として変更される可能性があることを意味します。
- レプリケーション
- レプリケーション(replication)とは、あるシステムから別のシステムにデータを継続的にコピーおよび更新するプロセスです。データベースでは、これは通常、他のサーバーが読み取って自身のデータコピーに適用できる変更ログをサーバーが共有することを含みます。これにより、各サーバーが実行時に操作を承認する必要なく、さまざまなサーバー間で変更を伝播できます。共有方法、どのシステムがどこからデータをコピーするかのアーキテクチャ、およびレプリケーションプロセスを制御するためにどのようなポリシーが導入されているかという点で、多くの種類のレプリケーションが存在します。レプリケーションは、データの可用性を維持し、負荷を分散し、バックアップのようなオフライン手順用のデータのコピーを提供するための多くのシステムにおける重要な機能です。
- ライト結合
- ライト結合(right join)とは、指定された2番目のテーブルのすべての行が返されるリレーショナルデータベースの結合操作であり、最初のテーブルに一致する行が見つかったかどうかは関係ありません。結合操作は、各テーブルの指定された比較列で同一の値を持つレコードを照合することにより、仮想行を構築します。ライト結合の結果には、列の値が一致した両方のテーブルの行が含まれ、さらに2番目のテーブル(または右テーブル)から一致しないすべての行が含まれます。これらの行では、最初のテーブル(または左テーブル)に関連付けられた列は、一致する行が見つからなかったことを示すために `NULL` 値で埋められます。
- ロールベースアクセス制御 (RBAC)
- ロールベースアクセス制御(Role-Based Access Control、RBACとしても知られています)とは、ユーザーに許可される操作を割り当てられたロールに基づいて制限するセキュリティ戦略です。オブジェクトの権限とアクションを実行する特権は、アクセス管理を容易にするラベルであるロールに割り当てられます。ロールに関連付けられた機能をユーザーに付与するには、ユーザーをロールのメンバーにすることができます。ユーザーは、各ロールが提供する権限のユニオンを取得するために、複数のロールのメンバーになることができます。ロールは、さまざまなロールに必要な特権を標準化し、ユーザーへのアクセスを簡単に追加または削除する方法として役立ちます。
- 行
- リレーショナルデータベースでは、行(row)とは、データベーステーブル内の単一のレコードの表現です。これらのデータベースの行は、データ型と許容値の範囲に関する制約を指定する列のコレクションの形式で、事前定義された構造を持っています。リレーショナルテーブルの各行は、同じ列またはフィールドを持ち、非常に規則的なデータ構造になります。
- シリアルスキャン
- シリアルスキャン(serial scanning)とは、検索時にクエリに対して各潜在的な項目を分析する検索手法です。これは、より高速なクエリ応答を可能にするために項目が事前に考慮および編成されているインデックスベースの検索とは対照的です。
- SQL
- SQL(Structured Query Language、構造化クエリ言語)とは、今日使用されている最も一般的なデータベースクエリ言語です。主にリレーショナルデータを操作するために使用され、ユーザーがリレーショナルデータベース内のデータを選択、フィルタリング、定義、および操作するためのクエリを作成できるようにします。SQLは一般的な標準ですが、実装の詳細は大きく異なり、期待されるほどソフトウェアに依存しないわけではありません。
- SQLインジェクション
- SQLインジェクション(SQL injection)とは、脆弱なSQLバックエンドアプリケーションに対して実行できる攻撃の一種です。これは、送信された値を実行可能なSQLコードとして扱うことにより、データベースシステムにクエリを誤解させるために使用できる入力を注意深く作成することによって機能します。SQLインジェクションは、主に開発者がサニタイズされていないユーザー入力を文字列連結を使用してクエリ文字列と結合しようとすることによって引き起こされます。これは、プリペアドステートメント(パラメーター化クエリとも呼ばれます)を使用して防ぐことができます。プリペアドステートメントでは、プレースホルダー付きのクエリが代入値とは別にデータベースに送信されるため、クエリ値の境界が明確になります。
- SQLite
- SQLiteは、C言語ライブラリとして記述されたリレーショナル管理データベースシステムです。ライブラリとして実装されているため、従来のクライアント/サーバー分離モデルには準拠しておらず、代わりにローカルファイルに書き込むためにライブラリまたはクライアントプログラムに依存しています。そのサイズに対して非常に機能的であり、特に組み込み用途に適しています。SQLiteには多くの異なる言語のバインディングがあり、アプリケーションで内部ストレージシステムとして広くデプロイされています。
- 入力のサニタイジング
- 入力のサニタイジング(sanitizing input、入力検証としても知られています)とは、ユーザーが提供した値をその後の処理に対して安全にするために使用されるプロセスです。アプリケーションまたはデータベースにデータ値を有効なアプリケーションコードまたはクエリコードとして誤解させる可能性のある悪意のある入力から保護するために使用されます。入力は、有効な文字のリストを制限したり、使用中のシステムにとって特別な意味を持つ文字を削除したり、値をエスケープしたりするなど、さまざまな方法でサニタイズできます。一般的に言って、入力をサニタイズする代わりに、プリペアドステートメントを使用する方がはるかに安全であると考えられています。
- スケーリング
- スケーリング(scaling)とは、アプリケーションまたはワークロードに割り当てられたリソースを拡張して、パフォーマンスを向上させたり、より多くの同時アクティビティを処理できるようにするプロセスです。スケーリング戦略は、一般的に2つのカテゴリに分類されます。スケールアウト(水平スケーリングとも呼ばれます)とスケールアップ(垂直スケーリングとしても知られています)。水平スケーリングには、受信ワークロードを処理できるプールに追加のワーカーを追加することが含まれます。これは多くの場合、すべて同じ操作を実行できる追加のサーバーを追加することを意味し、それによって負荷を分散します。スケールアップには、リクエストをすでに処理しているサーバーに追加のプロセッサ、RAM、またはストレージなどのリソースを追加することが含まれます。スケーリングにより、より多くの同時操作を処理できますが、アプリケーションアーキテクチャの複雑さが増す可能性があります。
- スキーマ
- データベーススキーマ(database schema)とは、データベースシステム内でデータをどのように編成する必要があるかを記述する構造です。各テーブル、フィールド、インデックス、リレーション、関数、およびデータベース内に保持されているその他の構造の形式を定義します。スキーマは、データベースシステムにオブジェクトがどのように見えるか、およびオブジェクトに関連付けることが許可されているデータと許可されていないデータを伝える定義です。PostgreSQLでは、データベーススキーマは、他のデータベースオブジェクトの名前空間として機能するデータベースオブジェクトの子として実装されているという点で、わずかに異なる意味合いを持っています。
- シリアライザブル分離レベル
- シリアライザブル分離レベル(serializable isolation level)とは、最も厳格な分離保証を提供するリレーショナルデータベースシステムのトランザクション分離レベルです。シリアライザブルレベルでは、ダーティリード、非再現リード、ファントムリード、およびシリアライズ異常はすべて防止されます。データベースシステムは、競合が発生する可能性のあるトランザクションを中止することにより、これを実現します。これにより、同時トランザクションがシリアルに適用されたかのように適用されることが保証されます。シリアライザブル分離は強力な分離を提供しますが、競合するトランザクションが中止されて再送信する必要があるという事実により、重大なパフォーマンスの問題が発生する可能性があります。
- シリアライズ異常
- シリアライズ異常(serialization anomaly)とは、同時トランザクションで発生する可能性のある問題であり、同時トランザクションがコミットされる順序が結果のデータに影響を与える可能性があります。シリアライズ異常は、異なるトランザクションの操作が、他のトランザクションが更新している可能性のあるデータに基づいて計算を行っているために発生します。シリアライズ異常を防ぐには、トランザクションはシリアライザブル分離レベルを使用する必要があります。これにより、競合するトランザクションの1つをロールバックすることにより、これらの条件が防止されます。
- データベースシャード(database shard)とは、パフォーマンス上の理由から、異なるデータベースノードによって分離および管理されるデータベースオブジェクトによって格納されるレコードのセグメントです。たとえば、900万件のレコードを持つデータベーステーブルは、それぞれ300万件のレコードを管理する3つの別々のシャードに分割できます。データは通常、「シャードキー」に従って分割されます。これは、レコードを管理する必要があるシャードを決定するキーです。各シャードはレコードのサブセットを管理し、クライアントクエリをシャードキーを参照して適切なシャードに転送するには、調整コンポーネントが必要です。シャーディングは、非常に大きなデータセットで一部のタイプのパフォーマンスを向上させるのに役立ちますが、多くの場合、他のタイプのパフォーマンスを低下させる可能性のあるトレードオフを行う必要があります(たとえば、複数のシャード間で調整する必要がある操作など)。
- 古いデータ
- データストレージを操作する場合、古いデータ(stale data)とは、データの最新の状態を正確に反映していないデータを指します。これは多くの場合、主にキャッシュを使用する場合の懸念事項です。データの断片が、変更によって無効になった後も長期間保存および使用される可能性があるためです。
- 標準カラムファミリー
- 標準カラムファミリー(standard column family)とは、カラムファミリーデータベースオブジェクトの一種であり、列に類似したキーと値のペアに関連付けられた行キーを定義することによりデータを格納します。各行は独自の列を定義して使用できるため、結果のデータセットはリレーショナルデータベーステーブルのように規則的ではありません。ただし、行キーは、カラムラベルと値を組み合わせることで、依然としてテーブルにやや似ています。標準カラムファミリーは、キーに関連付けられたすべての情報を同じ場所に格納でき、そのキーのデータ構造を簡単に変更できるため、キーベースのデータ取得に優れたパフォーマンスを発揮します。
- ステミング
- ステミング(stemming)とは、フルテキスト検索インデックスで使用される手法であり、同じ語幹を持つ単語を単一のエントリにまとめます。これにより、わずかな精度の低下を犠牲にして、考慮される関連結果の数が増加します。たとえば、「cook」、「cooked」、および「cooks」という単語は、用語のいずれかの検索でエントリ全体の結果が返される単一のエントリを占める可能性があります。
- ストップワード
- フルテキスト検索コンテキストでは、ストップワード(stop words)とは、検索クエリに適用できないと見なされる単語のリストです。これらは通常、言語で最も一般的な単語であり、それ自体ではあまり意味がなく、関連性のないポイントまであいまいです。英語の例としては、「the」、「it」、「a」などの単語があります。
- ストレージエンジン
- ストレージエンジン(storage engine)とは、データベース管理システムにおける基盤となるコンポーネントであり、データベース内のデータの挿入、削除、クエリ、および更新を担当します。トランザクションを実行する機能など、多くのデータベース機能は、実際には基盤となるストレージエンジンのプロパティです。MySQLのような一部のデータベースシステムには、ユースケースの要件に応じて使用できるさまざまなストレージエンジンがあります。PostgreSQLのような他のシステムは、一般的なすべてのシナリオで役立つ単一のストレージエンジンを提供することに重点を置いています。
- ストアドプロシージャ
- ストアドプロシージャ(stored procedure)とは、クライアントが簡単に実行できるデータベース内で一連の操作を定義する方法です。ストアドプロシージャはデータベース内に格納されているため、パフォーマンスの向上を提供し、ネットワーク遅延を回避できる場合があります。ストアドプロシージャは、ユーザー定義関数とは異なり、他のクエリに組み込まれるのではなく、特別なステートメントで明示的に呼び出す必要があり、すべての同じシナリオで使用できるわけではありません。
- スーパーカラムファミリー
- スーパーカラムファミリー(super column family)とは、カラムファミリーデータベースオブジェクトの一種であり、カラムファミリーに関連付けられた行キーを定義することによりデータを格納します。各行には、標準カラムファミリーよりもデータをさらにセグメント化する方法として、複数のカラムファミリーを含めることができます。
- スーパーキー
- スーパーキー(superkey)とは、リレーショナルデータベースモデル内でレコードを一意に識別するために使用できる属性のセットのことです。他のすべてのキータイプ(主キー、候補キー、複合キーなど)は、スーパーキーの例です。自明なスーパーキーには、使用可能なすべての属性が含まれていますが、候補キーは、追加の列を削除することで簡略化できないスーパーキーです。
- テーブル
- リレーショナルデータベースでは、テーブル(table)とは、列の形式でさまざまな属性を定義し、行の形式で関連付けられた列値を持つレコードを格納するデータベース構造です。テーブルの列によって定義された制約とデータ型、および追加のテーブルレベルの要件は、テーブル内に格納できるデータのタイプを記述します。テーブルは規則的なデータ構造であるため、データベースシステムは含まれているデータの形状を理解しており、場合によってはクエリパフォーマンスをより予測可能にするのに役立ちます。
- テーブルエイリアス
- テーブルエイリアス(table alias)とは、既存または計算されたテーブルまたはテーブルのようなデータベースオブジェクトに対してクエリ時に指定される名前です。テーブルエイリアスは、元の名前が長いまたはあいまいな場合、またはテーブルがクエリ自体によって生成され、クエリの他の部分または表示で参照するためにラベルが必要な場合に役立ちます。
- 3層アーキテクチャ
- 3層アプリケーションアーキテクチャ(three tier application architecture)とは、Webアプリケーションをデプロイするための一般的なインフラストラクチャアーキテクチャです。最初の層は、クライアントリクエストに応答し、静的コンテンツを提供し、後続の層へのリクエストを生成する1つ以上のWebサーバーで構成されています。2番目の層はアプリケーションサーバーによって処理され、フロントエンドの応答を生成するためにコードを実行することにより、動的コンテンツを生成する責任があります。3番目の層はデータベースシステムによって処理され、コンテンツの生成に使用されるカスタム値に対する中間層からのリクエストに応答する責任があります。
- トークン
- 自然言語処理およびフルテキスト検索では、トークン(token)とは、システムによって認識され、さまざまな機能に従って分類できる離散的な単語です。トークンは、テキストの一部における相対的な位置、タイプ(数値、単語、フレーズなど)、および役立つ可能性のある追加のメタデータを含む情報とともに格納される場合があります。
- トランザクション
- データベーストランザクション(database transaction)とは、データベースシステムによってアトミックに実行できる単一のユニットに結合された操作のセットです。トランザクションは、トランザクション内のすべての操作が正常に完了するか、すべてが開始状態に戻るようにロールバックされることを保証します。これは、データ整合性を維持し、クライアントがデータベース内で行う可能性のある異なる無関係なアクション間の分離を可能にするのに役立ちます。データベーストランザクションによって提供される保証は、ACID(原子性、一貫性、分離性、および永続性)プロパティによって要約されます。
- 2相コミット
- Two-phase commitは、分散システムでトランザクションを実装するために使用されるアルゴリズムです。Two-phase commitは、コミットプロセスを2つの一般的な段階に分離することで機能します。最初の段階では、潜在的な変更がそれを受信したサーバーからコーディネーターコンポーネントに伝達されます。コーディネーターは、コミットするかどうかについて、関係するすべてのサーバーに投票を要求します。投票が成功した場合、2番目の段階が始まり、トランザクションは各メンバーによって実際にコミットされます。このアルゴリズムにより、分散システムは、投票手順の調整に関連するオーバーヘッドを犠牲にして、一貫性のあるデータセットを維持できます。
- Two-phase locking(2相ロッキング)
- Two-phase locking(2相ロッキング、2PLと略されることもあります)は、トランザクションがシリアライズ可能であることを保証するための並行性制御の戦略です。2つのフェーズは、トランザクションによって保持されるロックの数を増やすアクションと、ロックの解放をトリガーするアクションを指します。Two-phase lockingは、排他ロックと共有ロックを使用して、読み取りおよび書き込み操作を調整します。データを読み取る必要があるトランザクションは、他のトランザクションが同じデータを読み取ることを許可するが、書き込み操作をブロックする共有読み取りロックを要求できます。これは共有ロックであるため、後続の各読み取り操作は同時に読み取りロックを要求でき、データはすべてが解放されるまで変更不可能のままになります。データを変更する必要があるトランザクションは、他の書き込みロックと読み取りロックの発行を防ぐ排他書き込みロックを要求します。
- Upsert(アップサート)
- Upsert(アップサート)は、既存のエントリを更新するか、現在エントリが見つからない場合に新しいエントリを挿入するデータベース操作です。Upsert操作は、更新する一致するレコードを検索するために使用されるクエリコンポーネントと、更新する必要がある値を指定するミューテーションコンポーネントで構成されています。多くの場合、新しいレコードを作成する必要がある場合に備えて、他のフィールドに追加の値を提供する必要があります。
- Value(値)
- データベースについて話す場合、値とは、データベースシステムがデータ構造内に格納するデータのあらゆる断片のことです。値が格納されているフィールドの名前のような追加のコンテキストがあれば、本質的にそこにあるものを超えて、値に意味を割り当てることができます。列やテーブルのような特定のストレージ構造は、格納する値のタイプに関する要件を定義する場合があります。
- Vertical scaling(垂直スケーリング)
- Vertical scaling(垂直スケーリング、スケールアップとも呼ばれます)は、パフォーマンスまたは負荷容量を向上させるために、サーバーまたはコンポーネントに追加のCPU、RAM、またはストレージなどのリソースを割り当てるスケーリング戦略です。スケールアップは、現在のデプロイメントのアーキテクチャの複雑さを増加させないため、ワークロードをスケーリングするための最も単純な戦略であるのが一般的です。垂直スケーリングは多くのシナリオでうまく機能する可能性がありますが、単一障害点への依存や、単一のマシンで合理的に管理できるリソースの量に制限があるなどの欠点があります。
- Vertices(頂点)
- グラフデータベースでは、vertices(頂点)はプロパティを保持し、エッジを介して他の頂点に接続できるエンティティです。頂点は、他のデータベースシステムのレコードまたはドキュメントに似ており、オブジェクトのタイプを示すラベルまたは名前を持ち、特定の頂点をそのタイプの他の頂点と区別するための特定の追加情報を提供する属性を持っています。頂点は、それらの間の関係を定義するエッジを介して他の頂点に接続されています。たとえば、「author(著者)」頂点は、「written by(によって書かれた)」エッジを持つ「book(書籍)」頂点に接続できます。
- View(ビュー)
- リレーショナルデータベースでは、view(ビュー)は、保存されたクエリのテーブルのような表現です。ビューは多くのコンテキストでテーブルとして使用できますが、基盤となるデータ構造の一部である代わりに、クエリの結果から派生します。ビューは、基盤となるスキーマに存在するよりも複雑なデータの表現を構築するのに役立ちます。たとえば、ビューはいくつかのテーブルを結合し、いくつかの関連する列のみを表示する場合があります。これにより、整合性またはパフォーマンス上の理由から異なる構造がストレージに適している場合でも、データをより使いやすくすることができます。
- Volatile storage(揮発性ストレージ)
- Volatile storage(揮発性ストレージ)とは、データを永続化するために継続的な電力に依存するあらゆるタイプのストレージです。たとえば、RAMに格納されたデータは、通常、停電が発生した場合に失われ、回復不能になると考えられるため、揮発性であると見なされます。
- Wide-column store(ワイドカラムストア)
- Wide-column store(ワイドカラムストア)は、標準およびスーパーカラムファミリーを使用してデータを行と列に編成するNoSQLデータベースの一種です。行キーは、関連付けられたすべての列とスーパーカラムを取得するために使用されます。各行には、列の定義と値が行構造自体の中に格納されているため、完全に異なる列を含めることができます。
- Write-ahead logging (WAL)(先行書き込みログ(WAL))
- Write-ahead logging(先行書き込みログ、WAL)は、クラッシュや障害時のシステムデータ破損に対するシステムの回復力を高めるデータリビジョン管理へのアプローチです。WALのような手法がないと、データベースへの変更が部分的にしか完了していないときにシステムがクラッシュした場合に破損が発生する可能性があります。この場合、データは初期状態でも意図された状態でもありません。先行書き込みログを使用すると、システムは操作を実行する前に、永続的な先行書き込みログに意図を記録します。これにより、データベースは、リカバリ中にログを確認し、最初に正しく完了しなかった操作をやり直すことで、データの既知の正常な状態を回復できます。
- Weight (search)(重み (検索))
- 検索のコンテキストでは、search weight(検索重み)とは、関連性を分析する際に項目の優先順位に影響を与えるように設計された、データの異なるカテゴリに割り当てられた任意の値を指します。特定のタイプの情報に大きな重みを割り当てると、クエリエンジンは、関連する結果のリストをコンパイルするときに、他のカテゴリと比較してそのカテゴリに大きな重要性を割り当てるようになります。
- Write-around caching(ライトアラウンドキャッシング)
- Write-around caching(ライトアラウンドキャッシング)は、書き込みクエリが最初にキャッシュに書き込まれるのではなく、直接バッキングデータベースに送信されるキャッシングパターンです。更新に関連するキャッシュ内のアイテムは古くなるため、この方法では、後続の読み取りのためにこれらのアイテムのキャッシュ結果を無効にする方法が必要です。この手法は、読み取り動作を制御するためのキャッシュ読み取りのポリシーとほぼ常に組み合わされます。このアプローチは、書き込みまたは更新後に読み取り頻度が低いデータに最適です。
- Write-back caching(ライトバックキャッシング)
- Write-back caching(ライトバックキャッシング)は、書き込みクエリがバッキングデータベースではなくキャッシュに送信されるキャッシング方法です。キャッシュは、書き込み操作を定期的にバンドルし、永続化のためにバッキングデータベースに送信します。これは、クラッシュ時の耐久性を低下させる代わりに、高スループットの書き込み操作によって引き起こされる負荷を軽減するためのライトスルーキャッシングアプローチの変更です。これにより、最近書き込まれたすべてのデータが追加の操作なしでアプリケーションですぐに使用できるようになりますが、キャッシュがデータベースへの書き込みを永続化する前にクラッシュした場合、データ損失が発生する可能性があります。
- Write operation(書き込み操作)
- データベースのコンテキストでは、write operation(書き込み操作)とは、保存されたデータを変更するあらゆるデータベースアクションのことです。これには、新しいレコードの挿入、レコードの削除、および既存のレコードを新しい値に更新することが含まれます。
- Write-through caching(ライトスルーキャッシング)
- Write-through caching(ライトスルーキャッシング)は、アプリケーションが変更をバッキングデータベースではなく、直接キャッシュに書き込むキャッシングパターンです。キャッシュは、新しいデータを永続化のためにすぐにバッキングデータベースに転送します。この戦略は、キャッシュクラッシュ時のデータ損失のリスクを最小限に抑えながら、読み取り操作がすべての新しいデータにアクセスできるようにします。書き込みが多いシナリオでは、バッキングデータベースへの負荷を防ぐために、ライトバックキャッシングに移行することが理にかなっている場合があります。
RELATED ON PRISMA.IO(PRISMA.IOの関連情報)
Prisma Clientをデータベースで使用している場合は、データベース機能マトリックスにアクセスして、Prisma内のさまざまなデータベース機能のサポート状況を確認できます。
Prismaは、TypescriptおよびNode.js向けのオープンソースのデータベースツールキットであり、アプリ開発者がデータベースを操作する際に生産性と自信を高めることを目的としています。