Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Patrones de acceso
Como se mencionó anteriormente en esta guía, puede elegir entre tres patrones de acceso para realizar operaciones de creación, lectura, actualización y eliminación (CRUD) en las tablas de DynamoDB: interfaz de persistencia de objetos, interfaces de documentos e interfaz de API de bajo nivel. En las siguientes secciones se describe cada interfaz. Para nuestro caso práctico de SQL Server a DynamoDB, elegimos la interfaz de persistencia de objetos por su simplicidad, legibilidad y facilidad de mantenimiento.
Interfaz de persistencia de objetos
La interfaz de persistencia de objetos proporciona un mecanismo de acceso abstracto de alto nivel para realizar operaciones CRUD en elementos de DynamoDB mediante modelos .NET, similares a las entidades de Entity Framework. Las propiedades de la interfaz se asignan a los atributos de los elementos de DynamoDB. ElAWS SDK for .NET admite atributos de propiedades personalizados en este modelo para personalizar la serialización y la deserialización de propiedades individuales, gestionar valores nulos y realizar conversiones de tipos.
Modelo de ejemplo utilizado en la aplicación:
[DynamoDBTable(“AppLibrary")] public class ProdApp { [DynamoDBHashKey] public string PK { get; set; } //Partition key [DynamoDBRangeKey] public string SK { get; set; } //Sort key [DynamoDBGlobalSecondaryIndexRangeKey(“Version-index")] [DynamoDBProperty] public int Version { get; set; } . . . [DynamoDBProperty] public Int64 TTL { get; set; } }
Acceso al artículo:
var _dynamoDbClient = new AmazonDynamoDBClient(AWSCredentials); var _context = new DynamoDBContext(_dynamoDbClient); public ProdApp GetProdAppById (Guid id, int version) { var pk = $”{id}-{version}”; return _context.Load<ProdApp>(pk, ItemType.ProductionApplication); }
Para obtener más información, consulte la interfaz de persistencia de objetos en la documentación de DynamoDB.
Interfaz de documentos
El modelo de interfaces de documentos proporciona acceso basadoXMLDocument
en documentos (similar al de .NET) a un elemento de DynamoDB. Este modelo proporciona una interfaz de programación de nivel superior, pero traduce sus llamadas a API de bajo nivel para realizar la operación.
var _dynamoDbClient = new AmazonDynamoDBClient(AWSCredentials); var _table = Table.LoadTable(_dynamoDbClient, “AppLibrary”); public ProdApp GetProdAppById (Guid id, int version) { var pk = $”{id}-{version}”; var doc = _table.GetItem(pk, ItemType.ProductionApplication); var app = new ProdApp { PK = doc[“PK”], SK = doc[“SK”], Version = doc[“Version”], . . . }; return app; }
Para obtener más información, consulte Interfaces de documentos en la documentación de DynamoDB.
API de bajo nivel
ElAWS SDK para DynamoDB también proporciona acceso a la API de bajo nivel para realizar operaciones CRUD mediante losDeleteItem
métodosPutItem
GetItem
UpdateItem
,, y. Este modelo proporciona un control total sobre el mapeo de atributos y las conversiones de tipos. La respuesta a estas llamadas es un diccionario de pares clave-valor.
[DynamoDBTable(“AppLibrary")] public class ProdApp { [DynamoDBHashKey] public string PK { get; set; } //Partition key [DynamoDBRangeKey] public string SK { get; set; } //Sort key [DynamoDBGlobalSecondaryIndexRangeKey(“Version-index")] [DynamoDBProperty] public int Version { get; set; } . . . [DynamoDBProperty] public ProdConfig Config { get; set; } } var _dynamoDbClient = new AmazonDynamoDBClient(AWSCredentials); public ProdApp GetProdAppById (Guid id, int version) { var pk = $”{id}-{version}”; var resp = _dynamoDbClient.Query(queryRequest); var item = resp.Items[0]; var app = new ProdApp { PK = item[“PK”].S, SK = item[“SK”].S, Version = Convert.ToInt32(item[“Version”].S), . . . Config = new ProdConfig { Name = item[“Config”].M[“Name”].S, Id = Conver.ToInt32(item[“Config”].M[“Id”].S) } }; return app; }
Para obtener más información, consulte Interfaces de bajo nivel en la documentación de DynamoDB.