LEOnidUKG

LEOnidUKG
Рейтинг
1778
Регистрация
25.11.2006
Должность
PHP
Интересы
Программирование

Стандартное нагуливание ботов.

Скоро Яндекса будет тупо ботофермой, где в принципе алгоритмы не нужны, тупо боты туда сюда сайты будут вертеть.

Mik Foxi #:

4) подключить клаудфлар.

Кстати, да. Тоже как вариант. 

lutskboy #:

я раньше этим делом занимался. суть там сводится к тому что у меня скрипт php доставал макс и мин id 

потом генерил рандомные айди в этом промежутке. например 100. так как могут быть дыры в бд. 

а потом просто доставал записи WHERE id IN(6,890,7854, ...) 

Это прошлый век, у меня было такое для постраничной навигации. Все ID в файлике и потом по ним навигация.

1. Никак, только в ручном режиме каждые 3 месяца обновлять

2. Купить сертификат

p.s. сменить хостера или взять простой VDS с бесплатной панелью

lutskboy #:
Лёня  мой запрос да, немного затупил. Но и твой не рандом. Он по порядку достает с определенного места с бд

Ну я же второй сообщение ниже написал. Как его можно пропустить то?!

Основная задача выводить похожие новости за любое время. Первый запрос берёт случайную ID запись и начиная с неё выводит дальше записи по ID. Эта задача решается с наименьшими затратами. Особенно если надо вывести просто 3-5 новостей для человека.

Далее, если нужен дикий рандом, тогда для этого я выложил второй запрос. Но он по ресурсам дороже.

Поэтому тут уже решает каждый для себя сам, что выбрать.

lutskboy #:

ну ну. проверь сначала и тогда узнаешь

Я всё проверяю перед тем как что-то писать.

Запрос занял 37.0812 сек

Да же по синтаксису это равнозначные запросы с ORDER BY RAND() тут просто RAND() вынесли в переменную.

Да конечно, это не полноценный рандом, если присмотреться. 

Можно использовать вот такой:

SELECT `cms_freepages`.* FROM (SELECT id FROM `cms_freepages` ORDER BY RAND() LIMIT 5 ) AS ids JOIN `cms_freepages` ON `cms_freepages`.id = ids.id;

Но, он будет медленнее 

Запрос занял 0.2970 сек.

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

lutskboy #:

мой вариант

Он ничем не отличается от  ORDER BY RAND() и БД умрёт от этого запроса.

БД 850 000 записей ORDER BY RAND()

Запрос занял 42.9442 сек.

А мой запрос пример:

Запрос занял 0.0007 сек

Дальше думаю сами разберёте, почему решение рандомного вывода это не очень стандартная задача.

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

Не обязательно, можно выбирать рандомные записи, только BY RAND() при этом не использовать.

например такой:

SELECT cat,trans,name FROM `cms_freepages` f JOIN ( SELECT rand() * (SELECT max(id) from `cms_freepages`) AS max_id ) AS m WHERE f.id >= m.max_id ORDER BY f.id ASC LIMIT 20;

Адаптировать думаю можно под DLE
Massimo2223 #:
ORDER BY RAND()?

А потом ко мне сразу, за платной консультацией, почему сайт дико тормозит и БД просто вешается.

Всего: 31535