Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2017, 20:42
Интересующийся
Отправить личное сообщение для Mracobes9 Посмотреть профиль Найти все сообщения от Mracobes9
 
Регистрация: 21.05.2017
Сообщений: 18

Индикация загрузки файла в бд
Здравствуйте. Нужно осуществить такую задачу: с помощью некоторого php скрипта считывается текстовый файл и записывается в бд построчно. Прогресс записи записывается в файл и по определенному get запросу возвращается клиенту. Сам прогресс должен отображаться на html странице. Здесь я пытался использовать ajax. Сначала посылается запрос который начинает загрузку файла, затем прерываю запрос и запускаю цикл запросов на получение прогресса загрузки. Но почему-то это не сработало. Может кто-нибудь знает в чем дело ?
$(document).ready(function(){
    var t = $("#progress").html();
    $("#begin").click(function(){
        var xhr = new XMLHttpRequest();
        xhr.open("GET","http://localhost/lab6/load.php?status=begin",true);
        xhr.onloadstart = function()
        {
            //alert("Начало");
        }
        xhr.onload = function()
        {
            //alert('Конец');
            $("#progress").html(t+xhr.responseText);
        }
        xhr.onerror =function()
        {
            alert("Ошибка "+xhr.status);
        }
        xhr.send();
        xhr.abort();
        do
        {
            xhr.open("GET","http://localhost/lab6/load.php?status=progress",false);
            xhr.send();
            $("#progress").html(t+xhr.responseText);
        }while(xhr.statusText!=="0.99");
    })
})
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2017, 20:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Mracobes9
записывается в бд построчно
Что за файл и почему построчно?
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2017, 20:55
Интересующийся
Отправить личное сообщение для Mracobes9 Посмотреть профиль Найти все сообщения от Mracobes9
 
Регистрация: 21.05.2017
Сообщений: 18

Это лог файл размером около 200Мб. Ну а построчно потому что мне нужно заносить не все данные из строки
Ответить с цитированием
  #4 (permalink)  
Старый 21.05.2017, 21:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Слава богу что не все. Значит читаем строку из ресурса, выбираем из нее нужное, помещаем в массив, подсчитывая объем его, который должен быть не более SQL параметра max_allowed_packet, в случаем БД MySQL.

Как только будет достигнуто это значение, формируем строку запроса для мнгострочной вставке данных в базу. Затем следующий пакет, и т.д. Насиловать БД запросами для каждой строки слишком накладно для такого объема.

Реального режима времени вы не получите, и для такого объема просто слишком увеличите саму операцию. Лучше отдать эту задачу для запуска по cron, который также будет писать в БД статус операции. Клиент, если так необходимо сидеть и ждать окончания операции, будет читать и выводить этот статус.
Ответить с цитированием
  #5 (permalink)  
Старый 21.05.2017, 21:13
Интересующийся
Отправить личное сообщение для Mracobes9 Посмотреть профиль Найти все сообщения от Mracobes9
 
Регистрация: 21.05.2017
Сообщений: 18

К сожалению, с cron не получится, так как сервер расположен на винде
Ответить с цитированием
  #6 (permalink)  
Старый 21.05.2017, 21:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

В Windows есть свой планировщик задач, как собственно и cron на него можно установить.
Ответить с цитированием
  #7 (permalink)  
Старый 21.05.2017, 21:20
Интересующийся
Отправить личное сообщение для Mracobes9 Посмотреть профиль Найти все сообщения от Mracobes9
 
Регистрация: 21.05.2017
Сообщений: 18

Дело в том что я не могу прервать первый запрос до завершения выполнения скрипта
Ответить с цитированием
  #8 (permalink)  
Старый 21.05.2017, 21:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Mracobes9
Дело в том что я не могу прервать первый запрос до завершения выполнения скрипта
Что значит прервать запрос? Запрос чего и к чему, и причем тут планировщик?
Ответить с цитированием
  #9 (permalink)  
Старый 21.05.2017, 21:32
Интересующийся
Отправить личное сообщение для Mracobes9 Посмотреть профиль Найти все сообщения от Mracobes9
 
Регистрация: 21.05.2017
Сообщений: 18

Я осуществляю первый запрос к скрипту для запуска загрузки и мне его нужно прервать до полного выполнения чтобы затем осуществлять запросы к другому скрипту и получить прогресс. Планировщик не причем просто пытаюсь понять почему в первом варианте не работао=ло
Ответить с цитированием
  #10 (permalink)  
Старый 21.05.2017, 21:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Mracobes9
Я осуществляю первый запрос к скрипту для запуска загрузки и мне его нужно прервать до полного выполнения чтобы затем осуществлять запросы к другому скрипту и получить прогресс.
Вы видимо не понимаете как вообще запустить процесс и как лучше отследить его завершение. У вас есть лог файл, вы хотите нечто из него хранить в базе. В таком случае разумнее не копить в нем по 200МБ, а обрабатывать его постоянно, например раз в сутки. При этом планировщик запускает отдельный процесс, который не имеет отношения к запросу клиента для считывая из БД состояние процесса. Даже если этот запрос совпадет с моментом записи, то максимум, что будет ожидать клиент, так это снятие блокировки SQL.

Какая версия БД используется?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прочитать параметры файла JPEG ещё в браузере, до загрузки на сервер? Webnode Общие вопросы Javascript 6 13.01.2014 20:44
Прогресс загрузки большого изображения или файла - как сделать Почемучкин Events/DOM/Window 7 19.10.2012 21:03
XMLHTTP индикация загрузки во время запроса RUVATA AJAX и COMET 6 30.06.2011 10:18
Поле загрузки файла. как опусташить? clgs Элементы интерфейса 1 26.06.2009 14:46
Поле загрузки файла kotofeich Элементы интерфейса 3 30.07.2008 11:24