В моем текущем проекте (сборка системы управления заказами с нуля) мы обрабатываем заказы в форме объектов XML, которые сохраняются в реляционной базе данных.
Я бы изложил требования следующим образом:
- Выбор различных деталей в любом месте заказа
- Обновление / обогащение данных (например, из системы CRM)
- Ведение записи изменений (аннулирование старых данных, добавление новых значений)
- Детали заказов должны легко выбираться запросами SQL (для поддержки 2-го уровня)
Что мы сделали:
- Сериализация выполняется с использованием проприетарного кода, разбивая порядок на таблицы типа
customer
, address
, phone_number
, order_position
и т. Д.
- Всякий раз, когда заказ обрабатывается немного дальше (например, из-за входящего события), он полностью считывается из базы данных и собирается обратно в документ XML.
- Выбор данных осуществляется с помощью XPath (разбросано по коду).
- Большинство обновлений выполняется непосредственно в базе данных (после этого заказ будет перезагружен для следующего шага).
Проблемы, с которыми мы сталкиваемся:
- Структура заказа (XSD) развивается с каждым выпуском. Поэтому XPath и пользовательское постоянство часто ломаются и выдают ошибки.
- В итоге мы получили смесь работы с документом и базой данных (поскольку слой постоянства не может сохранить изменения в документе).
Производительность на самом деле не является проблемой (пока), поскольку это автономная система, и заказы часто намеренно задерживаются на несколько дней.
Я не ожидаю бесплатной консультации здесь, но я немного запутался в том, как можно улучшить подход (в следующий раз, в основном).
Что, по вашему мнению, является хорошим решением для удовлетворения этих требований?
Будет ли лучше работать с графом объектов, чем-то вроде JXPath, OGNL и OR mapper? Или используя поддержку XML, например, база данных Oracle?