SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.11.2010 17:51:58

iiiymaxep
Участник
Зарегистрирован: 11.11.2010
Сообщений: 4

Организация хранения тегов

Всем привет!

Когда то решил спроектировать базу для хранения статей. Каждой статье присваивается множество тегов.
Для хранения всего этого безобразия использую три таблицы:

1. Таблица для хранения статей

  art_id:INT, AUTOINC
  art_text:TEXT
)
2. Таблица для хранения тегов
  tag_id:INT, AUTOINC
  tag:CHAR(20), INDEX
)
3. Таблица для хранения связей статей и тегов
  art_id:INT, INDEX
  tag_id:INT, INDEX
)

Добавление статьи: При добавлении новой статьи обновляются Таблица 1 и Таблица 2. Далее в Таблицу 3 добавляется столько записей, сколько тегов было присвоено статье.
Поиск: Пользователь вводит запрос. По Таблице 2 определяется множество айдишников тегов. Ну а после по Таблице 3 определяется множество статей.

Всего тегов около 5000. Так что с выборкой айдишников тегов проблем не возникает. Но вот количество тегов для каждой статьи в среднем 20. То есть количество записей в Таблице 3 в среднем в 20 раз больше, чем в Таблице 1. Сейчас статей 150 тысяч. В Таблице 3 три с лишним млн. записей. Время обработки запроса при такой архитектуре БД вполне удовлетворительное (лично меня устраивает). Даже с организацией пагинации проблем по времени нет. Но вот INSERT и UPDATE Таблицы 3 начали тормозить. Не то чтобы очень сильно, но тенденция прослеживается. И у меня такое чувство, что скоро все будет плохо. Что посоветуете? Изменение архитектуры БД вполне допустимо.

Спасибо!

Неактивен

 

#2 11.11.2010 18:52:41

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Организация хранения тегов

Самый простой способ, который приходит в голову, — разбить табличку (PARTITION)
на несколько кусков. За счет того, что все куски имеют независимые индексы —
сортировать при вставке нужно будет только один кусок. Соответственно, прирост
скорости. Ну и, кажется, можно безопасно уменьшить размеры:
  art_id до MEDIUMINT UNSIGNED,
  tag_id до SMALLINT UNSIGNED.
Меньший размер индекса ⇒ больше влезает в память ⇒ быстрее сортируется.

Неактивен

 

#3 11.11.2010 20:21:57

iiiymaxep
Участник
Зарегистрирован: 11.11.2010
Сообщений: 4

Re: Организация хранения тегов

Спасибо за дельный совет, paulus!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson