powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
25 сообщений из 471, страница 2 из 19
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040814
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

А вы напишите алгоритм решения - от начала и до конца.
Может и правда у вас что-то гениальное.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040822
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас уже ищем 9 цифр!
Мой алгоритм:

В исходном файле находим количество совпадений строго больше 8(9 чисел или больше) и формируем БД:
Строка совпадений (9 чисел или больше. Больше 15 - нет), строки совпадений из исходного файла, количество совпадений (9 или больше) = кол-ву чисел в первом столбце.

Получили БД в которой совпали 2 строки.
У меня эта БД заняла около 600 тысяч строк.

Второй проход - делаем тоже самое что и в первом этапе но сравниваем строки с количеством совпадений больше 9(10 чисел или больше) с строками которые содержат номер этой строки в совпадении.

Пока всё. Я здесь завис.

-------------

Этот же подход я использовал и для 10 цифр . Там всё решилось очень быстро. За сутки.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040826
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
require "./baza.pl";  ############# Подключение к БД

$tab1 = 'n9n1';

$tab2 = 'n9n2';



$dbh->do("SET autocommit=0"); ############## Запрос к БД



$s = "SELECT * FROM $tab1 where sovpalo=10"; ################## Ещё запрос
$sth = $dbh->prepare($s);  ###############
$sth->execute;  ############



   
while (@r = $sth->fetchrow_array){ ################### Цикл по запросу
  
  @a = split /_/, $r[1]; ######################### Вытягиваем числа в массив с 1 столбца, не с 0-го! 

  print "$r[0]\n";


  $s2 = "SELECT * FROM $tab1 where str1=$r[5] or str2=$r[5]"; ## Второй запрос внутри первого
  $sth2 = $dbh->prepare($s2); ############Нам интересны только строки в которых упоминается наша строка
  $sth2->execute;
  while (@r2 = $sth2->fetchrow_array){########## Цикл по запросу
    next if $r2[0] <= $r[0];                     ########### Строки только больше строки первого запроса
    
    
    @b = (); %isect = (); %inion = ();  ####### Это и ниже - для сравнения количества совпадений
    @b = split /_/, $r2[1];
    for $e (@a, @b) {$inion{$e}++ && $isect{$e}++;}
    @isect = keys %isect;
    $is = scalar(@isect);

    if($is > 8){ ######################## Только если количество совпадений больше или равно 9
      $r = join('_', sort {$a<=>$b} @isect ); ################   Сортировка  
      
      $dbh->do("INSERT INTO $tab2 VALUES (null, '$r', '$r[4]-$r[5]-$r2[4]-$r2[5]', $is)"); ########### запись в новую таблицу

    }
     

    }
  }

$dbh->do("COMMIT");       ############## Запрос к БД. Пишем всё.

   

$sth->finish; ############ Прибираемся и рвём соединение
$sth2->finish;
$dbh->disconnect;
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040833
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
....
while (@r = $sth->fetchrow_array){
  
....
  while (@r2 = $sth2->fetchrow_array){
    next if $r2[0] <= $r[0];       
    @b = (); %isect = (); %inion = ();
    @b = split /_/, $r2[1];
    #print @a;print "\n";
    #print @b;print "\n";
    for $e (@a, @b) {$inion{$e}++ && $isect{$e}++;}
    @isect = keys %isect;
    $is = scalar(@isect);
    if($is > 8){
      $r = join('_', sort {$a<=>$b} @isect );      
      $dbh->do("INSERT INTO $tab2 VALUES (null, '$r', '$r[4]-$r[5]-$r2[4]-$r2[5]', $is)");
    }    
    #print "$r2[0]\n";
....



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

Чтобы точно-точно убедится - нужно запускать скрипт под профайлером . Как это на Perl делается я не знаю - но
вот в стековере есть инфа https://stackoverflow.com/questions/4371714/how-do-i-profile-my-perl-programs

Если подтверждается - то надо оптимизировать inserts в MySQL. Тут есть два пути. Первое - подобрать
такой table-engine
чтоб был максимально шустр на вставку а на остальное плевать. Возможно MyISAM.

Второе - делать вставку пачками (batch или bulk по разному это называется).

Пример пачковой вставки.

Код: sql
1.
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);



Размер пачки должен быть не большой-не-маленький а какая-то золотая середина между скоростью
конкатенации Perl-строки (тут возможно пригодится какой-то аппендер) и скоростью
обработки.

Возможно имеет смысл разбить Perl программу на 2 потока. Чтоб первый 50% обработал и второй еще половину.
Так пачковая вставка еще ускорится.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040837
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
А вы напишите алгоритм решения - от начала и до конца.

Это дело безблагодарное. Код нужен вам, а не мне. Возможность реализации уже была доказана ранее в закрытом треде. Если интересно, бесплатно отвечу на любые вопросы
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040844
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Пример пачковой вставки.

Там есть ограничение на длину вставляемого. Если надо очень много лучше тупо загнать в csv а потом сделать дамп средствами mysql.
Ну и ему смысла нет ничего тащить в базу, задача полностью влазит в память даже на ноде.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040850
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

а зачем идем по нарастающему?
искали >8 (9 и более)
затем ищем >9 (10 и более)
...
ну дошли до крайнего =13
и что это дает?
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040858
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
mayton
Пример пачковой вставки.

Там есть ограничение на длину вставляемого. Если надо очень много лучше тупо загнать в csv а потом сделать дамп средствами mysql.
Ну и ему смысла нет ничего тащить в базу, задача полностью влазит в память даже на ноде.

В родительском топике я тоже предлагал грузить утилитами из CSV. Это кстати - самый быстрый
вариант почти для всех бд (Oracle, MSSQL e.t.c.).
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040859
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
Наоборот. Из 15 чисел-совпадений при втором прогоне остаётся только 9 чисел совпадений в 3 строках.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040861
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,
тяжело воспринимать противоречивую информацию
авторВ исходном файле находим количество совпадений строго больше 8(9 чисел или больше) и формируем БД:
Строка совпадений (9 чисел или больше. Больше 15 - нет), строки совпадений из исходного файла, количество совпадений (9 или больше) = кол-ву чисел в первом столбце.

Получили БД в которой совпали 2 строки.
У меня эта БД заняла около 600 тысяч строк.

Второй проход - делаем тоже самое что и в первом этапе но сравниваем строки с количеством совпадений больше 9(10 чисел или больше) с строками которые содержат номер этой строки в совпадении.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040862
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Давайте разговаривать алгоритмами - ведь написать алгоритм - это совсем не сложно и занимает - десяток строк.

Сразу скажу - файл в 600 тысяч строк мне не нравится. А в моём алгоритме есть 600 тысяч строк.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040864
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если задача из 14страничного опуса не изменилась, то алгоритм прост
ищем все наборы с числом совпадений > N, допустим >8
получили все все все - и 9 и 10 и 11 и т.д, допустим 13 это макс
9 -> в ответ
из 10 делаем комбинации по 9 и -> в ответ
из 11 делаем комбинации по 9 и -> в ответ
.....
из 13 делаем комбинации по 9 и -> в ответ

это все, таблица строк в которых совпадают 9 чисел - готова
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040866
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
mayton,

Давайте разговаривать алгоритмами - ведь написать алгоритм - это совсем не сложно и занимает - десяток строк.

Сразу скажу - файл в 600 тысяч строк мне не нравится. А в моём алгоритме есть 600 тысяч строк.


Сделай профилирование. Просто так за ништяк никто не захочет глубоко погружаться в твой алгоритм.
Покажи где узкое место в реализации и потом мы пойдем в алгоритм.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040867
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Что вы не поняли? Вы понимаете что совпадений при первом прогоне может быть например 15 чисел?

1_2_3_4_5_6_7_8_9_10_11_12_13_14_15 есть в строках 1, 5

А где то есть строка:

1_2_3_4_5_6_7_8_9 есть в строках 5, 500

----------------

Таблица при втором прогоне:

1_2_3_4_5_6_7_8_9 есть в строках 1, 5, 500
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040868
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
Это Мой первый алгоритм.
Из первой темы.

Теперь попробуйте привести 15 совпадений к 9
Там сразу начинают ходить таблицы по 15 миллионов.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040869
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Нет смысла сравнивать всё со всеми - достаточно сравнивать только совпавшие - отсюда получился мой 2 алгоритм.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040872
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

я не предлагал сравнивать все со всем в данном случае.
если у нас совпало 15 чисел, то как не крути - в них совпадут и комбинации 9 чисел из этих 15-ти. Поэтому и надо построить комбинации 9 из 15 и записать в ответ (ничего не сравнивая, просто построить эти наборы)
никаких 15 млн не будет
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040875
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Alex_Ustinov,
Это Мой первый алгоритм.
Из первой темы.

Теперь попробуйте привести 15 совпадений к 9
Там сразу начинают ходить таблицы по 15 миллионов.


В этих 15 миллионных таблицах есть дубликаты - точно есть - я делал таким способом. - То есть дубликаты нужно убирать.
Таблицы совмещать и пр. ужас.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040877
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Я вас попросил составить количество строк из 15 совпадений.
Как вы не поймёте я всё эту уже делал и отказался от этого.
А если вы предлагаете сравнивать не со всеми подряд, а только с совпавшими - получаем мой алгоритм который работает сейчас.

Ведь он просто сейчас берёт 10 совпадений и ищет новые строки среди уже ранее совпавших.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040878
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в прошлом топике не зря предлагали упростить задачу. Только для того чтобы ее можно было "нарисовать" на пальцах.

Допустим есть наборы из 6 чисел
1,2,3,4,8,9
1,2,3,4,6,7
Задача Ищем совпадения 3 чисел

нашли в строках совпадения >2:
это из 4-х чисел 1,2,3,4
то и 3 из 4-х тоже будут совпадать, строим эти наборы
1,2,3
1,2,4
1,3,4
2,3,4

это ответ
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040879
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потом тоже самое проделывает с 11 совпадениями.
Точнее 11 совпадений я уже сделал - всего то за сутки.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040881
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

опять пятница?
НАЧАЛОНужно получить совпадения по 9 чисел. Например

ТЕПЕРЬЯ вас попросил составить количество строк из 15 совпадений.


я не вижу в вашем алгоритме построение наборов в искомом найденном наборе. Я вижу сравнение массивов
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040883
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите где у вас строится комбинации 9 из 15-ти
или 9 из 13
НЕ надо ничего сравнивать. Чисто построение
Или все таки топик надо переносить в форум Perl
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040885
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Добавьте строки чтоб они были без совпадений
Добавьте строки с разным количеством совпадений - тогда это будет походе на прототип.
А сейчас это похоже на натянутое за уши задание под ваше неверное решение.
...
Рейтинг: 0 / 0
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
    #40040886
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Запрос построчечно приводится к массиву - вы этого правда не знаете?
...
Рейтинг: 0 / 0
25 сообщений из 471, страница 2 из 19
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]