我目前正在寻找在Azure Cloud上托管的ASP.NET中构建SaaS。我正在寻找有关如何最好地构建数据库和随之而来的实体框架的建议。一旦客户在Web应用程序上注册,该应用需要为我的Azure SQL Server上的每个客户创建一个单独的数据库。
我已经开始研究弹性合并的选择,但这让我感到非常困惑。为了告诉您一些有关我的数据库的信息,它具有一个用于所有常规设置的"元"数据库。然后每个客户都有一个带有其投资组合的数据库。
示例
带有表(货币,股票,债券)的数据库[设置] [
[customer1]某种financeproduct [货币作为外国股票,外国股票],某些hotherfinanceproduct [货币作为外国,债券,外国债券]
[customer2] somefinanceproduct [货币作为外国,股票作为外国], 某些hotherfinanceproduct [货币作为外国债券,外国债券]
[customer3]等。
我感谢经验丰富的开发者的一些帮助。非常感谢,这对我来说是一个重要的问题。我还发现了2015年的这篇文章,他们说该解决方案很快就会发布,但是我在网上没有发现任何东西。
我不能与您问题的实体框架部分交谈,但是,我可以与事物的弹性池侧交谈。
重要的是要注意,Azure弹性池只是计费和资源分配结构。就您的应用程序或其代码而言,如果您使用弹性池没有区别。您仍然有一个数据库,它属于服务器和该服务器(并间接,但更具体地在Azure的情况,该数据库具有资源约束。
在Azure中,您传统上创建数据库并选择服务或定价层。您为该数据库支付X美元以换取Y资源(CPU,内存,存储大小,连接计数等)。您可以为创建的每个数据库重复此操作。随着时间的流逝,数据库的大小或用法增长,并且它们变得更加要求,因此您必须在发生这种情况时单独更改每个数据库的服务层。随着您越来越多的数据库,这变得乏味且成本无效。
有了弹性池,您可以使用任何数量的单个数据库并删除单独的服务/定价计划,而可以购买一大堆资源[即弹性池]并将这些资源提供给所有数据库。理论是,通过这种方法,您总共需要更少的资源,这使您可以节省资金。它还可以更好地利用您购买的资源。
您需要更少资源的原因是,因为通常数据库在不同时间都会经历高峰需求。当您单独购买资源时,您必须在每个数据库上购买过多购买峰值(这意味着您只坐在那里就有很多浪费的资源)。在弹性池上,由于所有数据库都在池中在一起,因此您只购买了足够的额外资源,这些资源将涵盖,但是通常您通常会同时同时进行的许多峰值;现在,您的资源更少,闲置浪费钱。
正如我提到的,使用弹性池的另一个好处是,您可以更好地利用自己拥有的资源。考虑一个数据库,该数据库的需求非常低;您自然会为此购买一个小的(又便宜)的计划。然后考虑一个数据库,该数据库对其有很高的要求;您可能会购买具有更大资源的计划。现在,有时低使用数据库会受到一些大成功。有了小计划,资源还不够,性能会严重降低。同时,其他数据库具有大量资源,其中大部分未使用。如果经历异常峰的小数据库可以借几分钟借入一些资源,那不是很好吗?这正是弹性池做的!弹性池为您的应用程序有很多内置的可伸缩性胜利!
要注意的最后一个重要的事情是,与常规数据库相比,弹性池每单位资源的成本高。这意味着要有一个突破点,并且使用弹性池更昂贵,直到您有足够的数据库使其值得。为了我的需求,我发现10-15个数据库甚至是一个相当不错的休息点。一旦有足够的时间,请创建池。然后,随着您稍后在池中添加更多数据库时,"每个数据库"成本开始降低。
-
因此,要回到您的问题,弹性池不会特别影响您使用实体框架为项目使用的能力。无论您是否选择汇总数据库,都必须根据登录的人来与适当的客户特定数据库进行交谈。
您想要一个带有每位租户碎片的弹性池。
此链接描述了在多租户方案中可用于管理和查询碎片数据库的工具。请按照第一段中的链接以获取有关每个链接的详细信息。