Синхронизировать Беркли БД с Mysql - PullRequest
0 голосов
/ 13 марта 2011

У меня есть устаревшая система, которая была портирована на современную систему и использует базу данных Беркли.Он скомпилирован с открытым коболом.
В предыдущей системе сериализованные файлы CISAM с фиксированными данными один раз в день конвертировались в базу данных Microsoft с помощью макросов ACCESS, чтобы их можно было использовать из простого веб-интерфейса. (В одну сторону) Я хочусоздать новый веб-интерфейс, и я хочу, чтобы данные обновлялись в режиме реального времени ...
Проблема в том, что база данных Беркли является базой данных ключевых значений и не поддерживает sql.
Так что проблема в том, должен ли я создать сетьсервис, который предоставляет данные веб-интерфейсу с использованием базы данных Berkeley?ИЛИ Должен ли я синхронизировать базу данных Беркли с реляционной базой данных (Mysql, postgresql)

В первом случае не было бы проблемы синхронизации. Но проблема в том, что гибкость очень ограничена ... Например, сортировка по столбцудля того, чтобы он не индексировался, требуется настраиваемая функция сортировки ... Для суммирования некоторых полей необходимо прочитать все записи и затем суммировать вручную.

Во втором случае простой способ - просто прочитать и преобразовать в базу данных.Я не могу найти способ проверить, что было обновлено ... вставлено или удалено.

Но я склоняюсь к второму способу ... используя следующий алгоритм Проверяйте каждые 5 минут дату изменения файла ... Открытьфайлы, которые были изменены ... Затем получите все ключи и сравните их с массивом кэшированных ключей.Затем переберите каждую запись и проверьте, совпадает ли хэш данных с кэшированным.
Затем удалите / вставьте.

Любые другие идеи?

Ответы [ 3 ]

1 голос
/ 13 марта 2011

Почему бы не взять исходный код в систему, управляемую базой данных berkely-db, а найти способ написать запрос SOAP и обработать его с помощью этого приложения.Теперь у вас есть веб-сервис, который может читать эту BSDDB напрямую, и вам не нужна синхронизация.

Даже если у вас нет исходного кода для исходного приложения, вы можете выяснить, как распаковатьсодержимое хранилища ключей / значений BSDDB вы можете легко (например, в Python) написать простое приложение веб-службы, которое обслуживает содержимое вашей базы данных BSDDB с помощью SOAP.Я хотел бы начать с написания нескольких строк Python, которые открывают значение BSDDB и сбрасывают значения ключа и связанные с ними полезные нагрузки.(Значения «Value», если хотите).

1 голос
/ 14 марта 2011

Вы можете выбрать два репозитория и синхронизировать их или сделать так, чтобы ваше веб-приложение отображало и сохраняло данные непосредственно в / из хранилища данных ключа-значения Berkeley DB.

Если вы решили поддерживать и синхронизировать данные, хранящиеся в формате ключ-значение в Berkeley DB, с отдельным хранилищем RDBMS, то вам нужно написать приложение, которое может выполнить синхронизацию за вас. Сопоставление между хранилищем данных «ключ-значение» и хранилищем данных СУБД должно быть выполнено вашим приложением синхронизации в соответствии с указанными выше линиями. Вы можете либо отсканировать / сравнить / сопоставить два репозитория, как вы предлагаете, либо создать «журнал данных приложения», который может быть прочитан и применен вашей синхронизацией. Проблема с этим подходом заключается в том, что вы можете потратить много времени и усилий, пытаясь синхронизировать два репозитория.

Другой вариант - написать ваше веб-приложение, чтобы оно могло напрямую взаимодействовать с репозиторием БД Berkeley (как предложил Уоррен). Есть несколько языков сценариев, которые имеют привязки Berkeley DB (Perl, PHP, Python, TCL и Ruby и многие другие). Если проблема заключается в том, что веб-приложение напрямую связывается с хранилищем Berkeley DB, вы всегда можете написать простое серверное приложение, которое взаимодействует с хранилищем BDB и может обрабатывать HTTP-запросы от веб-приложения (в основном решение SOAP, предложенное Уорреном). ,

Я думаю, вы обнаружите, что в конечном итоге управлять одним репозиторием намного проще, даже если в краткосрочной перспективе это потребует дополнительной работы по разработке приложений.

0 голосов
/ 13 марта 2011

Ну, у Berkeley DB есть SQL API (с весны 2010 года).Пожалуйста, смотрите http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html для получения более подробной информации.

Также, я бы рекомендовал опубликовать ваш вопрос на форуме Berkeley DB http://forums.oracle.com/forums/forum.jspa?forumID=271

...