我目前正在寻求在Azure Cloud上托管的ASP.Net中构建SaaS。 我正在寻找有关如何最好地构建我的数据库和随之而来的实体框架的建议。一旦客户在Web应用程序上注册,应用程序就需要为Azure SQL服务器上的每个客户创建一个单独的数据库。
我已经开始研究elastic pooling的选项了,但这让我很困惑。为了告诉您一些关于我的数据库的信息,它为所有常规设置提供了一个“元”数据库。然后每个客户都有一个包含他的投资组合的数据库
实施例
带表格的数据库[设置](货币,股票,债券)[
[Customer1] SomeFinanceProduct [外国货币,外国货币],SomeOtherFinanceProduct [外国货币,外国债券]
[Customer2] SomeFinanceProduct [外国货币,外国货币], SomeOtherFinanceProduct [货币作为外国货币,债券作为外国货币]
[Customer3]等
我希望得到更有经验的开发人员的帮助。非常感谢,这对我来说是一个重要的问题。我还从2015年发现了this帖子,他们说这个解决方案很快就会发布,但我没有在网上找到任何内容。
答案 0 :(得分:3)
我无法过多地谈论您的问题的实体框架部分,但是,我可以谈论弹性池方面的问题。
值得注意的是,Azure弹性池只是一种结算和资源分配结构。就您的应用程序或其代码而言,如果您使用弹性池,则没有区别。您仍然拥有数据库,它位于服务器和服务器上(并且间接地,但更具体地说,在Azure的情况,该数据库)有资源限制。
在Azure中,您传统上创建数据库并选择服务或定价层。您需要支付X美元来换取该数据库的Y资源(CPU,内存,存储大小,连接数等)。您为您创建的每个数据库重复此操作。随着时间的推移,数据库的大小或使用量会增加,而且要求也越来越高,因此您必须在发生这种情况时单独更改每个数据库的服务层。随着您拥有越来越多的数据库,这将变得乏味且成本效率低下。
使用弹性池,您可以使用任意数量的个人数据库并删除单个服务/定价计划,而是购买大量资源[即弹性池]并将这些资源提供给所有数据库。理论上说,通过这种方法,您需要更少的资源,这样可以节省资金。它还可以更好地利用您购买的资源。
您需要更少资源的原因是因为通常数据库在不同时间遇到峰值需求。当您单独购买资源时,您必须在每个数据库上过度购买以处理峰值(这意味着您有大量浪费的资源只是闲置在那里)。在弹性池上,由于所有数据库都在池中,因此您只需购买足够的额外资源,这些资源将涵盖您通常会同时进行的许多峰值;现在你浪费资金的资源就少了。
正如我所提到的,使用弹性池的另一个好处是可以更好地利用您拥有的资源。考虑一个对它提出非常低要求的数据库;你自然会为它购买一个小的(因而便宜的)计划。然后考虑对其提出高要求的数据库;你可能会购买一份资源更多的计划。现在,偶尔低使用率的数据库会受到一些大的打击。由于规划较小,资源不足,性能严重下降。与此同时,另一个数据库拥有大量资源,其中大部分资源尚未使用。如果经历异常高峰的小型数据库可以在几分钟内借用其中一些资源,那会不会很好?这正是弹性池的作用!弹性池为您的应用程序提供了许多内置的可扩展性优势!
最后要注意的是,弹性池每单位资源的成本高于常规数据库。这意味着有一个收支平衡点,使用弹性池的成本更高,直到你有足够的数据库来使它值得。根据我的需要,我发现10-15个数据库是一个相当不错的收支平衡点。一旦你有足够的,创建池。然后,当您稍后向池中添加更多数据库时,"每个数据库"成本开始下降甚至更多。
-
因此,回到您的问题,弹性池不会特别影响您为项目使用Entity Framework的能力。无论您是否选择汇集数据库,您都必须根据登录的人员将代码与相应的客户特定数据库进行对话。
答案 1 :(得分:1)
您想要一个每个租户都有一个分片的弹性池。
This link描述了可用于在多租户方案中管理和查询分片数据库的工具。请按照第一段中的链接获取每个链接的详细信息。