C# 具有弹性池的实体框架。如何管理我的SaaS客户端数据库?

C# 具有弹性池的实体框架。如何管理我的SaaS客户端数据库?,c#,asp.net,sql-server,azure,azure-elastic-scale,C#,Asp.net,Sql Server,Azure,Azure Elastic Scale,我目前正在寻找在ASP.Net中构建一个SaaS,托管在Azure云上。 我正在寻找关于如何最好地构建数据库以及与之配套的实体框架的建议。一旦客户在web应用程序上注册,该应用程序需要在my Azure SQL server上为每个客户创建单独的数据库 我已经开始考虑是否可以选择,但这让我很困惑。告诉你一些关于我的数据库的信息,它有一个“元”数据库,用于所有常规设置。然后每个客户都有一个数据库和他的投资组合 范例 数据库[设置]和表(货币、股票、债券)[ [客户1]某些金融产品[货币为外币,股票

我目前正在寻找在ASP.Net中构建一个SaaS,托管在Azure云上。 我正在寻找关于如何最好地构建数据库以及与之配套的实体框架的建议。一旦客户在web应用程序上注册,该应用程序需要在my Azure SQL server上为每个客户创建单独的数据库

我已经开始考虑是否可以选择,但这让我很困惑。告诉你一些关于我的数据库的信息,它有一个“元”数据库,用于所有常规设置。然后每个客户都有一个数据库和他的投资组合

范例

数据库[设置]和表(货币、股票、债券)[

[客户1]某些金融产品[货币为外币,股票为外币],另一些金融产品[货币为外币,债券为外币]

[客户2]某些金融产品[外币,股票,外币], 其他金融产品[外币、外币债券]

[客户3]等


我会感谢更有经验的开发人员的帮助。非常感谢,这对我来说是一个重要的问题。我还发现了2015年的帖子,他们说解决方案将很快发布,但我在网上没有找到任何东西。

你想要一个弹性池,每个租户有一个碎片


描述可用于在多租户方案中管理和查询分片数据库的工具。请按照第一段中的链接了解每个分片数据库的详细信息。

您想要一个弹性池,每个租户都有一个分片


描述可用于在多租户场景中管理和查询分片数据库的工具。有关每种工具的详细信息,请按照第一段中的链接进行操作。

我不能过多地谈论您问题中的实体框架部分,但是,我可以谈谈弹性池方面的问题

需要注意的是,Azure弹性池只是一个计费和资源分配结构。就您的应用程序或其代码而言,使用弹性池没有什么区别。您仍然有一个数据库,它位于服务器上,而该服务器上(间接地,但更具体地说,在Azure的情况下,该数据库)存在资源限制

在Azure中,您传统上创建数据库并选择服务或定价层。您需要支付X美元以换取Y个资源(CPU、内存、存储大小、连接计数等)对于该数据库。您可以对创建的每个数据库重复此操作。随着时间的推移,数据库的大小或使用率不断增加,要求也越来越高,因此您必须在发生这种情况时单独更改每个数据库的服务层。随着数据库的增多,这将变得单调乏味且成本低下

使用弹性池,您可以使用任意数量的单个数据库,放弃单个服务/定价计划,转而购买一大桶资源[即弹性池]并将这些资源分配给所有的数据库。理论上,通过这种方法,总体而言,您需要的资源更少,这样可以节省资金。它还可以更好地利用您正在购买的资源

您需要更少资源的原因是,通常数据库在不同的时间遇到峰值需求。当您单独购买资源时,您必须在每个数据库上过度购买以处理峰值(这意味着您有大量浪费的资源未使用).在弹性池中,由于所有数据库都在池中,因此您只需购买足够的额外资源,即可覆盖通常同时进行的多个峰值;现在,闲置的浪费资金的资源减少了

正如我提到的,使用弹性池的另一个好处是你可以更好地利用你所拥有的资源。考虑一个对它要求很低的数据库;你自然会购买一个小的(如此便宜的)。计划它。然后考虑一个对它有很高要求的数据库;你可能会购买一个资源更大的计划。现在,偶尔使用的低数据库会有一些大的点击量。在小计划中,资源不够,性能下降得很厉害。同时,另一个数据库有大量的资源,大部分都是。未使用。如果正在经历异常峰值的小型数据库可以借用其中一些资源几分钟,这不是很好吗?弹性池正是这样做的!弹性池为您的应用程序提供了许多内置的可伸缩性优势

最后需要注意的一点是,弹性池的每单位资源成本比常规数据库高。这意味着存在一个收支平衡点,在您拥有足够的数据库之前,使用弹性池的成本更高。根据我的需要,我发现10-15个数据库是一个相当好的收支平衡点。一旦如果有足够的资源,创建池。然后,随着以后向池中添加更多数据库,“每个数据库”的成本开始下降得更多

--


因此,回到您的问题,弹性池不会特别影响您在项目中使用实体框架的能力。无论您是否选择将数据库池,您都必须让您的代码根据登录者与相应的客户特定数据库进行对话。

我无法与t对话他对你的问题回答得太多了,不过,我可以谈谈弹性池方面的问题

需要注意的是,Azure弹性池只是一个计费和资源分配结构。就您的应用程序或其代码而言,使用弹性池没有什么区别。您仍然有一个数据库,它位于服务器上,而该服务器上(间接地,但更具体地说,在Azure的情况下,该数据库)存在资源限制

在蔚蓝中,你可以