Uso de AWS DynamoDb con AWS .NET SDK

Amazon DynamoDB es un servicio rápido de base de datos NoSQL ofrecido por Amazon Web Services (AWS). DynamoDB se puede invocar desde aplicaciones .NET mediante AWS SDK for .NET. El SDK proporciona tres modelos diferentes para comunicarse con DynamoDB. Este tema presenta las diversas API en cada modelo.

Los modelos

El SDK proporciona tres formas de comunicarse con DynamoDB. Cada uno ofrece compensaciones entre el control y la facilidad de uso. Consulte la Referencia del SDK de .NET de AWS para obtener detalles sobre las API a continuación.

  • Nivel bajo: espacio de nombres Amazon.DynamoDBv2: este es un envoltorio delgado sobre las llamadas de servicio de DynamoDB. Coincide con todas las características del servicio. Puede consultar la documentación del servicio para obtener más información sobre cada operación individual.

  • Modelo de documento: espacio de nombres Amazon.DynamoDBv2.DocumentModel: este es un modelo que proporciona una interfaz más simple para manejar datos. Las tablas de DynamoDB están representadas por objetos Table, mientras que las filas individuales de datos están representadas por objetos Document. La conversión de objetos .NET a datos de DynamoDB es automática para los tipos básicos.

  • Modelo de persistencia de objetos: espacio de nombres Amazon.DynamoDBv2.DataModel: este conjunto de API le permite almacenar y cargar objetos .NET en DynamoDB. Los objetos se deben marcar para configurar la tabla de destino y las claves hash/rango. DynamoDBContext actúa sobre objetos marcados. Se utiliza para almacenar y cargar datos de DynamoDB o para recuperar objetos .NET de una operación de consulta o escaneo. Los tipos de datos básicos se convierten automáticamente en datos de DynamoDB y los convertidores permiten almacenar tipos arbitrarios en DynamoDB.

Los tres modelos proporcionan diferentes enfoques para trabajar con el servicio. Si bien el enfoque de bajo nivel requiere más código del lado del cliente (el usuario debe convertir los tipos de .NET, como números y fechas, en cadenas compatibles con DynamoDB), brinda acceso a todas las funciones del servicio. En comparación, el enfoque del modelo de persistencia de objetos facilita el uso del servicio, ya que el usuario trabaja en su mayor parte con objetos .NET familiares, pero no proporciona toda la funcionalidad. Por ejemplo, no es posible realizar llamadas Put condicionales con el modelo de persistencia de objetos.

Obtenga más información sobre cómo trabajar con AWS utilizando .NET SDK en la Guía para desarrolladores de .NET SDK.

Nota: este tema se adaptó con permiso de una publicación de blog publicada originalmente en el blog de AWS .NET SDK.

Ejemplo de API de bajo nivel

var client = new AmazonDynamoDBClient();
 
// Store item
client.PutItem(new PutItemRequest
{
    TableName = "Books",
    Item = new Dictionary<string, AttributeValue>
    {
        { "Title", new AttributeValue { S = "Cryptonomicon" } },
        { "Id", new AttributeValue { N = "42" } },
        { "Authors", new AttributeValue {
            SS = new List<string> { "Neal Stephenson" } } },
        { "Price", new AttributeValue { N = "12.95" } }
    }
});
 
// Get item
Dictionary<string, AttributeValue> book = client.GetItem(new GetItemRequest
{
    TableName = "Books",
    Key = new Dictionary<string, AttributeValue>
    {
        { "Id", new AttributeValue { N = "42" } }
    }
}).Item;
 
Console.WriteLine("Id = {0}", book["Id"].S);
Console.WriteLine("Title = {0}", book["Title"].S);
Console.WriteLine("Authors = {0}",
    string.Join(", ", book["Authors"].SS));

Ejemplo de modelo de documento

var client = new AmazonDynamoDBClient();
Table booksTable = Table.LoadTable(client, "Books");
 
// Store item
Document book = new Document();
book["Title"] = "Cryptonomicon";
book["Id"] = 42;
book["Authors"] = new List<string> { "Neal Stephenson" };
book["Price"] = 12.95;
booksTable.PutItem(book);
 
// Get item
book = booksTable.GetItem(42);
Console.WriteLine("Id = {0}", book["Id"]);
Console.WriteLine("Title = {0}", book["Title"]);
Console.WriteLine("Authors = {0}",
    string.Join(", ", book["Authors"].AsListOfString()));

Ejemplo de modelo de persistencia de objetos

Este ejemplo consta de dos partes: primero, debemos definir nuestro tipo Libro; segundo, lo usamos con DynamoDBContext.

[DynamoDBTable("Books")]
class Book
{
    [DynamoDBHashKey]
    public int Id { get; set; }
    public string Title { get; set; }
    public List<string> Authors { get; set; }
    public double Price { get; set; }
}

Ahora, utilícelo con DynamoDBContext.

var client = new AmazonDynamoDBClient();
DynamoDBContext context = new DynamoDBContext(client);
 
// Store item
Book book = new Book
{
    Title = "Cryptonomicon",
    Id = 42,
    Authors = new List<string> { "Neal Stephenson" },
    Price = 12.95
};
context.Save(book);
 
// Get item
book = context.Load<Book>(42);
Console.WriteLine("Id = {0}", book.Id);
Console.WriteLine("Title = {0}", book.Title);
Console.WriteLine("Authors = {0}", string.Join(", ", book.Authors));