データベース入門

一般的なデータベース用語の用語集

コンテンツ

共有

はじめに

データベースを扱う際には、そのテクノロジー、最適な使用方法、そしてそれが環境の他の部分とどのように関連しているかを理解するために、多くの専門用語を学ぶ必要があります。この用語集は、データベースコミュニティで一般的に使用される用語を収集し、知識を深めるのに役立つ定義と文脈を提供することを目的としています。

この用語集は現在作成中であり、生きているドキュメントです。今後、新しいトピックを追加し、既存のエントリを洗練するために更新していく予定です。近い将来追加したい用語のバックログがありますが、話してほしいことがあれば、提案を追加するためにGitHub issueを開いてください。

用語

1NF
1NF(第一正規形)は、各テーブル列が単一の値のみを持つデータベース正規化のタイプを指します。値としてネストされたテーブルや複数の値を持つ列は、1NFではありません。
2NF
2NF(第二正規形)は、以下の要件を満たすデータベース正規化のタイプを指します。1) 1NFの要件を満たす、2) 候補キーのサブセットに直接結びつく値がない。言い換えれば、リレーションが1NFであり、すべての非候補値が候補キーの全体に依存しており、その一部にのみ依存していない場合、そのリレーションは2NFです。たとえば、`title`と`author`で構成される候補キーを持つ`book`テーブルに、著者の生年月日を表す`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 データベースは、ネットワークパーティションの場合に、厳密なデータ整合性を犠牲にして利用可能であることを選択します。ソフトステートコンポーネントとは、システム内の異なるメンバーがシステム内の最も正しい値を交渉するため、システムのステートが変動する可能性があるという事実を指します。結果整合性は、十分な時間が与えられ、その間に新しい不整合が導入されないと仮定すると、システムが最終的に整合性を達成することを示す別の関連する記述です。
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 は驚くほどスケーラブルであり、クラスター内の各ノードは読み取りまたは書き込みを受け入れることができます。データは一意に識別可能でパーティションキーに基づいてパーティション化された行に格納されます。各パーティションキーは、列名と値の両方が内部で定義されたデータの行を返します。つまり、同じ列ファミリーの各行には異なる列が含まれる場合があります。
CHECK 制約
チェック制約は、リレーショナルデータベースに追加できる最も柔軟なテーブルまたは列の制約かもしれません。これは、システムが提案されたデータを受け入れるために満たされなければならないブール条件として定義されます。条件の性質がかなりオープンエンドであるため、チェック制約は、システムに入力されるデータが期待に準拠していることを保証するために、さまざまな種類の要件をモデル化するために使用できます。
クラスター
コンピューティングにおいて、クラスターとは、すべて共有されたタスクを支援するために専念するコンピューターのグループです。データベースクラスターは、単一のコンピューターに展開されたデータベースと比較して、特定の種類のアクションの容量、可用性、およびパフォーマンスを向上させるために使用されます。異なるクラスターシステムが異なるレベルのパフォーマンスまたはフォールトトレランスを達成するために採用する、多くの異なるトポロジー、テクノロジー、およびトレードオフがあります。異なる実装の多様性があるため、すべてのクラスターデータベースシステムに適用される特定の特性を一般化することは困難です。
照合順序
データベースにおける照合順序とは、異なる文字体系の並べ替えおよび比較特性を指します。ほとんどのデータベースでは、照合順序設定を割り当てることができ、これはシステム内のテキストがどのようにソート、表示、および比較されるかに影響します。照合順序は通常、文字セット、言語コンテキスト、および大文字と小文字、アクセント、その他の文字修飾子に対する感度または非感度に関するさまざまなオプションを記述する一連のラベルを使用して定義されます。
コレクション
ドキュメントデータベースでは、コレクションはドキュメントのグループをまとめて格納するために使用されるコンテナです。コレクションには、アプリケーションおよびデータベース設計者によってセマンティックな意味が割り当てられる場合がありますが、そうでなければ、システム内で異なるドキュメントセットを互いにパーティション化するための単なる方法です。異なるコレクションに異なるプロパティを割り当てることができ、特定のドキュメントコレクションをターゲットにしたアクションを実行できます。
列は、テーブル指向データベースのコンポーネントであり、その列に格納されている各値の型をラベル付けし、場合によっては定義します。従来のリレーショナルデータベースでは、一連の列のプロパティは、テーブル全体のプロパティを定義する主要な方法の1つです。テーブルに追加される各行は、テーブルの列に関連付けられた要件に準拠する値を提供する必要があります。非リレーショナルデータベースでは、列は多くの異なるプロパティを持つことができます。しかし、一般的には、レコードがその列に格納することを選択した値の特性をラベル付けし、定義するために使用されます。
カラムデータベース
カラムデータベース、またはカラム指向データベースは、従来のRDBに似たテーブル指向データベースで、データをレコード単位ではなくカラム単位でバックグラウンドに保存します。つまり、単一のレコードに関連付けられたすべてのデータをグループ化するのではなく、単一のカラムに関連付けられたデータがまとめて保存されます。これにより、使用パターンに応じて異なるパフォーマンス特性が得られますが、通常、ユーザーがテーブル内のデータと日常的にどのようにやり取りするかに影響を与えることはありません。文献ではしばしば混同されますが、カラムデータベースはワイドカラムデータベースやカラムファミリーデータベースと混同してはなりません。
カラムファミリー
カラムファミリーは、各キーが列識別子であり、各値が列名と値のグループであるキーと値のペアのグループを格納するデータベースオブジェクトです。全体として、カラムファミリーはリレーショナルデータベースのテーブルに似たものを構築します。ただし、各行は独自の列を定義できるため、行の長さは異なり、表現される列や格納されるデータ型が互いに一致する必要はありません。
コマンドクエリ責務分離
コマンドクエリ責務分離とは、基盤となるデータベースへの影響に基づいて操作を分離できるアプリケーション設計パターンです。一般的に、これは通常、データを読み取るクエリとデータを変更するクエリに対して異なるメカニズムを提供することを意味します。これら2つのコンテキストを分離することで、各ユースケースを個別にスケールするためのインフラストラクチャおよびシステム変更を行うことができ、パフォーマンスが向上します。
コミット
データベースの文脈において、データのコミットとは、提案された一連の操作を実行し、永続的に保存するプロセスを指します。多くのデータベースは、システムが受信した各ステートメントを自動的にコミットするように構成されていますが、たとえばトランザクションは、複数のステートメントをグループ化し、それらをグループとしてコミットすることで、データベースのコミット動作を制御できるメカニズムの1つです。データベースにおけるコミットは、システム上で永続的な操作を実際に実行する責任を負うアクションです。
複合キー
リレーショナルデータベースにおいて、複合キーとは、テーブル内の任意のレコードを一意に識別するために使用できる、2つ以上の列で構成されるキーのことです。たとえば、サイズと色の各組み合わせに対して単一のレコードのみを格納する`shirts`テーブルがある場合、`color`列と`size`列の組み合わせによって複合キーを定義できます。
同時実行性
同時実行性とは、システムが全体の結果に影響を与えることなく、複数のタスクを一度に処理できる能力です。同時実行性により、システムは並行して操作を実行でき、タスクグループの相対的なパフォーマンスを向上させることができます。
コネクションプーリング
コネクションプーリングとは、アプリケーションとデータベース間の接続を管理することで、パフォーマンスを向上させ、接続枯渇を回避するために使用される戦略です。これは、データベースへの接続のプールを維持することによって行われます。接続を開いたままにして複数のクエリに再利用することで、アプリケーションは毎回接続を確立するオーバーヘッドをなくすことができ、データベースの接続制限はプーリングコンポーネントによって管理できます。
一貫性
一貫性とは、データシステムにおける特性であり、個々のデータエンティティが競合せず、変更が導入されても意図する情報をモデル化し続けることを意味します。各データと変更は、データ構造に課せられたルールに準拠していることを確認するために検証される必要があり、他のデータに影響を与える可能性のある変更(同時に異なる口座への貸方と借方など)のバランスをとるように注意を払う必要があります。
制約
制約とは、特定の列またはテーブルに課せられる制限であり、システムが受け入れる値の範囲に影響を与えます。制約は、値が要件に適合していることを保証するためにデータベースシステムが強制できるルールを定義するために使用されます。
カーソル
データベースカーソルは、クライアントがレコードとクエリ結果を制御された正確な方法で反復処理するための方法です。カーソルは主に、クエリに一致する結果を1つずつ、処理のために次の行を反復的に返すことでページングするために使用されます。これにより、結果をキューとしてアクセスすることで、不明な数のレコードを操作するのに役立ちます。カーソルはデータベースシステムのリソースを消費し、ロックを引き起こす可能性があり、そうでなければ必要とされるよりもはるかに多くのネットワークラウンドトリップを引き起こすことが多いため、使用には注意が必要です。
ダークローンチング
ダークローンチングは、ユーザーエクスペリエンスに影響を与えることなく、本番環境で新しい変更をテストするのに役立つデプロイメントおよびリリース戦略です。ダークローンチングには、元の機能と並行して新しいコードをリリースすることが含まれます。その後、リクエストとアクションはミラーリングされ、古いコードと新しいコードの両方に対して実行されます。ユーザーの視点からシステムの動作は元のコードによってのみ影響を受けますが、新しいコードは実際のデータでテストされ、機能の検証やパフォーマンスおよび機能上の問題の検出を行うことができます。適切に検証された後、アプリケーションは新しいコードパスのみを使用するように変更できます。
データ
最も広い意味で、データとは事実や情報のかけらのことです。それは、何かに関する情報を含む測定値や値です。文脈によっては、情報は分析または処理されたデータであり、データは生の値のみで構成されるという点で、データは情報とは区別されると定義されます。しかし、実際には、これらの用語はしばしば同義語として使用され、通常は、それを解釈または文脈化するために必要な関連する文脈とともに、あらゆる事実を包含します。データは、ほとんどすべてのコミュニケーションと活動の不可欠なコンポーネントであり、収集、分析、文脈化されるにつれて意味と価値を獲得できます。
データ定義言語(DDL)
データ定義言語、または DDL とは、データベース構造とオブジェクトを定義するために使用されるコマンドまたはアクションのセットです。これらはリレーショナルデータベースやその他のデータベースの重要なコンポーネントであり、SQL のような言語でデータ管理に利用できるコマンドのサブセットとして表現されます。データ定義言語は、データが保持される構造とフレームワークの記述、作成、および変更に特化した言語の部分です。
データ独立性
データ独立性とは、データベースクライアントまたはアプリケーションと、データを表現および格納する基盤となる構造との分離を記述するために使用される用語です。データ独立性は、データベースが、たとえば、リレーションに追加の属性が追加された場合(論理独立性)や、ストレージ媒体の詳細が変更された場合(物理独立性)でも、ユーザーアプリケーションが引き続き実行できるように、構造を抽象化できる場合に達成されます。
データマッパー ORM
データマッパー ORM、または単にデータマッパーとは、データベース表現とアプリケーションに存在するデータ構造との間で変換を行う仲介役として機能するアプリケーションコンポーネントです。データマッパーは、アプリケーションロジックとデータベースデータ表現を独立した状態に保つことができます。データマッパーは、これら2つの媒体間でデータを管理および変換するため、各表現は独立しており、インテリジェントに構造化できます。
データ型
データ型は、有効な値に対する制約を表すカテゴリまたは属性です。たとえば、整数型は、変数またはフィールドに適しており、予想されるのは整数のみであることを指定します。データ型を使用すると、フィールドまたはコンテナを定義する際に、データの期待値と要件を指定できます。プログラミング言語またはアプリケーションは、導入されたデータが必要な基準を満たしていることを検証できます。データ型は、特定のデータに対して実行できる利用可能な操作を決定するのにも役立ちます。
データベース
データベースは、データを整理、構造化、および保存するために使用される構造です。データベースはしばしばデータベース管理システムによって管理され、データベースとその管理するデータを操作および対話するためのインターフェースを提供します。データベースは高度に構造化されていても、より柔軟なデータ保存パターンを許可していてもよく、クエリ、呼び出し、および取得時にデータを結合できる方法で、さまざまな種類のデータを保存できます。
データベース抽象化層
データベース抽象化層とは、基盤となるデータベース技術の違いを抽象化し、アプリケーション層に統一されたエクスペリエンスまたはインターフェースを提供しようとするプログラミングインターフェースです。データベース抽象化層は、さまざまな提供物の実装の違いを標準化するのに役立ち、基盤となる技術が進化しても安定を保つことができるため、開発者にとってしばしば役立ちます。しかし、抽象化の漏洩、実装固有の機能や最適化をユーザーから隠すこと、取り除くのが難しい依存関係の作成など、いくつかの課題も存在します。
データベース管理者(DBA)
データベース管理者、または DBA とは、データベースシステムと、関連するソフトウェアおよびハードウェアのエコシステムの構成、管理、および最適化を担当する役割です。彼らが関与する可能性のある責任には、アーキテクチャ計画、構成、スキーマおよび変更管理、移行、レプリケーションおよびロードバランシング、シャーディング、セキュリティ上の考慮事項、バックアップ戦略の管理などが含まれます。データベース管理者は通常、データベース設計と理論に関する専門知識を持ち、組織がデータベース技術の選択と実装に関する決定を下すのを助けることができると期待されています。多くの現代の組織では、DBA が伝統的に担っていた責任は、現在では開発および運用チームのさまざまなメンバー間で分担されているか、またはジョブのインフラストラクチャ管理部分の一部を簡素化するために外部プロバイダーに委託されています。
データベースエンジン
データベースエンジンとは、データの保存と取得方法、およびシステムとデータとのやり取りをサポートするアクションを定義する、データベース管理システムの一部です。一部のデータベース管理システムは、異なる機能と設計を提供する複数のデータベースエンジンをサポートしていますが、他のシステムは、ソフトウェアの目標に合致するように設計された単一のデータベースエンジンのみをサポートしています。
データベース管理システム(DBMS)
データベース管理システム(しばしば DBMS または単に「データベース」と呼ばれる)は、データの整理と管理を担当するアプリケーションです。DBMS はさまざまなパラダイムに従い、特定の目標を優先することができます。一般的に、少なくとも、データの永続化、データの整理と分類、データの取り込み、操作、およびクエリを担当します。ほとんどの場合、DBMS はクライアント/サーバーモデルを提供し、サーバーがデータの制御と管理を担当し、クライアント、ライブラリ、または API はサーバーと対話してデータを追加またはクエリしたり、データ構造を変更したり、システムの他の側面を管理したりするために使用できます。
データベースモデル
データベースモデルとは、データベース管理システムがデータを保存、整理、およびアクセス提供するために使用する全体的な戦略です。多くの異なるデータベースモデルが利用可能ですが、特定の形式でデータを保存するために高度に構造化されたテーブルを使用するリレーショナルモデルが、おそらく最も一般的なタイプです。他の種類のデータベースには、ドキュメントデータベース、ワイドカラムデータベース、階層型データベース、キーバリューストアなどがあります。一部のデータベースシステムは「マルチモデル」として設計されており、同じシステム内で異なる種類のモデルを持つデータベースをサポートすることを意味します。
データベースプロキシ
データベースプロキシとは、データベースクライアントとデータベースサーバー間の接続を管理する役割を担うソフトウェアコンポーネントです。データベースプロキシは、限られた数の接続へのアクセスを整理するため、データベース層の透過的なスケーリングを可能にするため、デプロイメントや類似のシナリオでトラフィックをリダイレクトするためなど、多くの理由で使用されます。データベースプロキシは通常、アプリケーションにとって透過的になるように設計されており、アプリケーションはバックエンドデータベースに直接接続しているかのようにプロキシに接続できます。
データセット
データセットとは、データの単一の集合のことです。通常、これは特定のタスク、アプリケーション、または関心領域に適用される関連データのチャンクを表します。データセットは通常、データ自体と、それを解釈するために必要な構造およびコンテキストの組み合わせです。これらはしばしば、さらなる分析と解釈のための生データとして機能する定量的および定性的な値の組み合わせで構成されます。
非正規化
非正規化とは、データベース内のデータと構造を「非正規化」する、つまり正規化された状態から外すプロセスです。これは、正規化を意図したデータ構造が不適切に定義されたり、管理されたりした場合に偶発的に発生する可能性があります。しかし、特定のシナリオでは意図的に実行されることもよくあります。非正規化は、値を異なる場所に冗長に保存することで、データへのアクセスを高速化する傾向があります。この欠点は、書き込みパフォーマンスが低下し、同じデータを表すために複数の場所が使用されるため、データが同期しなくなる可能性があることです。
ダーティリード
ダーティリードとは、あるトランザクションが別のトランザクションによってコミットされていないデータを読み取ってしまうという、発生しうる特定の種類の異常です。2番目のトランザクションがコミットされる代わりにロールバックされた場合、最初のトランザクションはデータベースの実際の状態を反映しない値を使用することになります。ダーティリードは、トランザクションの特定の隔離レベルで可能であり、データを並行して操作する際に不整合につながるリスクを表します。
分散データベース
分散データベースとは、複数の物理システムにまたがるデータベースシステムです。データはパフォーマンスや可用性のために多数のマシンに分散されます。分散システムはデータベースの負荷処理をスケールアップするのに役立ちますが、同時に複雑性が大幅に増加し、一貫性やパーティションの問題、さらには場合によってはデータ書き込みの増加などの特定の負のパフォーマンス影響を引き起こす可能性があります。
ドキュメント
ドキュメントデータベースのコンテキストでは、ドキュメントは、単一のレコードまたは関連する記述データを含むオブジェクトを表す情報のコンテナと見なされます。ドキュメントは、システム上の他のドキュメントと構造を一致させる必要がなく、しばしばネストできる柔軟な構造を持つことができます。ドキュメントは通常、JSON や YAML のようなデータシリアル化形式で表現され、ラベルとメタデータでドキュメントを整理できます。
ドキュメントデータベース
ドキュメントデータベースとは、個々のオブジェクト(ドキュメントと呼ばれる)でアイテムを表現するデータベースモデルです。ドキュメントは整理のためにグループ化できますが、同じ構造を共有する必要はなく、問題のアイテムを記述するために必要なデータを独自にキャプチャするように設計できます。ドキュメントデータベースは通常、異なるドキュメントをリンクするための堅牢な結合操作をサポートしませんが、その柔軟性とプログラム上のデータ構造を簡単に表現できることから、柔軟性と生産性の速さでしばしば賞賛されます。
永続性
永続性とは、プログラムクラッシュが発生した場合でもデータが永続ストレージに記録され、存続することを意味するデータの品質です。通常、これはデータをハードドライブのような非揮発性ストレージ媒体にフラッシュすることを意味し、状態を維持するために電力を必要としません。
エンコーディング
エンコーディングとは、書かれた言語で使用されるコンポーネントを表現できる文字システムと、コンピューターが保存および操作できるデジタル表現との間で変換するシステムです。さまざまなエンコーディングシステムが、幅広い文字範囲で開発されてきました。一部は特定の言語または言語ファミリー(ASCIIなど)を対象としていますが、他のシステムは、多くの異なる言語に適したはるかに大きな文字セット(UTF ユニコードバリエーションなど)の表現を提供しようとします。
暗号化された転送
暗号化された転送とは、メッセージを送信する前に暗号化するあらゆる種類の通信プロセスを指します。転送暗号化は、プライバシーを確保するため(機密情報が他者に見られないようにする)だけでなく、改ざんを回避するため(データの操作を明白にする)にも必要です。TLS/SSL 暗号化、VPN、プライベートネットワークなど、データベースをデプロイする際に使用できるさまざまな暗号化転送システムがあります。
エフェメラリティ
エフェメラリティとは、データの一部または状況が永続的ではないことを示す特性です。多くの点で、それは永続性の反対です。データベースでは、永続化したいデータなどの特定の項目は、一時的なものであってはなりません。しかし、データベースとクライアント間の接続を暗号化するために使用される秘密鍵など、他のコンポーネントは、鍵の漏洩が将来または過去のセッションに影響を与えるのを防ぐことで、一時的であることの恩恵を受けることができます。
エフェメラルストレージ
エフェメラルストレージ(一時的または非永続ストレージとも呼ばれる)とは、短時間のみ保持されるあらゆる種類のストレージ媒体であり、特定の条件に関連付けられていることが多いです。たとえば、アプリケーションでは、メモリに保存されているデータはプロセスが実行されている間のみ存続します。同様に、一時ディレクトリに保存されたデータは、システムが再起動されるまでしか利用できません。多くの場合、エフェメラルストレージは一時的なデータや、データがより永続的な媒体に保存される前の一時的な保存領域として役立ちます。
結果整合性
結果整合性とは、特定の分散コンピューティングまたはデータベースシステムによって実装される一貫性/可用性戦略の記述です。分散システムの CAP 定理は、システムがネットワークパーティションに直面した場合、可用性とデータ整合性のどちらを優先するかを選択しなければならないと述べています。結果整合性のあるシステムは、サーバーのピアが操作を確認できない場合でもリクエストに応答し続けることで、可用性を優先する選択をします。最終的に、パーティションが解消されると、不整合なデータの最も正しい状態を決定するための整合性ルーチンが実行されますが、異なるサーバー上のデータが一致しない期間が存在します。
エビクション
キャッシュの文脈において、エビクションとは、キャッシュからデータの一部が削除されるプロセスです。これは、現在の値が操作によって無効化されたために発生する場合もあれば、最も古いまたは最も使用されていないデータを削除するように設計されたポリシーの結果として自動的に発生する場合もあります。
展開と収縮パターン
展開と収縮パターンとは、既存のアプリケーションに影響を与えることなく、データベーススキーマに新しい変更を導入するための戦略です。これは、新しい構造または変更された構造を既存の構造と並行して追加し、次にアプリケーションロジックを拡張して両方の構造を同時に使用するようにすることで、慎重に制御された段階で変更を導入することによって機能します。最終的に、テスト後、アプリケーションは元の構造への書き込みを停止し、それを削除できます。
抽出-変換-ロード(ETL)
抽出、変換、ロード(ETL と略されることが多い)とは、データソースから管理システムへデータをコピーし、処理するプロセスです。まず、データは現在のシステムから抽出され、宛先システムからアクセス可能になります。次に、データは新しいシステムの要件と形式に一致するように操作および変更されます。最後に、再構築されたデータが新しいシステムにロードされます。
機能フラグ
機能フラグ、または機能トグルとは、外部スイッチや制御の背後で機能をゲートするプログラミング戦略です。スイッチは通常、機能がアクティブになるべきではないことを示すように最初に設定されます。組織が準備ができたとき、スイッチをアクティブにすることができ、プログラムは新しい機能を使用し始めます。これにより、新しい機能をすぐにアクティブにすることなくデプロイできます。新しいソフトウェアのデプロイとソフトウェアのリリースを分離し、変更の導入方法と本番環境でのテストをより細かく制御できます。
フィールド
データベース列、またはフィールドとは、データベーステーブル内の特定の種類のデータを格納するコンテナです。リレーショナルデータベースのデータベースフィールドは規則的であり、テーブル内の各行は同じ数のフィールドを同じ特性で含むという意味です。データベースフィールドが含むことができる値は、フィールドに割り当てられたデータ型だけでなく、有効な値をさらに制限する制約によっても制御できます。
フラットファイルデータベース
フラットファイルデータベースとは、ファイルに格納されたデータベースまたはデータベースのような構造です。これらは、データベースに含まれる構造とデータを統一された形式で定義します。CSV(コンマ区切り値)ファイルのように、フラットファイルデータベースの多くの例はプレーンテキストで書かれていますが、バイナリ形式も存在します。フラットファイルデータベースとより複雑なタイプの違いの1つは、ストレージ形式自体がデータベースシステムではなく、データ間の関係を記述する役割を担うことが多いことです。
外部キー
外部キーとは、リレーショナルデータベースにおいて、2つのテーブル間のデータ整合性を維持するために使用される指定された列または列のグループです。あるテーブルの外部キーは、別のテーブルの候補キー、通常は主キーを参照します。候補キーが参照されるため、データベースの各行は一意になり、2つのテーブルを1行ずつリンクできます。これらの指定された列の値は、2つのテーブル間で同一のままであることが期待されます。外部キー制約により、データベースシステムは、値が同期しないことを許可しないことで、この要件を強制できます。
全文検索とは、データベースシステム内のドキュメントの完全なテキストを検索できる一連の技術と機能を指します。これは、メタデータ、部分的なテキストソース、その他の不完全な評価のみに依存する検索機能とは正反対です。全文検索は、自然言語対応のパーサーを使用した非同期インデックス作成に依存して、ドキュメント内のテキストを分析および分類します。
グラフデータベース
グラフデータベースとは、グラフ構造を使用してデータの断片間の関係を格納し、定義する NoSQL データベースです。グラフデータベースは、エンティティを表し、プロパティまたは属性を含むことができるノードを使用して構築されます。ノードは、ノードをリンクするだけでなく、関係の性質を定義する役割を担うエッジを使用して互いに接続されます。たとえば、ノードは「教師」というプロパティを持つ人物を表す場合があります。それは、「教える」というエッジでクラスノードに接続される場合がありますが、「結婚している」というエッジで別の人物ノードに接続される場合もあります。
GraphQL
GraphQL は、API 構築によく使用される、データのクエリおよび操作に使用できる言語です。クライアントは必要なデータを正確に指定でき、サーバーは提供された構造に従って応答を作成します。GraphQL の強みは、カスタム構造を使用してデータを返す能力、さまざまなバックエンドからのデータを結合する能力、および単一の API 呼び出しで複雑なクエリに応答する能力です。
HTAP データベース
HTAP データベース、またはハイブリッドトランザクション/分析データベースとは、高速で信頼性の高いトランザクション処理と、重くて複雑な分析ワークロードを同じマシン上で同時に処理する能力という、両方の利点を提供しようとするデータベースのカテゴリです。これらのデータベースは、後でデータを分析するのではなく、リアルタイム分析を可能にし、意思決定の方法に迅速に影響を与えることを試みます。
階層型データベース
階層型データベースは、ツリー状の構造に組織化されるデータベースモデルです。各新規レコードは単一の親レコードに接続されます。レコードがデータベースに追加されるにつれて、ルートレコードからどんどん分岐していくツリー状の構造が現れます。レコード間のリンクをたどることで、他のレコードにアクセスできます。階層型モデルを使用するシステムの例には、LDAP(軽量ディレクトリ・アクセス・プロトコル)や DNS(ドメイン・ネーム・システム)などがあります。
水平スケーリング
水平スケーリング(スケールアウトとも呼ばれる)とは、特定のタスクを実行できる単位の数を増やすスケーリング戦略です。これは、多くの場合、リクエストに応答できるワーカープールのコンピューターの数を増やすことを意味します。スケールアウトには、コスト、柔軟性、処理できるトラフィック量など、多くの利点がありますが、特にデータが関係する場合、調整と複雑さの点で複雑さが増す可能性があります。
ホットバックアップ
ホットバックアップとは、データベースシステムがアクティブに使用されている最中に行われるバックアップのことです。可能であれば、操作のためにデータベースシステムをオフラインにする必要がないため、しばしば好まれます。ホットバックアップは、データベースの特定の箇所をロックしたり、通常のデータベースタスクに利用できる IOPS(1秒あたりの入出力操作数)を減少させたりする場合があるため、常に可能であるとは限りません。
インメモリデータベース
インメモリデータベースとは、データセット全体をコンピューターのメモリにすべてロードして処理できるデータベースシステムです。この処理モデルは、すべてのデータがすでにメインメモリにあり、低速なストレージからデータを取得する遅延がないため、大きなパフォーマンス上の利点を提供します。インメモリデータベースを使用する際には、データを永続化する戦略、またはマシンが再起動されたときにインメモリ情報を再設定する戦略を立てるように注意する必要があります。
インデックス
データベースインデックスとは、テーブル内でレコードをより高速に見つけることを可能にするために作成される構造です。インデックスは、特定の列の値を別の構造で保持することで、データベースシステムがデータを効率的に検索することを可能にします。インデックス付けされた列をターゲットとするクエリは、各行を1行ずつチェックするよりも効率的な検索戦略を使用することで、テーブル内の該当する行を迅速に特定できます。インデックス付けされた列は読み取り操作を改善しますが、テーブルとインデックスの両方を更新する必要があるため、書き込み操作にオーバーヘッドを追加します。テーブルインデックスを設計する際には、これら2つの考慮事項のバランスを取ることが重要です。
取り込み
データの取り込みとは、新しいデータをデータシステムにインポートする行為です。これは、一度限りのデータロード操作であったり、他のシステムによって生成されるデータの継続的な消費であったりします。データの取り込みは、分析データベースやビッグデータストアを構築・更新する際の一般的な段階であり、多くの場合、さまざまなソースからのデータの統合を伴います。

271>内部結合
内部結合
内部結合とは、結合列の値が両方のテーブルに存在する場合にのみ行を返すことで、2つのテーブルを結合するリレーショナルデータベース操作のタイプです。内部結合では、両方のテーブルの結合列で一致が必要です。一方または他方のテーブルにない行を埋めるために`NULL`値を使用する行はありません。
対話型トランザクション
対話型トランザクションとは、クライアントがトランザクション操作を手動でアドホックに指定できるデータベーストランザクション機能です。トランザクションが、一時停止なしで順次実行できるクエリのグループをラップするのではなく、対話型トランザクションでは、開発者がデータベース操作を一時的に停止し、他のロジックを実行してからトランザクション処理を続行できます。これにより、トランザクション処理に柔軟性がもたらされますが、慎重に管理しないと、不要なトランザクション実行時間につながる可能性があります。
分離
データベースのコンテキストでは、分離とは、データと操作がトランザクション内およびトランザクション間でどのように可視化されるかを記述するプロパティです。分離のレベルは、データベース管理者またはクエリ作成者によって設定でき、分離レベルとパフォーマンス間のトレードオフを定義します。分離は、ACID 頭字語によって記述される主要な保証の1つです。
分離レベル
分離レベルとは、データベースがトランザクションを処理する際に、分離とパフォーマンスの間で選択できるさまざまなトレードオフの種類を指します。分離レベルは、トランザクション間で発生する可能性のあるデータ漏洩の種類や、発生する可能性のあるデータの異常を決定します。一般的に、より高い分離レベルは、処理速度が遅くなる代わりに、より多くの保証を提供します。
結合
リレーショナルデータベースにおける結合とは、共有される「結合」列または複数の列に基づいて2つのテーブルを結合する操作です。結合列内の値は、各テーブル内で一意である必要があります。結合操作は、結合列の値を基に行を照合し、各テーブルの列で構成される拡張された仮想行を作成します。結合するテーブルのいずれかに一致する対応する行がない場合、その行をどうするかによって、さまざまな種類の結合が利用可能です。
キー
データベースのコンテキストにおいて、キーとは、個々の行を一意に識別するために使用できる任意の属性、列、または属性や列のグループを指します。一部のデータは、その自然な一意性によりキーとして使用できます(自然キー)が、他のデータセットでは各レコードを識別するためにキーを生成する必要がある場合があります(サロゲートキー)。各テーブルまたはデータコレクションには、行を一意に識別する複数のキー(候補キーと呼ばれる)を持つことができますが、通常は、行にアクセスするための主要な方法として指定されたメインキー(主キーと呼ばれる)があります。
キーバリューデータベース
キーバリューデータベース、またはキーバリューストアとは、キーを使用して任意の構造のデータを保存および取得できるデータベースモデルです。キーはレコードを識別しアクセスするために使用され、レコードは単一の値またはより複雑なデータ構造で構成できます。キーバリューデータベースの各レコードは独自の構造を定義できるため、リレーショナルデータベースのような統一されたテーブル構造はありません。キーバリューデータベースは、非常に柔軟性があり、多くのオブジェクト指向開発者にとって馴染みのあるモデルを使用するため、役立ちます。
左結合
左結合とは、リレーショナルデータベースにおける結合操作の一種で、指定された最初のテーブルのすべての行が、2番目のテーブルで一致する行が見つかるかどうかにかかわらず返されます。結合操作は、各テーブルの指定された比較列で同一の値を持つレコードを照合することで仮想行を構築します。左結合の結果には、列の値が一致した両方のテーブルからの行が含まれ、さらに最初の、または左のテーブルからのすべての一致しない行も含まれます。これらの行の場合、2番目の、または右のテーブルに関連付けられた列は、一致する行が見つからなかったことを示すために`NULL`値で埋められます。
字素
字素は、自然言語処理および全文検索の文脈で関連する、言語レベルの意味単位です。通常、テキストがインデックス付けされるとき、個々のトークンに分解され、次に辞書、類義語辞典、その他の単語リストなどの言語レベルのリソースを使用して字素として分析され、さらに処理する方法を理解します。

289>ロケール
ロケール
データベースおよびコンピューティング全般において、ロケールは、操作を実行し、結果をレンダリングする際に使用されるべき地域、言語、国、およびその他のコンテキストデータを指定します。データベースでは、ロケール設定は、列の順序、値間の比較、スペル、通貨識別子、日付と時刻の書式など、さまざまなものに影響を与える可能性があります。データベースサーバーレベルで正しいロケールを定義するか、データベースセッション中に必要なロケールを要求することは、操作が期待される結果を生み出すことを保証するために不可欠です。
ロック
データベースにおいて、ロックとは、特定の操作中に整合性を維持するために、データベースのレコードやテーブルの変更を防止するために使用される手法です。ロックは、ロックされたリソースへのアクセスを完全に防止したり、特定の操作のみが実行されるのを防止したりすることができます。特定のレコードに対して発行することも、テーブル全体に対して発行することもできます。ロックは同時操作がロックされたデータにアクセスするのを防止するため、ロックされたデータはパフォーマンスに影響を与え、リソースの競合を引き起こす可能性があります。
MariaDB
MariaDB は、Oracle が MySQL を買収した後、コミュニティの一部がプロジェクトの将来の方向性について不確実になったことを受けて、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 データベース(非リレーショナルデータベースまたは非 SQL データベースとも呼ばれる)は、一般的なリレーショナルデータベースモデルから逸脱するあらゆる種類のデータベースシステムをカバーする幅広いカテゴリです。非リレーショナルデータベースは古くから存在していましたが、このカテゴリは通常、キーバリュー、ドキュメント指向、グラフ指向、カラムファミリーストアなどの代替モデルを使用する新しい世代のデータベースを指すために使用されます。これらは一般的に、リレーショナルモデルに適さないデータを管理するために使用され、柔軟性とスケーラビリティに重点が置かれています。
ノード
データベースにおいて、ノードはしばしばデータベースの単一インスタンスを指します。ノードという用語は、複数のサーバーがリクエストの処理に関与する分散データベースのインフラストラクチャアーキテクチャについて話す際によく使用されます。
非再現読み取り
非再現読み取りとは、特定のトランザクション隔離レベルで発生しうる望ましくない一貫性問題の一種です。非再現読み取りは、トランザクション内の繰り返し読み取り操作が、トランザクション外のコミットに基づいて異なるデータを返す場合に発生します。この隔離の違反は、一部のトランザクション隔離レベルが防止するように設計されている動作の種類の一つです。
正規化
データベース正規化とは、データ冗長性を排除し、不整合が導入される機会をなくすためにデータベースを構造化するプロセスです。正規化はしばしば「正規形」という観点から議論され、各正規形は以前の正規形よりも追加のチェックと保証を追加します。実際には、データ正規化はデータ整合性の保証とパフォーマンスとの間のトレードオフとなることが多いため、構造は可能な限り高いレベルの正規化に置かれないことがよくあります。
OLAP データベース
OLAP データベース、またはオンライン分析処理データベースとは、主に分析と洞察生成のために使用されるように設計されたデータベースシステムです。OLAP に使用されるデータベースは、リアルタイムトランザクション処理(OLTP データベース)に関与するものと同じ種類のパフォーマンス特性を必要としません。代わりに、通常は、大規模なデータセットの取り込みと操作、複雑で長時間のクエリの実行、およびビジネス上の意思決定を支援するためのレポート、グラフ、および洞察の生成のために設計されています。
OLTP データベース
OLTP データベース、またはオンライン・トランザクション処理データベースとは、高速でほぼリアルタイムのデータベースタスクを容易にするように主に設計されたデータベースシステムです。通常、OLTP データベースは、複数のクライアントが同時にデータにアクセスし、迅速な応答時間が要求されるアプリケーションで使用されます。OLTP データベースは、信頼性と処理速度のために最適化されています。
ORM
ORM(Object Relational Mapper)は、多くのデータベースで使用されるリレーショナルモデルと、クライアントアプリケーションで使用されるオブジェクト指向データモデルとの間で変換を行うように設計されたデータベースツールです。このツールは、データベースオブジェクトをコードで表現し、プログラミングオブジェクトをデータベースに保存するのに適切な形式に変換する方法を提供します。ORMは役立つツールですが、通常は完璧な抽象化ではなく、異なるモデルがデータの表現方法について衝突する問題を引き起こす可能性があります。
オブジェクトリレーショナルインピーダンスミスマッチ
オブジェクトリレーショナルインピーダンスミスマッチとは、多くのデータベースで使用されるデータの関係モデルと、多くのアプリケーションで使用されるデータのオブジェクト指向ビューの間に存在する一般的な緊張関係を指す用語です。インピーダンスミスマッチとは、これら2つのモデル間の違いを指し、表現間の忠実な変換を困難または不可能にするものです。継承、カプセル化、型の違い、異なる一貫性保証など、この分野で発生しうるさまざまな種類の問題を指す広範な用語です。
楽観的並行性制御
楽観的並行性制御(OCC とも呼ばれる)は、データベースシステムが競合する同時操作を処理するために使用する戦略です。楽観的並行性制御は、同時トランザクションが互いに干渉する可能性は低いと仮定し、それらの進行を許可します。トランザクションがコミットしようとしたときに競合が発生した場合、その時点でロールバックされます。OCC は、ワークロード内のほとんどのトランザクションが互いに競合しないと考える場合に魅力的なポリシーです。実際に競合するトランザクションのみがパフォーマンスペナルティを受け(ロールバックされ、再開される必要があります)、競合しないすべてのトランザクションは、競合が発生するかどうかを待つことなく実行できます。
外部結合
外部結合とは、コンポーネントとなる各テーブルからすべての行を返すことで2つのテーブルを結合するリレーショナルデータベース操作の一種です。これは、対応するテーブルに一致するレコードがない場合でも行われます。結合操作は、各テーブルの指定された比較列で同一の値を持つレコードを照合することで仮想行を構築します。外部結合の結果には、列の値が一致した両方のテーブルからの行が含まれ、さらに各テーブルからのすべての一致しない行も含まれます。これらの行の場合、他のテーブルで一致しない列は、一致する行が見つからなかったことを示すために`NULL`値で埋められます。
パラメーター化クエリ
パラメーター化クエリ(プリペアドステートメントとも呼ばれる)とは、ユーザー入力を文字列と連結するのではなく、パラメーターとして受け取るように設定されたデータベースクエリです。パラメーター化クエリを使用すると、未知の入力を含むクエリを事前に指定し、後でステートメント内で置換される値を提供できます。これにより、細工された入力が値を実行可能なSQLコードとして解釈することでデータベースシステムがクエリを誤解するSQLインジェクションの脆弱性を防ぎます。
永続性
永続性とは、データが作成されたプロセスよりも長く状態が存続することを示すデータの品質です。永続性はほとんどのデータベースシステムの重要な部分であり、データベースプロセスまたはサーバー自体が再起動された後でもデータが再度ロードされることを可能にします。アプリケーションとデータベースは、単一システム永続性、リモート永続性、クラスター永続性など、さまざまな種類の障害条件から保護するさまざまなレベルの永続性を持つことができます。
永続ストレージ
永続ストレージとは、システムが電源を失ったり切断されたりした後もデータを維持できるあらゆるストレージメディアを指します。永続ストレージは、より永続的なデータリポジトリを維持するために必要です。多くの場合、永続ストレージはインメモリデータのような一時的ストレージよりも低速であるため、データベースシステムは、両方のタイプの欠点を活用し、バランスを取るために、必要に応じて2つのストレージシステム間でデータをやり取りするさまざまなプロセスを使用します。
悲観的並行性制御
悲観的並行性制御(PCC)は、データベースシステムが競合する並行操作を処理するために使用する戦略です。楽観的並行性制御とは対照的に、悲観的並行性制御は、競合の可能性が生じた瞬間にトランザクションをショートサーキットします。この戦略は、頻繁に競合が発生する場合に有用です。なぜなら、競合のためにコミットできないトランザクションの実行にシステムが時間を無駄にしないようにするからです。代わりに、競合が発生する可能性がある場合には、より直列化された実行アプローチを強制します。これは遅くなりますが、非生産的な処理を回避します。
ファントムリード
ファントムリードとは、特定の種類の隔離レベル下でトランザクション内で発生しうる隔離異常の一種です。ファントムリードは、トランザクションの外部で行われた変更により、トランザクション中の `SELECT` 操作に対して異なる行が返される場合に発生します。例えば、テーブル内のすべてのレコードを `SELECT` しようとした場合、初回は8行が返されたとします。しかし、別のトランザクションが追加の行をコミットすると、元のクエリを再度実行した際に異なる結果が表示されます。
PostgreSQL
PostgreSQLは、様々なSQL標準への準拠で知られる、人気のある高性能リレーショナルデータベースシステムです。PostgreSQLは、異なるユースケースのために複数のエンジンを提供するのではなく、単一の柔軟なデータベースエンジンを提供することに重点を置いています。非常に拡張性が高く、豊富なコミュニティの追加機能やクライアントアプリケーションがあります。
精度 (検索)
検索パフォーマンスの文脈において、精度とは、取得された結果が与えられたクエリにどれだけ関連しているかを示す尺度です。具体的には、検索精度は、返されたすべての結果のうち、関連する結果の数の比率として定義されます。精度の高いクエリは、クエリに適用できない項目を多く取得しません。
主キー
主キーは、データベースの行を一意に識別する主要な方法として指定されるデータベースキーの一種です。他のキーでも個々の行を取得できる場合がありますが、主キーはこの目的のために特別にマークされ、システムによって一意性と非`NULL`整合性チェックが強制されます。主キーは、自然キー(レコード全体で自然に一意なキー)または代理キー(主キーとして機能するために特別に追加されたキー)のいずれかであり、単一または複数の列から構成することができます。
クエリ
データベースにおいて、クエリとは、クエリ言語を使用してデータベース管理システムに要求を行うためのフォーマットされたコマンドです。データベースシステムは、クエリを処理して、どのようなアクションを実行し、どのようなデータをクライアントに返すかを理解します。多くの場合、クエリは、特定のパターンに一致するデータを要求したり、既存の構造に新しいデータを挿入したり、既存のレコードの変更を修正・保存したりするために使用されます。データ項目を対象とするだけでなく、クエリはテーブル構造やサーバー設定などの項目を操作することもでき、システムの一般的な管理インターフェースとなります。SQL、すなわち構造化クエリ言語は、リレーショナルデータベースで最も一般的に使用されるデータベースクエリ言語です。
クエリビルダー
クエリビルダーは、アプリケーション開発においてデータベースに対するプログラミングを容易にするために使用されるデータベース抽象化です。ORMと同様に、クエリビルダーはアプリケーション内からデータベースシステムを操作するためのインターフェースを提供します。ただし、アプリケーションオブジェクトをデータベースレコードに直接マッピングしようとする代わりに、クエリビルダーはデータベース操作に密接に変換されるネイティブ関数やメソッドを提供することに焦点を当てています。これにより、SQL(または他のデータベース言語)文字列を直接操作するよりも、より安全で柔軟な方法でプログラム的にクエリを構築できます。
クエリ言語
クエリ言語は、データベース内のデータを検索、取得、操作することに特化したプログラミング言語の一種です。SQL、すなわち構造化クエリ言語は、世界で最も一般的なクエリ言語であり、主にリレーショナルデータベースシステム内のデータを管理するために使用されます。クエリ言語の操作は、その手順の焦点と対象に基づいて、データ構造を定義するために使用される場合はデータ定義言語(DDL)、システム管理タスクに使用される場合はデータ制御言語(DCL)、データを変更するために使用される場合はデータ操作言語(DML)に分類できます。
クエリプランナー
クエリプランナーは、クライアントから提供されたクエリを、実際にデータベースを検索し、望ましい応答を構築するために使用できるステップに変換する役割を担うデータベースシステムの内部コンポーネントです。適切に設計されたクエリプランナーは、複数の潜在的な解決策を検討し、最も最適化された結果をもたらすオプションを選択できます。時には、クエリプランナーが最適な解決策を選択しない場合があり、データベース管理者は選択基準を手動で調整する必要があります。
Raft合意アルゴリズム
Raft合意アルゴリズムは、ノードのクラスター全体で情報共有、管理責任、および障害回復を調整するように設計されたアルゴリズムです。このアルゴリズムは、各メンバーがデータ操作に同意することを保証する方法を提供し、ネットワーク分断やノード障害の場合のリーダー選出メカニズムを含みます。これは一般的に、以下のような代替アルゴリズムよりも実装が簡単であると考えられています。 Paxos.
読み込みコミット済み隔離レベル
読み込みコミット済み隔離レベルは、リレーショナルデータベースシステムのためのトランザクション隔離レベルであり、最小限の隔離保証を提供します。読み込みコミット済みレベルでは、トランザクションはダーティリード(他のトランザクションによってまだコミットされていないデータをトランザクションが読み取る現象)から解放されることが保証されます。この隔離レベルでは、非再現リード、ファントムリード、および直列化異常が依然として発生する可能性があります。
読み込み操作
読み込み操作は一般的に、データを変更せずに取得するあらゆる操作として定義されます。読み込み操作は通常、基となるデータが不変であるかのように動作するべきです。取得したデータのフォーマットを変更したり、フィルタリングしたり、その他の変更を加えたりすることはありますが、データベースシステムに保存されている基となるデータは変更されません。
リードスルーキャッシング
リードスルーキャッシングは、キャッシュがバッキングデータソースへのパスに配置されるキャッシング戦略です。アプリケーションはすべての読み込みクエリを直接キャッシュに送信します。キャッシュが要求された項目を含んでいれば、すぐに返されます。キャッシュの要求がミスした場合、キャッシュはバッキングデータベースからデータをフェッチし、クライアントに項目を返し、将来のクエリのためにキャッシュに追加します。このアーキテクチャでは、アプリケーションはすべての書き込みクエリを直接バッキングデータベースに送信し続けます。
読み込みアンコミット済み隔離レベル
読み込みアンコミット済み隔離レベルは、リレーショナルデータベースシステムのためのトランザクション隔離レベルであり、基本的に隔離を提供しません。読み込みアンコミット済み隔離レベルを使用して実行されるトランザクションは、ダーティリード、非再現リード、ファントムリード、および直列化異常の影響を受ける可能性があります。一般的に言って、読み込みアンコミット済みレベルは、ほとんどのユーザーの隔離に対する期待を満たさないため、あまり有用ではありません。
再現率
検索パフォーマンスの文脈において、再現率とは、クエリが取得できた関連項目の数を測る尺度です。再現率は具体的に、クエリによって返された関連結果の数と、データセット内の関連エントリの総数の比率として定義されます。再現率の高いクエリは、検索クエリに潜在的に関連するであろう多くの項目を取得します。
レコード
データベースにおいて、レコードとは通常、単一のエンティティを表すデータのグループです。リレーショナルデータベースでは、レコードはテーブルの行と同義です。各レコードには、複数のデータ片または属性が関連付けられている場合があります(これらはリレーショナルテーブルのフィールドにあたります)。
Redis
Redisは、キャッシュ、メッセージキュー、または設定ストアとして頻繁にデプロイされる人気のある高性能キーバリューストアです。Redisは主にインメモリデータベースですが、オプションで不揮発性ストレージにデータを永続化できます。多種多様な型、柔軟なデプロイオプション、および高いスケーラビリティが特徴です。
リレーショナルデータベース
リレーショナルデータベースは、テーブルと呼ばれる事前定義されたデータ構造に従ってデータ項目を整理するデータベースモデルです。テーブルは、特定の制約と型を持つ様々な列を定義し、各レコードはテーブルの行として追加されます。非常に規則的なデータ構造を使用することで、リレーショナルデータベースシステムは、様々なテーブルに保持されているデータを組み合わせて個々のクエリに回答する多くの方法を提供します。リレーショナルデータベースは、規則的なデータを操作するために使用できる異なる操作を記述する代数的な関係からその名を得ています。ほとんどの場合、リレーショナルデータベースはSQL(構造化クエリ言語)を使用してデータベースシステムと対話します。これは、ユーザーが複雑なクエリをアドホックな方法で表現できるためです。
リレーショナルデータベース管理システム (RDBMS)
リレーショナルデータベース管理システム(RDBMSとしても知られる)は、リレーショナルデータベースを管理するデータベースソフトウェアです。実際には、RDBMSという用語はリレーショナルデータベースと互換的に使用されることが多いですが、技術的にはRDBMSは1つ以上のリレーショナルデータベースを管理します。
リピータブルリード隔離レベル
リピータブルリード隔離レベルは、リレーショナルデータベースシステムのためのトランザクション隔離レベルであり、読み込みコミット済みレベルよりも優れた隔離を提供しますが、直列化可能レベルほどの隔離はありません。リピータブルリード隔離レベルでは、ダーティリードと非再現リードの両方が防止されます。しかし、ファントムリードと直列化異常は依然として発生する可能性があります。これは、個々のレコードの読み込みは安定性が保証される一方で、範囲クエリ(複数行を返す`SELECT`ステートメントなど)は、トランザクションの外部でのコミットの結果として変更される可能性があることを意味します。
レプリケーション
レプリケーションとは、あるシステムから別のシステムへデータを継続的にコピーおよび更新するプロセスです。データベースでは、これは通常、あるサーバーが変更ログを共有し、他のサーバーがそれを読み取り、自身のデータコピーに適用することを含みます。これにより、各サーバーが実行時に操作を承認することなく、様々なサーバー間で変更を伝播させることができます。共有方法、どのシステムがどこからデータをコピーするかのアーキテクチャ、およびレプリケーションプロセスを制御するためのポリシーに関して異なる、多くの種類のレプリケーションが存在します。レプリケーションは、データの可用性を維持し、負荷を分散し、バックアップのようなオフライン手順のためにデータのコピーを提供するために、多くのシステムで重要な機能です。
右結合
右結合は、リレーショナルデータベースにおける結合操作であり、最初のテーブルに一致する行が見つかるかどうかに関わらず、指定された2番目のテーブルのすべての行が返されます。結合操作は、各テーブルの指定された比較列に同一の値を持つレコードを照合することで、仮想的な行を構築します。右結合の結果には、列の値が一致した両方のテーブルからの行が含まれ、さらに2番目の、つまり右のテーブルからのすべての一致しない行が含まれます。これらの行については、最初の、つまり左のテーブルに関連付けられた列は、一致する行が見つからなかったことを示すために`NULL`値で埋められます。
ロールベースアクセス制御 (RBAC)
ロールベースアクセス制御(RBACとしても知られる)は、ユーザーに割り当てられたロールに基づいて、ユーザーに許可される操作を制限するセキュリティ戦略です。オブジェクトに対する権限とアクションを実行する特権は、アクセス管理を容易にするラベルであるロールに割り当てられます。ロールに関連付けられた機能を使用者に付与するには、ユーザーをそのロールのメンバーにすることができます。ユーザーは複数のロールのメンバーになることで、各ロールが提供する権限の結合を得ることができます。ロールは、様々なロールに必要な特権を標準化し、ユーザーへのアクセスを追加または削除するのを簡単にする方法として役立ちます。
リレーショナルデータベースにおいて、行はデータベーステーブル内の単一のレコードを表すものです。これらのデータベースの行は、データ型と許容値の範囲に対する制約を指定する列の集合という形で、事前定義された構造を持っています。リレーショナルテーブルの各行は同じ列またはフィールドを持ち、非常に規則的なデータ構造となります。
シリアルスキャン
シリアルスキャンは、検索時に各潜在的な項目をクエリに対して分析する検索手法です。これは、より速いクエリ応答を可能にするために、項目が事前に処理され、整理されるインデックスベースの検索とは対照的です。
SQL
SQL、すなわち構造化クエリ言語は、現在最も一般的に使用されているデータベースクエリ言語です。主にリレーショナルデータを操作するために使用され、ユーザーはリレーショナルデータベース内のデータを選択、フィルタリング、定義、操作するためのクエリを作成できます。SQLは一般的な標準ですが、実装の詳細は大きく異なり、期待されるほどソフトウェアに依存しないわけではありません。
SQLインジェクション
SQLインジェクションは、脆弱なSQLバックエンドアプリケーションに対して実行できる攻撃の一種です。これは、送信された値を実行可能なSQLコードとして扱うことで、データベースシステムにクエリを誤解させるために使用できる入力を慎重に作成することによって機能します。SQLインジェクションは主に、開発者がサニタイズされていないユーザー入力を文字列連結を使用してクエリ文字列と結合しようとすることによって引き起こされます。これは、プリペアドステートメント(パラメーター化クエリとも呼ばれる)を使用することで防止できます。この方法では、プレースホルダー付きのクエリが代替値とは別にデータベースに送信されるため、クエリ値の境界が曖昧になりません。
SQLite
SQLiteは、C言語ライブラリとして書かれたリレーショナル管理データベースシステムです。ライブラリとして実装されているため、従来のクライアント/サーバー分離モデルに準拠せず、代わりにライブラリまたはクライアントプログラムが両方の役割を果たしてローカルファイルに書き込みを行います。そのサイズにしては非常に機能的であり、組み込み用途に特に適しています。SQLiteは多くの異なる言語にバインディングがあり、内部ストレージシステムとしてアプリケーションで広くデプロイされています。
入力のサニタイズ
入力のサニタイズ(入力検証とも呼ばれる)は、ユーザーが提供した値を後続の処理に対して安全にするために使用されるプロセスです。これは、アプリケーションやデータベースにデータ値を有効なアプリケーションコードやクエリコードとして誤解させる可能性のある悪意のある入力から保護するために使用されます。入力は、有効な文字のリストを制限したり、使用中のシステムにとって特別な意味を持つ文字を削除したり、値をエスケープしたりするなど、様々な方法でサニタイズできます。一般的に言って、入力のサニタイズの代わりに、プリペアドステートメントを使用する方がはるかに安全であると考えられています。
スケーリング
スケーリングとは、アプリケーションやワークロードに割り当てられたリソースを拡張し、パフォーマンスを向上させたり、より多くの同時アクティビティを処理できるようにするプロセスです。スケーリング戦略は一般的に2つのカテゴリに分けられます:スケールアウト(水平スケーリングとも呼ばれる)とスケールアップ(垂直スケーリングとも呼ばれる)です。水平スケーリングは、着信する作業を処理できるプールにワーカーを追加することを含みます。これは多くの場合、すべて同じ操作を実行できる追加のサーバーを追加し、それによって負荷を分散することを意味します。スケールアップは、すでにリクエストを処理しているサーバーにプロセッサ、RAM、ストレージなどの追加リソースを追加することを含みます。スケーリングにより、より多くの同時操作を処理できますが、アプリケーションアーキテクチャの複雑さを増す可能性があります。
スキーマ
データベーススキーマは、データベースシステム内でデータがどのように編成されるべきかを記述する構造です。各テーブル、フィールド、インデックス、リレーション、関数、およびデータベース内に保持されるその他の構造の形式を定義します。スキーマは、オブジェクトがどのようなもので、どのようなデータがオブジェクトに関連付けられることを許可されるか、されないかをデータベースシステムに伝える定義です。PostgreSQLでは、データベーススキーマは、他のデータベースオブジェクトの名前空間として機能するデータベースオブジェクトの子として実装される点で、わずかに異なる意味合いを持ちます。
シリアライザブル隔離レベル
シリアライザブル隔離レベルは、リレーショナルデータベースシステムのためのトランザクション隔離レベルであり、最も厳密な隔離保証を提供します。シリアライザブルレベルでは、ダーティリード、非再現リード、ファントムリード、および直列化異常がすべて防止されます。データベースシステムは、競合が発生する可能性のあるすべてのトランザクションを中止することでこれを実現し、これにより並行トランザクションが直列に適用されたかのように適用されることを保証します。シリアライザブル隔離は強力な隔離を提供しますが、競合するトランザクションが中止されて再提出されなければならないという事実のために、重大なパフォーマンス問題に悩まされる可能性があります。
直列化異常
直列化異常とは、並行トランザクションにおいて、並行トランザクションがコミットされる順序が結果データに影響を与える可能性がある問題です。直列化異常は、異なるトランザクション内の操作が、他のトランザクションが更新している可能性のあるデータに基づいて計算を行う可能性があるために発生します。直列化異常を防ぐには、トランザクションはシリアライザブル隔離レベルを使用する必要があります。これは、競合するトランザクションのいずれかをロールバックすることによってこれらの条件を防ぎます。
シャード
データベースシャードとは、パフォーマンス上の理由から、データベースオブジェクトによって格納されているレコードのセグメントを分離し、異なるデータベースノードによって管理されるものです。例えば、900万のレコードを持つデータベーステーブルは、それぞれ300万のレコードを管理する3つの独立したシャードに分割できます。データは通常、「シャードキー」に従って分割されます。シャードキーとは、レコードがどのシャードによって管理されるべきかを決定するキーです。各シャードはレコードのサブセットを管理し、クライアントクエリを適切なシャードにシャードキーを参照して指示するために調整コンポーネントが必要です。シャーディングは、非常に大規模なデータセットにおいて一部のパフォーマンスタイプに役立つことがありますが、多くの場合、他のパフォーマンスタイプ(例えば、複数のシャード間で調整する必要がある操作)を低下させる可能性のあるトレードオフを行う必要があります。
古いデータ
データストレージを扱う際、古いデータとは、データの最新の状態を正確に反映していないあらゆるデータを指します。これは主にキャッシングにおいて懸念されることが多く、データの断片が変更によって無効になった後も長期間保持され、使用される可能性があるためです。
標準カラムファミリー
標準カラムファミリーは、列に似たキー値ペアに関連付けられた行キーを定義することでデータを格納するカラムファミリーデータベースオブジェクトの一種です。各行は独自の列を定義して使用できるため、結果として得られるデータセットはリレーショナルデータベーステーブルのように規則的ではありません。しかし、行キーと列ラベルおよび値を組み合わせることで、依然としてある程度テーブルに似ています。標準カラムファミリーは、キーに関連付けられたすべての情報を同じ場所に格納でき、そのキーのデータ構造を簡単に変更できるため、キーベースのデータ取得において優れたパフォーマンスを提供します。
ステミング
ステミングは、フルテキスト検索インデックス作成で使用される手法で、同じ語幹を持つ単語を単一のエントリにまとめます。これにより、考慮される関連結果の数が増加しますが、精度がわずかに低下します。例えば、「cook」、「cooked」、「cooks」という単語は、いずれかの用語で検索するとそのエントリ全体の結果が返される単一のエントリを占める可能性があります。
ストップワード
フルテキスト検索の文脈において、ストップワードとは、検索クエリに適用できないとみなされる単語のリストです。これらは通常、それ自体ではあまり意味がなく、関連性がないほど曖昧な言語で最も一般的な単語です。英語の例としては、「the」、「it」、「a」などの単語があります。
ストレージエンジン
ストレージエンジンは、データベース管理システムにおける基盤コンポーネントであり、データベース内のデータの挿入、削除、クエリ、更新を担当します。トランザクションを実行する能力など、多くのデータベース機能は、実際には基盤となるストレージエンジンのプロパティです。MySQLのような一部のデータベースシステムには、ユースケースの要件に応じて使用できる様々なストレージエンジンがあります。PostgreSQLのような他のシステムは、すべての典型的なシナリオで有用な単一のストレージエンジンを提供することに重点を置いています。
ストアドプロシージャ
ストアドプロシージャは、クライアントが簡単に実行できる操作のセットをデータベース内で定義する方法です。データベース内に格納されているため、パフォーマンスが向上したり、ネットワークレイテンシを回避できる場合があります。ストアドプロシージャは、ユーザー定義関数とは異なり、他のクエリに組み込むのではなく、特別なステートメントで明示的に呼び出す必要があり、すべての同じシナリオで使用できるわけではありません。
スーパーカラムファミリー
スーパーカラムファミリーは、カラムファミリーに関連付けられた行キーを定義することでデータを格納するカラムファミリーデータベースオブジェクトの一種です。各行は、標準カラムファミリーよりもデータをさらにセグメント化する方法として、複数のカラムファミリーを含むことができます。
スーパーキー
スーパーキーは、リレーショナルデータベースモデル内でレコードを一意に識別するために使用できる属性の集合です。他のすべてのキータイプ(主キー、候補キー、複合キーなど)はスーパーキーの例です。自明なスーパーキーはすべての利用可能な属性を含み、候補キーは追加の列を削除しても単純化できないスーパーキーです。
テーブル
リレーショナルデータベースにおいて、テーブルとは、列の形で異なる属性を定義し、関連する列の値を持つレコードを行の形で格納するデータベース構造です。テーブルの列によって定義される制約とデータ型、および追加のテーブルレベルの要件は、テーブル内に格納できるデータの種類を記述します。テーブルは規則的なデータ構造であるため、データベースシステムは含まれるデータの形状を理解しており、場合によってはクエリパフォーマンスをより予測可能にするのに役立ちます。
テーブルエイリアス
テーブルエイリアスは、既存または計算されたテーブル、またはテーブルのようなデータベースオブジェクトに対してクエリ時に与えられる名前です。テーブルエイリアスは、元の名前が長かったり曖昧な場合、またはテーブルがクエリ自体によって生成され、クエリの他の部分で参照したり表示するためにラベルが必要な場合に役立ちます。
三層アーキテクチャ
三層アプリケーションアーキテクチャは、Webアプリケーションをデプロイするための一般的なインフラストラクチャアーキテクチャです。第一層は、クライアント要求に応答し、静的コンテンツを提供し、後続の層への要求を生成する1つ以上のWebサーバーで構成されます。第二層はアプリケーションサーバーによって処理され、フロントエンドへの応答を生成するためにコードを実行することで動的コンテンツを生成する責任を負います。第三層はデータベースシステムによって処理され、コンテンツ生成に使用されるカスタム値に関するミドル層からの要求に応答する責任を負います。
トークン
自然言語処理およびフルテキスト検索において、トークンとは、システムによって認識され、異なる特徴に従って分類できる離散的な単語です。トークンは、テキスト内での相対位置、そのタイプ(数字、単語、フレーズなど)、および有用な可能性のある追加のメタデータを含む情報とともに保存されることがあります。
トランザクション
データベーストランザクションは、データベースシステムによってアトミックに実行できる単一の単位に結合された一連の操作です。トランザクションは、その中のすべての操作が正常に完了するか、またはすべてが元の状態に戻るようにロールバックされることを保証します。これにより、データ整合性が維持され、クライアントがデータベース内で行う可能性のある異なる無関係なアクション間の隔離が可能になります。データベーストランザクションによって提供される保証は、ACID(原子性、一貫性、隔離性、耐久性)プロパティによって要約されます。
2相コミット
2相コミットは、分散システムでトランザクションを実装するために使用されるアルゴリズムです。2相コミットは、コミットプロセスを2つの一般的な段階に分けることで機能します。最初の段階では、潜在的な変更を受け取ったサーバーによって調整コンポーネントに伝達されます。コーディネーターは、関連するすべてのサーバーから、コミットするかどうかの投票を要求します。投票が成功した場合、2番目の段階が始まり、各個別のメンバーによってトランザクションが実際にコミットされます。このアルゴリズムにより、分散システムは、投票手順の調整に関連するオーバーヘッドを犠牲にして、一貫性のあるデータセットを維持することができます。
2相ロック
2相ロック(2PLと略されることもある)は、トランザクションが直列化可能であることを保証するための並行性制御戦略です。2つのフェーズとは、トランザクションが保持するロックの数を拡張するアクションと、ロックの解放をトリガーするアクションを指します。2相ロックは、排他ロックと共有ロックを使用して読み書き操作を調整することで機能します。データを読み取る必要があるトランザクションは、共有読み取りロックを要求でき、これにより他のトランザクションが同じデータを読み取ることを許可しますが、書き込み操作はブロックします。これが共有ロックであるため、各連続する読み取り操作は同時に読み取りロックを要求でき、すべてのロックが解除されるまでデータは変更不可能なままとなります。データを変更する必要があるトランザクションは、排他的書き込みロックを要求し、他の書き込みロックや読み取りロックが発行されるのを防ぎます。
アップサート
アップサートとは、既存のエントリを更新するか、現在のエントリが見つからない場合に新しいエントリを挿入するデータベース操作です。アップサート操作は、更新対象の一致するレコードを検索するために使用されるクエリコンポーネントと、どの値を更新するかを指定するミューテーションコンポーネントで構成されます。多くの場合、新しいレコードを作成する必要があるケースを処理するために、他のフィールドに追加の値を提供する必要があります。
データベースについて話すとき、値とは、データベースシステムがそのデータ構造内に格納するあらゆるデータ片を指します。値が格納されているフィールドの名前のような追加のコンテキストがあれば、その値に本質的に存在する以上の意味を割り当てることができます。列やテーブルのような特定のストレージ構造は、格納する値のタイプに関する要件を定義する場合があります。
垂直スケーリング
垂直スケーリング(スケールアップとも呼ばれる)は、サーバーやコンポーネントにCPU、RAM、ストレージなどの追加リソースを割り当てて、そのパフォーマンスや負荷容量を向上させるスケーリング戦略です。スケールアップは、現在のデプロイメントのアーキテクチャの複雑さを増さないため、ワークロードのスケーリングにとって通常最も単純な戦略です。垂直スケーリングは多くのシナリオでうまく機能しますが、単一障害点への依存や、単一のマシンで合理的に管理できるリソース量の制限などの欠点があります。
頂点
グラフデータベースにおいて、頂点とは、プロパティを保持し、エッジを介して他の頂点に接続できるエンティティです。頂点は、他のデータベースシステムにおけるレコードやドキュメントに似ており、それが表すオブジェクトのタイプを示すラベルまたは名前を持ち、特定の頂点をそのタイプ内の他の頂点と区別するための特定の追加情報を提供する属性を持ちます。頂点は、それらの間の関係を定義するエッジを介して他の頂点に接続されます。例えば、「著者」頂点は、「執筆者」エッジで「本」頂点に接続できます。
ビュー
リレーショナルデータベースにおいて、ビューとは、格納されたクエリのテーブルのような表現です。ビューは多くの文脈でテーブルとして使用できますが、基盤となるデータ構造の一部であるのではなく、そのクエリの結果から派生します。ビューは、基盤となるスキーマに存在するよりも複雑なデータの表現を構築するのに役立ちます。例えば、ビューはいくつかのテーブルを結合し、関連する少数の列のみを表示することができます。これは、整合性やパフォーマンス上の理由から、異なる構造がストレージとして好ましい場合でも、データをより使いやすくするのに役立ちます。
揮発性ストレージ
揮発性ストレージとは、データを永続化するために継続的な電力供給に依存するあらゆる種類のストレージです。例えば、RAMに保存されたデータは通常、電源喪失時に失われ、回復不能になるため、揮発性であると見なされます。
ワイドカラムストア
ワイドカラムストアは、標準カラムファミリーとスーパーカラムファミリーを使用してデータを行と列に整理するNoSQLデータベースの一種です。行キーは、関連付けられたすべての列とスーパー列を取得するために使用されます。列の定義と値は行構造自体の中に格納されるため、各行はまったく異なる列を含むことができます。
ライトアヘッドロギング (WAL)
ライトアヘッドロギング、またはWALは、クラッシュや障害時のシステムデータ破損に対するシステムの回復力を高めるデータ改訂管理のアプローチです。WALのような手法がない場合、データベースへの変更が部分的にしか完了していないときにシステムがクラッシュすると、破損が発生する可能性があります。この場合、データは初期状態でも意図された状態でもなくなります。ライトアヘッドロギングでは、システムは操作を実行する前に、その意図を耐久性のあるライトアヘッドログに記録します。これにより、データベースはリカバリ中にログをレビューし、初期に正しく完了しなかった操作を再実行することで、既知の正常なデータの状態を回復できます。
重み (検索)
検索の文脈において、検索の重みとは、関連性について分析される際に項目の優先順位に影響を与えるように設計された、異なるデータカテゴリに割り当てられる任意の値です。特定の種類の情報に大きな重みを割り当てると、クエリエンジンは関連する結果のリストを作成する際に、他のカテゴリと比較してそのカテゴリにより大きな重要性を割り当てることになります。
ライトアラウンドキャッシング
ライトアラウンドキャッシングは、書き込みクエリが最初にキャッシュに書き込まれるのではなく、直接バッキングデータベースに送信されるキャッシングパターンです。更新に関連するキャッシュ内の項目は古くなるため、この方法は後続の読み込みのためにそれらの項目のキャッシュ結果を無効にする方法を必要とします。この手法は、読み取り動作を制御するためのキャッシュ読み取りポリシーとほぼ常に組み合わせられます。このアプローチは、書き込みまたは更新された後に頻繁に読み取られないデータに最適です。
ライトバックキャッシング
ライトバックキャッシングは、書き込みクエリがバッキングデータベースではなくキャッシュに送信されるキャッシング方法です。キャッシュはその後、定期的に書き込み操作をバンドルし、永続化のためにバッキングデータベースに送信します。これは、高スループットの書き込み操作によって引き起こされる負荷を軽減するためのライトスルーキャッシングアプローチの変更であり、クラッシュ時の耐久性が低下する代償を伴います。これにより、最近書き込まれたすべてのデータは追加操作なしでアプリケーションにすぐに利用可能になりますが、キャッシュがデータベースへの書き込みを永続化する前にクラッシュした場合、データ損失につながる可能性があります。
書き込み操作
データベースの文脈において、書き込み操作とは、保存されたデータを変更するあらゆるデータベースアクションです。これには、新しいレコードの挿入、レコードの削除、既存のレコードの新しい値への更新が含まれます。
ライトスルーキャッシング
ライトスルーキャッシングは、アプリケーションが変更をバッキングデータベースではなく直接キャッシュに書き込むキャッシングパターンです。キャッシュはその後、新しいデータを直ちに永続化のためにバッキングデータベースに転送します。この戦略は、キャッシュクラッシュ時のデータ損失のリスクを最小限に抑えつつ、読み込み操作がすべての新しいデータにアクセスできることを保証します。高書き込みシナリオでは、バッキングデータベースへの負担を防ぐためにライトバックキャッシングに移行することが理にかなっている場合があります。
著者について
Justin Ellingwood

ジャスティン・エリングウッド

ジャスティンは2013年からデータベース、Linux、インフラストラクチャ、開発者ツールについて執筆しています。現在は妻と2匹のウサギとともにベルリンに住んでいます。彼は通常、三人称で書く必要がないため、関係者全員にとって安心です。
© . All rights reserved.