![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
oleg_2 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
[СИ] Длина сектора диска
Язык СИ ОС UNIX База данных и транзакция. Два вопроса. Имеется файл строк, каждая строка это отдельная запись БД. Нужно сделать транзакцию - изменить одну из этих строк. При этом длина строки не меняется. Должно выдерживать мягкий сбой (выключение питания). Винт плохой и при сбое портит весь сектор (или иную минимальную порцию данных). Значит я должен в журнале сохранить всё то, что может быть испорчено, т. е. сектор (или секторы) содержащий эту строку. Вопрос 1. О длине сектора. Как узнать длину сектора или иной порции данных, которая может быть испорчена? Вопрос 2. Что если я буду для верности сохранять заведомо большую порцию, а именнно 8 Кбайт, начало порции кратно ей самой от начала файла. Сработает ли такой подход? |
|
|
![]() |
Tonal |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
В Firebird-е, МИХО, при создании базы указывается размер страницы, и далее сервер оперирует уже именно этими страницами как минимальной единицей обмена с диском.
А по сабжу - это зависит от конкретной ФС, стало быть и узнавать нужно у драйвера ФС. Кроме того, нужно учитывать систему ввода/вывода ОС, которая все подключенные ФС абстрагирует а данные кеширует, так что напрямую прочитать/записать сектор в устройство может быть довольно не постое занятие с учётом разнообразия устройств, ФС и ОС. ![]() Так что если это курсовик, то задание поставлено не корректно - нужно уточнить ОС, ФС и хотя бы тип устройства (винт, флеха, SSD, сеть...). ![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 4:27 |