Я планирую иметь 20 или более сайтов в тех же таблицах базы данных.
Подобно структуре, подобной этой: cms_config cms_pages cms_users cms_modules
Я думал, что каждая из этих таблиц должна иметь столбец customer_id, поэтому я легко мог бы выбрать и вызвать строки, которые предназначены для данного клиента. Но это лучший способ сделать это, когда дело доходит до времени загрузки, использования памяти и всего этого?
Мне нужна настройка, которую легко обновить и исправить, поэтому я подумал, что работа с отдельными базами данных с одинаковой структурой будет плохой идеей?
Наличие всего в одной базе данных, если вы отвечаете за обслуживание, – это самый простой путь для обновления, обслуживания и резервного копирования.
Разделение каждой базы данных увеличивает безопасность и конфиденциальность (поскольку каждый пользователь базы данных клиентов будет иметь доступ ко всем другим данным клиента, по факту возможности чтения / записи cms_pages) по цене (бит) за более высокую стоимость обслуживания. Разделение баз данных также облегчает масштабирование производительности, где вы можете переместить клиента, который быстрее перенаправляет ожидания на свой собственный сервер. Помните, что обновления и резервные копии могут быть автоматизированы, так что это не так важно.
Производительность разумна, клиенты с большим количеством данных будут влиять на производительность клиентов с меньшим количеством данных (поскольку время сканирования индекса будет пропорционально общему количеству страниц, даже если это можно было бы смягчить, используя многоколонные индексы).
Поэтому имеет смысл иметь отдельную базу данных для каждого клиента и платить цену, если вы не уверены, что это будут небольшие сайты с не слишком большим трафиком, что они все друзья или никогда не узнают свое собственное имя пользователя базы данных :-).
Это называется многопользовательской архитектурой. Существует несколько способов реализации этого. Если вы потратите некоторое время на разработку надлежащей библиотеки баз данных, вы можете (в идеале) переписать все ваши запросы, вводя критерии tenantId во все запросы. Таким образом, вы знаете, что каждый арендатор будет иметь доступ к своим данным (пока все запросы передаются созданной вами db lib).
Другая проблема заключается в создании надлежащих индексов базы данных. Вам часто приходится создавать индексы с несколькими столбцами с помощью столбца customerId / tenantId + поля (ы), на которые вы смотрите.