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