Реклама на сайте Advertise with us

Mysql, реализация тегов-тэгов-тагов

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 20/01/10 в 19:16       Ответить с цитатойцитата 

Подскажите, пожалуйста, как лучше.

1 вариант: 1 таблица, поля - ИД объекта (к которому теги), сам тег текстом
2 вариант: 2 таблицы, 1ая - уник ИД, тег текстом (уникальный); 2ая таблица - ИД объекта, ИД тега из 1ой

Какой вариант выбрать?

Спасибо.

0
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 20/01/10 в 19:26       Ответить с цитатойцитата 

я выбрал 2й вариант, но у меня десятки миллионов записей.

если записей 10-100к - лучше вариант 1

ps: все поля нужно сделать ключами/индексами, текстовые в том числе.

нету у меня подписи...

8
 



С нами с 13.04.05
Сообщения: 412
Рейтинг: 332

Ссылка на сообщениеДобавлено: 20/01/10 в 20:27       Ответить с цитатойцитата 

тоже за второй вариант, он производительнее при большом количестве записей

Если есть что сюда написать - пишите, подумаем

8
 



С нами с 13.01.10
Сообщения: 84
Рейтинг: 72

Ссылка на сообщениеДобавлено: 20/01/10 в 20:36       Ответить с цитатойцитата 

второй вариант надо делать только icon_wink.gif насколько я знаю, это принцип релевантых баз данных

8
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 20/01/10 в 20:52       Ответить с цитатойцитата 

Второй. Это и есть "нормализация"

8
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 20/01/10 в 20:58       Ответить с цитатойцитата 

Смотрел 5 опенсорс проектов 2.0, типа дигг, во всех реализован 1ый вариант. Второй видел только один раз, и то этот скрипт найти у себя не могу.

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 20/01/10 в 21:06       Ответить с цитатойцитата 

gimcnuk писал:
Смотрел 5 опенсорс проектов 2.0, типа дигг, во всех реализован 1ый вариант. Второй видел только один раз, и то этот скрипт найти у себя не могу.


А ты бы смотрел нормальный оупенсорс проект, который инженеры грамотные делали. Тот же hibernate.

8
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 20/01/10 в 22:19       Ответить с цитатойцитата 

2 вариант
универсальнее

крипта на ByBit

8
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 20/01/10 в 22:37       Ответить с цитатойцитата 

Второй вариант теоретически более правильный.

А в конечном результате все равно от задачи будет зависеть. К примеру вариант 1, на поле с тегами кидаем full-text search индекс, и в результате по тегам ищем простым селектом, а не с нескольких таблиц. Ну а теги скажем отрабатываются ночью по крону, где вся их карта и статистика будет секунд за 5-10 сделана.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

8
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 20/01/10 в 22:38       Ответить с цитатойцитата 

здесь ничего не нужно смотреть, нужно просто подумать - что лучше для СУБД, делать выборку по целочисленному ключу или по строковой константе.

бОльшая часть запросов в варианте "2" сводится к 2м запросам, вместо одного (в варианте /1/). Но оба запроса будут выборкой по INT индексу.

Я еще раз скажу - у меня 120 млн записей только в одной таблице, 8 млн во второй и еще 4 млн в третьей - вариант (2) работает моментально.

ps: 2й способ так же решает много проблем, если нужно выводить облако тегов с числом сайтов в каждом из них.

ps2: вариант Stek-a c fulltext поиском не применим для больших объемов данных. Правда, по его словам, сайтов с большими базами почти нет..

нету у меня подписи...

8
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 20/01/10 в 23:22       Ответить с цитатойцитата 

Цитата:
вариант Stek-a c fulltext поиском не применим для больших объемов данных.

Почему ? Поискал в инете информацию о ограничениях, ничего подобного не нашел. Да и сам mysql позиционирует этот индекс как раз для поиска по тексту.

Зато нашел старенький тест для тегов , там 4 вида реализации тегов с разными тестами быстродействия.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

8
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 21/01/10 в 00:00       Ответить с цитатойцитата 

а) потому что размер индекса нужно минимизировать. а fulltext - это худший способ сделать это.

б) использование fulltext индекса для тегов - это все равно что гвозди забивать ноутбуком. сам подумай - нужно ВЕДЬ точное совпадение (без учета регистра). Если уж так хочется - НАМНОГО лучше просто создать индекс по текстовому полю - будет быстрее намного.

в) я вернусь к старой теме - fulltext индекс это атавизм. он в дальнейшем ограничит возможность миграции на другую архитектуру таблиц.

г) статье 5 лет. mysql меняется до неузнаваемости каждый год. я сам люблю всё делать по старинке, но fulltext - это здесь не решение.

д) Назови хоть один крупный проект (с большим объемом хранимых текстовых данных), который использует mysql fulltext индексы?

2Stek: при всём уважении, ты, наверно, просто не подумал, перед тем как написать fulltext. Просто слово "индекс" было бы актуальней. Сам подумай - на то он и fulltext, что бы искать в тексте. А тут - просто совпадение строк нужно реализовать.

нету у меня подписи...

8
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 21/01/10 в 00:17       Ответить с цитатойцитата 

Цитата:
б) использование fulltext индекса для тегов - это все равно что гвозди забивать ноутбуком. сам подумай - нужно ВЕДЬ точное совпадение (без учета регистра). Если уж так хочется - НАМНОГО лучше просто создать индекс по текстовому полю - будет быстрее намного.


Ну х.з, тут я не согласен. Тэги - это ведь сейчас фактически то, что раньше пихали в meta_keywords. И при начальном наборе тега, часто делается поиск на наличие тегов с таким вхождением.

В общем все равно в конечном варианте будет все от задачи зависеть. И если скажем проект рассчитывается на ну 1к записей, то писать "по правилам" смысла нет, легче дать одно текстовое поле и вперед, хоть в phpmyadmin'е вбивай, решение за 2 минуты.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

8
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 21/01/10 в 00:20       Ответить с цитатойцитата 

Stek писал:
если скажем проект рассчитывается на ну 1к записей, то писать "по правилам" смысла нет, легче дать одно текстовое поле и вперед, хоть в phpmyadmin'е вбивай, решение за 2 минуты.

на 100% согласен.
с этого и начинали - если там будет 1к записей - можно сделать и на коленке.

Может ты или я неправильно поняли слово теги. В моём понимании - речь идёт о тегах аля вордпресс. Кликнул ты на тег - а тут тебе список постов, которые были помечены этими тегами. Кликнут на посте - а внизу список тегов, каждый - как ссылка. там совпадение нужно точное, потому я и писал, что fulltext не нужен. Хватит просто сделать кейворд индексным полем.

Если речь идёт просто о строке, где перечисляются кейворды (типа meta keywords) без ссылок каких-то, то я бы это тегами не называл.

нету у меня подписи...

8
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 21/01/10 в 01:15       Ответить с цитатойцитата 

тег это признак.признак характеризующий/объединяющий чего либо
это может быть линком, а может и не быть.

крипта на ByBit

8
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 21/01/10 в 09:03       Ответить с цитатойцитата 

Теги имелись в виду, такие как на тубах, ну или у вордпресса.

Stek: вариант с fulltext это не первый, а третий уже.
Я имел в виду под 1ым - scuttle (собственно, оиз этого скрипта и взял идею), 2ой вариант это toxi

0
 



С нами с 01.03.07
Сообщения: 304
Рейтинг: 223

Ссылка на сообщениеДобавлено: 21/01/10 в 11:36       Ответить с цитатойцитата 

выбирай второй вариант, если будешь развивать проект этот вариант более универсальнее окажется

8
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 21/01/10 в 12:53       Ответить с цитатойцитата 

Вариант уже выбран, но за дискуссией слежу, может что-то интересное ещё скажут.

0
 



С нами с 01.02.07
Сообщения: 231
Рейтинг: 294

Ссылка на сообщениеДобавлено: 21/01/10 в 16:38       Ответить с цитатойцитата 

В первом варианте теги придется матчить либо через fulltext индекс что будет работать, но не фонтан, либо через LIKE '%TAG%' что вообще жопа полная )

Так что второй, конечно. Плюс статсы по тегам считать можно будет.

8
 

« ... full on ... »

С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686

Ссылка на сообщениеДобавлено: 21/01/10 в 19:25       Ответить с цитатойцитата 

2-й вариант. Тот же упомянутый тут вордпресс устроен именно так и не только. Использовать достаточно удобно в сравнении с 1-м вариантом, можно вытаскивать данные и 1 запросом, правда более сложным (т.е. с join).
У меня на нескольких проектах этот вариант отлично работает, правда миллионов записей нет, всего несколько тысяч. В общем, 2-й и логичнее и правильнее с точки зрения теории организации реляционной БД (как раз выше упоминали нормализацию).

Power of the lime madness...

8
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »