Amazon DynamoDB - AWSMobile SDK for Unity

LaAWSMobile SDK for Unity è ora incluso nel kit SDK MobileAWS SDK for .NET. Questa guida fa riferimento alla versione archiviata dell'SDK Mobile per Unity. Per ulteriori informazioni, consultaChe cos'è ?AWSMobile SDK for Unity?

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Amazon DynamoDB

Amazon DynamoDB è un servizio di database non relazionale, conveniente, veloce e altamente scalabile e disponibile. DynamoDB rimuove le tradizionali limitazioni di scalabilità dello storage dei dati, mantenendo una bassa latenza e prestazioni prevedibili. Per informazioni su DynamoDB, consulta.Amazon DynamoDB.

AWS Mobile SDK for Unity fornisce una libreria di alto livello per lavorare con DynamoDB. È inoltre possibile effettuare richieste direttamente contro l'API DynamoDB di basso livello, ma per la maggior parte dei casi d'uso è consigliata la libreria di alto livello. LaAmazonDynamoDBClient è una parte particolarmente utile della libreria di alto livello. Utilizzando questa classe, è possibile eseguire diverse operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD) ed eseguire query.

Nota

Alcuni esempi di questo documento presuppongono l'uso di una variabile casella di testo denominataResultTextper visualizzare l'output di traccia.

Integrazione di Amazon DynamoDB

Per utilizzare DynamoDB in un'applicazione Unity, è necessario aggiungere Unity SDK al progetto. Se non l'hai già fatto,scarica l'SDK for Unitye segui le istruzioni inConfigurazione dell'SDK AWS Mobile per Unity. Consigliamo di utilizzare Amazon Cognito Identity per fornire credenziali AWS temporanee per le applicazioni. Queste credenziali consentono alla tua app di accedere ai servizi e alle risorse AWS.

Per utilizzare DynamoDB in un'applicazione, è necessario impostare le autorizzazioni corrette. Il seguente criterio IAM consente all'utente di eliminare, ottenere, inserire, scansionare e aggiornare gli elementi in una tabella DynamoDB specifica, identificata daARN:

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

Questa policy deve essere applicata ai ruoli assegnati al pool di identità Cognito, sostituendo la Resource valore con l'ARN corretto per la tua tabella DynamoDB. Cognito crea automaticamente un ruolo per il tuo nuovo pool di identità e puoi applicare le policy a questo ruolo nellaConsole IAM.

È necessario aggiungere o rimuovere le azioni consentite in base alle esigenze della tua app. Per ulteriori informazioni sulle policy IAM, consulta la sezione relativa all'utilizzo di IAM. Per ulteriori informazioni sulle policy specifiche di DynamoDB, consultaUtilizzo di IAM per controllare l'accesso alle risorse DynamoDB.

Creazione di una tabella DynamoDB

Ora che abbiamo configurato le autorizzazioni e le credenziali, creiamo una tabella DynamoDB per la nostra applicazione. Per creare una tabella, vai allaLa console DynamoDBe procedi come descritto:

  1. Fare clic su Create Table (Crea tabella).

  2. InvioBookstorecome nome della tabella.

  3. SelezionaHashcome tipo di chiave primaria.

  4. SelezionaNumbere inserisciidper il nome dell'attributo hash. Fai clic su Continue (Continua).

  5. Fare clic suContinuadi nuovo per saltare l'aggiunta di indici.

  6. Imposta la capacità di lettura su10e la capacità di scrittura5. Fai clic su Continue (Continua).

  7. Inserisci un'e-mail di notifica e fai clic suContinuaper creare allarmi di throughput.

  8. Fai clic su Create (Crea). DynamoDB creerà il database.

Creazione di un client DynamoDB

Affinché la nostra app interagisca con una tabella DynamoDB, abbiamo bisogno di un client. Possiamo creare un client DynamodDB predefinito come segue:

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

LaAmazonDynamoLa classe DbClient è il punto di ingresso per l'API DynamoDB. La classe fornisce metodi di istanza per creare, descrivere, aggiornare ed eliminare tabelle, tra le altre operazioni. Context aggiunge un ulteriore livello di astrazione sul client e consente di utilizzare funzionalità aggiuntive come il modello di persistenza degli oggetti.

Descrizione di una tabella

Per ottenere una descrizione della nostra tabella DynamoDB, possiamo utilizzare il seguente codice:

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); }

In questo esempio, creiamo un client e unaDescribeTableRichiesta oggetto, assegna il nome della nostra tabella al TableName e quindi passa l'oggetto della richiesta alDescribeTableMetodo asincrono sulAmazonDynamoOggetto DbClient. DescribeTableAsync accetta anche un delegato che verrà chiamato al termine dell'operazione asincrona.

Nota

Tutti i metodi asincroni sulAmazonDynamoDBClient prende i delegati che vengono chiamati al termine dell'operazione asincrona.

Salva un oggetto

Per salvare un oggetto in DynamoDB, utilizzare ilSaveAsync<T>metodo delAmazonDynamooggetto DBClient, dove T è il tipo di oggetto che si sta salvando.

Abbiamo chiamato il nostro database «Bookstore» e, in linea con quel tema, implementeremo un modello di dati che registra gli attributi relativi al libro. Ecco le classi che definiscono il nostro modello di dati.

[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; } }

Naturalmente, per una vera applicazione di libreria avremmo bisogno di campi aggiuntivi per cose come autore e prezzo. La classe Book è decorata con l'attributo [DynamoDBTable], che definisce gli oggetti della tabella di database di tipo Book verranno scritti. La chiave per ogni istanza della classe Book è identificata utilizzando [DynamoDB]HashKey] attributo. Le proprietà sono identificate con l'attributo [DynamoDBProperty], specificando la colonna nella tabella del database in cui verrà scritta la proprietà. Con il modello in posizione, possiamo scrivere alcuni metodi per creare, recuperare, aggiornare ed eliminare gli oggetti Book.

Creazione di un libro

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"; }); }

Recupera un libro

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); }

Aggiornamento di un libro

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"); }); } }); }

Eliminazione di un libro

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"); }); } }); }