

 AWS Mobile SDK for Unity sekarang disertakan dalam AWS SDK untuk .NET. Panduan ini menjadi referensi versi yang diarsipkan dari Mobile SDK for Unity. Untuk informasi selengkapnya, lihat [Apa itu SDK for Unity AWS Seluler?](what-is-unity-plugin.md)

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

# Amazon DynamoDB
<a name="dynamodb"></a>

 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) layanan basis data yang cepat, sangat dapat diskalakan, sangat tersedia, hemat biaya, dan bukan basis data relasional. DynamoDB menghilangkan keterbatasan skalabilitas tradisional pada penyimpanan data sekaligus mempertahankan performa latensi rendah dan dapat diprediksi. Untuk informasi selengkapnya tentang DynamoDB, lihat [Amazon DynamoDB](https://aws.amazon.com/dynamodb/).

AWS Mobile SDK for Unity menyediakan perpustakaan tingkat tinggi untuk bekerja dengan DynamoDB. Anda juga dapat membuat permintaan langsung terhadap API DynamoDB tingkat rendah, tetapi untuk sebagian besar kasus penggunaan, perpustakaan tingkat tinggi lebih direkomendasikan. AmazonDynamoDBClient Ini adalah bagian yang sangat berguna dari perpustakaan tingkat tinggi. Dengan menggunakan kelas ini, Anda dapat melakukan berbagai operasi buat, baca, perbarui, dan hapus (CRUD) dan menjalankan kueri.

**catatan**  
Beberapa sampel dalam dokumen ini mengasumsikan penggunaan variabel kotak teks yang dipanggil ResultText untuk menampilkan keluaran jejak.

## Mengintegrasikan Amazon DynamoDB
<a name="integrating-amazon-dynamodb"></a>

Untuk menggunakan DynamoDB dalam aplikasi Unity, Anda harus menambahkan Unity SDK ke dalam proyek Anda. Jika Anda belum menambahkannya, [unduh SDK for Unity](https://aws.amazon.com/mobile/sdk/) dan ikuti petunjuk di [Mengatur AWS Mobile SDK for Unity](setup-unity.md). Kami merekomendasikan untuk menggunakan Identitas Amazon Cognito untuk memberikan kredensial AWS sementara untuk aplikasi Anda. Kredensial ini memungkinkan aplikasi Anda untuk mengakses layanan AWS dan sumber daya.

Untuk menggunakan DynamoDB dalam aplikasi, Anda harus mengatur izin yang benar. Kebijakan IAM berikut memungkinkan pengguna untuk menghapus, mendapatkan, menempatkan, memindai, dan memperbarui item dalam tabel DynamoDB tertentu, yang diidentifikasi oleh [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html):

```
{
"Statement": [{
    "Effect": "Allow",
    "Action": [
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
    ],
    "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"
}]
}
```

Kebijakan ini harus diterapkan pada peran yang ditetapkan ke kolam identitas Cognito, namun Anda harus mengganti nilai ** `Resource` ** dengan ARN yang benar untuk tabel DynamoDB Anda. Cognito secara otomatis membuat peran untuk kolam identitas baru Anda, dan Anda dapat menerapkan kebijakan tersebut untuk peran ini di [konsol IAM](https://console.aws.amazon.com/iam/).

Anda harus menambahkan atau menghapus tindakan yang diizinkan berdasarkan kebutuhan aplikasi Anda. Untuk mem-pelajari selengkapnya tentang kebijakan IAM, lihat [Menggunakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html). Untuk mem-pelajari selengkapnya tentang kebijakan khusus DynamoDB, lihat [Menggunakan IAM untuk Mengendalikan Akses ke Sumber Daya DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html).

## Membuat Tabel DynamoDB
<a name="create-a-dynamodb-table"></a>

Sekarang karena kita telah mengatur izin dan kredensial, mari kita membuat tabel DynamoDB untuk aplikasi kita. Untuk membuat tabel, buka [Konsol DynamoDB](https://console.aws.amazon.com/dynamodb/home) dan ikuti langkah-langkah ini:

1. Klik **Buat Tabel**.

1. Masukkan `Bookstore` sebagai nama tabel baru.

1. Pilih **Hash** sebagai tipe kunci primer.

1. Pilih **Nomor** dan masukkan `id` untuk nama atribut hash. Klik **Lanjutkan**.

1. Klik **Lanjutkan** lagi untuk melewatkan penambahan indeks.

1. Atur kapasitas baca ke `10` dan kapasitas menulis ke `5`. Klik **Lanjutkan**.

1. Masukkan email notifikasi dan klik **Lanjutkan** untuk membuat alarm throughput.

1. Klik **Buat**. DynamoDB akan membuat basis data Anda.

## Membuat Klien DynamoDB
<a name="create-a-dynamodb-client"></a>

Agar aplikasi kita dapat berinteraksi dengan tabel DynamoDB, kita membutuhkan klien. Kita dapat membuat klien DynamodDB default sebagai berikut:

```
var credentials = new CognitoAWSCredentials(IDENTITY_POOL_ID, RegionEndpoint.USEast1);
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials);
DynamoDBContext Context = new DynamoDBContext(client);
```

 AmazonDynamoDBClient Kelas adalah titik masuk untuk DynamoDB API. Kelas tersebut menyediakan metode instans untuk menciptakan, menjelaskan, memperbarui, dan menghapus tabel, antara operasi lainnya. Konteks menambahkan lapisan lebih lanjut dari abstraksi atas klien dan memungkinkan Anda untuk menggunakan fungsi tambahan seperti Model Persistensi Objek.

## Menjelaskan Tabel
<a name="describe-a-table"></a>

Untuk mendapatkan deskripsi tabel DynamoDB kita, kita dapat menggunakan kode berikut:

```
resultText.text +=("\n*** Retrieving table information ***\n");
       var request = new DescribeTableRequest
       {
           TableName = @"ProductCatalog"
       };
       Client.DescribeTableAsync(request, (result) =>
       {
               if (result.Exception != null)
               {
                       resultText.text += result.Exception.Message;
                       Debug.Log(result.Exception);
                       return;
               }
               var response = result.Response;
               TableDescription description = response.Table;
               resultText.text += ("Name: " + description.TableName + "\n");
               resultText.text += ("# of items: " + description.ItemCount + "\n");
               resultText.text += ("Provision Throughput (reads/sec): " +
                   description.ProvisionedThroughput.ReadCapacityUnits + "\n");
               resultText.text += ("Provision Throughput (reads/sec): " +
                   description.ProvisionedThroughput.WriteCapacityUnits + "\n");

       }, null);
   }
```

Dalam contoh ini, kita membuat klien dan DescribeTableRequest objek, menetapkan nama tabel kita ke **`TableName`**properti, dan kemudian meneruskan objek permintaan ke DescribeTableAsync metode pada AmazonDynamo DBClient objek. DescribeTableAsync juga mengambil delegasi yang akan dipanggil ketika operasi async selesai.

**catatan**  
Semua metode async pada delegasi AmazonDynamo DBClient take yang dipanggil saat operasi async selesai.

## Menyimpan Objek
<a name="save-an-object"></a>

Untuk menyimpan objek ke DynamoDB, gunakan SaveAsync <T>metode objek, di mana T adalah jenis objek yang Anda simpan. AmazonDynamo DBClient 

Kami memanggil basis data kami “Toko Buku”, dan sesuai dengan tema itu kami akan menerapkan model data yang mencatat atribut terkait buku. Berikut adalah kelas-kelas yang mendefinisikan model data kami.

```
[DynamoDBTable("ProductCatalog")]
    public class Book
    {
        [DynamoDBHashKey]   // Hash key.
        public int Id { get; set; }
        [DynamoDBProperty]
        public string Title { get; set; }
        [DynamoDBProperty]
        public string ISBN { get; set; }
        [DynamoDBProperty("Authors")]    // Multi-valued (set type) attribute.
        public List<string> BookAuthors { get; set; }
    }
```

Tentu saja, untuk aplikasi toko buku nyata kita akan membutuhkan bidang tambahan untuk hal-hal seperti penulis dan harga. Kelas Buku dihiasi dengan atribut [DynamoDBTable], ini mendefinisikan objek tabel database tipe Buku akan ditulis. Kunci untuk setiap instance kelas Buku diidentifikasi menggunakan atribut [Dynamo DBHash Key]. Properti diidentifikasi dengan atribut [DynamoDBProperty], ini menentukan kolom dalam tabel database tempat properti akan ditulis. Dengan model yang ada, kita dapat tulis beberapa metode untuk membuat, mengambil, memperbarui, dan menghapus objek Buku.

## Membuat Buku
<a name="create-a-book"></a>

```
private void PerformCreateOperation()
{
    Book myBook = new Book
    {
        Id = bookID,
        Title = "object persistence-AWS SDK for.NET SDK-Book 1001",
        ISBN = "111-1111111001",
        BookAuthors = new List<string> { "Author 1", "Author 2" },
    };

    // Save the book.
    Context.SaveAsync(myBook,(result)=>{
        if(result.Exception == null)
            resultText.text += @"book saved";
    });
}
```

## Mengambil Buku
<a name="retrieve-a-book"></a>

```
private void RetrieveBook()
{
    this.displayMessage += "\n*** Load book**\n";
    Context.LoadAsync<Book>(bookID,
                             (AmazonDynamoResult<Book> result) =>
    {
        if (result.Exception != null)
        {

            this.displayMessage += ("LoadAsync error" +result.Exception.Message);
            Debug.LogException(result.Exception);
            return;
        }
        _retrievedBook = result.Response;
        this.displayMessage += ("Retrieved Book: " +
                                "\nId=" + _retrievedBook.Id +
                                "\nTitle=" + _retrievedBook.Title +
                                "\nISBN=" + _retrievedBook.ISBN);
        string authors = "";
        foreach(string author in _retrievedBook.BookAuthors)
            authors += author + ",";
        this.displayMessage += "\nBookAuthor= "+ authors;
        this.displayMessage += ("\nDimensions= "+ _retrievedBook.Dimensions.Length + " X " +
                                _retrievedBook.Dimensions.Height + " X " +
                                _retrievedBook.Dimensions.Thickness);

    }, null);
}
```

## Memperbarui Buku
<a name="update-a-book"></a>

```
private void PerformUpdateOperation()
{
    // Retrieve the book.
    Book bookRetrieved = null;
    Context.LoadAsync<Book>(bookID,(result)=>
    {
        if(result.Exception == null )
        {
            bookRetrieved = result.Result as Book;
            // Update few properties.
            bookRetrieved.ISBN = "222-2222221001";
            // Replace existing authors list with this
            bookRetrieved.BookAuthors = new List<string> { "Author 1", "Author x" };
            Context.SaveAsync<Book>(bookRetrieved,(res)=>
            {
                if(res.Exception == null)
                     resultText.text += ("\nBook updated");
            });
        }
   });
}
```

## Menghapus Buku
<a name="delete-a-book"></a>

```
private void PerformDeleteOperation()
{
    // Delete the book.
    Context.DeleteAsync<Book>(bookID,(res)=>
    {
        if(res.Exception == null)
        {
            Context.LoadAsync<Book>(bookID,(result)=>
            {
                 Book deletedBook = result.Result;
                 if(deletedBook==null)
                     resultText.text += ("\nBook is deleted");
            });
        }
   });
}
```