Здравствуйте такой вопрос, делаю дипломную работу СУБД, в принципе практически сделал, ядро базы на В-деревьях, SQL движок на бизоне, сделал транзакции и пр. Но поскольку еще есть целый год, хочу попробовать в академических целей, сделать файловую систему для БД. Пока представляю себе так что раздел диска полностью будет под СУБД. Так же с учетом того что запись происходит по странично (как в основной файл БД, так и при транзакции в лог транзакции), и больше ни кто не будет обращаться к этому разделу, то хочу использовать эту информации при реализации драйвера.
И как мне кажется, еще при транзакции могу с экономить на одной операции flush. То есть при транзакции типа UNDO (с REDO по сути так же), пока идут какие то действия с базой, происходит сохранение в лог/файл транзакции "оригинальных" страниц. После того как был вызван commit, я делаю вызов Flush что бы наверняка сбросить все "оригинальные страницы" в лог транзакции на диске, после этого я сохраняю еще одну страницу в логе транзакции в которой помечаю что такая стадия завершена и снова делаю Flush. Дальше я сохраняю изменённые страницу уже в основной файл БД и в конце снова делаю Flush, а потом в логе транзакции помечаю что все ок и опять Flush, а уже после удаляю файл транзакции.
Как мне кажется если бы я мог в драйвере сделать настройку что такую то страницу нужно сохранять последней, либо что после сброса всего на диск записать определенный флажек на диске то будет быстрее (но опять же все в рамках учебы)
И у меня собственно вопрос в том возможно ли такое в Windows, я только начал изучать материал, WDK смотреть примеры. Так понимаю, есть уровень HAL, через который по сути можно работать с диском и (на моем пока примитивном понимании), выполнять команды типа с позиционируйся суда, запиши вот это?
Здравствуйте, Аноним, Вы писали:
А>Так понимаю, есть уровень HAL, через который по сути можно работать с диском и (на моем пока примитивном понимании), выполнять команды типа с позиционируйся суда, запиши вот это?
Это совсем другой уровень работы с диском, на котором вы врятли получите прирост скорости, т.к. я сомневаюсь что вы будете воспроизводить то, что умеет делать "стандартный дисковый драйвер".
Да и не вижу вообще необходимости в своём драйвере, т.к. посылая команды "стандартному дисковому драйверу" можно отчасти реализовать ваши "хотелки".
Re[2]: Драйвер файловой системы для СУБД
От:
Аноним
Дата:
03.07.13 06:38
Оценка:
Здравствуйте, acDev, Вы писали: D>Это совсем другой уровень работы с диском, на котором вы врятли получите прирост скорости, т.к. я сомневаюсь что вы будете воспроизводить то, что умеет делать "стандартный дисковый драйвер". D>Да и не вижу вообще необходимости в своём драйвере, т.к. посылая команды "стандартному дисковому драйверу" можно отчасти реализовать ваши "хотелки".
Я не стремлюсь сделать быстрее, мне просто хочется это сделать в рамках обучения, и приобретения опыта в системном программировании для Windows, я даже практически уверен что выигрыша ни какого не получу. И как мне кажется, реализация файловой системы как раз позволит узнать многое о тонкостях разработки драйверов, синхронизации, и внутреннего устройства Windows и пр. Сейчас как раз читаю вторую часть Windows Internals, 6th Edition. Part 2, про файловые системы.
Можно например вместо драйвера диска сделать поддержку failover кластеризации.
Это попроще драйвера, но зато неоспоримо полезно для сервера баз данных.