Нужна помощь по скрипту - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

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

Закрытая тема
Опции темы Опции просмотра
Старый 10.01.2017, 11:47   #1
AbuDhabi
Member
 
Регистрация: 18.07.2012
Сообщений: 46
Бабло: $30779
По умолчанию Нужна помощь по скрипту

Задача, сравнить 2 списка , списки большие, скажем в первом 100млн строк , во втором 2млн.

На выходной файл записываем строки из второго списка(2млн) которых нет в первом списке (100млн).

Как сделать это максимально быстро по времени, господа прогеры накидайте пожалуйста желательно готовых вариантов плиз php (php+mysql)

Сам пишу на php, поэтому python не хотелось бы.
AbuDhabi вне форума  
Старый 10.01.2017, 12:49   #2
Sultan
Шучу на половину
 
Аватар для Sultan
 
Регистрация: 23.01.2011
Сообщений: 5,783
Бабло: $1157790
По умолчанию

linux
PHP код:
grep -iv 1.txt 2.txt 3.txt 
win
PHP код:
findstr /ilvg:1.txt 2.txt 3.txt 
в 3.txt пишутся строки из 2.txt которых нет в 1.txt
на счет объема не уверен
формат utf без bom
смотри справку если учет регистра нужен
Sultan вне форума  
Старый 10.01.2017, 14:06   #3
AbuDhabi
Member
 
Регистрация: 18.07.2012
Сообщений: 46
Бабло: $30779
ТС -->
автор темы ТС По умолчанию

Sultan, спасибо, но вот тут как раз и дело все в обьеме, тоесть как быстро выполнить операцию имея большой первый и не маленький второй список.

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

Думал может загнать первый список в mysql, но тоже не уверен что 2млн запросов на поиск к Mysql это быстрая операция.
AbuDhabi вне форума  
Старый 10.01.2017, 14:43   #4
v01d
Senior Member
 
Аватар для v01d
 
Регистрация: 02.09.2013
Сообщений: 117
Бабло: $19771
По умолчанию

Для начала, если нужно сделать 200 триллионов итераций, то нужен явно не пхп. Ну если решил делать на пхп, то во первых нужно установить время выполнения скрипта в 0, и в лоб сортировать такие объемы не верно. Сейчас поясню, тут все элементарно. Сложность алгоритма при подходе "в лоб" будет n^2. Это очень много. А теперь представь, что ты отсортировал массив 1, потом массив 2. А потом уже сравнил. В таком случае сложность будет n log n для каждого, то есть 3 * (n log n), что на порядки меньше, чем при подходе в лоб. Для этого лучше использовать свою функцию-компаратор, ну или попробуй использовать встроенные в язык, т.к. если не изменяет память, банальное линейное сравнение не даст желаемой сложности.

И еще в пхп есть функция array_intersect, попробуй использовать ее, но я не уверен. Вот тут подробнее пишут.
v01d вне форума  
Старый 10.01.2017, 14:51   #5
веломан
сыроед
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 15,859
Бабло: $1861015
По умолчанию

Цитата:
Сообщение от AbuDhabi Посмотреть сообщение
Задача, сравнить 2 списка , списки большие, скажем в первом 100млн строк , во втором 2млн.

На выходной файл записываем строки из второго списка(2млн) которых нет в первом списке (100млн).

Как сделать это максимально быстро по времени, господа прогеры накидайте пожалуйста желательно готовых вариантов плиз php (php+mysql)

Сам пишу на php, поэтому python не хотелось бы.
кидай в mysql 100 млн строк через ф-ю md5()
ставишь уникальный индекс
потом делаешь array на 2 млн строк md5() и каждую пытаешься INSERT, отлавливая обломы
так то можно было и первые 100 млн загнать в массив, но это много памяти (~ 100 млн * 32 байт = 3.2гб)
и пхп/не пхп тут совершенно похуй
веломан вне форума  
Старый 10.01.2017, 14:51   #6
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
Отправить сообщение для Hector с помощью Jabber
По умолчанию

http://stackoverflow.com/questions/1...linux-terminal

веломан, ебать ты точно велосипедист! Стандартные утилиты в линуксе надо юзать, они сами и хэш посчитают и сделают все быстрее.

https://ru.m.wikipedia.org/wiki/Diff
Hector вне форума  
Старый 10.01.2017, 14:56   #7
веломан
сыроед
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 15,859
Бабло: $1861015
По умолчанию

Цитата:
Сообщение от v01d Посмотреть сообщение
Ну если решил делать на пхп, то во первых нужно установить время выполнения скрипта в 0, и в лоб сортировать такие объемы не верно.
это только если через web делаешь
в cli похуй

Цитата:
Сообщение от Hector Посмотреть сообщение
http://stackoverflow.com/questions/1...linux-terminal

веломан, ебать ты точно велосипедист! Стандартные утилиты в линуксе надо юзать, они сами и хэш посчитают и сделают все быстрее.

https://ru.m.wikipedia.org/wiki/Diff
читать поучись, человеку скрипт нужен
веломан вне форума  
Старый 10.01.2017, 15:31   #8
Sultan
Шучу на половину
 
Аватар для Sultan
 
Регистрация: 23.01.2011
Сообщений: 5,783
Бабло: $1157790
По умолчанию

AbuDhabi, дак и я про тоже)) там ведь 1й список от 20 гигов походу
такой алго в лоб, если оператива позволяет, загоняешь в мариядб по уникальному ключу с инкрементом 1й список, смотришь конечный ид-инкремент, от него потом делаешь экспорт, после загона 2го списка
Sultan вне форума