MySQL: одна база данных для всех пользователей или несколько баз данных для каждого пользователя - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть существующая система (на PHP, MYSQL на AWS EC2 и RDS соответственно).Текущая статистика для MySQL (InnoDB) в качестве базы данных составляет 600 ГБ в общем размере (от phymyadmin) и содержит почти 150 таблиц, которые требуются моей программе.Из них две таблицы (Order, Order_items), содержащие более 200 ГБ каждая.

В то время как база данных растет, мы находим проблемы в нескольких вещах.1. Обновления в любой схеме базы данных для получения обновлений новых функций занимают слишком много времени.2. Хорошо ли оставаться в такой же структуре данных для более длительного периода времени, так как мы ожидаем, что по мере нашего роста данные будут увеличиваться (в ТБ)?

Для решения проблемы № 1 и решения проблемы №.2, мы пытаемся найти решение, поэтому размещаем вопрос здесь.

Один из возможных способов, которыми мы размышляем, описан ниже.

Мы думаем разделить Order, Order_items (и такие более объемные таблицы) для хранения на базу данных пользователя, а не на текущую структуру всегов одной базе данных.Поэтому для каждого пользователя Order, Order_items будет хранить в отдельной базе данных, а остальные таблицы - в общих базах данных.(одна основная база данных и x база данных клиентов для таких записей.) Таким образом, данные будут разделены.

Подводные камни в этом упомянутом как - Структура каталога становится больше для хранения для каждой пользовательской БД.

Получениессылки, которые говорят, что это не очень хороший вариант, когда база данных меньше.[http://datacharmer.blogspot.com/2009/03/normalization-and-smoking.html] [ максимальный лимит баз данных, которые могут быть созданы в mysql? ] [https://forums.mysql.com/read.php?20,74692,74705#msg-74705]

Невозможно получить четкое представление о том, что делать при наличиибольшие данные в одной таблице.

Будет ли лучшим вариантом выделить таблицы для каждого пользователя или любые другие доступные варианты для удовлетворения долгосрочного роста объема данных (пункты 1 и 2, упомянутые выше)?

1 Ответ

0 голосов
/ 24 ноября 2018

(в MySQL ...) DATABASE - это скорее логическая и административная конструкция, которая связана с производительностью.

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

В MySQL практически нет разницы в производительности, независимо от того, находятся ли две таблицы (которые объединяются и т. Д.) В одной базе данных (каталоге) или в отдельной.

Что касается «безопасности» ... С отдельной базой данных для каждого пользователя легче предоставлять разные разрешения на доступ разным пользователям.Это само по себе может быть причиной наличия дБ на пользователя.

Размер таблицы может влиять на производительность, но мы обычно говорим о миллиарде строк или терабайте.Тем не менее, индексы и т. Д. Могут держать проблемы под контролем.Необходимо посмотреть на таблицу 200 ГБ, чтобы увидеть, есть ли у вас типы данных минимального размера, достаточная нормализация, но не чрезмерная нормализация.Подходящие индексы, особенно составные индексы, а не дополнительные индексы и т. Д. (Начните новый Вопрос, если хотите продолжить.)

ALTER TABLE влияет на одну таблицу, о которой идет речь;не имеет значения, какова структура базы данных.Кстати, MySQL 8.0 теперь имеет некоторые «мгновенные» изменения.

Превзойдете ли вы свой сервер?Что ты будешь делать тогда?Запустить другой сервер и перенести на него некоторых пользователей?В этом случае может быть удобнее иметь в базе данных на пользователя.Тогда вы просто перемещаете один дБ как единое целое;все остальное нетронутым.(То есть вы уже «зарезервированы» пользователем.)

Существуют ли какие-либо таблицы (кроме таблиц грантов), которые используются совместно пользователями?С помощью db-per-user создайте свою собственную базу данных.

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

150 таблиц - это много для одного приложения.

200 ГБ для одной таблицы звучит так же, как выэкономят больше вещей, чем нужно.Подумайте о сводных таблицах.

Или я неправильно прочитал вопрос ... У вас есть

  • Один набор из 150 таблиц со всеми пользователями в них?
  • Одна база данных с несколькими наборами по 150 таблиц, по одному на пользователя?
  • Множество баз данных, по одной на пользователя, по 150 таблиц в каждой?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...