Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсинг больших файлов 
V
    Опции темы
MoLeX
Дата 19.12.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Привет всем.

Руководство тут исполнило одну замечательную штучку в итоге у меня появилось дополнительного геморроя в обработке больших по объему файлов (от 200мб и ...), как не странно это sql дамп баз. обновление происходит примерно раз в 1-2 дня. Сейчас у меня скрипт на сервер стаскивает этот файл раз в 24 часа и пытается с помощью mysqli выполнить. но разумеется он обламывается (памяти не хватает, а эти настройки мне не доступны).

В итоге пришло тока одно решение - парсить один большой файл в вспомогательную папку temp на не сколько маленьких (приблизительно по 5 мб - самый оптимальный вариант). Но тут возник вопрос: а как собственно распарсить это без особых напрягов на сервер? 
Слал запросы на гуглояндекс в итоге нечего вразумительного не нашел.

Может кто нибудь из участников сталкивался с этим, и возможно нашел для себя решением - поделитесь  smile 
 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
DenisSh
Дата 19.12.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 16.9.2008
Где: Taganrog

Репутация: 1
Всего: 2



Цитата(MoLeX @ 19.12.2008,  16:58)
 Сейчас у меня скрипт на сервер стаскивает этот файл раз в 24 часа и пытается с помощью mysqli выполнить. но разумеется он обламывается (памяти не хватает, а эти настройки мне не доступны).

если обламывается только на инсертах в локалку я в таких случаях делаю следующее

1. делаю коннект к базе $conn
1. инсерты в базу выполняю транзакциями например по 100
2. после инсерта закрываю коннекшн $conn = null и создаю новый



PM MAIL ICQ   Вверх
MoLeX
Дата 19.12.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



DenisSh, у хостера стоит ограничение на память.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
DenisSh
Дата 19.12.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 16.9.2008
Где: Taganrog

Репутация: 1
Всего: 2



Цитата(MoLeX @ 19.12.2008,  17:16)
DenisSh, у хостера стоит ограничение на память.

на какую именно память стоит ограничение?
PM MAIL ICQ   Вверх
theworldcreator
Дата 19.12.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: 10
Всего: 13



Код

explode (';', $sql, 1000);

PM MAIL WWW ICQ   Вверх
bars80080
Дата 19.12.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



theworldcreator, а если \; попадётся?

это снизит нагрузку на сервер?
PM MAIL WWW   Вверх
theworldcreator
Дата 19.12.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: 10
Всего: 13



Хм, логично)
Ну можно в принципе немного извратится, заменив вначале все символы между ' ' и " " на что нибудь левое(лишь бы количество символов осталось тем же), потом заменив все \; на два символа(неважно каких). Ну а потом произвести поиск позиций символа ';' в получившемся тексте и воспользоваться этими позициями для парсинга исходного.

Это сообщение отредактировал(а) theworldcreator - 19.12.2008, 19:04
PM MAIL WWW ICQ   Вверх
ksnk
Дата 19.12.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



theworldcreator, Угу... сложные текстовые операции над 200+мб текстом на PHP? Это сказки, однако...

Добавлено через 4 минуты и 32 секунды
MoLeX, imho, dumper примерно такую задачу решает, и, вроде, успешно... Во всяком случае можно посмотреть как он читает поблочно (и из архива!!!) 

В каком месте памяти-то не хватает?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
theworldcreator
Дата 19.12.2008, 19:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: 10
Всего: 13



А присущи ли дампу характерные особенности? Например MySQL Administrator перед каждой операцией создания таблиц пишет
Код

--
-- Definition of table `database`.`table`
--

а перед наполнением таблиц
Код

--
-- Dumping data for table `database`.`table`
--


Если такие особенности есть, берем первые N метров файла, ищем там последнюю специфическую строку и обрезаем все что после нее. Если ничего не остается(только комментарии) берем больший кусок дампа.

ИМХО будет оптимально

Это сообщение отредактировал(а) theworldcreator - 19.12.2008, 19:24
PM MAIL WWW ICQ   Вверх
solenko
Дата 19.12.2008, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



MoLeX, чево-то я не понял... 
1. Дамп проходит предварительную обработку или просто вставка?
2. За счет чего сприт отваливается по памяти? Если чиатть и выполнять блоками то расход памяти будет минимальным.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
MoLeX
Дата 20.12.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(DenisSh @  19.12.2008,  17:23 Найти цитируемый пост)
на какую именно память стоит ограничение? 

выполнение sql запроса больше 10 мб выдает ошибку, меньшее по объему - все нормально.


ksnk, спасибо за ссылку, дома на локалхосте он себя хорошо зарекомендовал. жду следующей рабочей недели и потом отпишуься как все прошло


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
solenko
Дата 20.12.2008, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(MoLeX @  20.12.2008,  07:40 Найти цитируемый пост)
выполнение sql запроса больше 10 мб выдает ошибку, меньшее по объему - все нормально.

Это настройки mysql сервера -- max_allowed_packet. Точно не помню , но помоему есть еще несколько переменных, которые влияют. можно попробовать изменять это значение через set variable.

А 10Mb это запрос, который уже лежит в файле, или вы его формируете?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
DenisSh
Дата 20.12.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 16.9.2008
Где: Taganrog

Репутация: 1
Всего: 2



Цитата(MoLeX @ 20.12.2008,  08:40)
выполнение sql запроса больше 10 мб выдает ошибку, меньшее по объему - все нормально.

ну так а я что писал! открываем коннекшн ,запускаем транзакцию не превыщающую 10 мб, закрываем коннекшн, открываем новый коннекшн в цикле, запускаем следующую, и у вас не будет превышать 10 метров лимит! вопрос разделения файла на строки для транзакций можно решить как предлагали выше через explode.

Добавлено через 1 минуту и 4 секунды
Цитата(solenko @ 20.12.2008,  09:49)
Цитата(MoLeX @  20.12.2008,  07:40 Найти цитируемый пост)
выполнение sql запроса больше 10 мб выдает ошибку, меньшее по объему - все нормально.

Это настройки mysql сервера -- max_allowed_packet. 

человек написал в первом посте что доступа к изменению настроек сервера у него нет:(
PM MAIL ICQ   Вверх
MoLeX
Дата 21.12.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(solenko @  20.12.2008,  09:49 Найти цитируемый пост)
А 10Mb это запрос, который уже лежит в файле,

да

Добавлено через 29 секунд
Народ пока вопрос решен, точно скажу в понедельник.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
solenko
Дата 21.12.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(DenisSh @  20.12.2008,  18:46 Найти цитируемый пост)
человек написал в первом посте что доступа к изменению настроек сервера у него нет:(

А к выполнению запросов? SET Syntax


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.