|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
Всем привет! Ситуация следующая - для каждой записи в таблице нужно хранить набор текстовых тэгов - обычно 2-3 штуки, но некоторым нужно 5-6. Создавать колонки tag1, tag2, ...tagN пока не хочется. Решение в лоб - хранить тэги в отдельной колонке как varchar строку в которой тэги записаны через пробел, запятую, точку с запятой... Но тогда вопрос - как индексировать такое поле, чтобы селекты были быстры и точны :) Насколько я знаю запросы LIKE + метасимволы во многих БД очень неторопливы, но может я ошибаюсь. Использую PostgreSQL 11. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 20:37 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
Решением в лоб здесь будет create table tags (id int primary key, id_From_parent_table references parent table, tag_text varchar) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 20:48 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
SERG1257Решением в лоб здесь будет create table tags (id int primary key, id_From_parent_table references parent table, tag_text varchar) Спасибо за ответ. А что делать если у меня таких таблиц (с основными записями) несколько, плюс они секционированные, плюс в дальнейшим будут добавляться новые таблицы? Твой вариант конечно хороший и соответствует самой идее реляционных БД, но хочется избежать создания дополнительных таблиц там, где это возможно. Создать табличку - ерунда, дело 30 минут, но потом поддерживать такой зоопарк будет довольно накладно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 21:07 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
sdkmaster но хочется избежать создания дополнительных таблиц там, где это возможно.Избегайте. Каждый сам кузнец своего геморроя. sdkmaster потом поддерживать такой зоопарк будет довольно накладно :) Поддерживайте костылевелосипед. Вряд ли будет дешевле. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 21:29 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
SERG1257sdkmaster но хочется избежать создания дополнительных таблиц там, где это возможно.Избегайте. Каждый сам кузнец своего геморроя. sdkmaster потом поддерживать такой зоопарк будет довольно накладно :) Поддерживайте костылевелосипед. Вряд ли будет дешевле. Почему же сразу костылевелосипед :) Тэги не самая важная вещь, основной поиск, 80-90% всех запросов, будет вестись по другим полям, которые хорошо проиндексированы. Но для некоторых запросов, примерно 10-20%, нужен поиск именно по тэгам. Поэтому и спрашиваю насчет организации - как сделать лучше, но так чтобы не создавать лишнюю таблицу. Ничего страшного, что придется хранить все тэги в одной строке и пить кофе пока select+like сделают свою работу. Но если есть рецепт получше, а я уверен что форумчане с подобным уже сталкивались, то буду ему очень рад. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 21:57 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
Можно описать задачу по-другому - "как сделать быстрым select для поиска подстроки в строке". Возможно есть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк. Если все что нам доступно, это like+метасимволы, то грустно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 22:10 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
sdkmasterесть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк.Делайте вычисляемые поля tag1, tag2, ...tagN которые будут вычислятся из строки через запятую и их индексируете. Будет ли это лучше - не факт, зато таблицу создавать не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 22:23 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
sdkmasterВозможно есть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк. Full Text Search. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 00:16 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
Разбить строку с тэгами на части и класть это всё в недоEAV. Потребуется две таблички. Поиск будет по значению тэга не как like, а как обычное сравнение. Индекс по имени тэга позволит сэкономить на чае и кофе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 08:44 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
sdkmaster, в Постгресе есть ещё нечёткий поиск через триграммные индексы. Можно эту тему посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2019, 10:41 |
|
Как хранить и индексировать тэги
|
|||
---|---|---|---|
#18+
sdkmaster, в Postgresql хорошо оптимизирован тип JSONB. Если вы построите по нему индекс то поиск по нужным атрибутам документа будет достаточно быстрым. На уровне MongoDb. Положите в JSONB ваши теги. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 16:24 |
|
|
start [/forum/topic.php?fid=32&fpage=5&tid=1539916]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 251ms |
total: | 400ms |
0 / 0 |