Подключите нашего Telegram-бота для уведомлений о новых проектах

Заказ закрыт
Запрос выборка по времени. Mysql.

s
Заказчик
Отзывы фрилансеров: + 1 - 2
Зарегистрирован на сайте 13 лет и 5 месяцев
Бюджет: по договоренности
Исполнитель определен: Николай Чапни  
Есть список прокси

CREATE TABLE IF NOT EXISTS `sa_proxy` (

`id_proxy` int(11) NOT NULL AUTO_INCREMENT,

`ip_address` varchar(45) DEFAULT NULL,

`date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,

`last_use` timestamp NULL DEFAULT NULL,

`proxy_status` varchar(45) DEFAULT NULL,

`proxy_type` set('http','socks') DEFAULT NULL,

`port` mediumint(9) DEFAULT NULL,

`login` varchar(45) DEFAULT NULL,

`password` varchar(45) DEFAULT NULL,

`id_proxy_group_fk` int(11) NOT NULL,

PRIMARY KEY (`id_proxy`),

KEY `fk_sa_proxy_sa_proxy_group1` (`id_proxy_group_fk`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1005 ;



Эти прокси используются, каждое использование заносится в таблицу

CREATE TABLE IF NOT EXISTS `sa_proxy_used` (

`id_proxy` int(11) NOT NULL,

`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`action` varchar(64) NOT NULL,

KEY `id_proxy` (`id_proxy`,`date`,`action`),

KEY `id_proxy_2` (`id_proxy`),

KEY `action` (`action`),

KEY `date` (`date`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Иногда прокси бывают заблокированны сервисом и заносятся во временный блок

CREATE TABLE IF NOT EXISTS `sa_proxy_block` (

`idsa_proxy_block` int(11) NOT NULL AUTO_INCREMENT,

`action` varchar(45) DEFAULT NULL,

`date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,

`date_block_off` timestamp NULL DEFAULT NULL,

`id_proxy_fk` int(11) NOT NULL,

PRIMARY KEY (`idsa_proxy_block`),

KEY `fk_sa_proxy_block_sa_proxy1` (`id_proxy_fk`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Сведения о блокировках прокси' AUTO_INCREMENT=2 ;





Как можно сделать ограничения:

использовать прокси не чаще чем раз в Х секунд (с момента прошлого запуска)

использовать прокси не чаще чем X раз в течении Y секунд (например не более 100использований за 180 секунд)

не использовать заблокированные прокси

для прокси есть распаралеливание под разные действия action, например загружать информацию с сайта 1 или сайта 2. Если для сайта 1 уже есть ограничение Xзапусков в Y секунд то для сайта 2 ограничение не действует

может быть заблокированно прокси, когда оно считается нерабочим.





Пример запроса который получился у нас. работает не совсем правильно.

Для решения задачи вы можете изменить структуру базы если так будет лучше.





$count_use = 20000; // Ограничение на использование прокси за периоды было 50

$period = 60*45; // Период в течении которого считать прокси использованным

$delay = 1; // Задержка в использовании прокси для данного действия. (использовать прокси не чаще чем раз в 8 секунд)



$this->db->select('sa_proxy.*, count(sa_proxy_used.id_proxy) as count, max(sa_proxy_used.date) as last_use');

$this->db->from('sa_proxy');

$this->db->join('sa_proxy_block', ' sa_proxy_block.id_proxy_fk = sa_proxy.id_proxy and `sa_proxy_block`.`date_block_off` > ''.date('Y-m-d H:i:s').'' and sa_proxy_block.action = ''.mysql_real_escape_string($action).''', 'left', false);

$this->db->join('sa_proxy_used', 'sa_proxy_used.id_proxy = sa_proxy.id_proxy', 'left', false);

$this->db->where('sa_proxy_block.id_proxy_fk',NULL);

$this->db->where(' ( sa_proxy_used.date > "'.date( 'Y-m-d H:i:s', time()-intval($period)).'" OR sa_proxy_used.date IS NULL )',NULL,FALSE ); // Обрезаем по дате использования прокси (что бы использовать не более N раз за период )

$this->db->group_by('sa_proxy.id_proxy'); // Группируем что бы посчитать колличество использований прокси

$this->db->order_by('count', 'desc'); // Берем те которые уже использовали, если они не заблокированны

$this->db->having('count <', $count_use);

$this->db->having(' ( last_use <>query = $this->db->get(); 

$this->proxy_active = $this->query->result_array();





Хочется найти человека на долгое сотрудничество, который будет в курсе базы. Оплата соответствует вашим знаниям и результатам.
Разделы:
Опубликован:
19.11.2013 | 10:26 [последние изменения: 19.11.2013 | 14:56]
Заказ находится в архиве

Теги: нужен программист, ищу программиста, резюме программиста, требуется база данных

Наши партнеры
Сведения об ООО «Ваан» внесены в реестр аккредитованных организаций, осуществляющих деятельность в области информационных технологий. ООО «Ваан» осуществляет деятельность, связанную с использованием информационных технологий, по разработке компьютерного программного обеспечения, предоставлению доступа к программе для ЭВМ и является правообладателем программы для ЭВМ «Платформа FL.ru (версия 2.0)».