Мне необходимо настроить веб-приложение, которое будет взаимодействовать с существующей системой ERP (WinMagi). ERP — это интерфейс к базе данных xBase (FoxPro). База данных находится на собственном сервере. ERP, насколько мне известно, не имеет API, но может принимать заказы на покупку и т. д. через модуль EDI. Веб-приложение должно иметь возможность принимать онлайн-заказы и запрашивать данные для отчетности.
Мой план на данный момент:
- Synchronize the xBase DB to a SQL server instance on a cloud hosted VM.
- (one-way from ERP -> SQL Server)
- Используйте этот процесс синхронизации в качестве интерфейса между ERP и веб-приложением.
- Push purchase orders back to the ERP using EDI.
- My thinking here is that it would be safer from a data concurrency perspective to create or update data in the ERP through a controlled and accepted (by the ERP) interface.
Вопросы/проблемы:
- Каков наилучший способ обновить базу данных SQL из базы данных xBase? Существуют ли какие-либо уже существующие библиотеки, которые могут это сделать, чтобы мне не пришлось изобретать велосипед?
- Будет ли xBase DB заблокирована во время синхронизации? Или иным образом вызвать проблемы с работающей ERP?
- Как избежать проблем с параллелизмом/целостностью данных во время синхронизации?
- Эта система не будет передавать оперативные данные в веб-приложение. Какие проблемы я могу ожидать из-за этого?
- Должен ли я предпочесть один язык другому для такого рода проектов? Мой план состоял в том, чтобы использовать Java/Hibernate MVC.
Я, возможно, иду об этом неправильно? Было бы лучше, если бы мое веб-приложение напрямую взаимодействовало с базой данных xBase DB? Некоторые проблемы, которые сразу приходят на ум при таком подходе, — это проблемы с сетью между офисом и облачной виртуальной машиной, а также потенциальные уязвимости безопасности из-за открытия ERP непосредственно в Интернете.
Любые советы или предложения, которые вы могли бы предоставить, будут очень признательны! Заранее спасибо.
ОБНОВЛЕНИЕ – 3 сентября 2012 г.
Как я сейчас делаю копирование данных (это не синхронизация) - работает каждую ночь:
- Linux-система в офисе копирует необходимые файлы DBF из доступного только для чтения общего ресурса на сервере ERP в локальное хранилище.
- DBF конвертируются в CSV с помощью фантастического perl-скрипта dbf2csv Дейва Бертона.
- Полученные CSV rsync синхронизируются с удаленной виртуальной машиной. В данных есть только небольшие изменения, так что это довольно быстро.
- После завершения rsync удаленная виртуальная машина выполняет mysqlimport в рабочую БД.
Преимущества этого подхода
- ERP никоим образом не может быть повреждена, поскольку доступ к сети осуществляется только для чтения.
- Для синхронизации данных не требуется реализовывать пользовательскую логику, поэтому нет опасений, что данные могут быть неправильными на удаленной виртуальной машине.
- As the data copy runs at night the run time isn't too important.
- Current run time is approx 7 minutes for over 1 million records with approx 20-30 fields per record.
- Самые длинные этапы — это копирование DBF и преобразование в CSV.
Недостатки
- DBF каждый раз необходимо копировать полностью.
- DBF должны быть полностью преобразованы каждый раз.
- Копируемые таблицы блокируются во время mysqlimport. На самом деле это не слишком большая проблема, так как импорт выполняется ночью, а mysqlimport занимает всего около 20 секунд.