![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
oleg_2 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
[СИ] Длина сектора диска
Язык СИ ОС UNIX База данных и транзакция. Два вопроса. Имеется файл строк, каждая строка это отдельная запись БД. Нужно сделать транзакцию - изменить одну из этих строк. При этом длина строки не меняется. Должно выдерживать мягкий сбой (выключение питания). Винт плохой и при сбое портит весь сектор (или иную минимальную порцию данных). Значит я должен в журнале сохранить всё то, что может быть испорчено, т. е. сектор (или секторы) содержащий эту строку. Вопрос 1. О длине сектора. Как узнать длину сектора или иной порции данных, которая может быть испорчена? Вопрос 2. Что если я буду для верности сохранять заведомо большую порцию, а именнно 8 Кбайт, начало порции кратно ей самой от начала файла. Сработает ли такой подход? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
встречный вопрос: почему бы не использовать журналируемую ФС или системы с избыточным хранением данных (RAID и т.п.)
|
|
|
oleg_2 |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Программа может работать на разных машинах
и не всегда есть возможность выбора. А если такая возможность будет, тогда в настройках программы можно уменьшить страховочные действия. Сейчас хотелось бы заложить побольше, чтоб могла надежно работать где угодно. RAID-1 решает проблему поломки всего или части диска, (жесткий сбой), но как отработает отключение питания полной уверенности нет. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
тут есть один нюанс - концепция Цилиндр-Головка-Сектор (ЦГС) морально устарела. И представляет собой некие вымышленные цифры.
Т.е. размер сектора указанный на жёстком диске не соответсвует размеру элементарной порции данных на жёстком диске. Я думаю тебе следует посмотреть в сторону современных СУБД, например, как Firebird решает подобные проблемы. По этому поводу в книге Хелен Бори написана целая глава. |
|
|
oleg_2 |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо.
Не знаю как найти эту книгу. Если можно приведите название книги, хотя бы приблизительно . И ещё. Вы пишете "размер сектора указанный на жёстком диске не соответсвует размеру элементарной порции данных на жёстком диске". А вопрос 2 в начале темы не решит ли эту проблему? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Не знаю как найти эту книгу. тыцЕсли можно приведите название книги, хотя бы приблизительно . А вопрос 2 в начале темы не решит ли эту проблему? Не знаю. Я не вникал в устройство реальных БД/ФС. Значит я должен в журнале сохранить всё то, что может быть испорчено, факт: испорчено может быть любое кол-во данных в любых местах. Если действительно нужна надёжность, то нужно избыточное хранение данных.
т. е. сектор (или секторы) содержащий эту строку. |
|
|
oleg_2 |
![]()
Сообщение
#7
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо
|
|
|
Iron Bug |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
да испорчена может быть хоть таблица разметки диска. сейчас у винтов есть ещё своё кэширование и множество прочих фич.
а насчёт такой дикой безопасности, да ещё и переносимости - существуют БД типа Оракла: они ставят свои дрова на низком уровне и там химичат нипадеццки, проверяя всё и вся на валидность и умея восстанавливаться при серьёзных сбоях. только стоит эта беда порядка 50 килобаксов за инсталляцию и эта цена отчасти оправдывает усилия, затраченные на её разработку. сделать подобие с нуля - это... как бы это сказать-то... в общем, можно начать, потомки допишут ![]() |
|
|
oleg_2 |
![]()
Сообщение
#9
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо за отклик.
Что касается других повреждений разметки диска порча каталогов поломка диска Знаю только одно средство: резервная копия. На подступе к этому вопросу предчувствую проблему своевременного выявления таких больших дефектов (это потом). По кэшированию и другим фичам: Побольше бы узнать об этом. Якобы кэширование можно отключить. Пока прошу вернуться к поставленным вопросам. |
|
|
Tonal |
![]()
Сообщение
#10
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
В Firebird-е, МИХО, при создании базы указывается размер страницы, и далее сервер оперирует уже именно этими страницами как минимальной единицей обмена с диском.
А по сабжу - это зависит от конкретной ФС, стало быть и узнавать нужно у драйвера ФС. Кроме того, нужно учитывать систему ввода/вывода ОС, которая все подключенные ФС абстрагирует а данные кеширует, так что напрямую прочитать/записать сектор в устройство может быть довольно не постое занятие с учётом разнообразия устройств, ФС и ОС. ![]() Так что если это курсовик, то задание поставлено не корректно - нужно уточнить ОС, ФС и хотя бы тип устройства (винт, флеха, SSD, сеть...). ![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 2:51 |