Автор Тема: Велосипедная СУБД  (Прочитано 8395 раз)

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Велосипедная СУБД
« Ответ #15 : Август 29, 2012, 10:54:46 am »
Не народ, я спрашивал всего лишь о том как организовать безопасную сохранку в файл...  :) :) :)

Оверхедные тормоза SQL мне даром не нужны (даже с доплатой не нужны). Так же мне совершенно не нужна симуляция бесконечной персистентной памяти (jdbm). Структура данных у меня должна быть "под рукой" всегда целиком в оперативке и мгновенна доступна по указателю (или индексу массива), а на диске должна быть её копия со средним запаздыванием примерно в половину секунды.

Что касается безопасной сохранки в файл, то видимо это и есть самое то:
1) Пишем только в конец файла. Если во время записи происходит авария, то портится только конец файла.
2) Когда файл становится слишком большим, копируем (с компактификацией) в другой файл, заменяем старый файл новым, старый выбрасываем.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Велосипедная СУБД
« Ответ #16 : Август 29, 2012, 11:00:48 am »
Ну почему же? Вот valexey говорил про write ahead log. Оно и есть.

мокрософт копаунд примерно так и устроен. Там тоже пишется безопасно в конец. Это ж тупо контейнер с поддержкой транзакций. Микро файловая система.

Не обязательно использовать как есть. Но можно идеи скомуниздить...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Велосипедная СУБД
« Ответ #17 : Август 29, 2012, 11:11:52 am »
Где то в тырнетах было описание... не помню где.
Вот люди тоже говорят:
Цитировать
Думаю стоит уточнить, что формат Compound file был создан специально для хранения составных OLE-документов и предоставляет собой подобие файловой системы внутри одного файла.
К тому же, API предоставляет возможность поддержки транзакций при работе с Compound file и назначение CLSID для отдельных хранилищ (Storage) внутри документа.
Многие функции API имеют названия типа Stgxxxx и работают со ссылками на интерфейсы IRootStorage (корневое хранилище), IStorage (вложеное хранилище), IStream (поток данных).
Стоит также посмотреть справку по интерфейсу ILockBytes, который позволяет размещать корневое хранилище составного документа на диске, в памяти или в БД.
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=24094

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Re: Велосипедная СУБД
« Ответ #18 : Август 29, 2012, 11:53:40 am »
В линухах есть logrotate для автоматизации работы с log-файлами.


Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Велосипедная СУБД
« Ответ #19 : Август 29, 2012, 12:05:55 pm »
Не народ, я спрашивал всего лишь о том как организовать безопасную сохранку в файл...  :) :) :)
Недостаток предложенного решения - избыточность данных в файле, даже после компрессии. Так как читая его, программа способна определить где был сбой.
Если на избыточность можно наплевать - то все и так хорошо. Если нет, то сделать 2 файла, в одном хранить данные в двоичном виде, в другом лог. Периодически лог обнулять.