AWS DynamoDB

Il nuovo servizio NoSQL Database offerto da Amazon.

13 February, 2012

Il 19 gennaio scorso Amazon ha annunciato l'introduzione di un nuovo servizio NoSQL Database: sto parlando di DynamoDB. L'aspetto che più mi interessa tra i vantaggi presentati dall' articolo scritto nel blog di Werner Vogels è quello della velocità: riduzione della latenza per garantire uno throughput elevato.

Per ora sto eseguendo alcuni test di scrittura con un'account Amazon Free Tier. I risultati non sono entusiasmanti, molto probabilmente dovuti ai limiti imposti (max 5 write per second). I miei test procederanno e sarò lieto di pubblicare qualcosa nei prossimi giorni; nel frattempo vi posto alcune righe di codice per poter interagire con DynamoDB.

Creare una tabella


  // Get PropertiesCredentials
  InputStream credentialsAsStream = Thread.currentThread().getContextClassLoader()
    .getResourceAsStream("AwsCredentials.properties");
  AWSCredentials credentials = new PropertiesCredentials(credentialsAsStream);

  // Activate the Amazon SimpleDB Client
  this.dynamoDB = new AmazonDynamoDBClient(credentials);

  // Create a table with a primary key named 'name', which holds a string
  CreateTableRequest createTableRequest = new CreateTableRequest()
    .withTableName(tableName)
    .withKeySchema(new KeySchema(new KeySchemaElement()
    .withAttributeName("messageId").withAttributeType("S")))
    .withProvisionedThroughput(new ProvisionedThroughput()
    .withReadCapacityUnits(10L).withWriteCapacityUnits(5L));

  tableDescription = this.dynamoDB.createTable(createTableRequest).getTableDescription();

Salvare un record


  // Save item
  Map item = newItem(
    recordId, clientId, body, System.currentTimeMillis());
  PutItemRequest putItemRequest =
    new PutItemRequest(this.table, item);
  PutItemResult putItemResult = dynamoDB.putItem(putItemRequest);

  /**
   * Create item object.
   */
  private Map<String, AttributeValue> newItem(
    String messageId, String clientId, String body, long created) {

    Map<String, AttributeValue> item =
      new HashMap<String, AttributeValue>();

    item.put("messageId", new AttributeValue(messageId));
    item.put("clientId", new AttributeValue(clientId));
    item.put("body", new AttributeValue(body));
    item.put("created", new AttributeValue().withN(Long.toString(created)));

    return item;
  }