Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Работа с XML файлами. Хранение, обработка...
Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010
Помог: 0 раз(а)
Всем привет.
Возникла задача реализовать обработку XML файлов.
Необходимо перед заливкой данных в БД из файла, получить содержимое в качестве массива для возможности вывода на страницу, чтобы можно было что-то изменить, а потом уже заливать в БД.
При этом файлы могут быть очень большие! Скажем там товары и товаров этих 100к.
Как быть?
К примеру я обработал файл и получил массив. Вывел содержимое на страницу... как хранить эти данные? допустим я изменил в одном элементе число. Куда мне сохранять это временно? Писать в БД? Или сразу загонять все во временную таблицу БД, а потом от туда, уже после обработки, заливать в рабочие таблицы?
Dastor
Отправлено: 26 Ноября, 2014 - 23:11:00
Гость
Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014
Помог: 3 раз(а)
БД MySql?
Загружай во временную таблицу с помощью load xml infile.
Содержимое временной таблицы выводи на страницу. Сделай возможность редактирования данных во временной таблице (также для удобства можно добавить паджинацию, фильтрацию и сортировку). Можно воспользоваться какой-нибудь готовой библиотекой, позволяющй работать с гридами.
А потом уже можно заливать в рабочую таблицу.
dropoff
Отправлено: 27 Ноября, 2014 - 08:12:52
Посетитель
Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010
Помог: 0 раз(а)
С этим да, так и сделаю. (бд да, mysql)
Встал вопрос разбора xml файла. Чем лучше и как?
Смотрел XMLReader и пробовал с ним работать... Все вроде хорошо, но как-то запутанно все)
Может есть какие-то классы-хелперы или аналоги, чтобы можно было с большими объемами работать? (Добавление)
разобрался с XMLReader вроде.
возник вопрос добавления всего из файла в БД.
как это лучше реализовать? Ну разобрал я файл в котором 50к товара.
Как мне пихнуть это в тестовые таблицы в базе? Нужно то быстро это все делать, а не ждать обработки.
DeepVarvar
Отправлено: 27 Ноября, 2014 - 10:21:52
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Помоему вообще достаточно будет simplexml_load_file - там есть флаги оптимизации LIBXML_PARSEHUGE и LIBXML_COMPACT. А вставлять в БД пачками по 100 штук в одном инсерте.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Он хочет перед вставкой в БД вывести на страницу, как я понял с возможностью вообще отказаться от добавления в БД, просмотреть корректность данных и все такое.
Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010
Помог: 0 раз(а)
Dastor пишет:
Пробуйте загрузить с помощью load xml infile.
это получается, что мне пересохранять придется данные. т.е. получить из файла и сохранить с нужной структурой опять в файл, а только потом загонять в БД. Имхо, как-то не правильно это.
DeepVarvar пишет:
Помоему вообще достаточно будет simplexml_load_file
Это же SimpleXML? Я читал, что лучше XMLReader, так как SimpleXML грузит все в память.
DeepVarvar пишет:
А вставлять в БД пачками по 100 штук в одном инсерте.
Т.е. получить массив из 50к, забить на части и обрабатывать?
А если одновременно идет работа с несколькими прайсами разных объемов, не засрется память то?
Может есть резон каждый прайс обрабатывать через крон? (Добавление)
DeepVarvar пишет:
Он хочет перед вставкой в БД вывести на страницу, как я понял с возможностью вообще отказаться от добавления в БД, просмотреть корректность данных и все такое
Не просто посмотреть данные, но еще и поправить. при этом нужна будет сортировка и постраничка. Измененные данные нужно где-то так или иначе хранить.
Dastor
Отправлено: 27 Ноября, 2014 - 11:09:09
Гость
Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014
Помог: 3 раз(а)
Цитата:
получить из файла и сохранить с нужной структурой опять в файл
Так конечно делать не надо)
У Вас уже какая-то определенная структура прайса, которую изменить нельзя?
Покажите, пример прайса, пожалуйста.
dropoff
Отправлено: 27 Ноября, 2014 - 11:11:44
Посетитель
Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010
Помог: 0 раз(а)
Dastor пишет:
Покажите, пример прайса, пожалуйста.
по типу как у Я.Маркет.
Panoptik
Отправлено: 27 Ноября, 2014 - 11:13:17
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
во первых ни один человек не сможет нормально проанализировать данные о 50к объектах, так что вывод для визауально или еще какой проверки считаю безполезным
во вторых помимо simpleXML есть еще sax. работа с ним конечно не так очевидна, но на больших объемах он себя должен показать хорошо
третье. зачем гонять целый массив данных туда-сюда и сохранять все. а потом снова пересохранять. в бд предусмотрен апдейт по первичному ключу или какому другому условию. поэтому если вы хотите что-то изменить, то изменяйте только конкретные записи, а не пихайте весь массив данных целиком.
имхо вариант с временной таблицей будет удобнее всего, так как обязанности за хранение и обработку данных лягут на внешнюю программу СУБД, а ваш скрипт будет заниматься только своим делом, а именно писать управляющую логику
----- Just do it
dropoff
Отправлено: 27 Ноября, 2014 - 11:19:36
Посетитель
Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010
Помог: 0 раз(а)
Panoptik пишет:
имхо вариант с временной таблицей будет удобнее всего
вот сейчас так и делаю.
но возник вопрос добавления всего из прайса в БД удобным способом, чтобы и нагрузки большой не было и ждать долго не приходилось.
Получается так, что сначала все загоняем во временные таблицы, потом выводим на обработку уже что нужно из БД. имхо, идеальный вариант.
Dastor
Отправлено: 27 Ноября, 2014 - 11:25:28
Гость
Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014
Помог: 3 раз(а)
Panoptik пишет:
третье. зачем гонять целый массив данных туда-сюда и сохранять все. а потом снова пересохранять. в бд предусмотрен апдейт по первичному ключу или какому другому условию. поэтому если вы хотите что-то изменить, то изменяйте только конкретные записи, а не пихайте весь массив данных целиком.
Никто и не говорил гонять данные туда-сюда. Речь шла о том, что загрузить данные во временную таблицу. Потом с этой таблицей работать из gui.
Вопрос сейчас как быстро загрузить данные из xml в бд.
Panoptik
Отправлено: 27 Ноября, 2014 - 11:33:30
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010
Помог: 0 раз(а)
я не очень понял один момент.
структура xml файла тогда должна соответствовать таблице в БД?
а если там других данных полно?
там и категории и продукты и валюты и данные сайта.
получается, придется создавать из основного другие xml файлы и их загонять?
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
dropoff пишет:
а если там других данных полно?
Вот поэтому я и сказал что симплеХМЛ должно хватить. В любом случае провалидировать придется весь файл, может он брокнутый. А вот после первичной проверки его можно сохранить в нескольких временных файлах где в каждом файле будет штук по 100 узлов ( http://php.net/manual/ru/simplex...lement.asxml.php ). Тогда пусть это проверяют уже глазами по блокам в удобное время, правят нужные данные, и вот этот кусок после исправлений в нужном формате с нужными именами полей уже вставлять в БД.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.