Intereting Posts
Показывать входы пользователя на сводной странице Обновить значения из таблицы MYSQL без перезагрузки страницы? Доступ к ассоциативному массиву с помощью целочисленного индекса в PHP Доктрина Symfony2 получает случайный продукт из категории Как удалить # из хэштегов Twitter? Создание PDF с использованием TCPDF при вызове ajax Как отправить динамическое значение массива в другой файл php с помощью jQuery hasMany vs принадлежит ToMany в laravel 5.x PHP5: Как включить включенную функцию, всегда эхо, если я ее назову? Типичные ошибки PHP AngularJS – перенаправление страницы на другую страницу в угловых js при попытке получить параметр из url Облицовочные проблемы в ios push notification php code Phpmyadmin зависает по запросу, db слишком большой? передача нескольких параметров с помощью $ .ajax по POST в php-функцию Как добавить дополнительные поля не-сущности в форму сущности в Symfony2

Несколько сайтов в одной базе данных MySQL

Я планирую иметь 20 или более сайтов в тех же таблицах базы данных.

Подобно структуре, подобной этой: cms_config cms_pages cms_users cms_modules

Я думал, что каждая из этих таблиц должна иметь столбец customer_id, поэтому я легко мог бы выбрать и вызвать строки, которые предназначены для данного клиента. Но это лучший способ сделать это, когда дело доходит до времени загрузки, использования памяти и всего этого?

Мне нужна настройка, которую легко обновить и исправить, поэтому я подумал, что работа с отдельными базами данных с одинаковой структурой будет плохой идеей?

Наличие всего в одной базе данных, если вы отвечаете за обслуживание, – это самый простой путь для обновления, обслуживания и резервного копирования.

Разделение каждой базы данных увеличивает безопасность и конфиденциальность (поскольку каждый пользователь базы данных клиентов будет иметь доступ ко всем другим данным клиента, по факту возможности чтения / записи cms_pages) по цене (бит) за более высокую стоимость обслуживания. Разделение баз данных также облегчает масштабирование производительности, где вы можете переместить клиента, который быстрее перенаправляет ожидания на свой собственный сервер. Помните, что обновления и резервные копии могут быть автоматизированы, так что это не так важно.

Производительность разумна, клиенты с большим количеством данных будут влиять на производительность клиентов с меньшим количеством данных (поскольку время сканирования индекса будет пропорционально общему количеству страниц, даже если это можно было бы смягчить, используя многоколонные индексы).

Поэтому имеет смысл иметь отдельную базу данных для каждого клиента и платить цену, если вы не уверены, что это будут небольшие сайты с не слишком большим трафиком, что они все друзья или никогда не узнают свое собственное имя пользователя базы данных :-).

Это называется многопользовательской архитектурой. Существует несколько способов реализации этого. Если вы потратите некоторое время на разработку надлежащей библиотеки баз данных, вы можете (в идеале) переписать все ваши запросы, вводя критерии tenantId во все запросы. Таким образом, вы знаете, что каждый арендатор будет иметь доступ к своим данным (пока все запросы передаются созданной вами db lib).

Другая проблема заключается в создании надлежащих индексов базы данных. Вам часто приходится создавать индексы с несколькими столбцами с помощью столбца customerId / tenantId + поля (ы), на которые вы смотрите.