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