-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Хранение тегов #10
Comments
Стоит попробовать тэги тянуть без джойнов. Еще словарь в памяти держать можно - обходить быстрее. |
Можно ещё глянуть, как на Gazelle это реализовано. https://github.com/WhatCD/Gazelle |
HighQuality, что именно ты предлагаешь? |
Зачем париться на счет скорости, если прямо сейчас проблем нет? |
Затем что лучше пусть оно сразу работает чуть-чуть медленней, чем потом работает медленно. |
а может забить на хостинг и использовать сфинкс, ибо сейчас vds любому нищеброду по карману. |
не хочу забивать на хостинги, ибо много кто ставит трекера дома, под виндой. я знаю что это плохо и такой трекер не проживет долго, ибо скорее всего винду убьет, или диск сдохнет. но ты можешь дать конфиг сфинкса под теги и пример использования (я со сфинксом не работал), могу поколупать... |
Не Sphinx, а elasticsearch ;) |
Всё равно одна картина... |
а в чем преимущество elasticsearch над sphinx |
realtime индексы без ограничений. я все еще жду примера конфига под sphinx для замены поиска по torrents.tags LIKE '%тег%' |
Кажется что наиболее разумным вариантом, в таком случае, будет сначала сделать $ids_list = mysql_fetch_row(sql_query(
"SELECT GROUP_CONCAT(t.id) FROM torrents INNER JOIN torrent_tags AS tt ON tt.tid = t.id
WHERE tt.tag IN ('animation', 'pr0n', 'action') GROUP BY t.id
ORDER BY t.not_sticky DESC, t.id DESC LIMIT 0,25")); А потом в browse.php делать выборку по этим ID: WHERE t.id IN ($ids_list) Для блока релизов такая фишка серьезно ускорила его работу (когда релизов, у меня, уже больше чем 10000) Есть идеи получше? |
Может попробовать использовать одну таблицу tags добавляя к каждому уникальному тегу список id релизов и по ним выборку делать? К примеру так
как и в варианте выше получить список id
и в browse.php
|
А что в таком случае говорит explain и каков размер таблицы индекса? Я с телефона, пока не тестировал твой вариант. |
explain
таблица индекса 8кб |
Я вот о чем подумал - как это будет в конце, когда у тебя 50-60 тегов и 15000 торрентов? Не думаю, что, что перестроить коллекцию (а так мы будем называть набор торрентов под одним тегом) можно будет быстро. Но зато запрос быстр - и это хорошо. P.S: Есть еще один плюс, в том что код уже наполовину в таком случае готов для SphinxQL (только подключись да сделай запрос чуть-чуть по другому) |
хм.. например если удалить тег из раздачи или удалить весь торрент? |
Нет, если удалить, например, сотню торрентов. Не уверен, что сложности с поддержкой коллекции стоят этих усилий... |
Как то не подумал даже.. Хотя навскидку получится что то вроде |
А если у тебя нужный ID идет первым в строке? ;) |
Как вариант добавлять
в итоге :)
оно и без того жутковато выглядит при 15000 :) Я пожалуй попробую создать полноценную реализацию и добавить в реальный проект по возможности в качестве эксперимента. |
Ну "," это уже пошли костыли :) Ну попробуй, а там и узнаем что лучше :) |
@sunrise21 Ну как, попробовал? ;) |
Да :)
удаление ->
Пробовал удалить более 200 торрентов за раз с 7ю тегами в каждом и С запятой впереди все просто: У себя реализовал на проектах где нет возможности физического удаления. |
слишком много лишнего тут понаписали, все проще и быстрее можно. https://tbdev-forum.top/viewtopic.php?f=53&t=98&p=1104#p1104 |
Вот думаю как хранить теги в базе данных лучше всего, что-б получить быстрый поиск по ним, без использования Sphinx итд.
FULLTEXT - фигня т.к завязка на mySQL
Sphinx - на хостинге не поставишь
LIKE '%tag%' - медленно
Пока-что пришел в такому варианту, но не устраивает план выполнения запроса:
Ну и сами таблицы вот:
И вот результат, как по мне так ужасен...
У кого какие идеи?
The text was updated successfully, but these errors were encountered: