|  | 
| 
Как хранить и индексировать тэги | |||
|---|---|---|---|
| #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: | 14ms | 
| check forum access: | 4ms | 
| check topic access: | 4ms | 
| track hit: | 39ms | 
| get topic data: | 12ms | 
| get forum data: | 3ms | 
| get page messages: | 51ms | 
| get tp. blocked users: | 2ms | 
| others: | 11ms | 
| total: | 151ms | 

| 0 / 0 | 
