[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разбор excel-файла и запись результата в БД
Zzepish
Фишка в чем: заходит человек на сайт. У него EXCEL-файл на 50к+ строк. Его парсинг на PHP идет очень долго. Было принято решение - не блокировать пользователя, а дать ему возможность продолжить серфить по сайту на данной странице, как только файл будет загружен на сервер. В идеале - сообщать ему о статусе обработки файла (в процентах).
Что посоветуете? Nodejs? Мб кто-то таким уже на php занимался?
AllesKlar
Если Excel только данные, без сложной логики и ветвлений в таблицах, то экспорт из под php в csv и заливаешь в базу файлом. В десятки раз быстрее будет.

_____________
[продано копирайтерам]
Zzepish
AllesKlar
Там есть логика. Идёт обновление данных в бд (или внесение новых)
sergeiss
Zzepish, я бы такой алгоритм предложил (не претендуя на абсолютную истину smile.gif)
1. Как только файл загружен на сервер, то там получаем какой-то идентификатор процесса, который пишем на клиенте в localStorage.
2. Сервер спокойно обрабатывает данные столько времени, сколько ему требуется. По ходу дела пишет куда-нибудь данные о прогрессе (может быть в БД).
3. Получив идентификатор, не просто пишем его в локалСторедж, но и открываем WebSocket. На серверной стороне идет периодическая проверка состояния загрузки. Данные отправляются клиенту и отображаются юзеру в каком-то удобном виде.
4. Если во время загрузки юзер открыл другую страницу, то там считывается локалСторедж, получаем инфу о том, что была начата загрузка и возвращаемся к п.3. Если юзер открыл еще страницу, то повторяем п.4.
5. По окончании загрузки инфа об этом показывается юзеру, данные в локалСторедже удаляются, веб-сокет закрывается.
6. Если юзер просто закрыл все страницы, то при следующем входе он сразу увидит, что загрузка была завершена. Без открытия веб-сокета можно будет обойтись.
7. Ну и надо предусмотреть, как будут обрабатываться (показываться) данные при нескольких открытых одновременно страницах. В том числе, надо четко ловить изменения в локалСторедже на тех страницах, что были открыты до начала загрузки. Но это всё не так и сложно.

Что использовать на сервере? Да и ПХП можно, наверное smile.gif При открытии сокета запускаем демона, который "умирает" при закрытии сокета.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Zzepish
sergeiss
В принципе: я так и думал smile.gif просто надеялся, что есть более простой вариант smile.gif спасибо
Zzepish
Лол! нода парсит все НАМНОГО быстрее, чем пых!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.