Производительность MySQL - количество таблиц против Количество рядов - PullRequest
6 голосов
/ 01 апреля 2012

У меня два маршрута,

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

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

например.

1) 100 000 таблиц по 1000 строк в каждой

2) 50 таблиц, каждая из которых содержит 2 000 000 строк

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

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

Ответы [ 3 ]

7 голосов
/ 01 апреля 2012

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

1. Множество маленьких столиков.

Минусы :

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

За

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

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

Против

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

Плюсы

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

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

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

1 голос
/ 01 апреля 2012

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

0 голосов
/ 01 апреля 2012

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

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

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

...