|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость? Код: 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. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 03:29 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Часть таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В таблице около миллиона записей. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 03:33 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Если кто то не читал предыдущею тему: Есть файл - в каждой строке 20 чисел, через пробел, от 1 до 99 включительно. Около 5 тысяч строк. Нужно получить совпадения по 9 чисел. Например 5_7_8_27_39_50_58_62_70 - комбинация есть в 5 строках - в 1, 28, 1004, 4300, 4444, ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 03:49 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
увеличивать буфер, начать с 2G ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 14:22 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Alex_Ustinov, А по русски? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 15:11 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
miltorg, таблицы InnoDB? (99% да) в файле конфигурации в my.ini (или my.cnf если Линукс) поставить параметр Код: sql 1. 2.
перезапустить сервер ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 15:19 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Alex_Ustinov> У него "миллиард записей"б там наверное РАМы как минимум 10ки Гб, а он сейчас 2Гб поставит :) Диверсия!!!! )) Если можете, как рекомендуется, 70% от всей РАМы ставьте. Я так понял, у вас какой-то там алгоритм, вы можете по тестить его на n записей, потом n*10, n* 100 и посмотреть как растет время поиска, может в алгоритме что-то не то. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 16:01 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Еще, долго не вдаваясь в вашу проблему, можно писать 20ть чисел в 20ть колонок и включать по ним текстовой поиск. Просто как идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 16:09 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Fitter2, у меня уже есть опыт общения с miltorg. ничего не говорится о таблицах, алгоритме и т.д. смотрим контекст miltorgВ таблице около миллиона записей. среди "простыни" на PHP я вижу один запрос на MySQL SELECT * FROM $tab1 where str1=$r[5] or str2=$r[5] поэтому отвечаю по запросу в стиле ТС и сравнение (или не сравнение, кто его знает) у него в двух циклах, нет там JOIN-а миллиардного. фетч из одной таблицы подставляется в фетч другого запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 16:22 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
и смотреть надо завершение стадии гораздо выше до $dbh->do("COMMIT"); чтобы понять на чем висит .....2 дня... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 16:51 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Alex_Ustinov> Это у него уже вторая лента, в первой начиналось словами "миллиард" :) Ваша позиция мне понятна. Я так, постёбываюсь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 16:52 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Alex_Ustinov, Не висит. Работает. Но в таблице 600 тысяч с лишним строк. И практически каждую нужно сравнить с каждой и получить количество совпадений и записать в новую таблицу. В первой таблице - 2 совпадения строк, а в второй таблице - уже 3 совпадения. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 17:22 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
какой тип таблиц? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 18:10 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
miltorg, Есть SELECT (пусть 600тыс) Есть одиночные Insert Что пытаемся оптимизировать - 2 этажный цикл + INSERT? Можно поставить COMMIT этажом выше, фиксировать порциями. и соответственно использовать INSERT IGNORE на случай сбоя-остановки сейчас я так понимаю 600тыщ*600тыщ коммитится? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 18:28 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
исходный текстовый файл в 5000+ строк есть смысл вообще привести в более компактный и удобный вид на дату выделить 2 байта = 0..65535 дней, итого хватает на 179 лет числа от 1 до 99 в строчке не повторяются, можно представить, как последовательность из 99 битов если бит выключен - соответственного числа в строчке нет, если включен - есть это 13 байт итого, с датой, всего 15 байт на хранение строчки, 75кб+ размер обрабатываемого файла чтобы сравнить 2 любые строки, перебираем 13 байт каждой, делая побитную операцию & (and) с таким же байтом другой строки если в итоге какой-то бит включен, значит число, за которое отвечает этот бит, присутствует в обеих строчках чтобы быстро считать, сколько всего чисел совпало, можно забацать спец-табличку/массив для 256 вариантов байтов, в которой хранить посчитанное число включенных бит для этого конкретного байта сделали & двух байтов для проверки (узнали какие числа совпали), а по байту-результату через таблицу узнали сколько бит в нем включено и приплюсовали в какую-нибудь переменную для суммы если сумма = 9 или сколько там надо совпадений, перевели все в нормальный текст и выдали в нужный файл как-то так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 19:48 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
...а можно поиграть с файликом 75к, как там еще надо заказчику, например, - генеришь очередной 13-байтный "ключ" (хоть перебором от 1 до 2^99), в котором включено именно 9 бит из 99 пробегаешь этим ключем по & с каждой строчкой из 5000 совпавшие строки, где все 9 бит включены, направляются в текстовом виде, скажем, во вспомогательный файл а после подсчета их числа, уже этот весь кусок идет в выходной файл (файлы), сразу сортируясь на нужную позицию по числу строк в куске как-то так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 22:10 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
хотя не, перебирать долго :) лучше очередной ключ создавать из пар строк, где есть от 9 совпадений :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 22:58 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
...а в рабочем 75к файле (копии), по которому ключами бегать, оставить только строчки, где есть не менее 9 совпадений ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 00:34 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Alex_Ustinov, Немного не так. Первый проход сравнения первоначальной таблицы дал эти самые 600 тысяч совпадений. Но эти совпадения - почти половина искомые - то есть по 9 чисел больше 15 чисел совпадений - одна штука 14 чисел - работало 5 мин 13 чисел - 10 мин 12 чисел - около 5 часов 11 чисел - сутки 10 чисел вот теперь - вторые сутки. Вероятно что будет 6 суток. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 02:20 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Я не ожидал такого затыка. - Думал что за 2 суток доработает. Ан - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 02:33 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Сейчас я просто создаю таблицу совпадений по 9 чисел. Даже окончательно не сравнивая их. Если бы при первом проходе получились только совпадения по 9 цифр - всё, задача решена. Но получились совпадения и по 10, и по 11, 12, 13, 14,. 15 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 02:37 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
Поэтому я и сравниваю с кем ещё совпало 15 совпадений, например. Сколько этих совпадений. И тд. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 02:43 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
ну как бы логичный алгоритм получаем "дерево" и достаточно глубокое вхождений 10 из 20-ти больше чем 11 из 20 и т.д. поэтому и будет дольше "перебирать". все равно основная трата времени на "проверке вхождения" именно поэтому и предлагали перейти на битовые операции. это Перл? надо в Перле посмотреть битовые операции и переделать. Это просто быстрее, хочу-не-хочу еще вариант исследования - прогнать алгоритм без INSERT в базу посмотреть сколько он отработает (с выводом проиежуточных данных после внутр цикла) далее - INSERT самая долгая операция, это запись на диск. Оптимизация - быстрые диски (опуская COMMIT и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 10:11 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
опять же - если это Perl, то лучше спросить в профилирующем форуме PHP, Perl, Python ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 10:26 |
|
Считает слишком долго. Уже 2 сутки. Как оптимизировать скорость?
|
|||
---|---|---|---|
#18+
miltorg, Кстати, да. Mysql у тебя находится где? Попорбуй делать или INSERT DELAYED, или поставь автокоммит, или не делай insert в базу, а записывай в файл, потом заливай в бд. Повторю, что эта задача решается в памяти полностью за секунды, ты занимаешься ерундой. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 10:34 |
|
|
start [/forum/topic.php?fid=47&msg=40040751&tid=1828188]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 268ms |
0 / 0 |