
Вы когда-нибудь задумывались, на что база данных на самом деле тратит своё время?Большинство из нас предполагает, что она в основном занимается чтением и записью строк. Реальность куда интереснее.Есть классическая статья Майка Стоунбрейкера, в которой производительность традиционной транзакционной СУБД анализировалась вплоть до отдельных инструкций процессора.Вывод оказался неожиданным: менее 10% инструкций выполняют действительно полезную работу. Остальные 90%+ уходят на накладные расходы, которые почти поровну распределяются между четырьмя задачами:1. Работа с буферами (перемещение страниц между буферным пулом и диском).2. Блокировки (row-level locks для координации параллельных транзакций).3. Защёлки (latches — облегчённые блокировки, обеспечивающие целостность внутренних структур данных).4. Журналирование (запись операций до их выполнения, чтобы обеспечить возможность восстановления).Сначала это выглядит удручающе. Нет какого-то одного узкого места, которое можно устранить. Все четыре механизма критически важны для работы традиционной базы данных. Но если посмотреть на это с другой стороны, получается один из самых интересных выводов в проектировании СУБД.Если именно эти четыре источника накладных расходов потребляют процессорное время, что будет, если необходимость в них исчезнет?- нет буферов → база данных полностью хранится в памяти;- нет блокировок и защёлок → однопоточная архитектура;- нет журналов → репликация вместо логирования.Именно на этом строилась идея H-Store, а позже и VoltDB. Вы жертвуете частью гибкости, но взамен получаете производительность, в которую сложно поверить.К этой мысли я постоянно возвращаюсь: во многих системах накладные расходы — это не бесполезные потери, а цена за возможность, которая когда-то казалась необходимой. Стоит поставить под вопрос саму возможность — и связанные с ней накладные расходы исчезают вместе с ней.https://15721.courses.cs.cmu.edu/spring2016/papers/hstore-lookingglass.pdf👉 @BackendPortal













