Menggunakan Indeks Sekunder Lokal: .NET - Amazon DynamoDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan Indeks Sekunder Lokal: .NET

Anda dapat menggunakan API tingkat rendah AWS SDK for .NET untuk membuat tabel Amazon DynamoDB dengan satu atau beberapa indeks sekunder lokal, mendeskripsikan indeks pada tabel, dan melakukan kueri menggunakan indeks. Operasi ini dipetakan ke tindakan API DynamoDB tingkat rendah yang sesuai. Untuk informasi selengkapnya, lihat Contoh kode .NET.

Berikut ini adalah langkah-langkah umum untuk operasi tabel menggunakan API tingkat rendah .NET.

  1. Buat instans kelas AmazonDynamoDBClient.

  2. Berikan parameter wajib dan opsional untuk operasi dengan membuat objek permintaan yang sesuai.

    Misalnya, buat objek CreateTableRequest untuk membuat tabel dan objek QueryRequest untuk mengkueri tabel atau indeks.

  3. Jalankan metode sesuai yang ditentukan oleh klien yang Anda buat pada langkah sebelumnya.

Membuat tabel dengan Indeks Sekunder Lokal

Indeks sekunder lokal harus dibuat pada saat Anda membuat tabel. Untuk melakukannya, gunakan CreateTable dan berikan spesifikasi Anda untuk satu atau beberapa indeks sekunder lokal. Contoh kode C# berikut membuat tabel untuk menyimpan informasi tentang lagu dalam koleksi musik. Kunci partisinya adalah Artist dan kunci urutannya adalah SongTitle. Indeks sekunder, AlbumTitleIndex, memfasilitasi kueri berdasarkan judul album.

Berikut ini adalah langkah-langkah untuk membuat tabel dengan indeks sekunder lokal, menggunakan API tingkat rendah .NET.

  1. Buat instans kelas AmazonDynamoDBClient.

  2. Buat instans kelas CreateTableRequest untuk memberikan informasi permintaan.

    Anda harus memberikan nama tabel, kunci primernya, dan nilai throughput yang ditentukan. Untuk indeks sekunder lokal, Anda harus memberikan nama indeks, nama dan jenis data kunci urutan indeks, skema kunci untuk indeks, dan proyeksi atribut.

  3. Jalankan metode CreateTable dengan menentukan objek permintaan sebagai parameter.

Contoh kode #C berikut mendemonstrasikan langkah sebelumnya. Kode ini membuat tabel (Music) dengan indeks sekunder pada atribut AlbumTitle. Kunci urutan dan kunci partisi tabel, ditambah kunci urutan indeks, adalah satu-satunya atribut yang diproyeksikan ke dalam indeks.

AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "Music"; CreateTableRequest createTableRequest = new CreateTableRequest() { TableName = tableName }; //ProvisionedThroughput createTableRequest.ProvisionedThroughput = new ProvisionedThroughput() { ReadCapacityUnits = (long)5, WriteCapacityUnits = (long)5 }; //AttributeDefinitions List<AttributeDefinition> attributeDefinitions = new List<AttributeDefinition>(); attributeDefinitions.Add(new AttributeDefinition() { AttributeName = "Artist", AttributeType = "S" }); attributeDefinitions.Add(new AttributeDefinition() { AttributeName = "SongTitle", AttributeType = "S" }); attributeDefinitions.Add(new AttributeDefinition() { AttributeName = "AlbumTitle", AttributeType = "S" }); createTableRequest.AttributeDefinitions = attributeDefinitions; //KeySchema List<KeySchemaElement> tableKeySchema = new List<KeySchemaElement>(); tableKeySchema.Add(new KeySchemaElement() { AttributeName = "Artist", KeyType = "HASH" }); //Partition key tableKeySchema.Add(new KeySchemaElement() { AttributeName = "SongTitle", KeyType = "RANGE" }); //Sort key createTableRequest.KeySchema = tableKeySchema; List<KeySchemaElement> indexKeySchema = new List<KeySchemaElement>(); indexKeySchema.Add(new KeySchemaElement() { AttributeName = "Artist", KeyType = "HASH" }); //Partition key indexKeySchema.Add(new KeySchemaElement() { AttributeName = "AlbumTitle", KeyType = "RANGE" }); //Sort key Projection projection = new Projection() { ProjectionType = "INCLUDE" }; List<string> nonKeyAttributes = new List<string>(); nonKeyAttributes.Add("Genre"); nonKeyAttributes.Add("Year"); projection.NonKeyAttributes = nonKeyAttributes; LocalSecondaryIndex localSecondaryIndex = new LocalSecondaryIndex() { IndexName = "AlbumTitleIndex", KeySchema = indexKeySchema, Projection = projection }; List<LocalSecondaryIndex> localSecondaryIndexes = new List<LocalSecondaryIndex>(); localSecondaryIndexes.Add(localSecondaryIndex); createTableRequest.LocalSecondaryIndexes = localSecondaryIndexes; CreateTableResponse result = client.CreateTable(createTableRequest); Console.WriteLine(result.CreateTableResult.TableDescription.TableName); Console.WriteLine(result.CreateTableResult.TableDescription.TableStatus);

Anda harus menunggu hingga DynamoDB membuat tabel dan menetapkan status tabel menjadi ACTIVE. Setelah itu, Anda bisa mulai memasukkan item data ke dalam tabel.

Mendeskripsikan tabel dengan Indeks Sekunder Lokal

Untuk mendapatkan informasi tentang indeks sekunder lokal pada tabel, gunakan API DescribeTable. Untuk setiap indeks, Anda dapat mengakses namanya, skema kunci, dan atribut yang diproyeksikan.

Berikut ini adalah langkah-langkah untuk mengakses informasi indeks sekunder lokal suatu tabel menggunakan API tingkat rendah .NET.

  1. Buat instans kelas AmazonDynamoDBClient.

  2. Buat instans kelas DescribeTableRequest untuk memberikan informasi permintaan. Anda harus memberikan nama tabel.

  3. Jalankan metode describeTable dengan menentukan objek permintaan sebagai parameter.

Contoh kode #C berikut mendemonstrasikan langkah sebelumnya.

contoh
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); string tableName = "Music"; DescribeTableResponse response = client.DescribeTable(new DescribeTableRequest() { TableName = tableName }); List<LocalSecondaryIndexDescription> localSecondaryIndexes = response.DescribeTableResult.Table.LocalSecondaryIndexes; // This code snippet will work for multiple indexes, even though // there is only one index in this example. foreach (LocalSecondaryIndexDescription lsiDescription in localSecondaryIndexes) { Console.WriteLine("Info for index " + lsiDescription.IndexName + ":"); foreach (KeySchemaElement kse in lsiDescription.KeySchema) { Console.WriteLine("\t" + kse.AttributeName + ": key type is " + kse.KeyType); } Projection projection = lsiDescription.Projection; Console.WriteLine("\tThe projection type is: " + projection.ProjectionType); if (projection.ProjectionType.ToString().Equals("INCLUDE")) { Console.WriteLine("\t\tThe non-key projected attributes are:"); foreach (String s in projection.NonKeyAttributes) { Console.WriteLine("\t\t" + s); } } }

Mengkueri Indeks Sekunder Lokal

Anda dapat menggunakan Query pada indeks sekunder lokal, sama seperti Anda Query tabel. Anda harus menentukan nama indeks, kriteria kueri untuk kunci urutan indeks, dan atribut yang ingin Anda kembalikan. Dalam contoh ini, indeksnya adalah AlbumTitleIndex, dan kunci urutan indeksnya adalah AlbumTitle.

Satu-satunya atribut yang dikembalikan adalah atribut yang telah diproyeksikan ke dalam indeks. Anda dapat memodifikasi kueri ini untuk memilih atribut non-kunci juga, tetapi ini akan memerlukan aktivitas pengambilan tabel yang relatif mahal. Untuk informasi selengkapnya tentang pengambilan tabel, lihat Proyeksi atribut

Berikut ini adalah langkah-langkah untuk mengkueri indeks sekunder lokal menggunakan API tingkat rendah .NET.

  1. Buat instans kelas AmazonDynamoDBClient.

  2. Buat instans kelas QueryRequest untuk memberikan informasi permintaan.

  3. Jalankan metode query dengan menentukan objek permintaan sebagai parameter.

Contoh kode #C berikut mendemonstrasikan langkah sebelumnya.

contoh
QueryRequest queryRequest = new QueryRequest { TableName = "Music", IndexName = "AlbumTitleIndex", Select = "ALL_ATTRIBUTES", ScanIndexForward = true, KeyConditionExpression = "Artist = :v_artist and AlbumTitle = :v_title", ExpressionAttributeValues = new Dictionary<string, AttributeValue>() { {":v_artist",new AttributeValue {S = "Acme Band"}}, {":v_title",new AttributeValue {S = "Songs About Life"}} }, }; QueryResponse response = client.Query(queryRequest); foreach (var attribs in response.Items) { foreach (var attrib in attribs) { Console.WriteLine(attrib.Key + " ---> " + attrib.Value.S); } Console.WriteLine(); }