Все клиенты в одном бд или в отдельных бд?

Я построил систему управления школой для своих нужд. Размер таблиц колеблется от ~ 200 строк до ~ 30 000 строк / в конце учебного года /.

Некоторые из моих друзей видели эту систему и убеждают меня сделать ее доступной для других школ. Я бы хотел пока попробовать хотя бы в нескольких школах. Учитывая мою текущую архитектуру и виртуальный хостинг, мне пришлось бы хранить все школы в одиночный db, поэтому меня беспокоят два вопроса:

  1. Может ли MySql легко обрабатывать таблицы с> 300 000 строками?
  2. На данный момент система основана на Yii2, я оптимизировал ее для максимальной производительности - как вы думаете, разумно ли попробовать или лучше работать над решением с выделенным сервером и отдельной базой данных для каждой школы?

Я не знаю, разумно ли хранить информацию обо всех учащихся, посещаемости, платежах и т. д. Из моей и 10 других школ в общих таблицах в одной базе данных. Лучше я спрошу, чем причиню себе неприятности ..

Любые советы приветствуются :)

«Может ли MySql легко обрабатывать таблицы с> 300 000 строк?» MySQL может легко обрабатывать миллионы записей при правильном индексировании

Raymond Nijland 02.07.2018 17:22

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

emsimpson92 02.07.2018 17:22

Что ж, этот вопрос в первую очередь основан на мнении, некоторые посоветуют сделать один дБ для всех школ, а некоторые посоветуют создать 1 дБ для каждой школы .. У обоих методов есть свои преимущества и недостатки ... Например, для одного db для всех потребуется какой-то просмотров для фильтрации записей, которые школе разрешено просматривать с 1 дБ на школу, у вас нет этой "проблемы"

Raymond Nijland 02.07.2018 17:25

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

Nigel Ren 02.07.2018 17:48

В одной таблице нет ничего плохого, MySQL может обрабатывать миллионы строк. Мой единственный совет: поскольку у вас есть несколько «чистых» разделов, то есть посещаемость, платежи и т. д., И вы расширяетесь на несколько школ, я бы, вероятно, разделил их на таблицы для каждого раздела. Это позволит увеличить объемы расширения в будущем. Вы можете расширить каждый по отдельности, добавив больше столбцов в каждый по мере необходимости, не создавая гигантскую таблицу, если и когда ваша система станет действительно большой. Думаю, сейчас я пытаюсь сказать будущее, чтобы избавить от потенциальной головной боли позже.

Stephen 02.07.2018 18:55

@ emsimpson92 В настоящий момент я запускаю сайт на виртуальном хостинге (хотя и с приличными параметрами), где мне нужно войти в раздел администратора, чтобы создать базу данных. Созданный db я затем жестко кодирую в конфигурационный файл Yii2, который запускает всю систему. Так что в настоящее время на карту поставлены технические ограничения. Система не может создавать базы данных в текущем окружении.

Joey 02.07.2018 19:18

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

Joey 02.07.2018 19:20

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

emsimpson92 02.07.2018 19:20

@Stephen, поймите меня правильно :) Я не упаковываю все данные в один тб; Поместите все логические части в соответствующие таблицы с несколькими таблицами соединений время от времени; только некоторые таблицы имеют длину> 300 тыс. строк и поэтому вызывают сомнения.

Joey 02.07.2018 19:21

@ emsimpson92 да, это была именно моя идея, но я беспокоился о размере и производительности некоторых таблиц. Посещаемость tb, например, имеет статус для каждого ученика для каждого класса, на который он может присутствовать / отсутствовать / опаздывать. После текущего учебного года это только для моих учеников 30 тысяч строк. Думаю, мне нужно проверить, сколько школ заинтересовано в моем приложении. На данный момент я знаю, что могу легко использовать несколько десятков, даже не беспокоясь об ограничениях MySql. Спасибо вам, ребята!

Joey 02.07.2018 19:28
он отлично работает - это не то, чего я хотел бы придерживаться, когда школы начинают получать данные других школ.
Nigel Ren 02.07.2018 19:54

@NigelRen Я тестировал систему на возможность манипулирования параметрами GET / POST, данными локального хранилища, SQL-инъекциями и т. д. Когда учитель запрашивает данные учащихся, которых они обучают, выполняется запрос JOIN для выборки только тех учеников из группы, в которой учитель_id совпадает с аутентифицированный учитель - один из способов, наряду с фильтрами, которые я использую в контроллерах. Работает нормально - как бы разговорно это ни звучало :)

Joey 02.07.2018 20:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
12
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

premature optimization is the root of all evil (or at least most of it) in programming

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

Can MySql easily handle tables with >300,000 rows?

Прежде всего, используйте лучшие принципы нормализации для структурирования ваших таблиц и отношений. MySQL довольно хорошо справляется с обработкой строк до 10 000 000. но это также зависит от того, как вы индексируете / запрашиваете данные. Используйте правильные индексы db для столбцов, которые вы часто используете для поиска. Большой отказ от "лайков" запросов, но если нужно, используйте поисковую систему, например (elastic, solr).

The system is based on Yii2 at the moment, I've optimized it for max performance - do you think it's wise to try or better work towards solution with a dedicated server and separate db for each school?

У меня очень мало представления о Yii2, но, безусловно, есть гораздо лучшие фреймворки, доступные на php, которые вы можете попробовать, например. ларвел (это даст вам лучшее представление). Конечно, лучше всего разместить это приложение на выделенном сервере. зачем тратить деньги, когда можно получить приватный VPS всего за 5 $ от цифровой океан.

I don't know if it's wise to store all students, attendance, payments etc info from my and 10 others schools across shared tables in single db. I'd better ask than cause trouble to myself..

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

Хороший аргумент в отношении преждевременной оптимизации - спасибо :) Что касается Laravel, у меня был эпизод с v3, но после переноса моей кодовой базы на v4 мое приложение было похоже на 10-килограммовую улитку ... вялую и невосприимчивую. Вероятно, это была проблема с кешем на моем общем хостинге. В любом случае, Yii отлично работает, когда дело доходит до производительности :)

Joey 02.07.2018 19:42

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

rob006 02.07.2018 20:49

Другие вопросы по теме