在确定分布策略时,我们讨论了与多个租户使用Citus在多个租户中与框架无关的数据库更改。
为了使此迁移的一部分,让我们考虑一个简化的stackexchange。参考,最终结果是在github上存在的。
我们将从两个表开始:
我们的演示应用程序的每个租户将通过不同的域名连接。)。
请注意如何将其存储在表中。这将制作:参考:数据是可能的。创建创建表后,告诉Citus大小租户ID:
接下来包括一些测试数据。
这完成了数据库结构和示例数据。我们现在可以继续设置ASP.NET Core。
如果您不安装ASP.NET Core,请安装Microsoft的.NET Core SDK。这些描述将使用CLI,但是如果您使用Windows,也可以使用Visual Studio 2017或更高版本或更高版本。
使用MVC模板创建一个新项目:
如果您愿意,可以使用预览模板站点。MVC模板几乎包含您开始使用的所有内容,但是盒子中未使用Postgres支持。您可以通过安装NPGSQL.EntityFrameWorkcore.postgresqlesql Package解决此问题:
该软件包将postgres添加到实体框架核心中的默认ORM和数据库层中,ASP.NET core。打开文件,并将这些行添加到该方法的任何位置:
您还需要将这些声明添加到文件的顶部:
它将被您的Citus连接字符串替换。Mine看起来像这样:
您可以使用Secret Manager避免将数据库积分存储在代码中(并意外地将其检测到源代码控制中)。
接下来,您需要定义数据库上下文。
数据库上下文提供了代码和数据库之间的接口。EntityFramework Core使用它来了解您的数据模式的样子,因此您需要定义数据库中可用的表。
创建项目根目录中名称的文件,并添加以下代码:
两个属性为每个表指定C#类。下一个属性您将创建这些类。在此之前,请在属性下方添加一个新方法:
c#和属性是根据其实践的过去的,但是Postgres表和列是小写(和snake_case).Methods允许您涵盖默认名称转换,并让Entity Framework Core知道如何在数据库中找到实体。
现在,您可以添加代表租户和问题的类。在模型目录中创建文件:
还有一个文件,该文件也在模型目录中:
请注意属性。在数据库中,问题表包含一个列。EntityFramework Core足够聪明,可以确定此属性代表租户和问题之间的一对多重关联,当您查询数据时将使用。
到目前为止,您已经设置了实体框架核心并与Citus建立联系。下一步是在ASP.NET Core Pipeline中添加多个租户。
Saaskit是一个出色的开源ASP.NET核心中间件。此软件包使您的请求管道租户感知(租户了解)很容易,并且可以灵活地处理许多不同的多租户案例。
安装saaskit.multitance套件:
Saaskit需要两件事才能工作:房客模型和租户解析器。
方法完成了沉重的工作:给出了请求的请求,它将查询数据库并找到与当前域相匹配的租户。如果发现它,它将返回到saaskit。所有租户的分析逻辑完全取决于您-You -you -you可以根据子域,路径或您想要的任何其他方式分开租户。
这种认识是__,因此您不会使用租户在每个通过的请求上找到数据库。首次搜索后,租户将被缓存两个小时(您可以将其更改为任何有意义的内容)。
准备租户模型和租户解析器后,打开类并在该方法中的任何位置添加此行:
接下来,将此行添加到下面的方法中,但上面是:
方法表示您的实际请求渠道,因此订单很重要!
现在所有零件都准备就绪,您可以开始引用代码中的当前租户。打开视图并用此标记替换整个文件:
指令从Saaskit获取当前的租户,指令告诉ASP.NET Core,此视图将由新的模型类支持(您将创建)。在模型目录中创建文件:
负责渲染索引视图您刚刚编辑。打开并使用此替换方法:
该查询获得了该租户的最新五期(当然,现在只有一个问题)并填写视图模型。
您需要添加的代码,该代码在控制器中不可用。您可以将其提供给类以以下方式添加构造函数:
为了避免编译器中的错误,请在文件顶部添加以下语句:
您添加到数据库的测试租户与(假)域和相关的范围有关。您需要编辑主机文件以在本地计算机上测试这些文件:
使用或单击Visual Studio中的开始启动项目。应用程序将开始收听URL。如果您直接访问URL,则会看到错误,因为您尚未设置任何默认租户。
相反,请访问http://bufferoverflow.local:5000,您将在多重申请中看到一个租户!切换到http://dboverflow.local.local.local:5000查看其他租户。桌子。
探索Python/django以支持分布式的多重数据库,例如Postgres+Citus
原始:https://juejin.cn/post/7097139910682869767