

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 考虑使用专用数据库
<a name="net-purpose"></a>

## 概述
<a name="net-purpose-overview"></a>

运行基于 Microsoft 的工作负载所涉及的成本中，最大的一项支出来自于商业数据库（如 SQL Server）的许可费用。企业通常会将 SQL Server 作为首选的数据库平台加以标准化，并且这一选择会深深扎根于该组织的开发文化之中。无论使用案例如何，开发人员通常会选择基于关系型 SQL Server 的模型。原因包括：
+ 该企业已经有可用的 SQL Server 实例 and/or 许可证。
+ 通过使用共享库和业务逻辑，团队已经习惯了 SQL 编程模型。 ORMs
+ 管理层并不知晓其他的选择方案。
+ 开发人员并不知晓其他的选择方案。

专用数据库能够适应您的使用案例的数据访问模式。随着企业采用更为现代化的架构（如微服务架构）以及单个应用程序的范围逐渐缩小，这些数据库正越来越受到企业的青睐。

专门构建的数据库并不意味着必须采用关系模型，也不一定需要使用 NoSQL（非关系型）模型。事实上，当根据工作负载的特定需求进行选择时，关系数据库会被视为是专门构建的。使用专用数据库能够帮助团队降低与 .NET 应用程序相关的数据库成本，同时还能享受到诸如可扩展性、韧性以及减少不必要的繁重工作等标准的云优势。

下表显示了提供的专门构建的数据库。 AWS


****  

| 数据库 | Type | 特性 | 
| --- | --- | --- | 
| [Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) 或 [Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html) | 关系 | 数据具有固定结构的使用案例<br />关系数据库通过 ACID 事务来自然地保持数据一致性。 | 
| [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | 键值对 | 使用哈希表数据结构存储数据的 NoSQL 数据库<br />非结构化数据的高性能存储和检索<br />使用案例包括用户配置文件、会话状态和购物车数据 | 
| [Amazon ElastiCache](https://aws.amazon.com/elasticache/) | 内存中 | 将非结构化数据存储于内存中并实现亚毫秒级访问速度的高性能 NoSQL 数据库<br />用于频繁访问的、短暂存储的数据（例如用户会话），以及作为位于其他较慢的数据存储之前的缓存层<br />包括对 ElastiCache （Redis OSS）和 ElastiCache （Memcached）的支持 | 
| [Amazon MemoryDB](https://aws.amazon.com/memorydb/) | 持久内存 | 与 Redis 兼容的专用数据库，具有持久存储功能 | 
| [Amazon Timestream](https://aws.amazon.com/timestream/) | 时间序列 | 专为按时间顺序进行高吞吐量数据摄取而设计的数据库<br />使用案例包括物联网（IoT）应用和存储指标或遥测数据 | 
| [Amazon DocumentDB](https://aws.amazon.com/documentdb/) | 文档 | NoSQL 数据库，其存储的数据没有固定的结构，也不存在与其他数据之间的强制关联关系<br />通常用于读取密集型的工作负载，例如产品目录等 | 
| [Amazon Neptune](https://aws.amazon.com/neptune/) | 图表 | 既保存数据又表示数据项之间关联关系的 NoSQL 数据库<br />使用案例包括欺诈检测、推荐引擎和社交应用程序 | 
| [Amazon Keyspaces](https://aws.amazon.com/keyspaces/) | 宽列 | 基于 Apache Cassandra 的高性能分布式数据库<br />使用案例包括 IoT 应用程序、事件处理和游戏应用程序 | 

采用专用数据库的一个重要驱动因素是由于不再需要支付商业许可费用。但是，[DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AutoScaling.html)（包括[按需模式](https://aws.amazon.com/blogs/aws/amazon-dynamodb-on-demand-no-capacity-planning-and-pay-per-request-pricing/)）、[Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Integrating.AutoScaling.html)、[Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/manage-console-autoscaling.html) 和 [Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html) 等数据库的自动扩缩功能使您能够为一般情况而非峰值使用量来预调配容量。专用数据库（例如 Timestream）是无服务器的，无需任何预调配即可自动扩展以满足需求。

AWS 如果您想使用专门构建的、与开源兼容的关系数据库，但又无法或不愿对应用程序进行重大代码更改，则提供 [Babelfish for Aurora PostgreSQL](https://aws.amazon.com/rds/aurora/babelfish/)。在某些情况下，Babelfish 可让您使用现有的 SQL Server 访问代码，几乎无需进行任何修改。

在为应用程序选择专用的关系数据库时，务必保留您的应用程序所需的一致（或功能等效的）特征。此建议指出，专用数据库应作为应用程序的主要数据存储。特定应用程序（如缓存）在其他建议中进行了介绍。

## 成本影响
<a name="net-purpose-cost"></a>

为.NET 工作负载采用专门构建的数据库虽然不太可能 consumption/cost 直接影响计算，但会直接影响.NET 应用程序使用的数据库服务成本。实际上，与敏捷性、可扩展性、韧性以及数据持久性所带来的诸多益处相比，节省成本可能只是次要目标。

本指南无法详尽阐述为应用程序选择专用数据库以及重新架构数据策略以有效利用它们的完整流程。有关更多信息，请参阅 AWS 教程目录中的[专用数据库](https://aws.amazon.com/tutorials/purpose-built-databases/)。

以下表格展示了将 SQL Server 替换为专用数据库后，会如何改变应用程序成本的几个示例。请注意，这些只是大致的估算值。需要对实际工作负载进行基准测试和优化，以便计算出确切的生产成本。

以下是一些常用的专用数据库估算方案，其中包括按需计算功能以及 100GB 的 SSD，以及 `us-east-1` 中的单实例数据库。许可费用包括 SQL Server 许可证以及软件保障费用。

下表显示了商业数据库示例的估算成本。


****  

| 数据库引擎 | 许可模式 | 实例类型/规格 | AWS 计算 \+ 存储成本 | 许可证成本 | 月度总费用 | 
| --- | --- | --- | --- | --- | --- | 
| Amazon EC2 上的 SQL Server 标准版 | 随附许可证 | r6i.2xlarge (8 CPU/64 GB RAM) | 1,345.36 美元 | 0.00 | 1,345.36 美元 | 
| Amazon EC2 上的 SQL Server 企业版 | 随附许可证 | r6i.2xlarge (8 CPU/64 GB RAM) | 2,834.56 美元 | 0.00 | 2,834.56 美元 | 
| Amazon EC2 上的 SQL Server 标准版 | BYOL | r6i.2xlarge (8 CPU/64 GB RAM) | 644.56 美元 | 456.00 美元 | 1,100.56 美元 | 
| Amazon EC2 上的 SQL Server 企业版 | BYOL | r6i.2xlarge (8 CPU/64 GB RAM) | 644.56 美元 | 1,750.00 美元 | 2,394.56 美元 | 
| Amazon RDS 上的 SQL Server 标准版 |   | r6i.2xlarge (8 CPU/64 GB RAM) | 2,318.30 美元 | 0.00 | 2,318.30 美元 | 
| Amazon RDS 上的 SQL Server 企业版 |   | r6i.2xlarge (8 CPU/64 GB RAM) | 3,750.56 美元 | 0.00 | 3,750.56 美元 | 

下表显示了专用示例的预估成本。


****  

| 数据库引擎 | 实例类型/规格 | AWS 计算 \+ 存储成本 | 许可证成本 | 月度总费用 | 
| --- | --- | --- | --- | --- | 
| Amazon Aurora PostgreSQL | r6g.2xlarge (8 CPU/64 GB RAM) | 855.87 美元 | 0.00 | 855.87 美元 | 
| DynamoDB | 预调配基础 100 WCU/400 RCU | 72.00 美元 |   | 72.00 美元 | 
| Amazon DocumentDB | r6i.2xlarge (8 CPU/64 GB RAM) | 778.60 美元 |   | 778.60 美元 | 

**重要**  
该表格基于包含软件保障服务的 SQL Server 在购买后的前三年内的预计许可费用。对于 SQL Server 标准版：4100 美元，2 个核心包，3 年。对于 SQL Server 企业版：15700 美元，2 个核心包，3 年。

在采用专用数据库之前，我们建议您考虑成本影响。例如，将应用程序更新为使用专用数据库所需的费用与应用程序的复杂程度以及源数据库有关。在规划此次架构切换时，务必将总拥有成本纳入考虑范围。这包括重构您的应用程序、提升员工在新科技方面的技能，以及仔细规划每个工作负载预期的性能和消耗情况。从那里，您可以判断这项投资是否值得节省下来的成本。在大多数情况下，维护 end-of-support产品会带来安全和合规风险，修复产品的成本值得付出努力和初始投资。

## 成本优化建议
<a name="net-purpose-rec"></a>

对于正在访问 SQL Server 的 .NET 应用程序，专用关系数据库有相应的替代库可供使用。您可以在您的应用程序中实施这些库来替代类似的 SQL Server 应用程序功能。

以下表格重点介绍了在多种常见场景中均可使用的部分库。


****  

| 图书馆 | 数据库 | 替代 | 框架兼容性 | 
| --- | --- | --- | --- | 
| [Npgsql Entity Framework Core 提供程序](https://www.npgsql.org/efcore/index.html) | Amazon Aurora PostgreSQL | Entity Framework Core SQL Server 提供程序 | 现代 .NET | 
| [Npgsql Entity Framework 6 提供程序](https://www.npgsql.org/ef6/index.html) | Amazon Aurora PostgreSQL | Entity Framework 6.0 SQL Server 提供程序 | NET Framework。 | 
| [Npgsql](https://www.npgsql.org/doc/index.html)（兼容 ADO.NET 的 PostgreSQL 库） | Amazon Aurora PostgreSQL | ADO.NET | .NE Framework/Modern T | 
| [MySQL Entity Framework Core 提供程序](https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html) | Amazon Aurora MySQL | Entity Framework Core SQL Server 提供程序 | 现代 .NET | 
| [Pomelo。 EntityFrameworkCore。 MySql](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql) | Amazon Aurora MySQL | Entity Framework Core SQL Server 提供程序 | 现代 .NET | 

[使用 Babelfish 连接到 Amazon Aurora PostgreSQL](https://babelfishpg.org/docs/client/csharp/) 不需要任何特殊编码即可连接。但是，所有代码在使用前都必须经过严格测试。

其他专用数据库还设有用于访问与 .NET 兼容的库的接口，这使得您能够访问这些专用数据库。例子包括：
+ [使用亚马逊 DynamoDB NoSQL 数据库](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html)（文档）适用于 .NET 的 AWS SDK 
+ [MongoDB C\# 驱动程序](https://www.mongodb.com/docs/drivers/csharp/current/)（MongoDB 文档）
+ [.NET](https://docs.aws.amazon.com/timestream/latest/developerguide/getting-started.dot-net.html)（Timestream 文档）
+ [使用 Cassandra .NET Core 客户端驱动程序以编程方式访问 Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/using_dotnetcore_driver.html)（Amazon Keyspaces 文档）
+ [使用 .NET 连接到 Neptune 数据库实例](https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-dotnet.html)（Neptune 文档）

如果您迁移到专门构建的数据库，则可以使用以下工具 AWS 来帮助完成迁移过程：
+ [AWS Schema Conversion Tool （AWS SCT）](https://aws.amazon.com/dms/schema-conversion-tool/)可以帮助您将 SQL Server 架构转换为 Amazon Aurora 和 Amazon DynamoDB。
+ [AWS Database Migration Service （AWS DMS）](https://aws.amazon.com/dms/schema-conversion-tool/)能够帮助您将数据从 SQL Server 迁移到 Aurora 或 DynamoDB，无论是一次性迁移，还是持续性迁移。
+ [Babelfish Compass](https://github.com/babelfish-for-postgresql/babelfish_compass) 可以帮助您检查 SQL Server 数据库与适用于 Aurora PostgreSQL 的 Babelfish 的兼容性。

## 其他资源
<a name="net-purpose-resources"></a>
+ [将 SQL Server 迁移到 Amazon Aurora PostgreSQL 的指南](https://aws.amazon.com/blogs/database/migrate-sql-server-to-amazon-aurora-postgresql-using-best-practices-and-lessons-learned-from-the-field/)（AWS 数据库博客）
+ [Babelfish APP 现代化沉浸式体验日](https://catalog.workshops.aws/babelfish-app-modernization/en-US)（AWS 工作室工作室）
+ [.NET 沉浸日](https://catalog.us-east-1.prod.workshops.aws/workshops/02696107-09ac-4313-a6cb-3798048b07d7/en-US/3-choosing-a-cloud-native-database-for-my-net-application)（工作室工作AWS 室）
+ [开始使用带有.NET 的 Amazon Timestream](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/dotnet) () GitHub
+ [专为现代.NET 应用程序构建的数据库 AWS（演示文稿](https://d1.awsstatic.com/events/Summits/reinvent2022/XNT304_Purpose-built-databases-for-modern-NET-applications-on-AWS.pdf)）AWS 