Несколько DB в одном проекте

SaxPlayer

Новичок
Добрый день.
Я использую на моем портале staffinuae.com 3 базы данных: основную (важная инфа), балковую (часто сменяемая и менее важная) и лог. Все работает, но я обнаружил, что очень много ресурсов уходит на mysql select_db.
В связи с этим - 2 вопрса:
1. Правилен ли такой подход в принципе?
2. Можно ли определить, какая база в данный момент активна ? В мане есть mysql_db_name, но deprecated. Можно ли вывести имя активной базы?

Заранее благодарен.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
А не проще ли открыть 3 разных соединения с бд?
 
  • Like
Реакции: Gas

fixxxer

К.О.
Партнер клуба
Можно вообще явно указывать базу в запросе (если юзер имеет права на все базы) - select * from dbname.tablename итп.
Конечно, не ручками - обычно есть какой-нибудь query builder хотя бы

Впрочем, утверждение "очень много ресурсов уходит на mysql select_db" мне кажется сомнительным из общих соображений.
 

Фанат

oncle terrible
Команда форума
А можно использовать одну базу.

И ответ на вопрос Beavis меня тоже интересует.
 

SaxPlayer

Новичок
Можно вообще явно указывать базу в запросе (если юзер имеет права на все базы) - select * from dbname.tablename итп.
Конечно, не ручками - обычно есть какой-нибудь query builder хотя бы

Впрочем, утверждение "очень много ресурсов уходит на mysql select_db" мне кажется сомнительным из общих соображений.
 

SaxPlayer

Новичок
Так и есть, я сам не ожидал. У каждого запроса прописано обращение к нужной базе. Все работает В phpMyadmin->Processes я вдруг обнаружил, что этот запрос сжирает чуть не половину ресурсов.
Пока таблицы были маленькие - не проблема, но сейчас - я начал сомневаться - правильно ли я сделал, разделив базы. \для безопасности и бэкапа - безусловно, а вот производительность - похоже, страдает
Кому интересно - постну скриншот
 

SaxPlayer

Новичок
phpmyadmin -> processes под 40% selectDB. Если он не врет - сильно замедляет
Я и начинал с одной базы. Но просматривается резкое разделение. У нас портал по рекрутингу. Данные кандидатов - терять нельзя (Это - основная база, ок 40 таблиц). Вакансии - потерять жалко, но можно (еще 30 таблиц). Ну и лог - вообще не жалко. Может, я не прав, но как-то стремно держать в основной базе лог (под лимон записей за неделю)
 

SaxPlayer

Новичок
А может быть оно не влезает в http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html#statvar_Opened_tables и потому переоткрывает их при каждой операции?
Да нет, мы на VPS, все, что можно было поднять - подняли. Вопрос в следующем - не следует ли слить все базы в одну? По логике - нет, но производительность...
 

SaxPlayer

Новичок
не вижу проблемы
Дык и работает.
Проблема в том, что мы стали быстро расти, и то, что вчера устраивало - сегодня требует настройки. Практический вопрос: можно ли вывести как-то - какая база сейчас активная? В доке не нашел
 

SaxPlayer

Новичок
А можно использовать одну базу.

И ответ на вопрос Beavis меня тоже интересует.
Вот и думаю - не слить ли все в одну базу
А обнаружил - phpmyadmin-> processes. Дает под 40% на этот запрос (selectDB). Кстати, Фанат, рад встрече. Я потерял старую учетку, сегодня зарегился снова, но помню, как вы помогали мне мет 6-7 назад )))
 

Фанат

oncle terrible
Команда форума
не понял, какой запрос. USE database? Что такое selectDB?
Может, я не прав, но как-то стремно держать в основной базе лог
А что именно стремного?
база - это каталог. таблицы - файлы. что ужасного в том, чтобы держать два файла в одном каталоге? Как один может угрожать другому?
В одном скрипте - не получается
Надо попробовать еще раз. Прочитав документацию.
 

Beavis

Banned
Я и начинал с одной базы. Но просматривается резкое разделение. У нас портал по рекрутингу. Данные кандидатов - терять нельзя (Это - основная база, ок 40 таблиц). Вакансии - потерять жалко, но можно (еще 30 таблиц). Ну и лог - вообще не жалко. Может, я не прав, но как-то стремно держать в основной базе лог (под лимон записей за неделю)
бэкап можно делать по отдельным таблицам
в вашем случае разделять таблицы, относящиеся к одному проекту, на разные базы - совершенно не нужно
 

SaxPlayer

Новичок
Открывать каждому пользователю по 3 соединения с базой - по-любому неправильно, их число ограничено.
Держать в одной базе - можно в принципе. Но проект на ходу, сливать в одну базу - трудоемко. И потом - для логов рекомендуют myISAM, а для основных таблиц лучше InnoDB. Еще момент - если упремся в какое - то ограничение по размеру - ляжет база логов, ее можно и обнулить

Для выбора ДБ я использую mysql_select_db($this ->main_db, $this->sql_source) ; - это строчка из класса, разумеется.
Все работает. Но вот, что я обнаружил phpMyAdmin->status:
scrensh.jpg
56 % запросов - change DB.
Получается - mysql_select_db($this ->main_db, $this->sql_source) грузит SQL сервер и от него надо избавляться по возможности?
А можно ли как-то вывести имя базы, которая сейчас выбрана?
 

Вурдалак

Продвинутый новичок
И потом - для логов рекомендуют myISAM, а для основных таблиц лучше InnoDB. Еще момент - если упремся в какое - то ограничение по размеру - ляжет база логов, ее можно и обнулить
База по факту — это просто папка с файлом, в котором метаинформация содержится. Она не может лечь. Лечь может СУБД или рухнуть таблица. MyISAM и InnoDB относятся к таблицам, и не БД. Поэтому вопрос зачем было делать деление на несколько БД отстаётся открытым.

А касаемо смены БД: похоже, что смена делается перед каждым запросом. Неправильно продумано, тут нечего добавить.
 
Сверху