Анализ больших файлов XML в Adobe Flex

Я работаю над приложением Adobe Flex, которое должно анализировать относительный большой XML-файл. Банкомат имеет размер всего 35 МБ, но в идеальном мире в будущем он станет намного больше. ** Обновлено: у меня нет контроля над файлом XML.

Я по сути сбрасываю его содержимое прямо в базу данных SQLITE, поэтому я мог бы использовать класс SimpleXML, чтобы превратить его в объект, а затем перебирать его, но я беспокоюсь, что это будет плохой подход, поскольку файл становится больше. Я параноик или есть способ лучше?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
10 873
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Лично я бы старался избегать файлов XML такого размера. Это один из недостатков XML: вам нужно прочитать файл целиком, прежде чем вы сможете его использовать.

Разве ваша база данных не может возвращать меньшие части XML с тем, что вам нужно, вместо всего сразу? Это может быть немного сложнее настроить, но в конечном итоге может оказаться гораздо более масштабируемым.

Вам нужен синтаксический анализатор SAX XML - он может анализировать поток, не читая его целиком. Однако я не могу найти его для AS3 (хотя есть и другие люди, которые ищут то же самое).

SAX работает, вызывая события, когда элементы пересекают входной поток. Довольно удобно - я часто использовал его в прошлом, и как только вы с ним познакомитесь, он будет полезен во многих случаях. Он работает даже с открытым сокетом, где поток никогда не закрывается.

Хорошая точка зрения. Но у меня даже возникают проблемы с обработкой больших XML-файлов в AIR! stackoverflow.com/questions/1159154/…

Dan Rosenstark 21.07.2009 17:42
Ответ принят как подходящий

Вы определенно столкнетесь с некоторыми проблемами производительности при синтаксическом анализе XML-файла такого размера. Еще в Flex 2 дня мы использовали SOAP для служб, и у нас был один вызов данных, который вернул около 5К записей, и Flash Player зависал / браузер не отвечал примерно на 10 секунд на достаточно быстрой машине. Я не могу вспомнить размер этого сообщения SOAP, но он не мог быть больше 1-2 МБ.

Если ваш бэкэнд сможет преобразовать XML в граф объектов и отправить его обратно через AMF, вы увидите гораздо лучшую производительность. Flash Player отлично справляется с большими наборами данных при условии, что они закодированы в AMF (сжатый двоичный формат).

Даже все же, я бы действительно подумал, хотите ли вы отправить один такой большой результат или разбить его на части. По крайней мере, таким образом у вас есть путь для лучшего масштабирования и вы можете дать пользователю лучшую обратную связь, то есть отобразить сообщение, такое как «Обработка элемента 6 из 35 ...»

Спасибо за это, я борюсь с той же проблемой, и ответ может заключаться в том, чтобы поговорить с рубиновым сервером или что-то в этом роде ... это начинает раздражать. stackoverflow.com/questions/1159154/…

Dan Rosenstark 21.07.2009 17:43

Та же проблема (да, я знаю, что Flash ужасающе устарел. Это не соответствует реалиям бизнеса). Мне также понадобится промежуточный синтаксический анализатор, чтобы уменьшить размер полезной нагрузки. Очень расстраивает то, что я не могу представить свой собственный парсер потока для оптимизации синтаксического анализа (например, упомянутый dkretz)

1owk3y 30.06.2017 10:33

Как уже говорили другие, синтаксический анализ больших объемов XML не рекомендуется и может быть довольно вялым. Было заявлено, что самый быстрый способ передачи данных между флэш-клиентом и сценарием на стороне сервера - это двоичный формат AMF (Action Message Format). Если вы когда-либо делали что-либо с классом SharedObject, значит, вы уже имели дело с AMF, поскольку это формат, в котором он записывает LSO на ваш жесткий диск. AMFPHP был лучшим решением для этого до недавнего времени, так как теперь он поддается фреймворку Zend, а точнее теперь это ZendAMF.

Есть отличное руководство здесь, написанное Ли Бримелоу, одним из разработчиков flash, которых я ищу для вдохновения и ясности, в котором показано, как использовать ZendAMF.

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

Как уже упоминалось, лучше всего подойдет синтаксический анализатор SAX, чтобы вы могли обрабатывать каждое «событие» (узел) по мере его чтения, а не использовать анализатор DOM для чтения всего XML-файла и сохранения его в памяти.

Но если вы собираетесь использовать такие большие наборы данных, возможно, вам стоит рассмотреть возможность экспорта данных SQLite в формат JSON, а не в XML?

Я не совсем уверен, как экспортировать SQLite напрямую в JSON (без написания собственного скрипта для этого), однако сообщение в списке рассылки sqlite-users предлагает попробовать следующий неподдерживаемый / недокументированный исходный код: http://www.ch-werner.de/sqliteodbc/sqlite3json.tgz

Учебник по использованию JSON в Flex можно найти на http://www.mikechambers.com/blog/2006/03/28/tutorial-using-json-with-flex-2-and-actionscript-3/

Я начал использовать JSON вместо XML, надеясь избежать этих проблем, и это то же самое ... Когда размер файла превышает 50 МБ, он не работает.

miguelSantirso 21.10.2010 15:29

В SQL всегда есть предложение WHERE, потому что никто не хочет видеть больше 100 результатов.

У вас может не быть контроля над исходным XML-файлом, но, возможно, вы можете вставить что-то на стороне сервера, которое выполняет синтаксический анализ и извлечение данных, которые вам действительно нужны.

Ваше здоровье

Что касается сравнения скорости между XML и JSON, на самом деле я провел сравнение трех видов скорости для тяжелых больших данных - XML, JSON и BlazeDS. Поверьте, BlazeDS будет быстрее всего. Это действительно быстрее.

Другие вопросы по теме