Как я могу улучшить свою архитектуру работы с БД?

#c #database #jet

Вопрос:

каждый. Сейчас я работаю над переработкой старой подсистемы, которая использует JetDB (ESE) для локального хранения модели (например, дерева, но с некоторыми дополнительными служебными данными) и LDS для хранения центральной модели. Это действительно старая подсистема, и никто ничего не делал с архитектурой более 15 лет.

Теперь мне нужно перепроектировать и улучшить работу с типами БД. И теперь существует несколько классов, которые создают объекты для доступа к базе данных и полям в любом месте, где это необходимо. Мне это не нравится — потому что это более чем в 25 местах, в разных двоичных файлах, так что это отличный пример легази:)

Обычно основным сценарием является работа с локальной базой данных — и несколько раз выполняйте синхронизацию с центральной. И когда вы выполняете операцию над моделью — программа подключается к БД, загружает данные, обрабатывает и иногда записывает их обратно. Поэтому я хочу создать что-то вроде кэширующего слоя базы данных, который будет иметь подключение к БД, и все остальные операции будут запрашивать данные на этом уровне. Эта база данных невелика (10-17 МБ), поэтому я хочу создать уровень кэша, чтобы сократить операции с диском.

Теперь я представляю это как набор классов:

  1. Класс модели, который может быть создан из локальных классов БД или классов центральной БД, предоставляющий пользователю доступ к объектам в модели
  2. Центральные и локальные классы БД (например, драйверы в ODBC) — которые предоставляют параметры доступа и управления в БД
  3. Класс кэширования локальной БД, владеющий подключением, может предоставлять доступ к локальной модели, блокирует модель для записи и сохраняет изменения в БД

Может быть, мне нужно что-то большее? Потому что архитектура-важная часть, и если я совершу в ней какую-нибудь ошибку, то в будущем у меня будет много работы. Может быть, вы дадите мне ссылки на книги, в которых я смогу найти лучшие практические рекомендации? Или, может быть, уровень кэша не нужен?