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

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

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

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

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

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

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

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

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

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


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