powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как хранить и индексировать тэги
12 сообщений из 12, страница 1 из 1
Как хранить и индексировать тэги
    #39849478
sdkmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Ситуация следующая - для каждой записи в таблице нужно хранить набор текстовых тэгов - обычно 2-3 штуки, но некоторым нужно 5-6.
Создавать колонки tag1, tag2, ...tagN пока не хочется.

Решение в лоб - хранить тэги в отдельной колонке как varchar строку в которой тэги записаны через пробел, запятую, точку с запятой...
Но тогда вопрос - как индексировать такое поле, чтобы селекты были быстры и точны :)
Насколько я знаю запросы LIKE + метасимволы во многих БД очень неторопливы, но может я ошибаюсь.

Использую PostgreSQL 11.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849488
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решением в лоб здесь будет
create table tags (id int primary key, id_From_parent_table references parent table, tag_text varchar)
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849495
sdkmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257Решением в лоб здесь будет
create table tags (id int primary key, id_From_parent_table references parent table, tag_text varchar)
Спасибо за ответ.
А что делать если у меня таких таблиц (с основными записями) несколько, плюс они секционированные, плюс в дальнейшим будут добавляться новые таблицы?
Твой вариант конечно хороший и соответствует самой идее реляционных БД, но хочется избежать создания дополнительных таблиц там, где это возможно.
Создать табличку - ерунда, дело 30 минут, но потом поддерживать такой зоопарк будет довольно накладно :)
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849497
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkmaster но хочется избежать создания дополнительных таблиц там, где это возможно.Избегайте. Каждый сам кузнец своего геморроя.
sdkmaster потом поддерживать такой зоопарк будет довольно накладно :) Поддерживайте костылевелосипед. Вряд ли будет дешевле.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849506
sdkmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257sdkmaster но хочется избежать создания дополнительных таблиц там, где это возможно.Избегайте. Каждый сам кузнец своего геморроя.
sdkmaster потом поддерживать такой зоопарк будет довольно накладно :) Поддерживайте костылевелосипед. Вряд ли будет дешевле.
Почему же сразу костылевелосипед :)

Тэги не самая важная вещь, основной поиск, 80-90% всех запросов, будет вестись по другим полям, которые хорошо проиндексированы.
Но для некоторых запросов, примерно 10-20%, нужен поиск именно по тэгам.
Поэтому и спрашиваю насчет организации - как сделать лучше, но так чтобы не создавать лишнюю таблицу.

Ничего страшного, что придется хранить все тэги в одной строке и пить кофе пока select+like сделают свою работу.
Но если есть рецепт получше, а я уверен что форумчане с подобным уже сталкивались, то буду ему очень рад.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849513
sdkmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно описать задачу по-другому - "как сделать быстрым select для поиска подстроки в строке".
Возможно есть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк.
Если все что нам доступно, это like+метасимволы, то грустно.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849519
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkmasterесть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк.Делайте вычисляемые поля tag1, tag2, ...tagN которые будут вычислятся из строки через запятую и их индексируете.

Будет ли это лучше - не факт, зато таблицу создавать не надо.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849548
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkmasterВозможно есть какие-то джедайские техники или секретное шаолиньское искусство построения
индекса для строк.

Full Text Search.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849577
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбить строку с тэгами на части и класть это всё в недоEAV. Потребуется две таблички. Поиск будет по значению тэга не как like, а как обычное сравнение. Индекс по имени тэга позволит сэкономить на чае и кофе.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39849624
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkmaster,

в Постгресе есть ещё нечёткий поиск через триграммные индексы. Можно эту тему посмотреть.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39851208
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkmaster, в Postgresql хорошо оптимизирован тип JSONB. Если вы построите по нему индекс
то поиск по нужным атрибутам документа будет достаточно быстрым. На уровне MongoDb.

Положите в JSONB ваши теги.
...
Рейтинг: 0 / 0
Как хранить и индексировать тэги
    #39853007
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можешь посмотреть
YouTube Video
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как хранить и индексировать тэги
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]