Versi 4 (V4) dari dalam SDK untuk .NET pratinjau! Untuk melihat informasi tentang versi baru ini di pratinjau, lihat Panduan Pengembang AWS SDK untuk .NET (pratinjau versi 4).
Harap dicatat bahwa V4 SDK dalam pratinjau, oleh karena itu kontennya dapat berubah.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan database Amazon DynamoDB NoSQL
catatan
Model pemrograman dalam topik ini hadir di .NET Framework dan .NET (Core), tetapi konvensi pemanggilan berbeda, apakah sinkron atau asinkron.
AWS SDK untuk .NET Mendukung Amazon DynamoDB, yang merupakan layanan database NoSQL cepat yang ditawarkan oleh. AWSSDK menyediakan tiga model pemrograman untuk berkomunikasi dengan DynamoDB: model tingkat rendah, model dokumen, dan model persistensi objek.
Informasi berikut memperkenalkan model-model ini dan mereka APIs, memberikan contoh tentang bagaimana dan kapan menggunakannya, dan memberi Anda tautan ke sumber daya pemrograman DynamoDB tambahan di. AWS SDK untuk .NET
Model Tingkat Rendah
Model pemrograman tingkat rendah membungkus panggilan langsung ke layanan DynamoDB. Anda mengakses model ini melalui namespace DBv2Amazon.Dynamo.
Dari ketiga model tersebut, model tingkat rendah mengharuskan Anda untuk menulis kode paling banyak. Misalnya, Anda harus mengonversi tipe data.NET ke padanannya di DynamoDB. Namun, model ini memberi Anda akses ke sebagian besar fitur.
Contoh berikut menunjukkan cara menggunakan model tingkat rendah untuk membuat tabel, memodifikasi tabel, dan menyisipkan item ke dalam tabel di DynamoDB.
Membuat Tabel
Dalam contoh berikut, Anda membuat tabel dengan menggunakan CreateTable
metode AmazonDynamoDBClient
kelas. CreateTable
Metode ini menggunakan instance CreateTableRequest
kelas yang berisi karakteristik seperti nama atribut item yang diperlukan, definisi kunci primer, dan kapasitas throughput. CreateTable
Metode mengembalikan sebuah instance dari CreateTableResponse
kelas.
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;
var client = new AmazonDynamoDBClient();
Console.WriteLine("Getting list of tables");
List<string> currentTables = client.ListTables().TableNames;
Console.WriteLine("Number of tables: " + currentTables.Count);
if (!currentTables.Contains("AnimalsInventory"))
{
var request = new CreateTableRequest
{
TableName = "AnimalsInventory",
AttributeDefinitions = new List<AttributeDefinition>
{
new AttributeDefinition
{
AttributeName = "Id",
// "S" = string, "N" = number, and so on.
AttributeType = "N"
},
new AttributeDefinition
{
AttributeName = "Type",
AttributeType = "S"
}
},
KeySchema = new List<KeySchemaElement>
{
new KeySchemaElement
{
AttributeName = "Id",
// "HASH" = hash key, "RANGE" = range key.
KeyType = "HASH"
},
new KeySchemaElement
{
AttributeName = "Type",
KeyType = "RANGE"
},
},
ProvisionedThroughput = new ProvisionedThroughput
{
ReadCapacityUnits = 10,
WriteCapacityUnits = 5
},
};
var response = client.CreateTable(request);
Console.WriteLine("Table created with request ID: " +
response.ResponseMetadata.RequestId);
}
Memverifikasi Bahwa Tabel Siap Dimodifikasi
Sebelum Anda dapat mengubah atau memodifikasi tabel, tabel harus siap untuk modifikasi. Contoh berikut menunjukkan cara menggunakan model tingkat rendah untuk memverifikasi bahwa tabel di DynamoDB sudah siap. Dalam contoh ini, tabel target untuk memeriksa direferensikan melalui DescribeTable
metode AmazonDynamoDBClient
kelas. Setiap lima detik, kode memeriksa nilai TableStatus
properti tabel. Ketika status diatur keACTIVE
, tabel siap untuk dimodifikasi.
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;
var client = new AmazonDynamoDBClient();
var status = "";
do
{
// Wait 5 seconds before checking (again).
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
try
{
var response = client.DescribeTable(new DescribeTableRequest
{
TableName = "AnimalsInventory"
});
Console.WriteLine("Table = {0}, Status = {1}",
response.Table.TableName,
response.Table.TableStatus);
status = response.Table.TableStatus;
}
catch (ResourceNotFoundException)
{
// DescribeTable is eventually consistent. So you might
// get resource not found.
}
} while (status != TableStatus.ACTIVE);
Memasukkan Item ke dalam Tabel
Dalam contoh berikut, Anda menggunakan model tingkat rendah untuk menyisipkan dua item ke dalam tabel di DynamoDB. Setiap item dimasukkan melalui PutItem
metode AmazonDynamoDBClient
kelas, menggunakan instance PutItemRequest
kelas. Masing-masing dari dua contoh PutItemRequest
kelas mengambil nama tabel tempat item akan dimasukkan, dengan serangkaian nilai atribut item.
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;
var client = new AmazonDynamoDBClient();
var request1 = new PutItemRequest
{
TableName = "AnimalsInventory",
Item = new Dictionary<string, AttributeValue>
{
{ "Id", new AttributeValue { N = "1" }},
{ "Type", new AttributeValue { S = "Dog" }},
{ "Name", new AttributeValue { S = "Fido" }}
}
};
var request2 = new PutItemRequest
{
TableName = "AnimalsInventory",
Item = new Dictionary<string, AttributeValue>
{
{ "Id", new AttributeValue { N = "2" }},
{ "Type", new AttributeValue { S = "Cat" }},
{ "Name", new AttributeValue { S = "Patches" }}
}
};
client.PutItem(request1);
client.PutItem(request2);
Model Dokumen
Model pemrograman dokumen menyediakan cara yang lebih mudah untuk bekerja dengan data di DynamoDB. Model ini secara khusus ditujukan untuk mengakses tabel dan item dalam tabel. Anda mengakses model ini melalui DBv2Amazon.Dynamo. DocumentModelnamespace.
Dibandingkan dengan model pemrograman tingkat rendah, model dokumen lebih mudah dikodekan terhadap data DynamoDB. Misalnya, Anda tidak perlu mengonversi sebanyak mungkin tipe data.NET ke padanannya di DynamoDB. Namun, model ini tidak menyediakan akses ke banyak fitur seperti model pemrograman tingkat rendah. Misalnya, Anda dapat menggunakan model ini untuk membuat, mengambil, memperbarui, dan menghapus item dalam tabel. Namun, untuk membuat tabel, Anda harus menggunakan model tingkat rendah. Dibandingkan dengan model persistensi objek, model ini mengharuskan Anda untuk menulis lebih banyak kode untuk menyimpan, memuat, dan menanyakan objek.NET.
Untuk informasi selengkapnya tentang model pemrograman dokumen DynamoDB, lihat .NET: Model dokumen dalam Panduan Pengembang Amazon DynamoDB.
Bagian berikut memberikan informasi tentang cara membuat representasi tabel DynamoDB yang diinginkan, dan contoh tentang cara menggunakan model dokumen untuk menyisipkan item ke dalam tabel dan mendapatkan item dari tabel.
Buat representasi tabel
Untuk melakukan operasi data menggunakan model dokumen, Anda harus terlebih dahulu membuat instance Table
kelas yang mewakili tabel tertentu. Ada dua cara utama untuk melakukan ini.
LoadTable metode
Mekanisme pertama adalah menggunakan salah satu LoadTable
metode statis Table
kelas, mirip dengan contoh berikut:
var client = new AmazonDynamoDBClient();
Table table = Table.LoadTable(client, "Reply");
catatan
Meskipun mekanisme ini berfungsi, dalam kondisi tertentu, kadang-kadang dapat menyebabkan latensi tambahan atau kebuntuan karena perilaku start dingin dan kumpulan ulir. Untuk informasi lebih lanjut tentang perilaku ini, lihat posting blog Peningkatan Pola Inisialisasi DynamoDB
TableBuilder
Mekanisme alternatif, TableBuilder
kelas, diperkenalkan dalam versi 3.7.203 dari paket.Dynamo. AWSSDK DBv2 NuGet DescribeTable
metode. Mekanisme ini digunakan dengan cara yang mirip dengan contoh berikut:
var client = new AmazonDynamoDBClient();
var table = new TableBuilder(client, "Reply")
.AddHashKey("Id", DynamoDBEntryType.String)
.AddRangeKey("ReplyDateTime", DynamoDBEntryType.String)
.AddGlobalSecondaryIndex("PostedBy-Message-index", "Author", DynamoDBEntryType.String, "Message", DynamoDBEntryType.String)
.Build();
Untuk informasi lebih lanjut tentang mekanisme alternatif ini, lihat lagi posting blog Peningkatan Pola Inisialisasi DynamoDB
Memasukkan item ke dalam tabel
Dalam contoh berikut, balasan dimasukkan ke dalam tabel Balas melalui PutItemAsync
metode Table
kelas. PutItemAsync
Metode ini mengambil contoh dari Document
kelas; Document
kelas hanyalah kumpulan atribut yang diinisialisasi.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
// Create a representation of the "Reply" table
// by using one of the mechanisms described previously.
// Then, add a reply to the table.
var newReply = new Document();
newReply["Id"] = Guid.NewGuid().ToString();
newReply["ReplyDateTime"] = DateTime.UtcNow;
newReply["PostedBy"] = "Author1";
newReply["Message"] = "Thank you!";
await table.PutItemAsync(newReply);
Mendapatkan item dari tabel
Dalam contoh berikut, balasan diambil melalui GetItemAsync
metode Table
kelas. Untuk menentukan balasan yang akan didapat, GetItemAsync
metode ini menggunakan kunci hash-and-range utama dari balasan target.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
// Create a representation of the "Reply" table
// by using one of the mechanisms described previously.
// Then, get a reply from the table
// where "guid" is the hash key and "datetime" is the range key.
var reply = await table.GetItemAsync(guid, datetime);
Console.WriteLine("Id = " + reply["Id"]);
Console.WriteLine("ReplyDateTime = " + reply["ReplyDateTime"]);
Console.WriteLine("PostedBy = " + reply["PostedBy"]);
Console.WriteLine("Message = " + reply["Message"]);
Contoh sebelumnya secara implisit mengubah nilai tabel menjadi string untuk metode ini. WriteLine
Anda dapat melakukan konversi eksplisit dengan menggunakan berbagai metode “As [type]” kelas. DynamoDBEntry
Misalnya, Anda dapat secara eksplisit mengonversi nilai Id
dari tipe Primitive
data ke GUID melalui metode: AsGuid()
var guid = reply["Id"].AsGuid();
Model Kegigihan Objek
Model pemrograman persistensi objek dirancang khusus untuk menyimpan, memuat, dan menanyakan objek.NET di DynamoDB. Anda mengakses model ini melalui DBv2Amazon.Dynamo. DataModelnamespace.
Dari ketiga model tersebut, model persistensi objek adalah yang paling mudah untuk dikodekan setiap kali Anda menyimpan, memuat, atau menanyakan data DynamoDB. Misalnya, Anda bekerja dengan tipe data DynamoDB secara langsung. Namun, model ini hanya menyediakan akses ke operasi yang menyimpan, memuat, dan menanyakan objek.NET di DynamoDB. Misalnya, Anda dapat menggunakan model ini untuk membuat, mengambil, memperbarui, dan menghapus item dalam tabel. Namun, Anda harus terlebih dahulu membuat tabel Anda menggunakan model tingkat rendah, dan kemudian menggunakan model ini untuk memetakan kelas.NET Anda ke tabel.
Untuk informasi selengkapnya tentang model pemrograman persistensi objek DynamoDB, lihat .NET: Model persistensi objek di Panduan Pengembang Amazon DynamoDB.
Contoh berikut menunjukkan kepada Anda bagaimana mendefinisikan kelas.NET yang mewakili item DynamoDB, menggunakan instance dari kelas.NET untuk menyisipkan item ke dalam tabel DynamoDB, dan menggunakan instance dari kelas.NET untuk mendapatkan item dari tabel.
Mendefinisikan kelas.NET yang mewakili item dalam tabel
Dalam contoh berikut dari definisi kelas, DynamoDBTable
atribut menentukan nama tabel, sedangkan DynamoDBHashKey
dan DynamoDBRangeKey
atribut model kunci hash-and-range utama tabel. DynamoDBGlobalSecondaryIndexHashKey
Atribut didefinisikan sehingga kueri untuk balasan oleh penulis tertentu dapat dibangun.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
[DynamoDBTable("Reply")]
public class Reply
{
[DynamoDBHashKey]
public string Id { get; set; }
[DynamoDBRangeKey(StoreAsEpoch = false)]
public DateTime ReplyDateTime { get; set; }
[DynamoDBGlobalSecondaryIndexHashKey("PostedBy-Message-Index",
AttributeName ="PostedBy")]
public string Author { get; set; }
[DynamoDBGlobalSecondaryIndexRangeKey("PostedBy-Message-Index")]
public string Message { get; set; }
}
Membuat konteks untuk model ketekunan objek
Untuk menggunakan model pemrograman persistensi objek untuk DynamoDB, Anda harus membuat konteks, yang menyediakan koneksi ke DynamoDB dan memungkinkan Anda mengakses tabel, melakukan berbagai operasi, dan menjalankan kueri.
Konteks dasar
Contoh berikut menunjukkan cara membuat konteks yang paling dasar.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
var client = new AmazonDynamoDBClient();
var context = new DynamoDBContext(client);
Konteks dengan DisableFetchingTableMetadata properti
Contoh berikut menunjukkan bagaimana Anda mungkin juga mengatur DisableFetchingTableMetadata
properti DynamoDBContextConfig
kelas untuk mencegah panggilan implisit ke DescribeTable
metode.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
var client = new AmazonDynamoDBClient();
var context = new DynamoDBContext(client, new DynamoDBContextConfig
{
DisableFetchingTableMetadata = true
});
Jika DisableFetchingTableMetadata
properti diatur ke false
(default), seperti yang ditunjukkan pada contoh pertama, Anda dapat menghilangkan atribut yang menggambarkan kunci dan struktur indeks item tabel dari Reply
kelas. Atribut ini malah akan disimpulkan melalui panggilan implisit ke metode. DescribeTable
Jika DisableFetchingTableMetadata
diatur ketrue
, seperti yang ditunjukkan pada contoh kedua, metode model ketekunan objek seperti SaveAsync
dan QueryAsync
bergantung sepenuhnya pada atribut yang didefinisikan di Reply
kelas. Dalam hal ini, panggilan ke DescribeTable
metode tidak terjadi.
catatan
Dalam kondisi tertentu, panggilan ke DescribeTable
metode terkadang dapat menyebabkan latensi tambahan atau kebuntuan karena perilaku cold-start dan thread-pool. Untuk alasan ini, terkadang menguntungkan untuk menghindari panggilan ke metode itu.
Untuk informasi lebih lanjut tentang perilaku ini, lihat posting blog Peningkatan Pola Inisialisasi DynamoDB
Menggunakan instance dari kelas.NET untuk menyisipkan item ke dalam tabel
Dalam contoh ini, item dimasukkan melalui SaveAsync
metode DynamoDBContext
kelas, yang mengambil instance inisialisasi dari kelas.NET yang mewakili item.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
// Create an appropriate context for the object persistence programming model,
// examples of which have been described earlier.
// Create an object that represents the new item.
var reply = new Reply()
{
Id = Guid.NewGuid().ToString(),
ReplyDateTime = DateTime.UtcNow,
Author = "Author1",
Message = "Thank you!"
};
// Insert the item into the table.
await context.SaveAsync<Reply>(reply, new DynamoDBOperationConfig
{
IndexName = "PostedBy-Message-index"
});
Menggunakan instance dari kelas.NET untuk mendapatkan item dari tabel
Dalam contoh ini, kueri dibuat untuk menemukan semua catatan “Author1" dengan menggunakan QueryAsync
metode DynamoDBContext
kelas. Kemudian, item diambil melalui GetNextSetAsync
metode query.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
// Create an appropriate context for the object persistence programming model,
// examples of which have been described earlier.
// Construct a query that finds all replies by a specific author.
var query = context.QueryAsync<Reply>("Author1", new DynamoDBOperationConfig
{
IndexName = "PostedBy-Message-index"
});
// Display the result.
var set = await query.GetNextSetAsync();
foreach (var item in set)
{
Console.WriteLine("Id = " + item.Id);
Console.WriteLine("ReplyDateTime = " + item.ReplyDateTime);
Console.WriteLine("PostedBy = " + item.Author);
Console.WriteLine("Message = " + item.Message);
}
Informasi tambahan tentang model persistensi objek
Contoh dan penjelasan yang ditunjukkan di atas terkadang menyertakan properti DynamoDBContext
kelas yang disebutDisableFetchingTableMetadata
. Properti ini, yang diperkenalkan dalam DBv2 NuGet paket AWSSDK .Dynamo versi 3.7.203
Berikut ini adalah beberapa informasi tambahan tentang properti ini.
-
Properti ini dapat diatur secara global dalam
web.config
file Andaapp.config
atau jika Anda menggunakan .NET Framework. -
Properti ini dapat diatur secara global dengan menggunakan
AWSConfigsDynamoDB
kelas, seperti yang ditunjukkan pada contoh berikut.// Set the DisableFetchingTableMetadata property globally // before constructing any context objects. AWSConfigsDynamoDB.Context.DisableFetchingTableMetadata = true; var client = new AmazonDynamoDBClient(); var context = new DynamoDBContext(client);
-
Dalam beberapa kasus, Anda tidak dapat menambahkan atribut DynamoDB ke kelas.NET; misalnya, jika kelas didefinisikan dalam dependensi. Dalam kasus seperti itu, masih mungkin untuk mengambil keuntungan dari
DisableFetchingTableMetadata
properti. Untuk melakukannya, gunakanTableBuilder
kelas selainDisableFetchingTableMetadata
properti.TableBuilder
Kelas ini juga diperkenalkan dalam versi 3.7.203 dari paket.Dynamo. AWSSDK DBv2 NuGet// Set the DisableFetchingTableMetadata property globally // before constructing any context objects. AWSConfigsDynamoDB.Context.DisableFetchingTableMetadata = true; var client = new AmazonDynamoDBClient(); var context = new DynamoDBContext(client); var table = new TableBuilder(client, "Reply") .AddHashKey("Id", DynamoDBEntryType.String) .AddRangeKey("ReplyDateTime", DynamoDBEntryType.String) .AddGlobalSecondaryIndex("PostedBy-Message-index", "Author", DynamoDBEntryType.String, "Message", DynamoDBEntryType.String) .Build(); // This registers the "Reply" table we constructed via the builder. context.RegisterTableDefinition(table); // Now operations like this will work, // even if the Reply class was not annotated with this index. var query = context.QueryAsync<Reply>("Author1", new DynamoDBOperationConfig() { IndexName = "PostedBy-Message-index" });
Informasi lain
Menggunakan SDK untuk .NET to program DynamoDB, informasi dan contoh
Model, informasi, dan contoh Tingkat Rendah
-
Bekerja dengan Tabel Menggunakan API SDK untuk .NET Tingkat Rendah
-
Bekerja dengan Item Menggunakan API SDK untuk .NET Tingkat Rendah
-
Mengkueri Tabel Menggunakan API Tingkat SDK untuk .NET Rendah
-
Memindai Tabel Menggunakan API SDK untuk .NET Tingkat Rendah
-
Bekerja dengan Indeks Sekunder Lokal Menggunakan API Tingkat SDK untuk .NET Rendah
-
Bekerja dengan Indeks Sekunder Global Menggunakan API Tingkat SDK untuk .NET Rendah
Model dokumen, informasi dan contoh
Model persistensi objek, informasi dan contoh
Informasi bermanfaat lainnya
-
Lihat Integrasi AWS dengan .NET Aspire untuk informasi tentang pengembangan dengan Amazon DynamoDB lokal melalui .NET Aspire.