1.データベースで垂直および水平のサブライブラリを使用していますか?理解と使用のシナリオについて話す
- 垂直サブライブラリ
列で分割、つまり、レコードを分離して複数の場所に保存すると、各サブテーブルの行数は同じになります。
メインコードといくつかの列を1つのテーブルに配置し、メインコードと他の列を別のテーブルに配置します。テーブルの一部の列が一般的に使用されているが、他の列は一般的に使用されていない場合は、垂直分割を使用できます。さらに、垂直分割を使用すると、データ行が小さくなり、1つのデータページに多くのデータを格納できるため、クエリ中に削減されます。 / O回。欠点は、冗長な列を管理する必要があり、すべてのデータをクエリするには結合操作が必要なことです。
たとえば、テーブルT1があります。
ID名数量
--------------
1 p1 10
2 p2 20
3 p3 30
4 p4 40
……
……
- 水平サブライブラリ
レコードで分割すると、異なるレコードを個別に保存でき、各サブテーブルの列数は同じになります。
水平セグメンテーションは通常、次の状況とアプリケーションシナリオで使用されます。
Aテーブルは非常に大きいため、分割後にクエリ中に読み取る必要のあるデータとインデックスページの数を減らすことができ、インデックスレイヤーの数も減り、クエリ速度が向上します。
表Bのデータは本質的に独立しています。たとえば、さまざまな地域のデータまたは異なる期間のデータが記録されます。特に、一部のデータは一般的に使用されていますが、他のデータはそうではありません。
Cは複数のメディアにデータを保存する必要があります。
たとえば、ローテーブルローは、アクティブローとインアクティブローの2つのテーブルに分割できます。active-lawテーブルの内容は、有効で頻繁に使用される法律と規制ですが、inactive-lawテーブルは無効にされ、頻繁に照会されない法律と規制になります。水平分割を行うと、アプリケーションの複雑さが増します。通常は、クエリを実行するときに複数のテーブル名が必要であり、すべてのデータをクエリするにはユニオン操作が必要です。多くのデータベースアプリケーションでは、インデックスキーが大きくない限り、インデックスがクエリに使用されると、テーブル内のデータ量が2〜3倍に増加し、クエリが読み取りを増やすため、この複雑さはその利点を超えます。インデックスレイヤー内のディスクの数。
- 要約:
垂直分割とは、列ごとに分割することです。つまり、レコードは複数の場所に分割されて保存され、各サブテーブルの行数は同じです。
たとえば、テーブルT1では、IDと名前をデータファイルp1に入れ、qtyをデータファイルp2に入れることができます。
水平分割はレコードに分割することであり、異なるレコードを個別に保存できます。各サブテーブルの列数は同じです。
テーブルT1と同様に、データファイルP1に単一のIDを入れ、データファイルP2に偶数を入れることができます。
2. 垂直および水平のサブライブラリで発生する問題について話して、実現可能な解決策を提案してください
垂直サブライブラリ:ビジネスに応じて垂直に分割されます。たとえば、ビジネスに応じて、資金、メンバー、注文の3つのデータベースに分割できます。
解決すべき問題:データベース間のトランザクション、jionクエリなど?[解決策を提供する必要がある]
水平サブライブラリ:ルールに従って、一般的な水平サブライブラリは垂直サブライブラリの後にあります。たとえば、毎日処理される注文の数は膨大であり、特定のレベルのルールに従って分割できます。
解決すべき問題:データのルーティング、アセンブリ?[解決策を提供する必要がある]