1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yaoyunpeng-java_senior_development_engineer_interview_notes

Клонировать/Скачать
part4-mysql.txt 23 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 19:58 b8b6f40
1. Двигатели
#Описание: Строительные движки в базе данных фактически представляют собой определенные настройки для таблиц, использующих этот двигатель. Если таблица в базе данных настроена на определенный двигатель хранения, то этот двигатель будет влиять на методы хранения данных, обновления данных, производительность запросов и поддержку индексов.
#Основные виды
#InnoDB двигатель хранения
#Характеристики: поддерживает транзакции, строковые блокировки, поддерживает внешние ключи, не поддерживает полнотекстовый поиск, не сохраняет количество строк в таблице, кэширует индексы и данные
#Применимые сценарии: требуется поддержка транзакций (с хорошими транзакционными характеристиками), строковые блокировки хорошо подходят для высокой конкуренции, часто обновляемые данные, высокие требования к согласованности данных, большое количество оперативной памяти
#MyISAM двигатель хранения
#Характеристики: не поддерживает транзакции, таблицные блокировки, не поддерживает внешние ключи, поддерживает полнотекстовый поиск, сохраняет количество строк в таблице, кэширует только индексы
#Применимые сценарии: не требуется поддержка транзакций (не поддерживается), низкая конкуренция (проблемы с блокировкой), чтение значительно превышает количество изменений данных
#Двигатель хранения NDBCluster #Характеристики: распределенный, поддерживает транзакции, требует большое количество оперативной памяти, может работать с mysqld на разных серверах, не поддерживает временные таблицы
#Описание: имеет очень высокие требования к параллельной обработке, не критичен для отдельных запросов, простые запросы с фиксированными условиями фильтрации, небольшое количество данных на каждый запрос, и не требуется ручное горизонтальное разделение данных
#Другие: движки хранения Memory, Merge, CSV, Archive и другие используются реже, поэтому их подробное описание здесь пропущено.
2. Принципы индексации
B+ дерево и B- дерево
3. Транзакции
#Определение: это серия операций, выполняемых как единственный логический рабочий блок, который либо полностью выполняется, либо полностью не выполняется.
#Четыре свойства ACID
#Атомарность (Atomicity)
#Все операции, составляющие транзакцию, должны быть логическим блоком, который либо полностью выполняется, либо полностью не выполняется. # Для обеспечения атомарности необходимо использовать журнал: все операции обновления данных записываются в журнал. Если часть операций в транзакции уже выполнена успешно, но дальнейшие операции не могут быть продолжены из-за отключения питания/сбоев системы/других ошибок ПО и аппаратуры, то с помощью отката журнала отменяются уже выполненные операции,## тем самым достигается цель "полного сбоя всех операций". Самый распространенный сценарий — это перезапуск базы данных после сбоя, когда база данных находится в несогласованном состоянии. В этом случае необходимо выполнить процесс восстановления после сбоя (crash recovery): прочитать журнал и выполнить REDO (повторить все операции, которые были выполнены успешно, но еще не были записаны на диск, чтобы обеспечить устойчивость),
## затем выполнить UNDO (отменить все операции, которые были частично выполнены, но еще не были завершены, чтобы обеспечить атомарность). После завершения процесса восстановления после сбоя база данных возвращается в согласованное состояние и может быть использована.# Управление журналом и его воспроизведение являются одними из самых сложных частей реализации базы данных. Если в этом процессе вовлечены параллельные обработки и распределенные системы (репликация и воспроизведение журнала являются основой высокой доступности базы данных), то это может быть еще более сложным.
# Согласованность (Consistency)
# Согласованность означает переход от одного согласованного состояния к другому. То есть после выполнения транзакции не нарушены ограничения целостности базы данных, все данные корректны. Другие три свойства существуют для обеспечения согласованности.
# Изоляция (Isolation)
# Изоляция означает, что при параллельном доступе к базе данных несколькими пользователями, например, при работе с одной и той же таблицей, транзакции, открытые для каждого пользователя, не должны быть нарушены другими транзакциями. Для обеспечения изоляции можно использовать блокировки.
# Устойчивость (Durability)
# Устойчивость означает, что изменения данных в базе данных, сделанные транзакцией, становятся постоянными после ее подтверждения. Даже в случае сбоев системы эти изменения не будут потеряны.# Параллельные проблемы
# Нечистое чтение: транзакция A считывает обновленные данные транзакцией B, а затем B откатывает операцию. В этом случае данные, считанные A, являются нечистыми.
# Неповторимое чтение: в двух последовательных запросах одной транзакции данные не совпадают. Это может произойти из-за вставки другой транзакции между двумя запросами.
# Фантомное чтение: в двух последовательных запросах одной транзакции количество строк данных не совпадает. Например, одна транзакция считывает несколько строк, а другая транзакция вставляет новые строки между двумя запросами. В следующем запросе первая транзакция обнаружит несколько новых строк, которые она не видела ранее.
# Подведение итогов: нерепродуктивные чтения и фантомные чтения легко спутать. Нерепродуктивные чтения сосредоточены на модификациях, а фантомные чтения — на добавлении или удалении. Решение проблемы нерепродуктивных чтений требует блокировки строк, соответствующих условиям, а решение проблемы фантомных чтений требует блокировки таблиц.# Уровни изоляции
## Уровни изоляции транзакций
| Уровни изоляции транзакций | Наличие грязных чтений | Наличие нерепродуктивных чтений | Наличие фантомных чтений |
| --- | --- | --- | --- |
| Читать несогласованные (read-uncommitted) | Да | Да | Да |
| Нерепродуктивные чтения (read-committed) | Нет | Да | Да |
| Репродуктивные чтения (repeatable-read) | Нет | Нет | Да |
| Сериализация (serializable) | Нет | Нет | Нет |
## Установленные по умолчанию уровни изоляции
- Oracle и SQL Server используют по умолчанию уровень изоляции "нерепродуктивные чтения" (read-committed).
- MySQL использует по умолчанию уровень изоляции "репродуктивные чтения" (repeatable-read).
4. Механизмы блокировки
## Объяснение: Для обеспечения свойств ACID (атомарности, согласованности, изолированности и устойчивости) базы данных обычно используют механизмы блокировки. В то же время, поскольку база данных является высокопроизводительным приложением, которое поддерживает большое количество параллельных запросов, избыточная блокировка может значительно снизить производительность. Поэтому управление блокировками является ключевым аспектом работы баз данных с транзакциями.### Структуры блокировки
- **Совместное использование блокировки (также известная как блокировка чтения)**: позволяет транзакциям читать строки, предотвращая другие транзакции от получения блокировки записи для тех же строк.
- **Блокировка записи (также известная как блокировка записи)**: позволяет транзакциям, которые получили блокировку записи, обновлять данные, предотвращая другие транзакции от получения блокировки чтения или записи для тех же строк.
- **Интенционная блокировка совместного использования (IS)**: транзакция намеревается получить блокировку совместного использования для строки. Перед тем как получить блокировку совместного использования для строки, транзакция должна получить блокировку интенционной блокировки совместного использования для таблицы.
- **Интенционная блокировка записи (IX)**: транзакция намеревается получить блокировку записи для строки. Перед тем как получить блокировку записи для строки, транзакция должна получить блокировку интенционной блокировки записи для таблицы.### Объяснение:
- **Интенционная блокировка записи (IX)**: транзакция намеревается получить блокировку записи для строки. Перед тем как получить блокировку записи для строки, транзакция должна получить блокировку интенционной блокировки записи для таблицы.
- Для операций UPDATE, DELETE и INSERT InnoDB автоматически применяет блокировку записи (X) для соответствующих данных. Для обычных операций SELECT InnoDB не применяет никаких блокировок.
- **MyISAM**: перед выполнением запросов SELECT MyISAM автоматически применяет блокировку чтения для всех таблиц, участвующих в запросе. Перед выполнением операций UPDATE, DELETE и INSERT MyISAM автоматически применяет блокировку записи для всех таблиц, участвующих в запросе.
- **InnoDB**: блокировка строк в InnoDB осуществляется путем блокировки индексных записей. Это означает, что InnoDB использует блокировку строк только при использовании индексов для поиска данных. Если индекс не используется, InnoDB применяет блокировку таблицы.### Оптимистичная блокировка, пессимистичная блокировка:
- Оптимистичная блокировка предполагает, что конфликты между транзакциями маловероятны, и не применяет блокировки до тех пор, пока не возникнет конфликт.
- Пессимистичная блокировка предполагает, что конфликты между транзакциями вероятны, и применяет блокировки для предотвращения конфликтов. # Пессимистический блок:
# Определение: это блокировка, при которой текущий транзакт заблокирует все объекты, которые он затрагивает, и освободит их после завершения операции. Чтобы повысить производительность, были разработаны блокировки различных гранул (база данных/таблица/строка и т. д.) и свойств (общий блок/исключающий блок/общий намеренный блок/исключающий намеренный блок/общий и исключающий намеренный блок и т. д.). Чтобы решить проблему мёртвых琐尸(死锁),ввели двухфазный протокол блокировки/детектирование мёртвых琐尸(死锁)и другие технологии.
# Объяснение:
# При использовании пессимистического блока, мы должны отключить свойство автоматического подтверждения в базе данных MySQL, используя ручное подтверждение транзакций, так как MySQL по умолчанию использует режим autocommit, то есть, когда вы выполняете операцию обновления, MySQL немедленно подтверждает результат.
# Важно отметить, что в транзакции, только SELECT . . . FOR UPDATE или LOCK IN SHARE MODE будут ждать завершения других транзакций, когда они работают с одной и той же записью. Обычный SELECT . . .не подвержен этому. Для UPDATE, DELETE и INSERT инструкций InnoDB автоматически добавляет исключающую блокировку (X) для всех затрагиваемых данных.
# Использование select…for update блокирует данные, но мы должны учитывать некоторые уровни блокировки. По умолчанию MySQL InnoDB использует Row-Level Lock, поэтому только при «явном» указании первичного ключа (или мест с индексом), MySQL выполнит Row lock (блокировка только выбранных данных), в противном случае MySQL выполнит Table Lock (блокировка всего таблицы).# Оптимистический блок:
# Определение: оптимистический блок предполагает, что данные обычно не вызывают конфликтов, поэтому при выполнении операции обновления, только тогда проверяется конфликт данных. Если конфликт обнаружен, то пользователю возвращается сообщение об ошибке, и пользователь решает, что делать (обычно это откат транзакции).
# Реализация:
# Используется механизм версий данных для реализации оптимистического блока, это наиболее распространённый способ реализации оптимистического блока. Что такое версия данных? Это добавление версионного идентификатора к данным, обычно это добавление числового поля "version" в таблицу базы данных. При чтении данных, поле version также считывается. Каждое обновление данных увеличивает значение поля version. При подтверждении обновления, проверяется текущее значение поля version в таблице и первоначальное значение, считанное при первом чтении. Если значения совпадают, то обновление подтверждается, в противном случае считается, что данные устарели. #Вторая реализация оптимистической блокировки также похожа на первую, состоит в добавлении поля в таблицу, которая требует управления оптимистической блокировкой. Имя поля не важно, тип поля — это метка времени (timestamp). Аналогично полю version, при обновлении проверяется текущее значение метки времени в базе данных и значение, полученное до обновления.Если значения совпадают, обновление проходит успешно, в противном случае возникает конфликт версий.
#Блокировка является одним из самых сложных аспектов реализации баз данных. Также, если речь идет о распределенных системах (распределенные блокировки и двухфазное подтверждение являются основой распределенных транзакций), это может быть еще более сложным.
5. Оптимизация
#Оптимизация параметров конфигурации
#Описание: оптимизация параметров конфигурации MySQL является сложной и долгосрочной задачей, так как различные уровни параллелизма могут привести к тому, что определенные параметры не соответствуют текущим условиям.
#Ссылка на статью: http://blog.csdn.net/u014044812/article/details/78929579
#Оптимизация использования стандартов
#Описание: соблюдение стандартов использования может предотвратить снижение производительности базы данных в процессе использования.
#Ссылка на статью: http://blog.csdn.net/u014044812/article/details/78931044

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yaoyunpeng-java_senior_development_engineer_interview_notes.git
git@api.gitlife.ru:oschina-mirror/yaoyunpeng-java_senior_development_engineer_interview_notes.git
oschina-mirror
yaoyunpeng-java_senior_development_engineer_interview_notes
yaoyunpeng-java_senior_development_engineer_interview_notes
master