PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (8): « 1 2 3 4 [5] 6 7 8 »

> Найдено сообщений: 108
freelsd Отправлено: 18 Октября, 2015 - 15:05:51 • Тема: Очень медленный SELECT и UPDATE • Форум: Работа с СУБД

Ответов: 4
Просмотров: 1014
andrewkard пишет:
freelsd
Профилируйте:
http://www[dot]mysql[dot]ru/docs/man/EXPLAIN[dot]html
Возможно нужно поставить индексы к полям, по которым делаете SELECT. А возможно и вообще сменить форму работы с БД, без циклов.

Да, индекс добавил, стало чуть шустрее, но без циклов не получится. Разве что можно все запросы сбросить в текстовый файл а потом разом все выполнить?
freelsd Отправлено: 18 Октября, 2015 - 10:18:04 • Тема: Очень медленный SELECT и UPDATE • Форум: Работа с СУБД

Ответов: 4
Просмотров: 1014
У меня есть база на несколько миллионов записей. Мне нужно в цикле сделать select а затем update. Но замерив с помощью microtime() запрос SELECT count(filed), я увидел что он занимает 1.5-2 секунды, что очень долго. Update, кстати тоже тормознутый. База на движке myisam, хотя innodb я тоже пробовал - те же грабли. Почему так медленно выполняются запросы и как мне улучшить ситуацию, потому что мне необходимо в цикле пройти все записи? Заранее спасибо.
freelsd Отправлено: 16 Октября, 2015 - 18:00:05 • Тема: Многократный обход огромного массива данных • Форум: Вопросы новичков

Ответов: 3
Просмотров: 278
DeepVarvar, в общем-то да, как вариант. А еще какие методы есть?
freelsd Отправлено: 16 Октября, 2015 - 17:49:47 • Тема: Скрипт • Форум: Вопросы новичков

Ответов: 7
Просмотров: 316
Konanir, http://pastebin[dot]com/jpXUSZS1
freelsd Отправлено: 16 Октября, 2015 - 15:16:54 • Тема: Скрипт • Форум: Вопросы новичков

Ответов: 7
Просмотров: 316
Konanir, нужно сделать, например header("Location: нужная_страница.php"); и на этой странице уже проверить авторизовался ли пользователь.
freelsd Отправлено: 16 Октября, 2015 - 12:23:12 • Тема: Многократный обход огромного массива данных • Форум: Вопросы новичков

Ответов: 3
Просмотров: 278
У меня есть большой массив на несколько миллионов записей. Нужно взять одно строку, выделить регекспом часть, потом проверить весь этот массив на количество вхождений этой части. Для быстроты работы массив я загружаю в память через file(), файл весит около 70мб. Но проблема в том что однократный обход массива занимает около 10 секунд, что катастрофически много. А таких записей, как я говорил несколько миллионов. Как быть в такой ситуации, возможно есть вариант ускорить обработку? Как вообще процессят такие объемы данных.
freelsd Отправлено: 15 Октября, 2015 - 14:51:28 • Тема: Отображение прогресса обработки • Форум: Вопросы новичков

Ответов: 10
Просмотров: 608
DelphinPRO пишет:
freelsd пишет:
Хотя, наверное, это противоречит приниципу работы браузера и http.

Да.
Вам же сказали - ресурсоемкий процесс запускается отдельно. Он работает сам по себе и время от времени пишет в базу (например) процент своего выполнения.
Ваша страница читает аяксом эти данные, и показывает пользователю.
>> Я так понимаю что это нужно оформить в функцию и пускать в цикле с setTimeout?
Разумеется, нужно периодически опрашивать сервер. Запрос каждую секунду\минуту\час - самый простой вариант. Альтернатива - long polling, websockets


Понятно. Кстати, нормальный рабочий пример с аяксом так и не нашел. Остановился пока на текстовом выводе.
freelsd Отправлено: 15 Октября, 2015 - 12:38:32 • Тема: Ребята помогите • Форум: Вопросы новичков

Ответов: 9
Просмотров: 356
Ну интерпретатор же тебе пишет T_LOGICAL_OR, expecting ')', а значит ждет скобку правую а не OR. Забыл скобку, короче.
freelsd Отправлено: 15 Октября, 2015 - 10:59:19 • Тема: Ребята помогите • Форум: Вопросы новичков

Ответов: 9
Просмотров: 356
$access же, а почему так уже выше написали.
Ваш Капитан.
freelsd Отправлено: 15 Октября, 2015 - 10:39:47 • Тема: Отображение прогресса обработки • Форум: Вопросы новичков

Ответов: 10
Просмотров: 608
DelphinPRO пишет:
Аяксом раз Х секунд делаете запрос на сервер, который читает отчет их базы, который туда пишет ресурсоемкий процесс. Запрос возвращает процент состояния, вы выводите на страницу это процент.

Как выводить на страницу?
CODE (javascript):
скопировать код в буфер обмена
  1. document.getElementById('percent').innerHTML(percent)

Как сделать аякс-запрос?
CODE (javascript):
скопировать код в буфер обмена
  1. var r = new XMLHttpRequest();
  2. r.open("POST", "path/to/api", true);
  3. r.onreadystatechange = function () {
  4.   if (r.readyState != 4 || r.status != 200) return;
  5.   document.getElementById('percent').innerHTML(responce);
  6. };
  7. r.send();


Что еще разжевать? Улыбка

Спасибо за подробный ответ. Странно, но у меня не работает. Поместил код на страницу, но информация не обновилась. Я так понимаю что это нужно оформить в функцию и пускать в цикле с setTimeout? Еще, видимо, тут закралась ошибка, вместо responce должно быть r.responseText. Но почему-то элемент все-равно не обновляется. Странно.
(Добавление)
Вот, кстати в продолжении темы, что я имел в виду:

PHP:
скопировать код в буфер обмена
  1. $progress = 0;
  2. error_reporting(E_ERROR);
  3. while($progress <= 100)
  4. {
  5.         echo str_pad('',4096);
  6.     ob_end_flush();
  7.         ob_flush();
  8.     flush();
  9.     ob_start();
  10.         echo $progress;
  11.        
  12.         $progress += 10;
  13.         sleep(1);
  14.  
  15. }


Но скрипт выводит подряд 10 20 30 и тд. А мне нужно чтобы сначала одно число появлялось, затем другое. Хотя, наверное, это противоречит приниципу работы браузера и http.
freelsd Отправлено: 14 Октября, 2015 - 21:36:27 • Тема: Отображение прогресса обработки • Форум: Вопросы новичков

Ответов: 10
Просмотров: 608
Мелкий пишет:
Вы мне предлагаете процитировать собственное сообщение?
Как это будет выглядеть на морде зависит только того, что вы сделаете вместо этапа "рисует красивый прогресс-бар"

Лол, ну так я конкретно и спрашиваю как мне это сделать вместо этапа "рисует красивый прогресс-бар" =)
freelsd Отправлено: 14 Октября, 2015 - 20:44:41 • Тема: Отображение прогресса обработки • Форум: Вопросы новичков

Ответов: 10
Просмотров: 608
Мелкий пишет:
Алгоритм тот же.
Вместо красивого прогресс-бара можно делать всё что угодно.

Так я и спрашиваю, как собственно реализовать такой вывод? Чтобы статус не новой строкой дописывался а одной.
freelsd Отправлено: 14 Октября, 2015 - 20:38:40 • Тема: Отображение прогресса обработки • Форум: Вопросы новичков

Ответов: 10
Просмотров: 608
Мелкий пишет:
Ресурсоёмкий процесс запускаете только в консоли. Если надо его запускать из веба - exec в помощь. Или, как более взрослое и контролируемое решение - сервер очередей.
Этот процесс время от времени пишет в какое-то хранилище отчёт о своём выполнении.

Веб-морда тем временем периодически опрашивает сервер, читает это состояние скрипта и рисует красивый прогресс-бар. Можно каким-нибудь веб-сокетом, если есть желание.


А если без красивого прогресс бара, текстом просто выводить в цикле какую-то информацию. Просто хотелось бы чтобы вывод не шел браузер каждый раз новой строкой, а чтобы все было одной записью.

Вот на как на рисунке второй вариант. Так понятнее будет. Мне нагрузка на апач не суть важна, можно и из веба запускать.
freelsd Отправлено: 14 Октября, 2015 - 18:15:46 • Тема: Отображение прогресса обработки • Форум: Вопросы новичков

Ответов: 10
Просмотров: 608
У меня есть некий ресурсоемкий процес. Хотелсь бы выводить в браузер его состояние, как на консоли примерно. То есть показал что какой-то процент обработался, стер эту запись, потом показал новый процентаж. Я надеюсь, что ясно выразился. Я так понял что нужно ob_clean() и flush() использовать? Или как лучше этого достичь?
freelsd Отправлено: 14 Октября, 2015 - 18:13:09 • Тема: Простенький progress-bar • Форум: Вопросы новичков

Ответов: 10
Просмотров: 386
Viper пишет:
freelsd пишет:
Вот, кому пригодится, решение, которое можно использовать, если не требуется избыточный функционал http://stackoverflow[dot]com/questio[dot][dot][dot]s-bar-percentage
те же яйца только в профиль.

Мб, я на всякий случай скинул, может кому come in handy.

Страниц (8): « 1 2 3 4 [5] 6 7 8 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB