Архитектура Сервера БД
От: yuske  
Дата: 06.08.09 09:52
Оценка:
День добрый!

Веду проект серверного приложения, обменивающегося данными с множеством различных клиентов и хранящем эти данные в собственном хранилище. Проект написан на С++ под Win, в виде хранилища используется storage (через интерфейсы IStorage, IStream). Приложение работает под большими нагрузками, данные обновляются раз в 200 мс, объем данных большой. Сейчас занимаюсь перепроектированием хранилища, поставлена задача сделать его максимально надежным, но не в ущерб производительности системы. Т.о. подзадачи две:
1. Защитить данные от внешних повреждений (сбой оборудования, сбой ОС).
Вижу решение в подсчете для каждой таблице данных CRC (она храниться как поток данных), сохранением его в хранилище, и при зачитывании данных из таблице, сравнении сохраненного CRC с текущем. В случае несовпадения CRC — восстановление БД из бекапа.
2. Защитить данные от внутренних ошибок (например порче данных из за ошибок типа переполнения буфера, прохода по памяти или просто пришедших некорректных данных от клиентов).
Конечно, проверки на эти ошибки уже существуют, но они раскиданы по всему коду Сервера и при внесении новых изменений очень легко что-либо упустить. Мне здесь видится 2 решения: 1) Создать класс таблицы (возможно шаблонный класс), к-рый при изменении данных проверял бы их на валидность (в зависимости от конкретной таблице). Тогда все проверки будут находиться в одном месте и их проще будет сопровождать. Наверняка существует уже готовый паттерн реализующий эту задачу, посоветуйте если кто сталкивался! 2) Запустить фоновый поток который будет верифицировать измененные данные. При таком решении процесс проверки данных будет меньше нагружать систему, но будет ли он успевать проверять все данные

Еще нужно придумать как быстро делать бекапы по время работы Сервера БД... но это пока менее приоритетная задача.

Что думаете по этому поводу? И, пожалуйста, посоветуйте сайты/форумы/статьи/книги описывающие архитектуры Сервера БД, паттерны применяемые в этой области и решающие описанные задачи! Хочется сперва изучить опыт др людей, чтоб заново не изобретать велосипед. В области проектирования (не реализации, а именно проектирования) я пока слаб, нужно учить матчасть, но подходящих источников информации пока найти не могу

Спасибо всем кто готов помочь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.