Синхронизировать Беркли DB с Mysql
У меня есть устаревшая система, которая была портирована на современную систему и использует базу данных Беркли. Составлено с открытым коболом.
В предыдущей системе сериализованные файлы CISAM с фиксированными данными один раз в день конвертировались в базу данных Microsoft с помощью макросов ACCESS, чтобы их можно было использовать из простого веб-интерфейса.(В одну сторону) Я хочу создать новый веб-интерфейс и хочу данные будут обновляться в режиме реального времени...
Проблема в том, что база данных berkeley является базой данных ключей и не поддерживает sql.
Таким образом, проблема здесь заключается в том, должен ли я создать веб-сервис, который предоставляет данные веб-интерфейсу с использованием базы данных Berkeley? ИЛИ Должен ли я синхронизировать базу данных Беркли с реляционной базой данных (Mysql,postgresql)
В первом случае не будет проблемы с синхронизацией. Но проблема в том, что гибкость очень ограничена... Например, сортировка по столбцу, который не проиндексирован, требует пользовательской функции сортировки... Для суммирования некоторых полей необходимо прочитать все данные записи. и затем суммирование вручную..
Во втором случае простой способ - просто прочитать и преобразовать в базу данных. Я не могу найти способ проверить, что было обновлено... вставлено или удалено.
Но я склоняюсь скорее ко второму методу... используя следующий алгоритм. Проверяйте каждые 5 минут дату изменения файла... Открывайте файлы, которые были изменены... Затем получите все ключи и сравните их с массивом кэшированных ключей. Затем переберите каждую запись и проверьте, совпадает ли хэш данных с кэшированным.
Затем удалите / вставьте..
Любые другие идеи?
3 ответа
Почему бы не перенести исходный код в систему, управляемую базой данных berkely-db, и найти способ написать SOAP-запрос и обработать его с помощью этого приложения. Теперь у вас есть веб-сервис, который может читать эту BSDDB напрямую, и вам не нужна синхронизация.
Даже если у вас нет исходного кода для исходного приложения, если вы можете сами выяснить, как распаковать содержимое хранилища ключей / значений BSDDB, вы можете легко (например, на Python) написать простое приложение веб-службы, которое обслуживает содержимое вашей базы данных BSDDB с помощью SOAP. Я хотел бы начать с написания нескольких строк Python, которые открывают значение BSDDB и сбрасывают значения ключа и связанные с ними полезные нагрузки. (Значения "Value", если хотите).
Вы можете выбрать два репозитория и синхронизировать их, либо сделать так, чтобы ваше веб-приложение отображало и сохраняло данные непосредственно в / из хранилища значений ключей Berkeley DB.
Если вы решили поддерживать и синхронизировать данные, хранящиеся в формате ключ-значение в Berkeley DB, с отдельным хранилищем RDBMS, то вам нужно написать приложение, которое может выполнить синхронизацию для вас. Сопоставление между хранилищем данных "ключ-значение" и хранилищем данных СУБД должно быть выполнено вашим приложением синхронизации в соответствии с указанными выше линиями. Вы можете либо отсканировать / сравнить / сопоставить два репозитория, как вы предлагаете, либо создать "журнал данных приложения", который может быть прочитан и применен вашей синхронизацией. Проблема с этим подходом заключается в том, что вы можете потратить много времени и усилий, пытаясь синхронизировать два репозитория.
Другой вариант - написать веб-приложение, чтобы оно могло напрямую взаимодействовать с репозиторием БД Berkeley (как предложил Уоррен). Есть несколько языков сценариев, которые имеют привязки Berkeley DB (Perl, PHP, Python, TCL и Ruby и многие другие). Если проблема заключается в том, что веб-приложение напрямую связывается с хранилищем Berkeley DB, вы всегда можете написать простое серверное приложение, которое взаимодействует с хранилищем BDB и может обрабатывать HTTP-запросы от веб-приложения (в основном решение SOAP, предложенное Уорреном).,
Я думаю, вы обнаружите, что в конечном итоге управлять одним репозиторием намного проще, даже если в краткосрочной перспективе это потребует дополнительной работы по разработке приложений.
Ну, у Berkeley DB есть SQL API (с весны 2010 года). Пожалуйста, смотрите http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html для получения более подробной информации.
Кроме того, я бы рекомендовал опубликовать ваш вопрос на форуме Беркли БД http://forums.oracle.com/forums/forum.jspa?forumID=271