跳至页脚内容
开发者更新

Azure 表存储(开发者用法)| IronPDF

在广阔的云计算领域中,数据存储在塑造现代应用的架构和可扩展性方面扮演着关键角色。 Azure 表存储是由微软 Azure 提供的全面管理的 NoSQL 数据存储,提供了一种用于在云中存储结构化数据的多功能解决方案。 让我们开始一段旅程,探索 Azure 表存储的功能、用例和优势。

理解 Azure 表存储

Azure 表存储是一种基于云的 NoSQL 数据库服务,提供无架构的结构化数据存储。 Azure 表提供了一种基于键值对的数据模型,每个实体通过分区键和行键唯一标识。 这种设计实现了数据的高效查询和检索,使其非常适合需要快速访问大型数据集的场景。

如果您在选择使用 Azure 表存储还是关系数据库来管理结构化数据时犹豫不决,Azure 表存储处理大型数据集的能力以及与 Azure 生态系统的集成使其成为开发者工具包中的得力助手。

关键功能和能力

  1. 无架构设计:不像传统的关系数据库,Azure 表存储不对数据实施架构限制。 这种灵活性允许开发者在同一个表中存储具有不同结构的实体,促进敏捷开发并适应不断变化的数据需求。

  2. 可扩展性和性能:Azure 表存储为可扩展性而设计,能够轻松处理海量数据。 它会自动扩展以适应不断增加的工作负载,并提供可预测的性能,使之适用于高吞吐量应用和需要低延迟数据访问的场景。

  3. 分区和负载均衡:Azure 表存储中的数据根据分区键进行分区,允许数据在多个存储节点之间高效分布。 这种分区策略支持横向扩展和负载均衡,确保最佳性能和资源利用。

  4. 二级索引:虽然 Azure 表存储主要使用分区键和行键进行数据检索,但它也通过使用复合键和查询投影支持二级索引。 这一特性使开发者可以执行高效的范围查询并基于二级属性筛选数据,增强数据访问模式的灵活性。

  5. 与 Azure 生态系统的集成:Azure 表存储与其他 Azure 服务无缝集成,如 Azure Functions、Azure Cosmos DB 和 Azure Logic Apps,允许开发者轻松构建端到端解决方案。 无论是在无服务器函数中处理数据流还是使用高级分析工具分析数据,Azure 表存储都是构建可扩展和弹性应用的基础组件。

用例

Azure 表存储满足各个行业的广泛用例,包括:

  1. 物联网 (IoT): Azure 表存储非常适合存储物联网设备的遥测数据,实现实时数据摄取、分析和可视化。 其可扩展性和性能使其成为处理物联网部署生成的大量数据的理想选择。

  2. 内容管理:对于需要结构化存储内容元数据的应用,如博客、文章和用户生成的内容,Azure 表存储提供了一种经济高效且可扩展的解决方案。 其无架构设计允许灵活的架构演变,适应内容结构随时间的变化。

  3. 会话状态管理: Azure 表存储可用于存储 web 应用的会话状态数据,提供分布式和可扩展的会话管理解决方案。 通过将会话状态卸载到 Azure 表存储,开发者可以在负载均衡环境中实现更好的可扩展性、容错性和会话亲和性。

  4. 分布式系统:在分布式系统架构中,Azure 表存储作为维护组件共享状态和协调的基础数据存储。 其分区和可扩展性特性使其非常适合需要分布式缓存、配置管理和微服务间协调的场景。

IronPDF简介

Azure表(开发者如何使用):图1

IronPDF 是一个 C# PDF 库,允许在 .NET 项目中生成、管理和提取 PDF 文档内容。 以下是一些关键功能:

  1. HTML 转 PDF:
    • 将 HTML、CSS 和 JavaScript 内容转换为 PDF 文档。
    • 使用 Chrome 渲染引擎生成像素完美的 PDF。
    • 从 URL、HTML 文件或 HTML 字符串生成 PDF。

2.图片和内容转换:

  • 将图像与 PDF 之间互相转换。
  • 从现有的 PDF 文档中提取文本和图像。
  • 支持多种图像格式,如 JPG、PNG 等。

3.编辑和篡改:

  • 设置 PDF 的属性、安全性和权限。
  • 添加数字签名。
  • 编辑元数据和修订历史。

4.跨平台支持:

  • 兼容 .NET Core (8, 7, 6, 5, 和 3.1+),.NET Standard (2.0+),以及 .NET Framework (4.6.2+)。
  • 与 Windows、Linux 和 macOS 兼容。
  • 可在 NuGet 上获取,便于安装。

使用 IronPDF 和 Azure 表生成 PDF 文档

首先,使用 Visual Studio 创建一个控制台应用程序,如下所示:

Azure表(开发者如何使用):图2

提供项目名称:

Azure表(开发者如何使用):图3

提供 .NET 版本:

Azure表(开发者如何使用):图4

从 NuGet 包管理器安装 IronPDF 包:

Azure表(开发者如何使用):图5

为了访问 Azure 表库,我们将使用一个叫做 Azure.Data.Tables 的 Azure 表客户端库,可以在 NuGet 包管理器中找到。 Azure 表服务客户端提供与 Azure 表存储交互的功能。

Azure表(开发者如何使用):图6

创建一个 Azure 存储账户,以开始使用 Azure 表:

Azure表(开发者如何使用):图7

点击审核并创建。 在您的程序中输入以下代码以使用 Azure 表生成 PDF 文档。

using Azure;
using Azure.Data.Tables;
using Azure.Data.Tables.Models;
using IronPdf;
using System;
using System.Linq;
using System.Threading.Tasks;

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");

            // Enable web security for PDF rendering
            Installation.EnableWebSecurity = true;

            // Instantiate PDF renderer
            var renderer = new ChromePdfRenderer();

            // HTML content for the PDF
            var content = "<h1>Demo IronPDF with Azure.Data.Tables</h1>";

            // Create a TableServiceClient using the connection string
            content += "<h2>Create TableServiceClient</h2>";
            var serviceClient = new TableServiceClient(connectionString);
            content += "<p>var serviceClient = new TableServiceClient(connectionString);</p>";

            // Create the table if it does not exist
            content += "<h2>Create Table</h2>";
            TableItem table = await serviceClient.CreateTableIfNotExistsAsync(tableName);
            Console.WriteLine($"Created table: {table.Name}.");
            content += $"<p>Created table: {table.Name}.</p>";

            // Placeholder for delete table logic
            content += "<h2>Deletes If Required</h2>";
            // serviceClient.DeleteTable(tableName);
            content += "<p>serviceClient.DeleteTable(tableName);</p>";

            // Get a client reference to interact with the table
            content += "<h2>Get Table Client</h2>";
            var tableClient = serviceClient.GetTableClient(tableName);
            content += "<p>var tableClient = serviceClient.GetTableClient(tableName);</p>";

            // Define and add a new entity to the table
            content += "<h2>Add Table Entity</h2>";
            var tableEntity = new TableEntity { { "Book", "Awesome IronPDF Package" }, { "Price", 5.00 }, { "Quantity", 21 } };
            tableEntity.PartitionKey = tableEntity["Book"].ToString();
            tableEntity.RowKey = tableEntity["Price"].ToString();
            content += "<p>new TableEntity() { { \"Book\", \"Awesome IronPDF Package\" }, { \"Price\", 5.00 }, { \"Quantity\", 21 } }</p>";

            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 entity to the table
            tableClient.AddEntity(tableEntity);
            content += "<p>Entity added.</p>";

            // Query the table
            content += "<h2>Query Table</h2>";
            Pageable<TableEntity> queryResultsFilter = tableClient.Query<TableEntity>(filter: $"PartitionKey eq '{tableEntity.PartitionKey}'");
            content += "<p>Using tableClient.Query<TableEntity></p>";

            // Iterate and display 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>";

            // Render HTML content as PDF
            var pdf = renderer.RenderHtmlAsPdf(content);

            // Save the PDF to a file
            pdf.SaveAs("AwesomeAzureDataTables.pdf");
        }
    }
}
using Azure;
using Azure.Data.Tables;
using Azure.Data.Tables.Models;
using IronPdf;
using System;
using System.Linq;
using System.Threading.Tasks;

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");

            // Enable web security for PDF rendering
            Installation.EnableWebSecurity = true;

            // Instantiate PDF renderer
            var renderer = new ChromePdfRenderer();

            // HTML content for the PDF
            var content = "<h1>Demo IronPDF with Azure.Data.Tables</h1>";

            // Create a TableServiceClient using the connection string
            content += "<h2>Create TableServiceClient</h2>";
            var serviceClient = new TableServiceClient(connectionString);
            content += "<p>var serviceClient = new TableServiceClient(connectionString);</p>";

            // Create the table if it does not exist
            content += "<h2>Create Table</h2>";
            TableItem table = await serviceClient.CreateTableIfNotExistsAsync(tableName);
            Console.WriteLine($"Created table: {table.Name}.");
            content += $"<p>Created table: {table.Name}.</p>";

            // Placeholder for delete table logic
            content += "<h2>Deletes If Required</h2>";
            // serviceClient.DeleteTable(tableName);
            content += "<p>serviceClient.DeleteTable(tableName);</p>";

            // Get a client reference to interact with the table
            content += "<h2>Get Table Client</h2>";
            var tableClient = serviceClient.GetTableClient(tableName);
            content += "<p>var tableClient = serviceClient.GetTableClient(tableName);</p>";

            // Define and add a new entity to the table
            content += "<h2>Add Table Entity</h2>";
            var tableEntity = new TableEntity { { "Book", "Awesome IronPDF Package" }, { "Price", 5.00 }, { "Quantity", 21 } };
            tableEntity.PartitionKey = tableEntity["Book"].ToString();
            tableEntity.RowKey = tableEntity["Price"].ToString();
            content += "<p>new TableEntity() { { \"Book\", \"Awesome IronPDF Package\" }, { \"Price\", 5.00 }, { \"Quantity\", 21 } }</p>";

            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 entity to the table
            tableClient.AddEntity(tableEntity);
            content += "<p>Entity added.</p>";

            // Query the table
            content += "<h2>Query Table</h2>";
            Pageable<TableEntity> queryResultsFilter = tableClient.Query<TableEntity>(filter: $"PartitionKey eq '{tableEntity.PartitionKey}'");
            content += "<p>Using tableClient.Query<TableEntity></p>";

            // Iterate and display 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>";

            // Render HTML content as PDF
            var pdf = renderer.RenderHtmlAsPdf(content);

            // Save the PDF to a file
            pdf.SaveAs("AwesomeAzureDataTables.pdf");
        }
    }
}
Imports Azure
Imports Azure.Data.Tables
Imports Azure.Data.Tables.Models
Imports IronPdf
Imports System
Imports System.Linq
Imports System.Threading.Tasks

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")

			' Enable web security for PDF rendering
			Installation.EnableWebSecurity = True

			' Instantiate PDF renderer
			Dim renderer = New ChromePdfRenderer()

			' HTML content for the PDF
			Dim content = "<h1>Demo IronPDF with Azure.Data.Tables</h1>"

			' Create a TableServiceClient using the connection string
			content &= "<h2>Create TableServiceClient</h2>"
			Dim serviceClient = New TableServiceClient(connectionString)
			content &= "<p>var serviceClient = new TableServiceClient(connectionString);</p>"

			' Create the table if it does not exist
			content &= "<h2>Create Table</h2>"
			Dim table As TableItem = Await serviceClient.CreateTableIfNotExistsAsync(tableName)
			Console.WriteLine($"Created table: {table.Name}.")
			content &= $"<p>Created table: {table.Name}.</p>"

			' Placeholder for delete table logic
			content &= "<h2>Deletes If Required</h2>"
			' serviceClient.DeleteTable(tableName);
			content &= "<p>serviceClient.DeleteTable(tableName);</p>"

			' Get a client reference to interact with the table
			content &= "<h2>Get Table Client</h2>"
			Dim tableClient = serviceClient.GetTableClient(tableName)
			content &= "<p>var tableClient = serviceClient.GetTableClient(tableName);</p>"

			' Define and add a new entity to the table
			content &= "<h2>Add Table Entity</h2>"
			Dim tableEntity As New TableEntity From {
				{ "Book", "Awesome IronPDF Package" },
				{ "Price", 5.00 },
				{ "Quantity", 21 }
			}
			tableEntity.PartitionKey = tableEntity("Book").ToString()
			tableEntity.RowKey = tableEntity("Price").ToString()
			content &= "<p>new TableEntity() { { ""Book"", ""Awesome IronPDF Package"" }, { ""Price"", 5.00 }, { ""Quantity"", 21 } }</p>"

			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 entity to the table
			tableClient.AddEntity(tableEntity)
			content &= "<p>Entity added.</p>"

			' Query the table
			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 and display 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>"

			' Render HTML content as PDF
			Dim pdf = renderer.RenderHtmlAsPdf(content)

			' Save the PDF to a file
			pdf.SaveAs("AwesomeAzureDataTables.pdf")
		End Function
	End Module
End Namespace
$vbLabelText   $csharpLabel

代码解释

代码展示了如何与 Azure 表存储交互并使用 IronPDF 生成 PDF:

  1. Azure 表存储交互:
    • 使用 .NET 的 Azure SDK (Azure.Data.Tables) 连接到 Azure 表存储。
    • 然后检查是否存在名为 "IronDemo" 的表; 如果不存在,则创建它。
    • 向表中添加一个新实体(类似于数据库行),指定属性如 "Book"、"Price" 和 "Quantity"。
    • 基于过滤条件查询表以检索实体。

2.使用 IronPDF 生成 PDF:

  • 使用 IronPDF 的 ChromePdfRenderer 将 HTML 内容渲染为 PDF 文件。
  • 从包含 Azure 表存储操作详细信息的动态 HTML 内容生成 PDF。

Azure表(开发者如何使用):图8

IronPDF 许可

IronPDF 包需许可证才能运行. 在开始访问包之前,添加以下代码

IronPdf.License.LicenseKey = "IRONPDF-KEY";
IronPdf.License.LicenseKey = "IRONPDF-KEY";
Imports IronPdf

IronPdf.License.LicenseKey = "IRONPDF-KEY"
$vbLabelText   $csharpLabel

这里提供了一个试用许可证 here

结论

Azure 表存储是微软致力于为开发者提供可扩展、灵活和成本效益数据存储解决方案的象征。 凭借其无架构设计、横向可扩展性以及与 Azure 生态系统的无缝集成,Azure 表存储使开发者能够构建可适应现代商业环境动态需求的弹性和敏捷应用。

无论是管理物联网数据流、存储内容元数据,还是协调分布式系统,Azure 表存储提供了开发云原生应用的全面平台。 随着组织继续拥抱数字化转型和向云迁移的趋势,Azure 表存储仍然是现代数据存储架构的基石,推动创新并使企业能够在日益数据驱动的世界中蓬勃发展。

IronPDF 是一个用于编程创建和操作 PDF 文档的 .NET 库。 它允许开发者将 HTML、ASPX 页面、图像和文本转换为 PDF 文件。 其主要功能包括 HTML 到 PDF 的转换、PDF 编辑能力以及对各种 .NET 环境的支持,使其成为在 .NET 应用中生成和处理 PDF 文档的多功能工具。

常见问题解答

如何使用 C# 将 HTML 内容转换为 PDF?

您可以使用 IronPDF 库在 C# 中将 HTML 内容转换为 PDF。该库提供了如 RenderHtmlAsPdf 这样的方法来将 HTML 字符串或文件转换为 PDF 文档。

分区在 Azure 表存储中扮演什么角色?

Azure 表存储中的分区有助于在不同节点之间分配数据,提高负载均衡和可扩展性。它使用分区键来有效地管理存储集群中的数据。

我可以将 Azure 表存储与 C# PDF 库集成进行文档生成吗?

是的,您可以将 Azure 表存储与像 IronPDF 这样的 C# PDF 库集成来生成文档。该集成允许从 Azure 表存储获取数据并使用 IronPDF 将其呈现为 PDF 格式。

在云数据库中使用无模式存储的好处是什么?

Azure 表存储提供的无模式存储在数据设计上提供了灵活性。它允许在同一表中使用不同的数据结构,从而促进了敏捷开发和适应不断发展的数据模型。

Azure 表存储如何支持物联网数据管理?

Azure 表存储通过提供可扩展且高效的遥测数据存储来支持物联网数据管理。它的无模式设计和可扩展性使其成为管理物联网数据大体量的理想选择。

在生产环境中使用 C# PDF 库需要许可证吗?

是的,在生产环境中使用像 IronPDF 这样的 C# PDF 库需要许可证。为评估目的提供了试用许可证,允许开发人员在购买前探索其功能。

Azure 表存储如何确保有效的数据查询?

Azure 表存储使用包含分区键和行键的键值对模型,优化了数据查询和检索。此设计允许有效访问大型数据集。

Azure 表存储的一些常见应用是什么?

Azure 表存储的常见应用包括存储内容管理的元数据,管理 Web 应用程序中的会话状态,以及在分布式系统中协调共享状态。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我