Azure 如何将带有单个DBs的web应用程序转换为带有单个DB的云?

Azure 如何将带有单个DBs的web应用程序转换为带有单个DB的云?,azure,cloud,azure-sql-database,Azure,Cloud,Azure Sql Database,我在C#上制作了一个电子商务应用程序。当前此应用程序的每个实例都有自己的: IIS 7应用程序池 IIS 7网站 SQL Server 2008数据库 我的合作伙伴告诉我,我们需要放弃这种方法,转向云计算。 似乎SQL Azure对每个数据库收费。因此,我们采用这种方法将非常昂贵。 有没有一种方法可以使用单个巨型数据库而不必重新写入整个数据访问层? *或者有没有一种便宜的方法来拥有数百个小型SQLAzure数据库* 注意:每个数据库只有大约20 MB,是的,SQL Azure会向每个数据库收费,

我在C#上制作了一个电子商务应用程序。当前此应用程序的每个实例都有自己的:

  • IIS 7应用程序池
  • IIS 7网站
  • SQL Server 2008数据库
  • 我的合作伙伴告诉我,我们需要放弃这种方法,转向云计算。 似乎SQL Azure对每个数据库收费。因此,我们采用这种方法将非常昂贵。 有没有一种方法可以使用单个巨型数据库而不必重新写入整个数据访问层? *或者有没有一种便宜的方法来拥有数百个小型SQLAzure数据库*


    注意:每个数据库只有大约20 MB,是的,SQL Azure会向每个数据库收费,但您真正要支付的是数据库的大小。例如,1GB数据库每月花费9.99美元,10GB数据库每月花费99.99美元。SQL Azure中的数据库当前的最大大小也为50GB

    基于这一点以及您对您的应用程序(可能有数百个数据库)所说的话,并假设每个数据库将包含足够的数据,以使支付1GB的数据库是值得的,我将继续为每个实例使用一个数据库

    如果每个实例的数据实际上非常小,即使有数百个实例,也不会达到50GB的限制,那么通过对数据进行分区并将其存储在一个数据库中,可以节省资金(但不是时间)


    如果成本是你的首要考虑,你正在考虑重写,我会考虑使用Azure表存储(AZT),在那里,相同的1GB的数据将花费你每月0.15美元来存储(但是你必须放弃在外键和1个表中有超过1个表的小东西)

    每数据库20MB,在一个1GB Azure数据库中,您将覆盖大约50个这样的数据库

    有了新的数据库大小,您的下一个数据库大小将增加5GB,并且您的账单将根据给定日期使用的最大存储容量每日摊销。因此,在1GB以下的情况下,您将按照1GB的费率(每月9.99美元/月日)计费。一旦超过1GB,您将进入5GB层(每月49.95美元/天)。这将大大低于拥有50个1GB数据库的成本,后者每月运行约500美元

    要组合数据库,您需要某种类型的客户id或实例id,这些id必须添加到表中,以便跨租户提供分区


    我看到knightpfhor提出的另一项建议,即为了节约成本而转移到桌面存储。虽然表存储比SQL Azure存储便宜,但这可能是一个重大的应用程序更改,因为表存储是非关系存储,并且没有存储过程或SQL Server通常提供的任何其他支持。添加分区/客户密钥比大规模重写存储层入侵性小得多。

    您需要放弃这种方法并转移到云?为什么?老兄,你看过宁网吗2年后,这是每个人都会期待的。创建一个完整的。。。30秒后。伙计,这还不能清楚地解释你需要一个基于云的系统。沮丧WithFormsDesigner-先生,我想用我的电子商务应用程序托管10000个网站。这个(优秀)答案中缺少的术语是多租户;这使得OP更容易获取背景信息。在这种情况下,多租户数据库是有意义的,但一般来说,多租户应用程序在云环境下更有意义。我的应用程序允许en用户上传C#代码。所以每个站点都有自己的独立数据库是很重要的。这样,如果上传一些恶意SQL代码,它只会影响自己的数据库。单个azure db允许我这样做吗?我可以做一个子数据库吗?或最终用户站点的连接字符串访问受限的模式?用户上载的任何代码是否在您的数据库上运行?用户是否能够对数据库进行更改?如果您允许最终用户将代码上载到您的云托管应用程序,您可能会遇到比数据访问更大的问题。如果您决定让他们上传代码,则需要删除直接数据库访问(不要公开数据库连接字符串或凭据);相反,通过数据层路由所有数据访问,比如WCF(这通常是一个很好的实践)。有了它,您就不必担心从错误的表/行读取恶意代码。您仍然需要为每个用户提供某种类型的凭据,以便让您的数据层知道其客户ID。请记住:最终用户代码可以简单地链接到Azure支持DLL。考虑恶意的“运行时”代码,而不是恶意的“SQL”代码。只需考虑随机调用ReLealEnguly.RevestReCyCyter(),这会让你抓狂,不知道为什么你的角色实例会重新启动。或者可能是注册到RoleEnvironment.Changing的一个小事件处理程序,它提供恶意代码来执行与应用程序配置更改内联的操作?也许这太高级了:简单地用100%的CPU运行您的工作者角色的紧密循环如何。从成本角度来看,[Azure Table Storage(AZT)]将是最好的。然而,这将导致一个主要的应用程序重写。还有一个来自MS的示例,它是关于多租户系统的。