![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Привет всем.
Руководство тут исполнило одну замечательную штучку в итоге у меня появилось дополнительного геморроя в обработке больших по объему файлов (от 200мб и ...), как не странно это sql дамп баз. обновление происходит примерно раз в 1-2 дня. Сейчас у меня скрипт на сервер стаскивает этот файл раз в 24 часа и пытается с помощью mysqli выполнить. но разумеется он обламывается (памяти не хватает, а эти настройки мне не доступны). В итоге пришло тока одно решение - парсить один большой файл в вспомогательную папку temp на не сколько маленьких (приблизительно по 5 мб - самый оптимальный вариант). Но тут возник вопрос: а как собственно распарсить это без особых напрягов на сервер? Слал запросы на гуглояндекс в итоге нечего вразумительного не нашел. Может кто нибудь из участников сталкивался с этим, и возможно нашел для себя решением - поделитесь -------------------- Amazing |
|||
|
||||
| DenisSh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 16.9.2008 Где: Taganrog Репутация: 1 Всего: 2 |
если обламывается только на инсертах в локалку я в таких случаях делаю следующее 1. делаю коннект к базе $conn 1. инсерты в базу выполняю транзакциями например по 100 2. после инсерта закрываю коннекшн $conn = null и создаю новый |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
DenisSh, у хостера стоит ограничение на память.
-------------------- Amazing |
|||
|
||||
| DenisSh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 16.9.2008 Где: Taganrog Репутация: 1 Всего: 2 |
на какую именно память стоит ограничение? |
|||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
|
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
theworldcreator, а если \; попадётся?
это снизит нагрузку на сервер? |
|||
|
||||
| theworldcreator |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
Хм, логично)
Ну можно в принципе немного извратится, заменив вначале все символы между ' ' и " " на что нибудь левое(лишь бы количество символов осталось тем же), потом заменив все \; на два символа(неважно каких). Ну а потом произвести поиск позиций символа ';' в получившемся тексте и воспользоваться этими позициями для парсинга исходного. Это сообщение отредактировал(а) theworldcreator - 19.12.2008, 19:04 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
theworldcreator, Угу... сложные текстовые операции над 200+мб текстом на PHP? Это сказки, однако...
Добавлено через 4 минуты и 32 секунды MoLeX, imho, dumper примерно такую задачу решает, и, вроде, успешно... Во всяком случае можно посмотреть как он читает поблочно (и из архива!!!) В каком месте памяти-то не хватает? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| theworldcreator |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
А присущи ли дампу характерные особенности? Например MySQL Administrator перед каждой операцией создания таблиц пишет
а перед наполнением таблиц
Если такие особенности есть, берем первые N метров файла, ищем там последнюю специфическую строку и обрезаем все что после нее. Если ничего не остается(только комментарии) берем больший кусок дампа. ИМХО будет оптимально Это сообщение отредактировал(а) theworldcreator - 19.12.2008, 19:24 |
||||
|
|||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
MoLeX, чево-то я не понял...
1. Дамп проходит предварительную обработку или просто вставка? 2. За счет чего сприт отваливается по памяти? Если чиатть и выполнять блоками то расход памяти будет минимальным. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
выполнение sql запроса больше 10 мб выдает ошибку, меньшее по объему - все нормально. ksnk, спасибо за ссылку, дома на локалхосте он себя хорошо зарекомендовал. жду следующей рабочей недели и потом отпишуься как все прошло -------------------- Amazing |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Это настройки mysql сервера -- max_allowed_packet. Точно не помню , но помоему есть еще несколько переменных, которые влияют. можно попробовать изменять это значение через set variable. А 10Mb это запрос, который уже лежит в файле, или вы его формируете? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| DenisSh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 16.9.2008 Где: Taganrog Репутация: 1 Всего: 2 |
ну так а я что писал! открываем коннекшн ,запускаем транзакцию не превыщающую 10 мб, закрываем коннекшн, открываем новый коннекшн в цикле, запускаем следующую, и у вас не будет превышать 10 метров лимит! вопрос разделения файла на строки для транзакций можно решить как предлагали выше через explode. Добавлено через 1 минуту и 4 секунды человек написал в первом посте что доступа к изменению настроек сервера у него нет:( |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
да Добавлено через 29 секунд Народ пока вопрос решен, точно скажу в понедельник. -------------------- Amazing |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
А к выполнению запросов? SET Syntax -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |