MySQL на NVME диске

 Вообще, для случаев баз данных админы относятся к NVME  и SSD дискам с настороженностью: все кто хоть раз восстанавливал СУБД даже из файловых / снапшотных бэкапов, а не журналов - а админ со стажем, разумеется, в своей карьере делал это не раз  - вряд ли добровольно захотят повторить эту процедуру для не тестовых данных. Цейтнот, стресс, ненужное внимание начальства, отсутствие особой благодарности ("твоя работа, ты должен(с)") - неприятные воспоминания.

C SSD  / NVME ведь какая проблема? его не проверишь скандиском (то есть тулзами fsck, smartctl, badblocks, которые находят нарушения целостности файловой системы). Вернее - проверить-то можно, утилит, читающих SMART достаточно, но что даст инфа что диск уже не 100 а 98% ? Только , измерив через время и получив уже 96% поможет прикинуть скорость умирания.

Производители борются: гарантируют террабайты, увеличивается время работы, которое уже превышает в 1,5-2 раза срок морального устаревания, корректно работает trim.. но  - зазеваешься и - SSD/NVME умирают внезапно: сегодня еще был и что-то проде было записано, а завтра виден как неотформатированный диск, или вообще не виден. Увы. Никакой "последней попытки только прочитать подключив вторым диском" как HDD скоростные диски не позволяют.

 Поэтому админы любят SAS: олды помнят что это SCSI, а молодежь аппелирует что "промышленный стандарт, в домашние компы такого не ставят". SAS + RAID , аппаратный с памятью в контроллере побольше - вот типичная конфигурация для серверов СУБД.

Но мы сегодня  - хипстеры, и нам нужна быстрая база. Конечно, можно взять Mongo, Но память у нас на сервере не безразмерная, а в проекте нужен порядок - струтура. Раз структура  - значит Tables. RDBMS.

И по условию задачи нам нужно часто читать и редко писать. А читать разумеется данные отдаваемые в Web. И к счастью их можно терять - запишутся снова если что. Запись редка.

Попробуем использовать для этого NVME и выясним что он при всех достоинствах имеет один недостаток  - малый объем. Поэтому база нам нужна такая, которая в этом малом объеме комфортно разместится.

На пальцах это выглядит примерно так: чем меньше данных гонять по сети / сокету - тем быстрее Nginx выплюнет первый байт клиенту. Гугл TTFB если интересно. Самым очевидным решением будет сжать наши данные в таблице! Любым алгоритмом для сжатия текста мы сживаем что можем в каждой нашей записи и храним в таблице сжатые данные! Бинго!

Увы, есть недостатки - например, если процессор слаб, то распаковка  займет ресурсы и кто знает, останутся ли на Nginx, ха-ха. Впрочем, с таким подходом не поможет уже ничего - забудьте про слабые процессоры для СУБД сервера. А вот второй недостаток посущественнее - СУБД ведут всякие транзакции и как следствие распаковка выполняется примерно дважды - для приложения-клиента и для журнала самой СУБД.

В общем это худашая идея нахывается...

Есть ее улучшение - называется compress by page

 

но лучше если сам двидок будет уже compressed и воооюще. И такой движок есть! называется RocksDB 

 

опишем как использовать его вместе с MAriaDB

 

 

 

Комментарии