MySQL - критично ли большое число таблиц?

12
mixaly4
На сайте с 04.03.2009
Offline
49
1737

Добрый день. Интересует такой вопрос: если в одной БД создано большое число таблиц, например, 100 000, повлияет ли это на производительность системы?

В БД хранится статистика по участникам системы. Каждая таблица хранит инфу по отдельному участнику.

Просто, когда стало много таблиц, скрипт вывода инфо стал в 95% случаев отдавать 504 ошибку. Может, дело и не в таблицах, конечно. Хочу спросить мнение профессионалов.

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

AN
На сайте с 05.06.2004
Offline
243
#1

Совершенно однозначно, что

mixaly4:
несколько миллионов строк
в одной таблице гораздо лучше, чем
mixaly4:
большое число таблиц, например, 100 000
:)

Вообще, для нормально спроектированной базы, работающей на хорошем железе, несколько миллионов строк - это абсолютно не страшно:).

Размещу ваши баннеры на посещаемых сайтах. Места еще есть! Возможен безнал. (/ru/forum/324945) Нужны копирайтеры/рерайтеры - медики. Пишите в личку. (/ru/forum/676932)
[umka]
На сайте с 25.05.2008
Offline
456
#2

Вообще-то, таблицы были придуманы для того, чтобы хранить однотипную информацию.

Т.е. как раз чтобы в одной таблице была информация обо всех участниках в вашем случае.

Для каждой таблицы база данных создаёт как минимум 3 файла и открывает их при обращнии к таблице.

В вашем случае, если осуществляется поиск по всем этим таблицам, то системе нужно будет открыть как минимум 300 000 файлов.

А во всех системах есть лимит на количество открываемых файлов.

И при этом херится использование индексов.

Индексы, кстати, как раз и были придуманы для того, чтобы поиск и выборка по гигабайтной таблице из многих миллионов строк работала шустро.

Каждый раз, когда встречаю таких разработчиков, волосы везде дыбом становятся :)

Лог в помощь!
Петр Елагин
На сайте с 21.03.2007
Offline
197
#3
'[umka:
;7733398']Каждый раз, когда встречаю таких разработчиков, волосы везде дыбом становятся :)

А я наоборот радуюсь, у меня будет больше работы потом по оптимизации этого г_в_а)

П.С.

вы еще разнесите, чтоб каждое поле тоже таблицу) как в SAP R3

mixaly4
На сайте с 04.03.2009
Offline
49
#4
AnNik:
Вообще, для нормально спроектированной базы, работающей на хорошем железе, несколько миллионов строк - это абсолютно не страшно:).

Железо - ВДСка с 2.66ГГц и гигом оперативы.

'[umka:
;7733398']Вообще-то, таблицы были придуманы для того, чтобы хранить однотипную информацию.
Т.е. как раз чтобы в одной таблице была информация обо всех участниках в вашем случае.
Для каждой таблицы база данных создаёт как минимум 3 файла и открывает их при обращнии к таблице.
В вашем случае, если осуществляется поиск по всем этим таблицам, то системе нужно будет открыть как минимум 300 000 файлов.
А во всех системах есть лимит на количество открываемых файлов.
И при этом херится использование индексов.

Индексы, кстати, как раз и были придуманы для того, чтобы поиск и выборка по гигабайтной таблице из многих миллионов строк работала шустро.

Каждый раз, когда встречаю таких разработчиков, волосы везде дыбом становятся :)

Вообще, индивидуальные базы хранят инфу и скрипт вывода статистики к ним не обращается. А за совет про индексы - спасибо.

[Удален]
#5

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

[umka]
На сайте с 25.05.2008
Offline
456
#6
Tai89:
А вот допустим например есть кликандер партнерка, есть таблица в которую заносятся данные о переходах как в таком случае бд организовывать? Представляете сколько за месяц таких строк в таблицу набежит?

Чтобы данные за месяц/прошлый месяц/позапрошлый не мешали текущей работе (если кто-то иногда смотрит статистику за прошлые месяцы), то целесообразно сделать одну таблицу "текущий день", из неё раз в сутки перекидывать инфу за прошедший день в архив.

Вообще, всё зависит от объёмов и задач. Гугл-то как-то работает, а у него строк ещё больше :)

mff
На сайте с 21.02.2008
Offline
278
mff
#7
mixaly4:
Каждая таблица хранит инфу по отдельному участнику.

Жесть, а что мешает в одной таблице хранить?

mixaly4
На сайте с 04.03.2009
Offline
49
#8
mff:
Жесть, а что мешает в одной таблице хранить?

Индивидуальная таблица хранит не одну строчку, а ежедневную статистику, т.е. набор строк, порядка 100.

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

AS
На сайте с 21.09.2007
Offline
132
#9

Сразу вопрос шарящим

Одна таблица, статику в myisam, динамику в innodb - верное ли утверждение ?

pikasso
На сайте с 27.01.2008
Offline
150
#10
mixaly4:
Индивидуальная таблица хранит не одну строчку, а ежедневную статистику, т.е. набор строк, порядка 100.

Если связь 1 к 1, то одна таблица юзеров и 1 таблица всех остальных значений.

Если же связь 1 к множеству, то лучше создать 100 таблиц для каждого значения, чтобы при выборке/внесении данных работало пошустрее.

Ежедневно/ежемесячно по крону старую/неиспользуемую статистику выносим в отдельные таблицы архива.

Кроме того правильно настроенные индексы ещё тоже не отменяли.

ЗЫ

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий