首页 > 解决方案 > Laravel:从多个模式中获取记录

问题描述

我正在构建一个具有一组要求的 SaaS 应用程序。这些要求之一是应用程序必须是多租户的,每个租户都有一个单独的架构。但是必须有一个实例(管理界面)需要访问所有这些模式以进行数据验证。

示例:
我们有 x 个客户,他们将通过 customerx.our-company.com 访问他们的应用程序。每个客户都有自己的带有多个表的架构。这些表格包含用户、发票、合同、时间表……客户必须能够查看/修改这些记录。

作为一家提供服务的公司,我们必须能够从所有这些客户那里获得所有时间表,以便能够对其进行验证。一旦核实这些记录将被更新。'verified' => true

我的第一个想法是将 a 存储tenant_id在 admin 数据库的customers表中,以便能够在 eloquent 中更改数据库连接并在返回记录之前合并记录。这是可行的,但我对性能有一些疑问。如果我们发展到 1000 多个客户会怎样。获取所有这些记录可能需要很长时间。

由于 GDPR,无法在单个模式中转储所有记录而不为每个客户提供单独的模式。客户的数据必须分开。

这种设计明智的最佳方法是什么?有没有关于这个主题的好文章?

我在写这个问题时开始思考:可以利用 c++,我可以创建一个自定义 PHP 扩展,它需要多个租户数据库信息来通过异步任务获取记录std::async,合并这些记录并返回它们。std::async在池中创建多个线程,我可以等到它完成。唯一的大问题是需要归还的关系。更新这些记录是一项更简单的任务,因为我们知道它的存储位置 (customer_id),因此我们可以在更新时动态更改数据库连接。

编辑:我创建了一个简单的 c++ 程序来创建异步 MySQL 连接。我已经用 10 个模式测试了这个,从每个模式中检索 1000 条记录。这看起来很有希望,将保持更新。

标签: phpdatabaselaraveleloquentphp-extension

解决方案


推荐阅读