Utilizzo delle tabelle inDynamoDB - AWS SDK for Java 1.x

Abbiamo annunciato l'imminente versione end-of-support di AWS SDK for Java (v1). Ti consigliamo di migrare alla AWS SDK for Java v2. Per date, dettagli aggiuntivi e informazioni su come effettuare la migrazione, consulta l'annuncio collegato.

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à.

Utilizzo delle tabelle inDynamoDB

Le tabelle sono container per tutti gli item in un database DynamoDB. Prima di poter aggiungere o rimuovere dati da DynamoDB, devi creare una tabella.

Per ogni tabella, devi definire:

  • Un nome di tabella univoco per l'account e la regione.

  • Una chiave primaria per la quale ogni valore deve essere univoco; due item nella tabella non possono avere lo stesso valore della chiave primaria.

    La chiave primaria può essere semplice, costituita da una singola chiave di partizione (HASH), o composita, costituita da una chiave di partizione e una di ordinamento (RANGE).

    A ogni valore chiave è associato un tipo di dati, enumerato dalla ScalarAttributeTypeclasse. Il valore della chiave può essere binario (B), numerico (N) o una stringa (S). Per ulteriori informazioni, consulta Regole di denominazione e tipi di dati nella Guida per gliAmazon DynamoDB sviluppatori.

  • Valori di velocità effettiva forniti che definiscono il numero di unità di capacità di lettura/scrittura riservate per la tabella.

    Nota

    Amazon DynamoDBi prezzi si basano sui valori di produttività forniti che hai impostato sui tuoi tavoli, quindi prenota solo la capacità che ritieni necessaria per il tuo tavolo.

La produttività fornita per una tabella può essere modificata in qualsiasi momento, in modo da poter regolare la capacità in base alle esigenze.

Creazione di una tabella

Usa ilcreateTable metodo del DynamoDBclient per creare una nuovaDynamoDB tabella. È necessario costruire gli attributi della tabella e uno schema della tabella, entrambi utilizzati per identificare la chiave primaria della tabella. Inoltre, occorre fornire i valori del throughput assegnato iniziali e un nome della tabella. Definisci solo gli attributi chiave della tabella durante la creazione dellaDynamoDB tabella.

Nota

Se esiste già una tabella con il nome scelto, AmazonServiceExceptionviene generata una.

Importazioni

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.AttributeDefinition; import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; import com.amazonaws.services.dynamodbv2.model.CreateTableResult; import com.amazonaws.services.dynamodbv2.model.KeySchemaElement; import com.amazonaws.services.dynamodbv2.model.KeyType; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;

Creazione di una tabella con una chiave primaria semplice

Questo codice consente di creare una tabella con una chiave primaria semplice ("Name").

Codice

CreateTableRequest request = new CreateTableRequest() .withAttributeDefinitions(new AttributeDefinition( "Name", ScalarAttributeType.S)) .withKeySchema(new KeySchemaElement("Name", KeyType.HASH)) .withProvisionedThroughput(new ProvisionedThroughput( new Long(10), new Long(10))) .withTableName(table_name); final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient(); try { CreateTableResult result = ddb.createTable(request); System.out.println(result.getTableDescription().getTableName()); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Vedi l'esempio completo suGitHub.

Creazione di una tabella con una chiave primaria composita

Aggiungi un altro AttributeDefinitione KeySchemaElementa CreateTableRequest.

Codice

CreateTableRequest request = new CreateTableRequest() .withAttributeDefinitions( new AttributeDefinition("Language", ScalarAttributeType.S), new AttributeDefinition("Greeting", ScalarAttributeType.S)) .withKeySchema( new KeySchemaElement("Language", KeyType.HASH), new KeySchemaElement("Greeting", KeyType.RANGE)) .withProvisionedThroughput( new ProvisionedThroughput(new Long(10), new Long(10))) .withTableName(table_name);

Vedi l'esempio completo suGitHub.

Elencare tabelle

È possibile elencare le tabelle in una particolare regione chiamando illistTables metodo del DynamoDBclient.

Nota

Se la tabella denominata non esiste per il tuo account e la tua regione, ResourceNotFoundExceptionviene generata una.

Importazioni

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.ListTablesRequest; import com.amazonaws.services.dynamodbv2.model.ListTablesResult;

Codice

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient(); ListTablesRequest request; boolean more_tables = true; String last_name = null; while(more_tables) { try { if (last_name == null) { request = new ListTablesRequest().withLimit(10); } else { request = new ListTablesRequest() .withLimit(10) .withExclusiveStartTableName(last_name); } ListTablesResult table_list = ddb.listTables(request); List<String> table_names = table_list.getTableNames(); if (table_names.size() > 0) { for (String cur_name : table_names) { System.out.format("* %s\n", cur_name); } } else { System.out.println("No tables found!"); System.exit(0); } last_name = table_list.getLastEvaluatedTableName(); if (last_name == null) { more_tables = false; }

Per impostazione predefinita, vengono restituite fino a 100 tabelle per chiamata: utilizzalegetLastEvaluatedTableName sull'ListTablesResultoggetto restituito per ottenere l'ultima tabella che è stata valutata. Puoi utilizzare questo valore per avviare la visualizzazione dell'elenco dopo l'ultimo valore restituito dalla visualizzazione dell'elenco precedente.

Vedi l'esempio completo suGitHub.

Descrizione di (recupero delle informazioni su) una tabella

Chiama ildescribeTable metodo del DynamoDBcliente.

Nota

Se la tabella denominata non esiste per il tuo account e la tua regione, ResourceNotFoundExceptionviene generata una.

Importazioni

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.AttributeDefinition; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputDescription; import com.amazonaws.services.dynamodbv2.model.TableDescription;

Codice

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient(); try { TableDescription table_info = ddb.describeTable(table_name).getTable(); if (table_info != null) { System.out.format("Table name : %s\n", table_info.getTableName()); System.out.format("Table ARN : %s\n", table_info.getTableArn()); System.out.format("Status : %s\n", table_info.getTableStatus()); System.out.format("Item count : %d\n", table_info.getItemCount().longValue()); System.out.format("Size (bytes): %d\n", table_info.getTableSizeBytes().longValue()); ProvisionedThroughputDescription throughput_info = table_info.getProvisionedThroughput(); System.out.println("Throughput"); System.out.format(" Read Capacity : %d\n", throughput_info.getReadCapacityUnits().longValue()); System.out.format(" Write Capacity: %d\n", throughput_info.getWriteCapacityUnits().longValue()); List<AttributeDefinition> attributes = table_info.getAttributeDefinitions(); System.out.println("Attributes"); for (AttributeDefinition a : attributes) { System.out.format(" %s (%s)\n", a.getAttributeName(), a.getAttributeType()); } } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Vedi l'esempio completo suGitHub.

Modifica (aggiornamento) di una tabella

È possibile modificare i valori di throughput forniti dalla tabella in qualsiasi momento chiamando ilupdateTable metodo del DynamoDBclient.

Nota

Se la tabella denominata non esiste per il tuo account e la tua regione, ResourceNotFoundExceptionviene generata una.

Importazioni

import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; import com.amazonaws.AmazonServiceException;

Codice

ProvisionedThroughput table_throughput = new ProvisionedThroughput( read_capacity, write_capacity); final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient(); try { ddb.updateTable(table_name, table_throughput); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Vedi l'esempio completo suGitHub.

Eliminazione di una tabella

Chiama ildeleteTable metodo del DynamoDBclient e passagli il nome della tabella.

Nota

Se la tabella denominata non esiste per il tuo account e la tua regione, ResourceNotFoundExceptionviene generata una.

Importazioni

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;

Codice

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient(); try { ddb.deleteTable(table_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Vedi l'esempio completo suGitHub.

Ulteriori informazioni