AYUDA .NET

Azure Tables (Cómo funciona para desarrolladores)

Publicado en 24 de octubre, 2024
Compartir:

En el vasto panorama de la computación en nube, el almacenamiento de datos desempeña un papel fundamental en la configuración de la arquitectura y la escalabilidad de las aplicaciones modernas. Tabla Azure Storage, un almacén de datos NoSQL totalmente gestionado proporcionado por Microsoft Azure, ofrece a los desarrolladores una solución versátil para almacenar datos estructurados en la nube. Embarquémonos en un viaje para explorar las capacidades, los casos de uso y las ventajas de Azure Table Storage.

Entender el almacenamiento en tablas de Azure

Azure Table Storage es un servicio de base de datos NoSQL basado en la nube que proporciona almacenamiento sin esquema de datos estructurados. Azure Tables ofrece un modelo de datos basado en pares clave-valor, en el que cada entidad se identifica de forma única mediante una clave de partición y una clave de fila. Este diseño permite realizar consultas y recuperar datos de forma eficaz, por lo que resulta ideal para situaciones que requieren un acceso rápido a grandes conjuntos de datos.

Si estás tratando de decidir entre Azure Table Storage o una base de datos relacional para gestionar tus datos estructurados, la capacidad de Azure Table Storage para manejar grandes conjuntos de datos y la integración con el ecosistema Azure hace que Azure Table Storage sea útil para tener en tu kit de herramientas de desarrollador.

Principales características y funciones

  1. **A diferencia de las bases de datos relacionales tradicionales, Azure Table Storage no impone un esquema a los datos. Esta flexibilidad permite a los desarrolladores almacenar entidades con diferentes estructuras dentro de la misma tabla, lo que facilita un desarrollo ágil y se adapta a la evolución de los requisitos de datos.

  2. Escalabilidad y rendimiento: Azure Table Storage está diseñado para la escalabilidad, capaz de manejar cantidades masivas de datos con facilidad. Se adapta automáticamente a cargas de trabajo cada vez mayores y proporciona un rendimiento predecible, por lo que es adecuado para aplicaciones de alto rendimiento y escenarios que requieren acceso a datos de baja latencia.

  3. Particionamiento y equilibrio de carga: Los datos de Azure Table Storage se particionan en función de la clave de partición, lo que permite una distribución eficiente de los datos en varios nodos de almacenamiento. Esta estrategia de partición permite la escalabilidad horizontal y el equilibrio de carga, garantizando un rendimiento y una utilización de recursos óptimos.

  4. Índices secundarios: Aunque Azure Table Storage utiliza principalmente la clave de partición y la clave de fila para la recuperación de datos, también admite índices secundarios mediante el uso de claves compuestas y proyecciones de consulta. Esta función permite a los desarrolladores realizar consultas de rango eficientes y filtrar datos basándose en atributos secundarios, mejorando la flexibilidad de los patrones de acceso a datos.

  5. Integración con el ecosistema Azure: Azure Table Storage se integra a la perfección con otros servicios de Azure, como Azure Functions, Azure Cosmos DB y Azure Logic Apps, lo que permite a los desarrolladores crear soluciones integrales con facilidad. Ya sea procesando flujos de datos con funciones sin servidor o analizando datos con herramientas de análisis avanzadas, Azure Table Storage sirve como componente fundamental para crear aplicaciones escalables y resistentes.

Casos prácticos

Azure Table Storage atiende a una amplia gama de casos de uso en diversos sectores, entre los que se incluyen:

  1. **Internet de las cosas(IoT)azure Table Storage es ideal para almacenar datos de telemetría de dispositivos IoT, lo que permite la ingestión, el análisis y la visualización de datos en tiempo real. Su escalabilidad y rendimiento la hacen ideal para manejar los volúmenes masivos de datos generados por los despliegues de IoT.

  2. Gestión de contenido: Para aplicaciones que requieren almacenamiento estructurado de metadatos de contenido, como blogs, artículos y contenido generado por el usuario, Azure Table Storage proporciona una solución rentable y escalable. Su diseño sin esquema permite una evolución flexible del esquema, adaptándose a los cambios en la estructura del contenido con el paso del tiempo.

  3. **Azure Table Storage puede utilizarse para almacenar datos de estado de sesión para aplicaciones web, proporcionando una solución de gestión de sesiones distribuida y escalable. Al descargar el estado de la sesión a Azure Table Storage, los desarrolladores pueden lograr una mejor escalabilidad, tolerancia a fallos y afinidad de sesión en entornos de carga equilibrada.

  4. Sistemas distribuidos: En las arquitecturas de sistemas distribuidos, Azure Table Storage sirve como almacén de datos fundamental para mantener el estado compartido y la coordinación entre componentes. Sus características de partición y escalabilidad lo hacen muy adecuado para escenarios que requieren almacenamiento en caché distribuido, gestión de configuración y coordinación entre microservicios.

Introducción a IronPDF

Tablas Azure (Cómo funciona para desarrolladores): Figura 1

IronPDF es una biblioteca PDF en C# que permite generar, gestionar y extraer contenido de documentos PDF en proyectos .NET. Estas son algunas de sus principales características:

  1. Conversión de HTML a PDF:

    • Convierta contenido HTML, CSS y JavaScript en documentos PDF.

    • Motor de renderizado de Chrome para PDF con píxeles perfectos.
    • Genere PDFs a partir de URLs, archivos HTML o cadenas HTML como entrada.
  2. Conversión de imágenes y contenidos:

    • Convierte imágenes a y desde PDF.

    • Extraiga texto e imágenes de documentos PDF existentes.
    • Compatible con varios formatos de imagen, como JPG, PNG, etc.
  3. Edición y manipulación:

    • Establezca las propiedades, la seguridad y los permisos de los archivos PDF.

    • Añade firmas digitales.
    • Editar metadatos e historial de revisiones.
  4. Soporte multiplataforma:

    • Funciona con .NET Core(8, 7, 6, 5 y 3.1+.).NET Standard(2.0+)y .NET Framework(4.6.2+).

    • Compatible con Windows, Linux y macOS.
    • Disponible en NuGet para facilitar la instalación.

Generar un documento PDF utilizando IronPDF y Azure Tables

Para empezar, cree una aplicación de consola utilizando Visual Studio como se indica a continuación:

Tablas Azure (Cómo funciona para desarrolladores): Figura 2

Proporcione el nombre del proyecto:

Tablas Azure (Cómo funciona para desarrolladores): Figura 3

Proporcione la versión .NET:

Tablas Azure (Cómo funciona para desarrolladores): Figura 4

Instale elIronPDF del gestor de paquetes NuGet:

Tablas Azure (Cómo funciona para desarrolladores): Figura 5

Para acceder a la biblioteca Azure Tables utilizaremos la biblioteca cliente Azure Tables llamada Azure.Data.Tables que se puede encontrar en el gestor de paquetes NuGet, el cliente Azure Table Service proporciona funcionalidad para interactuar con Azure Table Storage.

Tablas Azure (Cómo funciona para desarrolladores): Figura 6

Crea una cuenta de Azure Storage para empezar a utilizar Azure Tables:

Tablas Azure (Cómo funciona para desarrolladores): Figura 7

Haga clic en revisar y crear.

Introduce el código siguiente en tu programa para utilizar Azure Tables para generar un documento PDF.

using Azure;
using Azure.Data.Tables;
using Azure.Data.Tables.Models;
namespace CodeSample
{
    public static class AzureTableDemo
    {
        public static async Task Execute()
        {
            var tableName = "IronDemo";
            var connectionString = "DefaultEndpointsProtocol=https;AccountName=irondemo;AccountKey=9Pe6LJlkjA721VgWvSuRCMk+WJR5/kFoyPtR1ewjRsNbGJNJOmWYhCB32fakANmWeAcfyIg++iHl+AStDNYlGw==;EndpointSuffix=core.windows.net";
            Console.WriteLine("Demo IronPDF with Azure.Data.Tables");
            Installation.EnableWebSecurity = true;
            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo IronPDF with Azure.Data.Tables</h1>";
            content += "<h2>Create TableServiceClient</h2>";
            content += "<p></p>";
            var serviceClient = new TableServiceClient(connectionString);
            content += "<p>var serviceClient = new TableServiceClient(connectionString);</p>";
            content += "<h2>Create CreateTableIfNotExists</h2>";
            TableItem table = await serviceClient.CreateTableIfNotExistsAsync(tableName);
            Console.WriteLine($"Created table: {table.Name}.");
            content += $"<p>Created table: {table.Name}.</p>";
            content += "<h2>Deletes If Required</h2>";
            // Deletes the table made previously.
            // serviceClient.DeleteTable(tableName);
            content += "<p>serviceClient.DeleteTable(tableName);</p>";
            content += "<h2>GetTableClient</h2>";
            var tableClient = serviceClient.GetTableClient(tableName);
            content += "<p>var tableClient = serviceClient.GetTableClient(tableName);</p>";
            content += "<h2>Add Table Entity</h2>";
            // Make a dictionary entity by defining a <see cref="TableEntity">.
            var tableEntity = new TableEntity() { { "Book", "Awesome IronPDF Package" }, { "Price", 5.00 }, { "Quantity", 21 } };
            content += "<p>new TableEntity() { { \"Book\", \"Awesome IronPDF\" }, { \"Price\", 5.00 }, { \"Quantity\", 21 } };</p>";
            tableEntity.PartitionKey = tableEntity["Book"].ToString();
            tableEntity.RowKey = tableEntity["Price"].ToString();
            content += $"<p>tableEntity.PartitionKey = {tableEntity["Book"]}</p>";
            content += $"<p>tableEntity.RowKey = {tableEntity["Price"]}</p>";
            Console.WriteLine($"{tableEntity.RowKey}: {tableEntity["Book"]} costs ${tableEntity.GetDouble("Price")}.");
            content += $"<p>{tableEntity.RowKey}: {tableEntity["Book"]} costs ${tableEntity.GetDouble("Price")}</p>";
            // Add the newly created entity.
            tableClient.AddEntity(tableEntity);
            content += "<p></p>";
            content += "<h2>Query Table</h2>";
            Pageable<TableEntity> queryResultsFilter = tableClient.Query<TableEntity>(filter: $"PartitionKey eq '{tableEntity.PartitionKey}'");
            content += "<p>Using tableClient.Query<TableEntity></p>";
            // Iterate the <see cref="Pageable"> to access all queried entities.
            foreach (TableEntity qEntity in queryResultsFilter)
            {
                content += $"<p>{qEntity.GetString("Book")}: {qEntity.GetDouble("Price")}</p>";
                Console.WriteLine($"{qEntity.GetString("Book")}: {qEntity.GetDouble("Price")}");
            }
            Console.WriteLine($"The query returned {queryResultsFilter.Count()} entities.");
            content +=$"<p>The query returned {queryResultsFilter.Count()} entities.</p>";
            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeAzureDataTables.pdf");
        }
    }
}
using Azure;
using Azure.Data.Tables;
using Azure.Data.Tables.Models;
namespace CodeSample
{
    public static class AzureTableDemo
    {
        public static async Task Execute()
        {
            var tableName = "IronDemo";
            var connectionString = "DefaultEndpointsProtocol=https;AccountName=irondemo;AccountKey=9Pe6LJlkjA721VgWvSuRCMk+WJR5/kFoyPtR1ewjRsNbGJNJOmWYhCB32fakANmWeAcfyIg++iHl+AStDNYlGw==;EndpointSuffix=core.windows.net";
            Console.WriteLine("Demo IronPDF with Azure.Data.Tables");
            Installation.EnableWebSecurity = true;
            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo IronPDF with Azure.Data.Tables</h1>";
            content += "<h2>Create TableServiceClient</h2>";
            content += "<p></p>";
            var serviceClient = new TableServiceClient(connectionString);
            content += "<p>var serviceClient = new TableServiceClient(connectionString);</p>";
            content += "<h2>Create CreateTableIfNotExists</h2>";
            TableItem table = await serviceClient.CreateTableIfNotExistsAsync(tableName);
            Console.WriteLine($"Created table: {table.Name}.");
            content += $"<p>Created table: {table.Name}.</p>";
            content += "<h2>Deletes If Required</h2>";
            // Deletes the table made previously.
            // serviceClient.DeleteTable(tableName);
            content += "<p>serviceClient.DeleteTable(tableName);</p>";
            content += "<h2>GetTableClient</h2>";
            var tableClient = serviceClient.GetTableClient(tableName);
            content += "<p>var tableClient = serviceClient.GetTableClient(tableName);</p>";
            content += "<h2>Add Table Entity</h2>";
            // Make a dictionary entity by defining a <see cref="TableEntity">.
            var tableEntity = new TableEntity() { { "Book", "Awesome IronPDF Package" }, { "Price", 5.00 }, { "Quantity", 21 } };
            content += "<p>new TableEntity() { { \"Book\", \"Awesome IronPDF\" }, { \"Price\", 5.00 }, { \"Quantity\", 21 } };</p>";
            tableEntity.PartitionKey = tableEntity["Book"].ToString();
            tableEntity.RowKey = tableEntity["Price"].ToString();
            content += $"<p>tableEntity.PartitionKey = {tableEntity["Book"]}</p>";
            content += $"<p>tableEntity.RowKey = {tableEntity["Price"]}</p>";
            Console.WriteLine($"{tableEntity.RowKey}: {tableEntity["Book"]} costs ${tableEntity.GetDouble("Price")}.");
            content += $"<p>{tableEntity.RowKey}: {tableEntity["Book"]} costs ${tableEntity.GetDouble("Price")}</p>";
            // Add the newly created entity.
            tableClient.AddEntity(tableEntity);
            content += "<p></p>";
            content += "<h2>Query Table</h2>";
            Pageable<TableEntity> queryResultsFilter = tableClient.Query<TableEntity>(filter: $"PartitionKey eq '{tableEntity.PartitionKey}'");
            content += "<p>Using tableClient.Query<TableEntity></p>";
            // Iterate the <see cref="Pageable"> to access all queried entities.
            foreach (TableEntity qEntity in queryResultsFilter)
            {
                content += $"<p>{qEntity.GetString("Book")}: {qEntity.GetDouble("Price")}</p>";
                Console.WriteLine($"{qEntity.GetString("Book")}: {qEntity.GetDouble("Price")}");
            }
            Console.WriteLine($"The query returned {queryResultsFilter.Count()} entities.");
            content +=$"<p>The query returned {queryResultsFilter.Count()} entities.</p>";
            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeAzureDataTables.pdf");
        }
    }
}
Imports Azure
Imports Azure.Data.Tables
Imports Azure.Data.Tables.Models
Namespace CodeSample
	Public Module AzureTableDemo
		Public Async Function Execute() As Task
			Dim tableName = "IronDemo"
			Dim connectionString = "DefaultEndpointsProtocol=https;AccountName=irondemo;AccountKey=9Pe6LJlkjA721VgWvSuRCMk+WJR5/kFoyPtR1ewjRsNbGJNJOmWYhCB32fakANmWeAcfyIg++iHl+AStDNYlGw==;EndpointSuffix=core.windows.net"
			Console.WriteLine("Demo IronPDF with Azure.Data.Tables")
			Installation.EnableWebSecurity = True
			' Instantiate Renderer
			Dim renderer = New ChromePdfRenderer()
			Dim content = "<h1>Demo IronPDF with Azure.Data.Tables</h1>"
			content &= "<h2>Create TableServiceClient</h2>"
			content &= "<p></p>"
			Dim serviceClient = New TableServiceClient(connectionString)
			content &= "<p>var serviceClient = new TableServiceClient(connectionString);</p>"
			content &= "<h2>Create CreateTableIfNotExists</h2>"
			Dim table As TableItem = Await serviceClient.CreateTableIfNotExistsAsync(tableName)
			Console.WriteLine($"Created table: {table.Name}.")
			content &= $"<p>Created table: {table.Name}.</p>"
			content &= "<h2>Deletes If Required</h2>"
			' Deletes the table made previously.
			' serviceClient.DeleteTable(tableName);
			content &= "<p>serviceClient.DeleteTable(tableName);</p>"
			content &= "<h2>GetTableClient</h2>"
			Dim tableClient = serviceClient.GetTableClient(tableName)
			content &= "<p>var tableClient = serviceClient.GetTableClient(tableName);</p>"
			content &= "<h2>Add Table Entity</h2>"
			' Make a dictionary entity by defining a <see cref="TableEntity">.
			Dim tableEntity() As New TableEntity() From {
				{ "Book", "Awesome IronPDF Package" },
				{ "Price", 5.00 },
				{ "Quantity", 21 }
			}
			content &= "<p>new TableEntity() { { ""Book"", ""Awesome IronPDF"" }, { ""Price"", 5.00 }, { ""Quantity"", 21 } };</p>"
			tableEntity.PartitionKey = tableEntity("Book").ToString()
			tableEntity.RowKey = tableEntity("Price").ToString()
			content &= $"<p>tableEntity.PartitionKey = {tableEntity("Book")}</p>"
			content &= $"<p>tableEntity.RowKey = {tableEntity("Price")}</p>"
			Console.WriteLine($"{tableEntity.RowKey}: {tableEntity("Book")} costs ${tableEntity.GetDouble("Price")}.")
			content &= $"<p>{tableEntity.RowKey}: {tableEntity("Book")} costs ${tableEntity.GetDouble("Price")}</p>"
			' Add the newly created entity.
			tableClient.AddEntity(tableEntity)
			content &= "<p></p>"
			content &= "<h2>Query Table</h2>"
			Dim queryResultsFilter As Pageable(Of TableEntity) = tableClient.Query(Of TableEntity)(filter:= $"PartitionKey eq '{tableEntity.PartitionKey}'")
			content &= "<p>Using tableClient.Query<TableEntity></p>"
			' Iterate the <see cref="Pageable"> to access all queried entities.
			For Each qEntity As TableEntity In queryResultsFilter
				content &= $"<p>{qEntity.GetString("Book")}: {qEntity.GetDouble("Price")}</p>"
				Console.WriteLine($"{qEntity.GetString("Book")}: {qEntity.GetDouble("Price")}")
			Next qEntity
			Console.WriteLine($"The query returned {queryResultsFilter.Count()} entities.")
			content &=$"<p>The query returned {queryResultsFilter.Count()} entities.</p>"
			Dim pdf = renderer.RenderHtmlAsPdf(content)
			' Export to a file or Stream
			pdf.SaveAs("AwesomeAzureDataTables.pdf")
		End Function
	End Module
End Namespace
VB   C#

Código Explicación

El código muestra cómo interactuar con Azure Table Storage y generar un PDF utilizando IronPDF:

  1. Interacción con el almacenamiento de tablas Azure:

    • Utiliza el SDK de Azure para .NET(Azure.Data.Tables) para conectarse a Azure Table Storage.

    • A continuación, comprueba si existe una tabla denominada "IronDemo"; si no, lo crea.

    • Añade una nueva entidad(similar a una fila de base de datos) a la tabla, especificando propiedades como "Libro", "Precio" y "Cantidad".
    • Consulta la tabla para recuperar entidades en función de una condición de filtro.
  2. Generación de PDF con IronPDF:

    • Utiliza ChromePdfRenderer de IronPDF para convertir el contenido HTML en un archivo PDF.
    • Genera el PDF a partir de contenido HTML dinámico que incluya detalles sobre las operaciones de Azure Table Storage.

    Tablas Azure (Cómo funciona para desarrolladores): Figura 8

PDF

Tablas Azure (Cómo funciona para desarrolladores): Figura 9

Licencias IronPDF

El paquete IronPDF requiere una licencia para funcionar. Añada el código siguiente al inicio de la aplicación antes de acceder al paquete

IronPdf.License.LicenseKey = "IRONPDF-KEY";
IronPdf.License.LicenseKey = "IRONPDF-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Licencia de prueba disponibleaquí.

Conclusión

Azure Table Storage es un testimonio del compromiso de Microsoft de ofrecer a los desarrolladores soluciones de almacenamiento de datos en la nube escalables, flexibles y rentables. Gracias a su diseño sin esquemas, su escalabilidad horizontal y su perfecta integración con el ecosistema Azure, Azure Table Storage permite a los desarrolladores crear aplicaciones resistentes y ágiles que pueden adaptarse a las demandas dinámicas de los entornos empresariales modernos.

Ya se trate de gestionar flujos de datos IoT, almacenar metadatos de contenido u orquestar sistemas distribuidos, Azure Table Storage ofrece una plataforma versátil para liberar todo el potencial de las aplicaciones nativas de la nube. A medida que las organizaciones continúan adoptando iniciativas de transformación digital y migrando a la nube, Azure Table Storage sigue siendo una piedra angular de las arquitecturas modernas de almacenamiento de datos, impulsando la innovación y permitiendo a las empresas prosperar en un mundo cada vez más impulsado por los datos.

IronPDF es una biblioteca .NET que se utiliza para crear y manipular documentos PDF mediante programación. Permite a los desarrolladores convertir HTML, páginas ASPX, imágenes y texto en archivos PDF. Entre las principales características se incluyen la conversión de HTML a PDF, las funciones de edición de PDF y la compatibilidad con varios entornos .NET, lo que la convierte en una herramienta versátil para generar y manejar documentos PDF dentro de aplicaciones .NET.

SIGUIENTE >
C# ConfigureAwait (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >