Разбивка БД

Статус
Закрыто для дальнейших ответов.

ALPHA

Active Member
Регистрация
08.06.2008
Сообщения
26
Всем привет! Всех с Новым Годом! У меня такой вопрос... Есть одна база данных. В ней несколько таблиц. Будет ли эта БД выдерживать большие нагрузки, если её разбить на несколько баз данных? И как это повлияет на скорость выполнения "средней" задачи? И ещё... Как долго осуществляется выбор таблицы в БД (mysql_select_db())?
Если я разобью одну большую таблицу на несколько маленьких и буду по идентификаторам обращаться к этим таблицам с помощью, например mysql_select_db(), то сильно ли это повлияет на скорость выполнения?

Заранее спасибо!
 

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
Лучший вариант...один сайт, одна база...
Большую таблицу нужно разбивать, к примеру, если к ней часто обращается скрипт, но берёт меньше 70-80% данных
 

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
Или разбивать базу к примеру нужно...научным языком не объясню.

На сайте нужно выводить новости на нескольких языках, для этого можно предусмотреть 2 колонки text_ru и text_en в таблице news. Но в друг заказчик пожелал ещё 2 языка на сайт(уже на сайте 4 языка)...мы можем опять же ещё раз добавить колонки с языками.
И что получается? В текущий момент времени пользователь читает все на одном языке, остальные 3 колонки не нужны(их можно не выбирать, но текст может занимать много и скорость из-за "толстой" таблицы падает).

Немного подумав мы можем создать 2 таблицы: news и news_text
В news поля: id, date, rating, vote_num, comm_num...ну и другая информация
В news_text поля: id, new_id(id новости), lang, text

Запрос получается не сложный, тут очень простое слияние таблиц(в гугле найдёте).
Таблица news получается очень легкой из-за того, что в ней почти одни числовые значения. А если глянуть на существующие CMS, то увидим что им чаще нужны данные из news(голосование, выставление рейтинга, обновление количества комментариев)

Кстати комментарии делаются подобным образом, единственное в плане оптимизации мы каждый раз не считаем комментарии, а просто добавляем comm_num, которое при добавлении комментария увеличивается на 1("UPDATE news SET comm_num = comm_num + 1")
 

ALPHA

Active Member
Регистрация
08.06.2008
Сообщения
26
Отлично объяснили, огромное спасибо! Я просто не очень хорошо разбираюсь в теории БД SQL(MySQL)... Может посоветуете какую-нибудь небольшую книгу по MySQL, что бы за короткие сроки хорошо разобраться...
Ещё раз спасибо!
 

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
В книжках по MySQL объясняют как составлять запросы, их синтаксис. Вам скорей нужны навыки проектирования баз, немного смекалки и опыт. Я не учился этому, это пришло само по себе или из гугла за год проб и ошибок в создании сайта. Ставьте цели, ищите решения и все придет :)

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

ALPHA

Active Member
Регистрация
08.06.2008
Сообщения
26
А вот с последним ответом я полностью согласен...) Учиться можно только на ошибках. Преобрести опыт можно только на практике. Я это уже давно понял. Вот и сейчас сижу голову ломаю, как бы лучше базу построить.
Ещё раз спасибо!
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Есть одна база данных. В ней несколько таблиц. Будет ли эта БД выдерживать большие нагрузки, если её разбить на несколько баз данных? И как это повлияет на скорость выполнения "средней" задачи? И ещё... Как долго осуществляется выбор таблицы в БД (mysql_select_db())?
Если я разобью одну большую таблицу на несколько маленьких и буду по идентификаторам обращаться к этим таблицам с помощью, например mysql_select_db(), то сильно ли это повлияет на скорость выполнения?
Это не имеет смысла, а отразиться даже негативно на производительности.
Либо тебе придется скакать от бд к бд через mysql_select_db() либо держать 2 коннекта. И то и другое будет кушать ресурсы.

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