За те годы, что я был на работе, я заметил четкую тенденцию к чему-то, что я считаю анти-паттерном: сохранение внутренних данных как больших строк XML. Я видел, как это делалось разными способами, хотя два худших преступника были очень похожи.
Веб-сервис
Первое приложение, веб-служба, предоставляет доступ к потенциально большому объему данных в базе данных SQL. При запуске он более или менее извлекает все эти данные из базы данных и сохраняет их в памяти в виде XML. (Три раза.) Владельцы этого приложения называют его кешем. Я называю это медленным, потому что каждая проблема с перфорированием, с которой столкнулись при работе с этим, была непосредственно прослежена до этой вещи. (Это корпоративная среда, поэтому не удивительно, что клиент виноват в сбое perf, а не в сервисе.) Это приложение использует XML DOM.
Импортер
Второе приложение считывает файл XML, созданный в результате экспорта из сторонней базы данных. Цель состоит в том, чтобы импортировать эти данные в проприетарную систему (принадлежит нам). Приложение, которое делает это, считывает весь XML-файл и поддерживает по крайней мере две, иногда до четырех, копии XML-файла во всей последовательности импорта. Обратите внимание, что данные могут быть обработаны, преобразованы, и конфигурация может произойти до того, как произойдет импорт, поэтому импортер владеет этими данными в формате XML на протяжении всего срока их службы. Неудивительно, что этот импортер затем взрывается, когда предоставляется XML-файл умеренного размера. Это приложение использует XML DOM только для одной из своих копий, а все остальные являются необработанными XML-строками.
Мое понимание здравого смысла предполагает, что XML является не хорошим форматом для хранения данных в памяти, а скорее данные должны быть переведены в XML, когда они выводятся / передаются и переводятся во внутренние структуры данных, когда читается и импортируется. Дело в том, что я постоянно сталкиваюсь с производственным кодом, который полностью игнорирует проблемы масштабируемости, и на это уходит тонна дополнительных усилий. (Огромный объем анализа строк в этих приложениях пугающий.)
Является ли это обычной неудачей применения правильного инструмента для работы, с которой другие люди сталкиваются? Или это просто невезение с моей стороны? Или я упускаю некоторые ослепительно очевидные и хорошие ситуации, когда правильно и нормально хранить большие объемы данных в памяти в виде XML?