Laravel: получить записи из нескольких схем - PullRequest
1 голос
/ 28 июня 2019

Я создаю приложение SaaS, которое имеет набор требований.Одно из этих требований заключается в том, что приложение должно быть мультитенантным с отдельной схемой для каждого арендатора.Но должен быть один экземпляр (интерфейс администратора), которому требуется доступ ко всем этим схемам для проверки данных.

Пример:
У нас есть x клиентов, которые получат доступ к их приложению через customerx.our-company.ком.Каждый клиент получает свою собственную схему с несколькими таблицами.В этих таблицах содержатся пользователи, счета-фактуры, контракты, расписания, ... Клиент должен иметь возможность просматривать / изменять эти записи.

Мы, компания, предоставляющая услугу, должны иметь возможность получать все расписания извсе эти клиенты, чтобы иметь возможность проверить их.После проверки эти записи будут обновлены.'verified' => true

Моей первой идеей было сохранить tenant_id в таблице customers в базе данных администратора, чтобы иметь возможность изменить соединение с базой данных в eloquent и объединить записи перед их возвратом.Это выполнимо, но у меня есть несколько вопросов по поводу производительности.Что, если мы вырастем до 1000+ клиентов.получение всех этих записей может занять много времени.

Извлечь все записи в одной схеме без предоставления отдельной схемы для каждого клиента невозможно из-за GDPR.Данные клиента должны быть разделены.

Каков наилучший подход для этого дизайна?Есть ли хорошие статьи на эту тему?

Что я начал думать, когда писал этот вопрос: можно использовать c ++, я могу создать собственное расширение PHP, которое получает информацию из базы данных нескольких арендаторов, чтобы получитьзаписи с помощью асинхронных задач std::async, объедините эти записи и верните их.std::async создает несколько потоков в пуле, и я могу дождаться его завершения.Единственной большой проблемой будут отношения, которые необходимо вернуть.Обновление этих записей является более простой задачей, поскольку мы знаем, где они хранятся (customer_id), поэтому мы можем изменять соединение с БД на лету во время обновления.

РЕДАКТИРОВАТЬ: я создал простую программу на c ++, которая создает асинхронные соединения MySQL.Я протестировал это с 10 схемами одновременно, получая 1000 записей из каждой.Это выглядит многообещающе, будет держать это обновленным.

...