Организация тегов: Алгоритмы организации тэгов / Хабр

Алгоритмы организации тэгов / Хабр

enartemy

Время на прочтение
3 мин

Количество просмотров

26K

Разработка веб-сайтов *

Тэги – неотъемлемая часть всех современных сайтов и косвенный признак принадлежности сайта к пресловутому Вэб-Два-Ноль.

В статье я хочу рассказать об способах и алгоритмах тегирования информации.


Итак, при организации тэгов существует несколько слабых и узких мест, а именно:

  • добавление и изменение принадлежности тэгов к объекту.
  • создание и изменение самих тэгов.
  • отображение тэгов на старице.
  • поиск по тэгам.
  • назначение алиасов тега
  • построение облака тегов


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

Нормальное соотношение многое-ко-многим.


Существует огромная таблица с тэгами, существуют огромные таблицы с тегируемой информацией. Связь между ними осуществляется через третью таблицу, которая получается очень большого размера. Так, если статей у нас 50000, а тэгов 10000, при условии что каждая статья в среднем связана с 4-мя тэгами, получаем размер таблицы в 200000.

Плюсы:

  • нет проблем с построением облака тэгов
  • нет проблем с алиасами.
  • нет проблем с созданием и изменением тэгов
  • нет проблем с «выпадающим списком тэгов»

Минусы:

  • добавление и изменение принадлежности тэгов к объекту затрудненно, поскольку требуется отдельный INSERT или DELETE на каждую изменяемую связь. Еще нужен INSERT при создании тэга. Если некоторые тэги в единственном числе (что часто бывает), то они будут оттягивать на себя ресурсы (увеличивая размеры таблиц), не неся при этом почти никакой практической пользы.
  • получение и отображение тэгов требует JOIN-объединение 3-х огромных таблиц. Из примера выше: таблица в 50000 join таблица 200000 join таблица 10000. Это будет работать медленно уже с этими данными. Учитывая то, что реально требуется сделать join еще 2-3 большие таблицы (например, таблицу пользоватлей и таблицу рейтинга), получается совсем не радужная картина. Да, я в курсе, что можно кэшировать, но сейчас не об этом.
  • поиск по тэгам требует опять объединения больших таблиц

С помощью полнотекстового поиска


Алгоритм приведен в моей статье «Полнотекстовый поиск и его возможности»

Теперь о том, как это делается непосредственно по отношению к тэгам. В поле с полнотекстовым индексом лежат сами тэги в том виде, как они были записаны. Выборка объектов происходит исключительно по этому полю. Исходя из этого же поля строится принадлежность объекта к тэгам. Это означает, что если тэг русский, то и ссылка на него должна содержать русские буквы. А с этим возникают проблемы, т.к. они могут кодироваться c помощью urlencode, а это зависит уже от кодировки. Т.е. один и тот же тэг в зависимости от того, в какой кодировки страница, должен быть декодирован по-разному. Можно конечно использовать транслит русских слов в английские, и в писать их в поле наряду с русским словами. Тогда тэг будет отображаться на русском, а ссылка на него будет в латинице, и поиск будет идти тоже в латинице. Плохой выход, но выход.

Плюсы:

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

Минусы:

  • переименовать или удалить тэг просто так не получится, это требуется в полях всех объектов, которыми назначены тэги
  • с построением облака тегов очень большие проблемы. Можно решить так: обрабатываются все «тэговые» поля таблиц, анализируется частота присутствия отдельного тэга (эх, был бы доступ непосредственно к самому полнотекстовому индексу, как было бы хорошо) и на фоне этого строится облако. После чего кэшируется на длительный промежуток времени.
  • сложно сделать «выпадающий список тэгов»

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

Если кто-то знает еще варианты организации – будет интересно о них узнать. Конструктивная критика приветствуется.

Теги:

  • тэги
  • облако тегов
  • разработка
  • веб разработка
  • алгоритмы
  • полнотекстовый поиск

Хабы:

  • Разработка веб-сайтов

Всего голосов 42: ↑39 и ↓3 +36

Комментарии
48

Артемий
@enartemy

Пользователь

теги — Организация тегов в бд и запросах

Доброго всем времени суток господа

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

Вопрос раз: как хранить теги в бд правильно? в одной ячейке через запятые?

Вопрос два: (исходя из первого ответа) приведите пример запроса к таблице, с поиском определенного тега?

  • теги
  • php
  • база-данных
  • mysql

WordPress называет теги, категории и пр. способы группировки постов волшебным словом Таксономия. Идея такая: посты отдельно, примочки отдельно. Как минимум две доп. таблицы: Теги и Связи.

В Тегах описываете каждый уникальный тег.

tag_id    tag_title    tag_count

В Связях записываете отношения Поста с Тегом:

post_id    tag_id






2

Ну хранить можно и через запятую в одном поле.

Есть вариант хранить для каждой записи отдельную строку для данного тега, но тут тогда много записей в БД, но если их сделать INDEX то выборка будет быстрее (работа с числами).

т.е.
есть у нас запись с ID 3 а в БД будет написано для первого и второго случая так

Первый 1 запись

ID | ID_REC | TAGS
  1|    1   |  1,2,3,4,5,6,7,8

Второй много записей

ID | ID_REC | TAGS
 1 |   1    | 1
 2 |   1    | 2
 3 |   1    | 1
 4 |   1    | 2
 5 |   1    | 1    
 6 |   1    | 2
 7 |   1    | 1
 8 |   1    | 2

Ну вот так. Можно хранить сериализованным массивом, но не пользовался ни разу таким способом.

Второй будет скорее всего быстрее по поиску и обновлению информации т.к. добавить к записи тег будет просто INSERT ну а удалить DELETE т.е. не нужно делать select а потом update






4







Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации


Почта

Необходима, но никому не показывается




Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки


Привилегии для участников — Технологическая ассоциация грантодателей

    

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

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

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

«В состав TAG входят любознательные мыслители и решатели  , которые хотят опередить нас сегодня,  , а также лидеры и деятели в этой сфере».
— Джонатан Мерги

Сеть

TAG — это частная сеть ИТ-руководителей, сотрудников и партнеров фондов по всему миру, включая:

  • Общественные фонды
  • Семейные фонды
  • Частные независимые фонды
  • Корпоративные фонды
Обмен знаниями
Членство

включает доступ к следующим возможностям для обмена и сотрудничества:

  • Частное сообщество Slack для членов TAG по всему миру
  • Интернет-центр знаний
  • Сеансы взаимного обучения
  • Частные онлайн-мероприятия
  • Участие в комитете TAG, углубление отношений и продвижение сектора
Ежегодная конференция

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

Обзоры технологий

TAG регулярно проводит опросы грантодателей и сектора в целом. Данные опроса подробно сообщаются участникам опроса, а в кратком виде — сектору.

Посмотреть результаты опроса State of Philanthropy Tech за 2022 год

Профессиональное развитие

участника TAG приглашаются принять участие в нашей инициативе Emerging Leaders Initiative в качестве наставника или кандидата на участие в программе. Узнайте больше об инициативе Emerging Leaders Initiative .

Скидки

Программа Amazon Web Services:  Через TechSoup участники TAG и получатели их грантов имеют право на ежегодное получение до 2000 долларов США в виде кредитов AWS, а также бесплатное обучение и техническую поддержку. Узнайте больше на TechSoup.

Обучение Idealware: участников TAG получают скидку 15–25 % на все учебные курсы Idealware . Idealware — это некоммерческая организация, которая предоставляет ресурсы, чтобы помочь некоммерческим организациям использовать технологии для улучшения социального воздействия.

Программа скидок для участников: Будучи гордым партнером TAG, Submittable предлагает скидку 10% всем членам фонда TAG. Submittable — это отмеченная наградами платформа управления грантами, которая помогает спонсорам принимать более взвешенные решения и максимизировать отдачу. Обратитесь и отметьте свое членство в TAG.

Члены Фонда

имеют право на участие в открытой благотворительной программе Microsoft , администрируемой TechSoup, а также на аппаратное и программное обеспечение со скидкой от многих других поставщиков. Узнать больше.

Тесно сотрудничая с аналогичными организациями в социальном секторе, TAG регулярно проводит совместные мероприятия, вебинары и публикации с PEAK Grantmaking, NTEN, Советом по фондам и Объединенным благотворительным форумом. Этот уникальный партнерский подход гарантирует, что ваши членские взносы не дублируют усилия в этом секторе.

Членство расширяет горизонты для вас и всей вашей команды. Вместе со всем сообществом TAG мы приглашаем вас принять участие.

Посмотреть варианты членства и начать работу

 

 

TAG Slack Community — Технологическая ассоциация грантодателей

TAG Slack Space

Сообщество жизненно важно.

Ваше членство в Технологической ассоциации грантодателей (TAG) открывает доступ к рабочему пространству Slack нашего сообщества. Там вы можете безопасно общаться с коллегами, задавать вопросы/получать ответы и делиться информацией о том, что «работает» в вашей организации.
В TAG полно лидеров, учеников и специалистов по решению проблем, которые ценят прагматические инструменты, а также возможности стать более стратегическими. Слушайте, учитесь и действуйте вместе с сообществом TAG, поддерживающим вас.

Присоединяйтесь к обсуждению.

Это виртуальное сообщество открыто для всех действующих членов TAG, и доступ предоставляется по запросу. Свяжитесь с Трейси Мунейхэм, директором по взаимодействию с общественностью, чтобы получить приглашение.

ПРИМЕЧАНИЕ. Пространство TAG Slack не требует запросов. Участники-партнеры и поставщики могут размещать рекламные материалы только на канале #plugs-and-promo. Прочтите политику использования Slack (PDF) для
Дополнительная информация.

Что такое пространство TAG Slack?

Slack — это платформа обмена сообщениями на основе каналов. В частности, именно здесь члены TAG могут узнавать о тенденциях в области ИТ и благотворительности и находить информацию, необходимую им для эффективной работы, — и все это в безопасной среде корпоративного уровня.

Разговор разбивается на «каналы» для организации обсуждений. Вот как устроены каналы TAG:

  • #tag-announcements  — TAG публикует здесь новости и события, прежде чем делиться ими с нашим списком рассылки.
  • #tag-general  – «большая палатка» для обсуждения всего, что касается TAG (инструменты, обмен знаниями, вопросы для коллег и т. д.)
  • #coffee-break  – меньше технологий, больше общения. Отличное место для неформального общения.
  • #plugs-and-promo   – возможность для саморекламы и место, где поставщик/партнеры могут публиковать информацию об акциях и мероприятиях.

Кроме того, TAG предлагает следующие частные каналы и/или группы пользователей:

  • #communityfoundations-private   – место, где сотрудники фондов местных сообществ могут обмениваться информацией и общаться с другими фондами местных сообществ. Только по приглашению – никаких продавцов, пожалуйста.
  • #fluxx-users  — личное место, где можно задавать вопросы и делиться советами с другими пользователями платформы. Только по приглашению – никаких продавцов, пожалуйста.
  • #salesforce-users — личное место, где можно задавать вопросы и делиться советами с другими пользователями платформы.

    This entry was posted in Популярное