2

Vitess データベースを使用して、mysql で水平シャーディングをスケーリングおよび実現しています。Vitess でセカンダリ シャードを実行することは可能ですか。

例: Table 1 - Agency ( AgencyID INT, CreatedOn DATETIME )

Table 2 - PayrollDetails ( AgencyID INT FOREIGN KEY TO Agency Table, PayrollID INT, PayrollCreatedOn DATETIME )

次に、AgencyID をシャーディング キーとして両方のテーブルをシャーディングしました。PayrollDetails テーブルは非常に巨大で、1 億件を超えるレコードがあります。そのため、PayrollCreatedOn フィールドを使用して PayrollDetails テーブルを再度シャードし、プライマリ シャードを両方のテーブルに Agency キーを使用する必要がありますが、payrollDetails テーブルは AgencyID と PayrollCreatedOn の両方を使用してシャードする必要があります。

4

1 に答える 1

2

概念的には、シャーディング キー (プライマリ vindex) を使用して、行が移動するシャードを決定します。そのため、2 つのシャーディング キーを使用することはできません。これは、行の競合する場所を決定するためです。

私の理解が正しければPayrollCreatedOn、where 句を使用してテーブルをクエリしたい場合は、セカンダリ Vindex を作成できます。これにより、行が存在する場所を指すルックアップ テーブルが作成され、Vitess がそれを利用できます。これについては、 https ://vitess.io/docs/reference/vindexes/ に説明があります。CreateLookupVindexこのルックアップ テーブルを埋め戻すことができるという新しいコマンドがあります。ただし、まだ文書化されていません。

Vitess では、別のプライマリ vindex を使用してテーブルを「マテリアライズ」することもできます。その場合、2 番目のテーブルは最初のテーブルのリアルタイム コピーになりますが、別の方法でシャーディングされます。このデモは vitess のフロント ページで見ることができます (ビデオまでスクロールします)。

于 2020-04-24T19:51:42.763 に答える