Чем сделать выборку из базы? - Форум успешных вебмастеров - GoFuckBiz.com - Страница 2
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB88.4375
BTC/USD67420.8531
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 17.04.2013, 13:45
Start Post: Чем сделать выборку из базы? 
  #11
Weil
Senior Member
 
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44020
По умолчанию

Есть файл baza.txt ~10млн строк. Есть файл keys.txt с несколькими сотнями ключевиков построчно, по которым нужно последовательно по одному сделать выборку из baza.txt и записать в соответствующие файлы на выходе: key1.txt, key2.txt ... и тд.
Weil вне форума  
Старый 18.04.2013, 21:50   #12
spasibo
Senior Member
 
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
По умолчанию

Цитата:
Сообщение от Weil Посмотреть сообщение
Не работает Делает выборку только по первому кею из keys.txt, называет файл key1txt вместо key1.txt и пишет done.
вроде поправил

PHP код:
<?php 
set_time_limit
(0); 

$f1 fopen("baza.txt""r"); 
$f2 fopen("keys.txt""r"); 
while (!
feof($f2)) { 
  
$key trim(fgets($f2)); 
  
fseek($f1,0);
  while (!
feof($f1)) { 
    
$w trim(fgets($f1)); 
    if(
stripos($w,$key) !== false){ 
      
file_put_contents ($key.'.txt'$w.PHP_EOLFILE_APPEND LOCK_EX); 
    } 
  } 

fclose($f1); 
fclose($f2); 

echo 
'done';
?>
spasibo вне форума  
Старый 18.04.2013, 23:02   #13
Weil
Senior Member
 
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44020
ТС -->
автор темы ТС По умолчанию

Работает вроде Большое спасибо!
Можешь добавить 2 фичи?
1. Имя файла из нескольких слов выводится через дефис, например: buy-honda-car.txt
2. Если ничего не нашлось по определенному ключевику, создается просто пустой файл с его именем.
Weil вне форума  
Старый 18.04.2013, 23:36   #14
spasibo
Senior Member
 
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
По умолчанию

PHP код:
<?php 
set_time_limit
(0); 

$f1 fopen("baza.txt""r"); 
$f2 fopen("keys.txt""r"); 
while (!
feof($f2)) { 
  
$key trim(fgets($f2)); 
  
file_put_contents (str_replace(' ','-',$key).'.txt'''FILE_APPEND LOCK_EX);
  
fseek($f1,0);
  while (!
feof($f1)) { 
    
$w trim(fgets($f1)); 
    if(
stripos($w,$key) !== false){ 
      
file_put_contents (str_replace(' ','-',$key).'.txt'$w.PHP_EOLFILE_APPEND LOCK_EX);
    } 
  } 

fclose($f1); 
fclose($f2); 

echo 
'done';
spasibo вне форума  
Старый 19.04.2013, 09:29   #15
Weil
Senior Member
 
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44020
ТС -->
автор темы ТС По умолчанию

Все ОК! За 8 часов работы скрипт сделал выборки по 650 ключевикам.
Weil вне форума  
Старый 19.04.2013, 10:18   #16
mrzaggi
Senior Member
 
Регистрация: 03.11.2010
Сообщений: 284
Бабло: $65960
По умолчанию

Цитата:
Сообщение от Weil Посмотреть сообщение
Все ОК! За 8 часов работы скрипт сделал выборки по 650 ключевикам.
LOL. за это время можно было воткнуть линь на виртуалку и сделать как написал чессер, и всеравно времени бы ушло гораздо меньше. делать выборки из больших баз скриптовыми языками - онанизм
mrzaggi вне форума  
Старый 19.04.2013, 11:09   #17
djmax
Ебланнед
 
Регистрация: 15.04.2013
Сообщений: 33
Бабло: $17240
По умолчанию

Цитата:
Сообщение от mrzaggi Посмотреть сообщение
делать выборки из больших баз скриптовыми языками - онанизм
зачем писать хуйню?
в прямых руках на скриптовом языке это делается очень быстро и занимает очень мало
и его большой плюс в том, что он 1 раз загрузится и всё отработает
а в примере чессера нужно загружать отдельно grep каждый раз
т.е. 10 млн раз или сколько там строк
djmax вне форума  
Старый 19.04.2013, 12:06   #18
spasibo
Senior Member
 
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
По умолчанию

Цитата:
Сообщение от Weil Посмотреть сообщение
Все ОК! За 8 часов работы скрипт сделал выборки по 650 ключевикам.

действительно медленно как-то.

а вот гуру php, подскажите, как можно сделать быстрее? читать из baza.txt блоками, по 1000 строк, и в них производить поиск?

я еще только начинаю учить, так что
spasibo вне форума  
Старый 19.04.2013, 12:06   #19
spamless
Senior Member
 
Регистрация: 16.07.2009
Сообщений: 936
Бабло: $152632
По умолчанию

Проблема не в языке, а в говнокоде:

Код:
    if(stripos($w,$key) !== false){ 
      file_put_contents (str_replace(' ','-',$key).'.txt', $w.PHP_EOL, FILE_APPEND | LOCK_EX);
    }
Не говоря о том, что проход по файлу-базе делается 650 раз (как и в случае с грепом, кстати).
spamless вне форума  
Старый 19.04.2013, 12:10   #20
spasibo
Senior Member
 
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
По умолчанию

Цитата:
Сообщение от spamless Посмотреть сообщение
Проблема не в языке, а в говнокоде:
ну если не сложно, то как правильно делать то?

я понимаю, что можно keys.txt считать один раз в массив, и делать проход только 1 раз. будет намного быстрей. но тогда надо учитывать сколько там ключей, чтобы памяти хватило.
spasibo вне форума  
Старый 19.04.2013, 12:19   #21
djmax
Ебланнед
 
Регистрация: 15.04.2013
Сообщений: 33
Бабло: $17240
По умолчанию

Цитата:
Сообщение от spasibo Посмотреть сообщение
ну если не сложно, то как правильно делать то?

я понимаю, что можно keys.txt считать один раз в массив, и делать проход только 1 раз. будет намного быстрей. но тогда надо учитывать сколько там ключей, чтобы памяти хватило.
в идеале тут надо хеши использовать
но это если в baza.txt можно как-то выделить именно ключ из текста
а иначе просто keys.txt читается в массив
потом построчно прогоняется baza.txt и в каждой строке ловится каждый элемент массива через регулярки
djmax вне форума  
Закрытая тема