kciray
@kciray
Студент

Как работает MySQL с диском? Когда происходит синхронизация и как?

Собственно, возникла идея написать собственную СУБД, которая идеально подходит под мои требования.

Возникает вопрос - когда MySQL и другие БД синхронизируются с диском? Например если у нас 100 мегабайт БД - находятся ли они всё время в ОЗУ или нет? Или частично находятся?

Собственно если БД всё время в ОЗУ - она должна работать очень бысто, но что будет в случае отказа питания - данные же потеряются. Как часто она синхронизируется?

Если БД всё время на диске - то запросы на поиск наверняка долго выполнять, ворочить 100 мегабайт на харде... SSD недавно появились, а раньше то как делали?
  • Вопрос задан
  • 2355 просмотров
Решения вопроса 1
ptchol
@ptchol
Linux system administrator
Если говорить о популярном innodb то все довольно просто.
При записи у нас есть фактически 2х уровневое кеширование. Первое на уровне операционной системы, это сброс страничек из памяти на диск, второе это то, после чего вы получаете ответ от БД что операция произедена.

Кеширование на уровне фс, можно "обойти", используя флаг O_DIRECT при открытии файла, более подробно о доступных в mysql методах, здесь.
Также есть параметр innodb_flush_log_at_trx_commit который определяет действия бд при осуществлении операции commit (фактически это попытка применения результатов транзакции), пишет ли она синхронно на диск, или достаточно записи в кеш фс, или достаточно записать данные в log который потом посинкается на диск.
Все это непосредственным образом влияет на надежность и дисковое IO. Вы вольны выбирать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
которая идеально подходит под мои требования.

Любопытно чем вам существующие реализации не угодили. Я бы порекомандовал вам просто сдаться и использовать существующие решений.

www.tocker.ca/2013/05/06/when-does-mysql-perform-i...
Ответ написан
Комментировать
Извините но мне кажется вам рано писать свою СУБД. Да есть БД которые всё время в озу, Redit например почитайте. С++ владеете? Учтите что вам данные будет выбирать быстрее чем за 0,0003 иначе вы уже медленнее mysql )))
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Обычно свое пишут когда есть понимание что и как работает, и почему в конкретном случае оно работает не так, как могло бы. А вам ещё рано писать свою СУБД.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы