Содержание
Алгоритмы организации тэгов / Хабр
enartemy
Разработка веб-сайтов *
Тэги – неотъемлемая часть всех современных сайтов и косвенный признак принадлежности сайта к пресловутому Вэб-Два-Ноль.
В статье я хочу рассказать об способах и алгоритмах тегирования информации.
Итак, при организации тэгов существует несколько слабых и узких мест, а именно:
- добавление и изменение принадлежности тэгов к объекту.
- создание и изменение самих тэгов.
- отображение тэгов на старице.
- поиск по тэгам.
- назначение алиасов тега
- построение облака тегов
К сожалению, универсальный алгоритм, который легко бы решал все эти проблемы автору не знаком. Далее о самих алгоритмах.
Нормальное соотношение многое-ко-многим.
Существует огромная таблица с тэгами, существуют огромные таблицы с тегируемой информацией. Связь между ними осуществляется через третью таблицу, которая получается очень большого размера. Так, если статей у нас 50000, а тэгов 10000, при условии что каждая статья в среднем связана с 4-мя тэгами, получаем размер таблицы в 200000.
Плюсы:
- нет проблем с построением облака тэгов
- нет проблем с алиасами.
- нет проблем с созданием и изменением тэгов
- нет проблем с «выпадающим списком тэгов»
Минусы:
- добавление и изменение принадлежности тэгов к объекту затрудненно, поскольку требуется отдельный INSERT или DELETE на каждую изменяемую связь. Еще нужен INSERT при создании тэга. Если некоторые тэги в единственном числе (что часто бывает), то они будут оттягивать на себя ресурсы (увеличивая размеры таблиц), не неся при этом почти никакой практической пользы.
- получение и отображение тэгов требует JOIN-объединение 3-х огромных таблиц. Из примера выше: таблица в 50000 join таблица 200000 join таблица 10000. Это будет работать медленно уже с этими данными. Учитывая то, что реально требуется сделать join еще 2-3 большие таблицы (например, таблицу пользоватлей и таблицу рейтинга), получается совсем не радужная картина. Да, я в курсе, что можно кэшировать, но сейчас не об этом.
- поиск по тэгам требует опять объединения больших таблиц
С помощью полнотекстового поиска
Алгоритм приведен в моей статье «Полнотекстовый поиск и его возможности»
Теперь о том, как это делается непосредственно по отношению к тэгам. В поле с полнотекстовым индексом лежат сами тэги в том виде, как они были записаны. Выборка объектов происходит исключительно по этому полю. Исходя из этого же поля строится принадлежность объекта к тэгам. Это означает, что если тэг русский, то и ссылка на него должна содержать русские буквы. А с этим возникают проблемы, т.к. они могут кодироваться c помощью urlencode, а это зависит уже от кодировки. Т.е. один и тот же тэг в зависимости от того, в какой кодировки страница, должен быть декодирован по-разному. Можно конечно использовать транслит русских слов в английские, и в писать их в поле наряду с русским словами. Тогда тэг будет отображаться на русском, а ссылка на него будет в латинице, и поиск будет идти тоже в латинице. Плохой выход, но выход.
Плюсы:
- нет проблем с выводом тэгов
- нет проблем с поиском по тэгам
- нет проблем добавлением и изменением принадлежности тэгов к объекту
- нет проблем с алиасами (точнее есть, но они решаемы)
- отпадает проблема создания тэга
- легко можно делать поиск не по одному, а по нескольким тэгам, а так же вычислять похожие материалы
Минусы:
- переименовать или удалить тэг просто так не получится, это требуется в полях всех объектов, которыми назначены тэги
- с построением облака тегов очень большие проблемы.
Можно решить так: обрабатываются все «тэговые» поля таблиц, анализируется частота присутствия отдельного тэга (эх, был бы доступ непосредственно к самому полнотекстовому индексу, как было бы хорошо) и на фоне этого строится облако. После чего кэшируется на длительный промежуток времени.
- сложно сделать «выпадающий список тэгов»
Как вариант, совмещение того и другого метода. То есть поиск по полнотекстовому индексу, а частоты использования и сами тэги в отдельной таблице. Ну, или вариации на эту же тему. Это решает проблемы с выпадающим списком и облаком, но создает сложности при выводе, добавлении и создании тегов.
Если кто-то знает еще варианты организации – будет интересно о них узнать. Конструктивная критика приветствуется.
Теги:
- тэги
- облако тегов
- разработка
- веб разработка
- алгоритмы
- полнотекстовый поиск
Хабы:
- Разработка веб-сайтов
Всего голосов 42: ↑39 и ↓3 +36
Просмотры
25K
Комментарии
48
Артемий
@enartemy
Пользователь
Комментарии
Комментарии 48
теги — Организация тегов в бд и запросах
Вопрос задан
Изменён
10 лет 2 месяца назад
Просмотрен
8k раза
Доброго всем времени суток господа
Есть такая штука тэги, к сообщениям/постам. т.е. есть у нас бд, в которой много постов, и хочется прикрутить к каждому посту тэги. Если тегов много — создавать для каждого отдельный столбик в таблице — думаю не лучший вариант.
Вопрос раз: как хранить теги в бд правильно? в одной ячейке через запятые?
Вопрос два: (исходя из первого ответа) приведите пример запроса к таблице, с поиском определенного тега?
- теги
- 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 Online
Обеспечьте каталитические связи и мосты к возможностям роста для технологического сообщества
Продвигайте политики, программы и инициативы, которые способствуют развитию бизнеса, наших членов и технологической экосистемы Грузии
Активизируйте, продвигайте и обучайте современных звезд технологий и технологические лидеры будущего
TAG предлагает варианты членства для частных лиц и корпораций
на различных уровнях для удовлетворения любых потребностей:
39 долларов США9/год
Сеть с технологическими лидерами и пионерами. Присоединяйтесь к TAG!
EDUCATE
- TAG Еженедельный информационный бюллетень
- TAG-ED Возможность сотрудничества
- Ежегодная личная встреча с менеджером по работе с клиентами
ВЛИЯНИЕ
- Участие Совета Общества
ПРОДВИЖЕНИЕ
- Годовой цифровой значок участника для веб-сайта, подписи и социальных сетей
- Ярмарки вакансий
- Набор инструментов для новых участников TAG
- Скидки с партнерами-членами
- Бесплатное объявление на доске объявлений
- 4 публикации TAGWire Media каждый год
- 4 упоминания в социальных сетях каждый год
- 1 ролик TAG Tech Talks каждый год
ПОДКЛЮЧИТЬСЯ
- Доступ к более чем 200 мероприятиям TAG по сниженным ценам и бесплатный доступ к каталогу участников TAG
- Виртуальная поддержка членства консьержа
- Скидка на аренду помещения в TAG North Metro Location
- Возможности волонтерской службы
- Включение в список участников TAG
Обучение
TAG Еженедельная новостная рассылка
Возможность совместной работы по тегам
Годовой, личная встреча с менеджером по счетам
Секции.
Возможность быть спикером/участником дискуссии на мероприятии TAG
Возможность работать в совете директоров TAG †
Рассмотрение для правительственных отношений.
12
24
TAG Tech Talks каждый год
1
Без ограничений 100 Unlimited
Годовой значок цифрового участника для веб -сайтов, подписи и социальных сетей
Ярмарки карьеры
TAG New Member Toolkit
Скидки с участниками партнеров
Бесплатная доска для работы
Connect
Доступ к доске TAG 2002
. мероприятия по сниженным ценам и бесплатный доступ к каталогу участников TAG
Членство в консьерже Виртуальная поддержка
Скидка на аренду помещения в TAG North Metro Location
Возможности обслуживания добровольцев
включение в индекс участников TAG
Эксклюзивные приглашения на C-уровня C-уровня *
2
4
Доступ к членам Lounge At Global Events
NAMET. Мероприятия
* Приглашения предназначены для руководителей, которые в настоящее время занимают эту должность уровня C † Ожидается процесс отбора совета директоров
TAG Sponsors
Титан
Платина
Серебро
Стать спонсором
TAG Fintech — TAG Online
TAG Fintech завоевывает признание Грузии как центра выбора для ведущих мировых поставщиков финансовых технологий. Цели общества включают ускорение накопления капитала его членами и создание деловой среды, способствующей постоянному успеху компаний, сотрудников, поставщиков услуг, учебных заведений, предпринимателей и инвесторов. В результате это помогает им создавать, создавать и поддерживать инновационные финансовые услуги, отвечающие растущим потребностям их клиентов.
Движимое инновациями. Доказано производительностью.
Экосистема Fintech в Грузии динамична и процветает. Эти репрезентативные номера помогают определить экосистему:
- Финтех-компании в Грузии (по состоянию на май 2022 г.
) – 210
- сотрудников Fintech в Грузии – 42 000+ (оценка)
- Доход 12 публичных компаний со штаб-квартирой в Джорджии — 49 млрд долларов США
- Рыночная капитализация 12 публичных компаний со штаб-квартирой в штате Джорджия – 233 миллиарда долларов США
- Расчетное количество глобальных платежных транзакций, обрабатываемых компаниями на базе GA – 300 миллиардов
- 2021 инвестиционное финансирование для компаний, базирующихся в штате Джорджия, — 501 млн долларов США
- 2022 инвестиционное финансирование для компаний, базирующихся в Джорджии, до сентября 2022 года – 415 миллионов долларов США
- Совокупный объем транзакций Fiserv, FIS, Global Payments, BofA Merchant Services и Elavon (Nilson) — 80,5 млрд
Слияния и поглощения
Просмотр
Частные финтех-компании
Просмотреть
Публичные финтех-компании
Просмотреть
Отчет об экосистеме финтех-технологий в Грузии за 2022 год уже доступен
0 Загрузите его прямо сейчас!
Последние новости финансовых технологий
ноябрь
15
2022
Tyk представляет Holiday APIM Extravaganza
Это не просто очередное онлайн-мероприятие; это свежий, динамичный формат, полный быстрых советов и советов экспертов о том, как добиться успеха в 2023 году.![]() |
Подробнее
ноябрь
3
2022
Серия вебинаров Snap Tech IT: Microsoft Teams: лучшие советы по безопасности для повышения производительности
Удаленная работа и COVID-19 значительно ускорили использование Microsoft Teams за последние два года; настоящий прорыв для удаленных команд. В MS Teams есть ряд уязвимостей в системе безопасности, которые предприятия должны понимать и устранять.
Подробнее
октябрь
21
2022
Пример клиента CMMC: процесс подготовки к соблюдению требований – ключ к бизнес-стратегии на 2023 год Временное правило от мая 2023 года.
Подробнее
Больше новостей Fintech на TAGWire
Последние записи в блоге Fintech
Роль Грузии в кибербезопасности – на национальном и глобальном уровнях
Ларри Уильямс, президент и главный исполнительный директор, Технологическая ассоциация Джорджии
22 июля 2022 г.
Подробнее и генеральный директор, Технологическая ассоциация Джорджии
17 июня 2022 г.
Подробнее
Устойчивость и рост финансовых технологий в Грузии
Ларри Уильямс, президент и главный исполнительный директор, Технологическая ассоциация Джорджии
10 июня 2022 г.
Подробнее
Другие записи в блоге Fintech
Новое… Сейчас… Далее…
Финтех-события
Полный месячный календарь
Награда за выслугу в сфере финансовых технологий
Познакомьтесь со Скоттом Граймсом и Линн Лаубе, членами Зала славы 2021 года
Зал славы финансовых технологий
Награды TAG FinTech ADVANCE Awards
Программа TAG FinTech ADVANCE присуждается инновационным компаниям Джорджии, связанным с финансовыми технологиями.
См. Финалисты в этом году
Партнеры Общества Финтех.
Марсело Берналь
Briteris
JC Boyanton
Truist
Кэтрин Банн
Cross River
David Calhoun
Morris, Manning & Martin
Don Campbell
RightCourse
Stephanie Carton
EY
Hillery Champagne
FinTech Atlanta
Tim Christie
CorpDev Consulting
Amy Corn
Технологический институт Джорджии
Эмбер Катлер
PwC
Роберт Дэниел
ATDC
Rodrigo Dantas
EY
Kathleen Devlin
Accenture
Marie Ducheine
Fiserv
Jude Fils-Aimé
Verizon Enterprise Solutions
Cherie Fuzzell
Apple, Inc.