主キーとシャード・キーは、表設計の重要な概念です。主キーとシャード・キーに何を使用するかは、複数の行を同時に読み取るという観点から重要な意味があります。それ以上に、キーの設計はパフォーマンス上でも重要な意味があります。
すべての表には主キーとして指定された1つ以上のフィールドが必要です。この指定は、表の作成時に行われ、その後変更することはできません。表の主キーは、表内のすべての行を一意に識別します。この最も単純な例では、確認または変更できるように特定の行を取得するために使用されます。
たとえば、productName
、productType
、color
、size
およびinventoryCount
という5つのフィールドを持つ表があるとします。表から個別の行を取得するには、製品の名前がわかれば十分です。この場合、主キーをproductName
として設定した後、確認/操作する製品名に基づいて行を取得します。
この場合、この表を作成するために使用するCLIスクリプトは次のようになります。
## Enter into table creation mode table create -name myProducts ## Now add the fields add-field -type STRING -name productName add-field -type STRING -name productType add-field -type ENUM -name color -enum-values blue,green,red add-field -type ENUM -name size -enum-values small,medium,blue add-field -type INTEGER -name inventoryCount ## A primary key must be defined for every table ## Here, we will define field 'productName' as the primary key. primary-key -field productName ## Exit table creation mode exit ## Add the table to the store. Use the -wait flag to ## force the script to wait for the plan to complete ## before doing anything else. plan add-table -name myProducts -wait
ただし、主キーに複数のフィールドを使用することもできます。機能レベルでは、これにより1回の原始的操作で表から複数の行を削除できます。複数の主キーを使用すると、1回の原始的操作で表から行のサブセットを取得することもできます。
「表の行の読取り」で、表から複数の行を取得する方法について説明します。同時に、「multiDelete()の使用」で複数の行を削除する方法について説明します。
複数行操作の実行に使用する一部のメソッドでは、部分主キーを使用できます。部分主キーが必須の場合もあります。部分主キーとは、行の主キーを構成する一部のフィールドが指定されているキーです。
たとえば、次の例では、表の主キーに3つのフィールドを指定します。
## Enter into table creation mode table create -name myProducts ## Now add the fields add-field -type STRING -name productName add-field -type STRING -name productType add-field -type STRING -name productClass add-field -type ENUM -name color -enum-values blue,green,red add-field -type ENUM -name size -enum-values small,medium,large add-field -type INTEGER -name inventoryCount ## A primary key must be defined for every table primary-key -field productName -field productType -field productClass ## Exit table creation mode exit ## Add the table to the store. Use the -wait flag to ## force the script to wait for the plan to complete ## before doing anything else. plan add-table -name myProducts -wait
この場合、完全な主キーは、3つの主キー・フィールド(productName
、productType
およびproductClass
)すべてに値を指定するキーになります。部分主キーは、そのフィールドの1つまたは2つにのみ値を指定するキーになります。
部分キーを指定する場合、順序が重要になることに注意してください。部分キーは、指定された最初のフィールドで始まり、フィールドを順に追加する完全なキーのサブセットである必要があります。したがって、次の部分キーは有効です。
productName
|
productName 、productType |
productType
とproductClass
で構成される部分キーは無効です。
シャード・キーは、シャード・ストレージの観点から意味のある主キー・フィールドを識別します。つまり、すべてのシャード・キー・フィールドに対して同じ値を含む行は、必ず同じシャードに格納されます。これは、結果の原子性を保証する操作で重要になります。(詳細は、「操作の順序の実行」を参照してください。)
たとえば、次の主キーを設定します。
primary-key -field productType -field productName -field productClass
次のように、productType
およびproductName
フィールドに対して設定された値を使用して、行が同じシャードに配置されることを保証できます。
shard-key -field productType -field productName
シャード・キー・フィールドは、主キー・フィールドの最初から最後までのサブセットである必要があり、主キー・フィールドの場合と同じ順序で指定する必要があります。前述の例では、次のコードはエラーになります。
shard-key -field productClass
適切に使用すると、マイナー・キーもパフォーマンスの向上に役立ちますが、その方法を理解するには、表に配置するデータに関連するパフォーマンスの問題を理解する必要があります。この問題は、次の項で説明します。