Как обновить большой файл XML - PullRequest
6 голосов
/ 15 сентября 2008

Вместо того, чтобы переписывать все содержимое XML-файла при обновлении отдельного элемента, есть ли лучшая альтернатива обновлению файла?

Ответы [ 5 ]

6 голосов
/ 15 сентября 2008

Я бы рекомендовал использовать VTD-XML http://vtd -xml.sourceforge.net /

Из их часто задаваемых вопросов (http://vtd -xml.sourceforge.net / faq.html ):

Почему я должен использовать VTD-XML для больших файлов XML?

По многочисленным причинам, приведенным ниже:

  • Производительность: производительность VTD-XML намного лучше, чем SAX
  • Простота в использовании: произвольный доступ в сочетании с XPath упрощает написание приложения
  • Лучшая поддержка: код приложения короче и проще для понимания.
  • Инкрементное обновление: иногда небольшие изменения становятся очень эффективными.
  • Индексирование: предварительно проанализированная форма XML еще больше повысит производительность обработки.
  • Другие функции: вырезать, вставлять, разбивать и собирать документы XML возможно только с VTD-XML.

Чтобы воспользоваться преимуществами VTD-XML, мы рекомендовали разработчикам разделить свои сверхбольшие XML-документы на меньшие, более управляемые фрагменты (<2 ГБ). </p>

4 голосов
/ 15 сентября 2008

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

Если, однако, вы просто чувствуете , что это может быть проблемой, запомните правила оптимизации:

  1. Не делай этого
  2. (только для экспертов) Пока не делайте этого.
0 голосов
/ 22 сентября 2008

Обработка больших файлов XML с помощью XQuery Работает с файлами XML размера Gigabyte http://www.xquery.com

XQuery - это язык запросов, который был разработан как собственный язык запросов XML. Поскольку большинство типов данных могут быть представлены в виде XML, XQuery также может использоваться для запроса других типов данных. Например, XQuery можно использовать для запроса реляционных данных с использованием представления XML реляционной базы данных. Это важно, потому что многим интернет-приложениям необходимо интегрировать информацию из нескольких источников, включая данные, найденные в веб-сообщениях, реляционные данные и различные источники XML. XQuery был специально разработан для такого рода интеграции данных.

Например, предположим, что ваша компания является финансовым учреждением, которому необходимо составлять отчеты о запасах для каждого клиента. Клиент запрашивает отчет с сообщением простого протокола доступа к объектам (SOAP), которое представлено в XML. На большинстве предприятий данные о запасах хранятся в нескольких реляционных базах данных, таких как Oracle, Microsoft SQL Server или DB2. XQuery может запрашивать как сообщение SOAP, так и реляционные базы данных, создавая отчет в формате XML.

XQuery основан на структуре XML и использует эту структуру, чтобы сделать возможным выполнение запросов к любому типу данных, которые могут быть представлены в виде XML, включая реляционные данные. Кроме того, XQuery API для Java (XQJ) позволяет выполнять ваши запросы в любой среде, поддерживающей платформу J2EE.

0 голосов
/ 15 сентября 2008

Если возможно, сериализуйте XML и используйте diff / patch / apply инструменты Linux (или эквивалентные инструменты на вашей платформе). Таким образом, вам не нужно разбирать, писать.

0 голосов
/ 15 сентября 2008

У вас есть несколько вариантов, но ни один из них не подходит.

Поскольку объекты XML не разбиты на отдельные части, вам придется либо использовать некоторую модификацию на уровне файловой системы с сопоставлением с регулярным выражением (sed - хорошее начало), ИЛИ вам следует разбить xml на более мелкие части для удобства управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...