Одна таблица для всех пользователей или отдельная таблица для каждого пользователя в записях MySQL 10 МБ - PullRequest
3 голосов
/ 01 февраля 2012

Я работаю над сайтом, который мог бы работать с тысячами изображений для моих клиентов.Скажем, 20 000 файлов на пользователя, около 200 пользователей (с надеждой на скорое появление тысяч).

  • Изображения представлены в виде записей vFile (уникальный идентификатор) в базе данных MySQL InnoDB, описывающих владельца и разрешения, расположение вдерево папок, расположение физических файлов на S3, размер и т. д.
  • Пользователи могут создавать, удалять, изменять порядок и т. д. vFiles.
  • Каждый пользователь может изменять только vFiles, которым он владеет.

Дилемма базы данных:

  • все записи vFile в одной таблице или
  • отдельная таблица для каждого пользователя.

Второе решение, похоже, имеет несколько преимуществ:

  • , поскольку запросы будут искать vFiles только для одного пользователя, второе решение уменьшает нагрузку на БД.
  • операции надvFiles (например, переименование, удаление, переупорядочение) повлияет на таблицы меньшего размера.

Ваши мысли будут оценены по достоинству.

Ответы [ 2 ]

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

Второе решение, по-видимому, не учитывает будущие изменения функций сайта. Например, что если позднее вы захотите разрешить пользователям обмениваться изображениями или разрешить пулы изображений для нескольких пользователей с разными уровнями разрешений для файла? Если вы выбрали решение № 2, добавление этих функций приведет к появлению множества дублирующих записей. В общем, если у вас есть идентичная информация, большинство вещей, которые я прочитал, предлагают поместить ее в одну таблицу, а затем добавить таблицу связывания для гибкости. Выбор элементов, которые соответствуют user_id x в таблице ссылок, должен быть очень быстрым, даже с третьим столбцом для дополнительных разрешений на фильтрацию.

Кроме того, даже если у вас огромный поиск в одной таблице, добавление индексов в соответствующие столбцы значительно ускорит процесс поиска. Единственная ситуация, в которой я мог бы подумать, где # 2 может быть лучше, - это если вы заблокировали таблицы.

Хотя я не эксперт, поэтому мне хотелось бы услышать, что думают все остальные.

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

Используйте следующую структуру таблицы

Положить

    User Id ownership, permissions, location size etc imageFileIndex

в одной таблице а в другой таблице

    imageFileIndex vFile
...