2012-04-01 5 views
6

Я два маршрута,Производительность MySQL - количество таблиц Vs. Количество рядов

1) создание вложенных таблиц для каждого пользователя и хранить его содержание индивидуальных

2) создание нескольких таблиц и хранить данные всех пользователей в них.

например.

1) 100 000 таблиц, каждая с 1000 строк

2) 50 Таблицы каждый с 2000000 строк

Я хочу знать, какой путь является самым лучшим и эффективным.

Контекст: Как Facebook, для миллионов пользователей, их сообщений, фотографий, тегов. Вся эта информация находится в некоторых гигантских таблицах для всех пользователей, или каждый пользователь имеет собственные подтаблицы.

+1

Вы можете посмотреть бесплатный видеокурс «Введение в базы данных»: http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToDatabases –

ответ

7

Это некоторые плюсы и минусы этих двух подходов в MySQL.

1. Многие небольшие столы.

Против:

  • Больше параллельных таблиц, используемых означает больше дескрипторов файлов, необходимых (проверить this)
  • База данных с 100.000 таблиц беспорядок.

Pros:

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

2.Несколько большие столы

Против:

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

Pros:

  • базы данных (а также код) это ясно и легко его поддерживать.
  • Вы можете использовать разделение, если ваши таблицы стали такими большими. (отметьте this).

Из моего опыта таблица из двух миллионов строк (я работал с 70-миллиметровыми таблицами строк), это не проблема производительности в MySQL, если вы можете загрузить весь свой активный индекс в память.

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

1

Создание таблицы для каждого пользователя - это худший дизайн. Это одна из первых вещей, которые вы преподаете в классе дизайна db.

0

Таблица является сильным логическим компонентом базы данных и, следовательно, используется для многих задач обслуживания с помощью СУБД. Например. обычно устанавливается табличное файловое пространство, ограничения, квота, пространство журналов, пространство транзакций, пространство индексного дерева и многое другое. Если в каждой таблице есть собственный файл для ввода данных, вы получите большие промежутки времени при подключении к столам или вообще.

Когда вы создаете много таблиц, у вас будет действительно БОЛЬШИЕ накладные расходы на обслуживание. Кроме того, вы будете отрицать саму природу реляционных источников. И просто предположим, что вы добавляете запись в базу данных - каждый раз создаете новую таблицу? Это будет немного сложнее для вашего кода.

Но с другой стороны, вы можете попробовать и сами убедиться.

+0

Спасибо Dmitriy .... Это полезно. –

+0

Добро пожаловать :) –

+0

@DmitriyReznik, если у меня нет объединений в моих запросах, хорошо ли иметь много таблиц, таких как 100k – Rams

Смежные вопросы