Всем привет.
Возникла задача реализовать обработку XML файлов.
Необходимо перед заливкой данных в БД из файла, получить содержимое в качестве массива для возможности вывода на страницу, чтобы можно было что-то изменить, а потом уже заливать в БД.
При этом файлы могут быть очень большие! Скажем там товары и товаров этих 100к.
Как быть?
К примеру я обработал файл и получил массив. Вывел содержимое на страницу... как хранить эти данные? допустим я изменил в одном элементе число. Куда мне сохранять это временно? Писать в БД? Или сразу загонять все во временную таблицу БД, а потом от туда, уже после обработки, заливать в рабочие таблицы?
1. dropoff - 26 Ноября, 2014 - 21:01:47 - перейти к сообщению
2. Dastor - 26 Ноября, 2014 - 23:11:00 - перейти к сообщению
БД MySql?
Загружай во временную таблицу с помощью load xml infile.
Содержимое временной таблицы выводи на страницу. Сделай возможность редактирования данных во временной таблице (также для удобства можно добавить паджинацию, фильтрацию и сортировку). Можно воспользоваться какой-нибудь готовой библиотекой, позволяющй работать с гридами.
А потом уже можно заливать в рабочую таблицу.
Загружай во временную таблицу с помощью load xml infile.
Содержимое временной таблицы выводи на страницу. Сделай возможность редактирования данных во временной таблице (также для удобства можно добавить паджинацию, фильтрацию и сортировку). Можно воспользоваться какой-нибудь готовой библиотекой, позволяющй работать с гридами.
А потом уже можно заливать в рабочую таблицу.
3. dropoff - 27 Ноября, 2014 - 08:12:52 - перейти к сообщению
С этим да, так и сделаю. (бд да, mysql)
Встал вопрос разбора xml файла. Чем лучше и как?
Смотрел XMLReader и пробовал с ним работать... Все вроде хорошо, но как-то запутанно все)
Может есть какие-то классы-хелперы или аналоги, чтобы можно было с большими объемами работать?
(Добавление)
разобрался с XMLReader вроде.
возник вопрос добавления всего из файла в БД.
как это лучше реализовать? Ну разобрал я файл в котором 50к товара.
Как мне пихнуть это в тестовые таблицы в базе? Нужно то быстро это все делать, а не ждать обработки.
Встал вопрос разбора xml файла. Чем лучше и как?
Смотрел XMLReader и пробовал с ним работать... Все вроде хорошо, но как-то запутанно все)
Может есть какие-то классы-хелперы или аналоги, чтобы можно было с большими объемами работать?
(Добавление)
разобрался с XMLReader вроде.
возник вопрос добавления всего из файла в БД.
как это лучше реализовать? Ну разобрал я файл в котором 50к товара.
Как мне пихнуть это в тестовые таблицы в базе? Нужно то быстро это все делать, а не ждать обработки.
4. DeepVarvar - 27 Ноября, 2014 - 10:21:52 - перейти к сообщению
Помоему вообще достаточно будет simplexml_load_file - там есть флаги оптимизации LIBXML_PARSEHUGE и LIBXML_COMPACT. А вставлять в БД пачками по 100 штук в одном инсерте.
5. Dastor - 27 Ноября, 2014 - 10:28:30 - перейти к сообщению
dropoff пишет:
возник вопрос добавления всего из файла в БД.
как это лучше реализовать?
как это лучше реализовать?
Пробуйте загрузить с помощью load xml infile.
http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]en/load-xml[dot]html
6. DeepVarvar - 27 Ноября, 2014 - 10:51:55 - перейти к сообщению
Он хочет перед вставкой в БД вывести на страницу, как я понял с возможностью вообще отказаться от добавления в БД, просмотреть корректность данных и все такое.
7. dropoff - 27 Ноября, 2014 - 10:56:58 - перейти к сообщению
Dastor пишет:
Пробуйте загрузить с помощью load xml infile.
это получается, что мне пересохранять придется данные. т.е. получить из файла и сохранить с нужной структурой опять в файл, а только потом загонять в БД. Имхо, как-то не правильно это.
DeepVarvar пишет:
Помоему вообще достаточно будет simplexml_load_file
Это же SimpleXML? Я читал, что лучше XMLReader, так как SimpleXML грузит все в память.
DeepVarvar пишет:
А вставлять в БД пачками по 100 штук в одном инсерте.
Т.е. получить массив из 50к, забить на части и обрабатывать?
А если одновременно идет работа с несколькими прайсами разных объемов, не засрется память то?
Может есть резон каждый прайс обрабатывать через крон?
(Добавление)
DeepVarvar пишет:
Он хочет перед вставкой в БД вывести на страницу, как я понял с возможностью вообще отказаться от добавления в БД, просмотреть корректность данных и все такое
Не просто посмотреть данные, но еще и поправить. при этом нужна будет сортировка и постраничка. Измененные данные нужно где-то так или иначе хранить.
8. Dastor - 27 Ноября, 2014 - 11:09:09 - перейти к сообщению
Цитата:
получить из файла и сохранить с нужной структурой опять в файл
Так конечно делать не надо)
У Вас уже какая-то определенная структура прайса, которую изменить нельзя?
Покажите, пример прайса, пожалуйста.
9. dropoff - 27 Ноября, 2014 - 11:11:44 - перейти к сообщению
Dastor пишет:
Покажите, пример прайса, пожалуйста.
по типу как у Я.Маркет.
10. Panoptik - 27 Ноября, 2014 - 11:13:17 - перейти к сообщению
во первых ни один человек не сможет нормально проанализировать данные о 50к объектах, так что вывод для визауально или еще какой проверки считаю безполезным
во вторых помимо simpleXML есть еще sax. работа с ним конечно не так очевидна, но на больших объемах он себя должен показать хорошо
третье. зачем гонять целый массив данных туда-сюда и сохранять все. а потом снова пересохранять. в бд предусмотрен апдейт по первичному ключу или какому другому условию. поэтому если вы хотите что-то изменить, то изменяйте только конкретные записи, а не пихайте весь массив данных целиком.
имхо вариант с временной таблицей будет удобнее всего, так как обязанности за хранение и обработку данных лягут на внешнюю программу СУБД, а ваш скрипт будет заниматься только своим делом, а именно писать управляющую логику
во вторых помимо simpleXML есть еще sax. работа с ним конечно не так очевидна, но на больших объемах он себя должен показать хорошо
третье. зачем гонять целый массив данных туда-сюда и сохранять все. а потом снова пересохранять. в бд предусмотрен апдейт по первичному ключу или какому другому условию. поэтому если вы хотите что-то изменить, то изменяйте только конкретные записи, а не пихайте весь массив данных целиком.
имхо вариант с временной таблицей будет удобнее всего, так как обязанности за хранение и обработку данных лягут на внешнюю программу СУБД, а ваш скрипт будет заниматься только своим делом, а именно писать управляющую логику
11. dropoff - 27 Ноября, 2014 - 11:19:36 - перейти к сообщению
Panoptik пишет:
имхо вариант с временной таблицей будет удобнее всего
вот сейчас так и делаю.
но возник вопрос добавления всего из прайса в БД удобным способом, чтобы и нагрузки большой не было и ждать долго не приходилось.
Получается так, что сначала все загоняем во временные таблицы, потом выводим на обработку уже что нужно из БД. имхо, идеальный вариант.
12. Dastor - 27 Ноября, 2014 - 11:25:28 - перейти к сообщению
Panoptik пишет:
третье. зачем гонять целый массив данных туда-сюда и сохранять все. а потом снова пересохранять. в бд предусмотрен апдейт по первичному ключу или какому другому условию. поэтому если вы хотите что-то изменить, то изменяйте только конкретные записи, а не пихайте весь массив данных целиком.
Никто и не говорил гонять данные туда-сюда. Речь шла о том, что загрузить данные во временную таблицу. Потом с этой таблицей работать из gui.
Вопрос сейчас как быстро загрузить данные из xml в бд.
13. Panoptik - 27 Ноября, 2014 - 11:33:30 - перейти к сообщению
http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]en/load-xml[dot]html