Несколько сайтов в одной базе данных MySQL - PullRequest
1 голос
/ 10 октября 2009

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

Как структура, подобная этой: cms_config cms_pages cms_users cms_modules

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

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

Ответы [ 2 ]

2 голосов
/ 10 октября 2009

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

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

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

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

1 голос
/ 10 октября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...