Laravel:从多个架构中获取记录

时间:2019-06-28 07:19:05

标签: php database laravel eloquent php-extension

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

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

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

我的第一个想法是将tenant_id存储在管理数据库的customers表中,以便能够雄辩地更改数据库连接并在返回记录之前合并记录。这是可行的,但是我对性能有一些疑问。如果我们发展到超过1000个客户,该怎么办?获取所有这些记录可能需要很长时间。

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

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

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

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

0 个答案:

没有答案