我制作了一个在 C# 上运行的电子商务应用程序。这个应用程序的每个实例现在都有自己的:
- IIS 7 应用程序池
- IIS 7 网站
- SQL Server 2008 数据库
我的合作伙伴告诉我,我们需要放弃这种方法并转移到云端。SQL Azure 似乎对每个数据库收费。因此,我们采用这种方法将非常昂贵。 有没有一种方法可以使用单个巨型数据库而无需重新编写整个数据访问层? *或者有没有一种廉价的方法来拥有数百个小型 SQL Azure 数据库?*
注意:每个数据库只有大约 20 MB
我制作了一个在 C# 上运行的电子商务应用程序。这个应用程序的每个实例现在都有自己的:
我的合作伙伴告诉我,我们需要放弃这种方法并转移到云端。SQL Azure 似乎对每个数据库收费。因此,我们采用这种方法将非常昂贵。 有没有一种方法可以使用单个巨型数据库而无需重新编写整个数据访问层? *或者有没有一种廉价的方法来拥有数百个小型 SQL Azure 数据库?*
注意:每个数据库只有大约 20 MB
是的,SQL Azure 对每个数据库收费,但您真正支付的是数据库的大小。例如,一个 1GB 的数据库每月花费 9.99 美元,一个 10GB 的数据库每月花费您 99.99 美元。SQL Azure 中的数据库目前最大也有 50GB。
基于此以及您对您的应用程序(可能有数百个数据库)所说的话,并假设每个数据库将包含足够的数据以使支付 1GB 数据库值得,我将继续为每个数据库使用一个数据库实例。
如果每个实例的数据实际上非常小,即使您有数百个实例也不会达到 50GB 的限制,那么您可以通过对数据进行分区并将其存储在一个数据库中来节省资金(但不是时间)。
如果成本是您最关心的问题并且您正在考虑重写,我会考虑使用 Azure 表存储 (AZT),其中相同的 1GB 数据将花费您每月 0.15 美元来存储(但您必须放弃一点诸如外键和包含超过 1 个表的查询之类的东西)
在每个数据库 20MB 的情况下,您将在一个 1GB 的 Azure 数据库中涵盖大约 50 个此类数据库。
使用新的数据库大小,您的下一个大小为 5GB,并且您的帐单将根据给定一天使用的最大存储空间每天摊销。因此,对于低于 1GB 的时间,您将按 1GB 费率(每月 9.99 美元/每月天数)计费。一旦超过 1GB,您将转到 5GB 层(每月 49.95 美元/天)。这将比拥有 50 个 1GB 数据库的成本要低得多,后者将运行大约 1GB。每月 500 美元。
要组合您的数据库,您需要某种类型的客户 ID 或实例 ID,您必须将它们添加到您的表中,以提供跨租户的分区。
我看到了 knightpfhor 提出的另一个关于迁移到 Table Storage 以节省成本的建议。虽然表存储比 SQL Azure 存储便宜,但这可能是一个重大的应用程序更改,因为表存储是非关系型的,没有存储过程或您通常从 SQL Server 获得的任何其他支持。添加分区/客户密钥比批量存储层重写侵入性要小得多。