Как сервер mysql хранит таблицы на жестком диске?

416
28 ноября 2016, 18:39

Привет. Вопрос по mysql. Как сервер mysql хранит таблицы на жестком диске? Слышал, что хранит построчно, но может и хранить по столбцам. Как достается что-то из таблицы? Тоже построчно или как-то по-другому? Хочу глубже понимать, как все это работает, чтобы стало ясно, как проходит оптимизация.

Answer 1

Вне зависимости от storage engine создаётся структура frm, содержащая описание структуры таблицы. Описание структуры есть в документации internals.

Затем каждый storage engine может использовать свой подход к хранению данных. Сам Mysql это никак не регламентирует.

Например, memory или blackhole вообще ничего не хранят на диске. csv пишет данные простым plain text и перекодирует из/в внутренний mysql формат строк при обращении.

Что mysql отдаёт на откуп конкретным storage engine можно посмотреть в internals-документации в разделе Writing a Custom Storage Engine. Здесь более поподробнее описана работа с подключаемыми хранилищами. То есть сам Mysql абстрагируется от всего, что касается формата хранения данных на диске и как эти данные читать-писать. Но сам по себе storage engine api предполагает работу именно со строками во внутреннем бинарном представлении mysql. Кстати, там же в качестве примеров цитируют реализации других storage engine, например insert дополнен кодом из myisam, update и delete - из csv

Для myisam и innodb там же в internals отведено по отдельному разделу. Иметь перед глазами исходник этих storage engine по время чтения, похоже, обязательно, описано как-то очень поверхностно. Начните лучше с раздела написания своего storage engine.

PS: дальше подсказать ничего не могу, не залезал. Но пусть будет хоть направление дальнейших изысканий.

READ ALSO
Angular vs jQuery

Angular vs jQuery

Объясните в чем преимущества Angular перед jQuery, если такие естьВ каких случаях целесообразней использовать ангулар?

448
Возведение в степень C++

Возведение в степень C++

Я уже пару раз сегодня просил помощи и вот что получилосьПрограмма должна выполнять возведение в степень длинных чисел

746
Непонятная логическая ошибка

Непонятная логическая ошибка

Написал программу, которая при вводе цифры в виде названия выдаст саму цифру, и наоборотК примеру, при вводе "one" программа выводит "1", при вводе...

409