Microsoft добавит в SQL Server 2025 (пока в состоянии Preview) поддержку регулярных выражений
Регулярные выражения предлагают несколько преимуществ при использовании в запросах SQL:
Гибкость в сопоставлении с шаблонами: регулярные выражения позволяют выполнять сложное и гибкое сопоставление с шаблонами, что упрощает поиск определенных текстовых шаблонов в больших наборах данных.
Эффективность в обработке данных: функции Regex могут эффективно обрабатывать и преобразовывать текстовые данные, уменьшая необходимость в нескольких строковых функциях и упрощая запросы.
Улучшенная проверка данных: регулярные выражения можно использовать для проверки форматов данных, гарантируя, что данные соответствуют определенным шаблонам, таким как адреса электронной почты, номера телефонов и почтовые индексы.
Улучшенное извлечение данных: функции Regex могут извлекать определенные части текстовых данных, что упрощает извлечение ценной информации из неструктурированных данных.
Стандартизация и очистка: Regex может помочь стандартизировать и очистить данные, удаляя нежелательные символы, пробелы и дубликаты.
Функция REGEXP_LIKE проверяет, соответствует ли строка шаблону. Пример:
SELECT [Name], Email
FROM Employees
WHERE REGEXP_LIKE(Email, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');
Функция REGEXP_COUNT подсчитывает количество появлений шаблона в строке. Она полезна для анализа текстовых данных и выявления шаблонов.
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1,'c',1) AS Domain, COUNT(*) AS Valid_email_count
FROM Employees
WHERE REGEXP_COUNT(Email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$') > 0
GROUP BY REGEXP_SUBSTR(Email, '@(.+)$', 1, 1,'c',1);
Функция REGEXP_INSTR находит позицию шаблона в строке. Она полезна для поиска определенных подстрок в текстовых данных.
SELECT Name, Email, REGEXP_INSTR(Email, '@') AS Position_of_@ FROM Employees;
Функция REGEXP_REPLACE возвращает измененную строку, замененную «строкой замены», где найдено вхождение шаблона регулярного выражения. Вы можете использовать ее для изменения или преобразования текстовых данных на основе шаблона регулярного выражения.
SELECT sensitive_info,
REGEXP_REPLACE(sensitive_info, '(\d{3}-\d{2}-\d{4}|\d{4}-\d{4}-\d{4}-\d{4})', '***-**-****') AS redacted_info
FROM personal_data;
Функция REGEXP_SUBSTR извлекает часть строки, которая соответствует шаблону. Она полезна для извлечения определенной информации из текстовых данных.
SELECT Name, Email, REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'i', 1) AS Domain
FROM Employees
WHERE REGEXP_LIKE(Email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');
Функция REGEXP_MATCHES находит все совпадения шаблона в строке и возвращает их в табличном формате (т. е. в виде строк и столбцов). Она полезна для извлечения нескольких вхождений шаблона. Обычно она используется для поиска всех вхождений шаблона или для извлечения частей строки с использованием групп захвата, особенно когда вы ожидаете несколько совпадений на вход.
SELECT *
FROM REGEXP_MATCHES('Name: John Doe; Email: john.doe@example.com; Phone: 123-456-7890', '(\w+):\s*([^;]+)');
Функция REGEXP_SPLIT_TO_TABLE разбивает строку на основе шаблона в качестве разделителя и возвращает фрагменты в виде строк в таблице. Она полезна для разбиения строк со списком элементов или разбиения текста на слова или предложения.
SELECT *
FROM REGEXP_SPLIT_TO_TABLE('Name: John Doe; Email: john.doe@example.com; Phone: 123-456-7890', '; ');
https://devblogs.microsoft.com/azure-sql/unlocking-the-power-of-regex-in-sql-server/
#sql #database
Регулярные выражения предлагают несколько преимуществ при использовании в запросах SQL:
Гибкость в сопоставлении с шаблонами: регулярные выражения позволяют выполнять сложное и гибкое сопоставление с шаблонами, что упрощает поиск определенных текстовых шаблонов в больших наборах данных.
Эффективность в обработке данных: функции Regex могут эффективно обрабатывать и преобразовывать текстовые данные, уменьшая необходимость в нескольких строковых функциях и упрощая запросы.
Улучшенная проверка данных: регулярные выражения можно использовать для проверки форматов данных, гарантируя, что данные соответствуют определенным шаблонам, таким как адреса электронной почты, номера телефонов и почтовые индексы.
Улучшенное извлечение данных: функции Regex могут извлекать определенные части текстовых данных, что упрощает извлечение ценной информации из неструктурированных данных.
Стандартизация и очистка: Regex может помочь стандартизировать и очистить данные, удаляя нежелательные символы, пробелы и дубликаты.
Функция REGEXP_LIKE проверяет, соответствует ли строка шаблону. Пример:
SELECT [Name], Email
FROM Employees
WHERE REGEXP_LIKE(Email, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');
Функция REGEXP_COUNT подсчитывает количество появлений шаблона в строке. Она полезна для анализа текстовых данных и выявления шаблонов.
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1,'c',1) AS Domain, COUNT(*) AS Valid_email_count
FROM Employees
WHERE REGEXP_COUNT(Email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$') > 0
GROUP BY REGEXP_SUBSTR(Email, '@(.+)$', 1, 1,'c',1);
Функция REGEXP_INSTR находит позицию шаблона в строке. Она полезна для поиска определенных подстрок в текстовых данных.
SELECT Name, Email, REGEXP_INSTR(Email, '@') AS Position_of_@ FROM Employees;
Функция REGEXP_REPLACE возвращает измененную строку, замененную «строкой замены», где найдено вхождение шаблона регулярного выражения. Вы можете использовать ее для изменения или преобразования текстовых данных на основе шаблона регулярного выражения.
SELECT sensitive_info,
REGEXP_REPLACE(sensitive_info, '(\d{3}-\d{2}-\d{4}|\d{4}-\d{4}-\d{4}-\d{4})', '***-**-****') AS redacted_info
FROM personal_data;
Функция REGEXP_SUBSTR извлекает часть строки, которая соответствует шаблону. Она полезна для извлечения определенной информации из текстовых данных.
SELECT Name, Email, REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'i', 1) AS Domain
FROM Employees
WHERE REGEXP_LIKE(Email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');
Функция REGEXP_MATCHES находит все совпадения шаблона в строке и возвращает их в табличном формате (т. е. в виде строк и столбцов). Она полезна для извлечения нескольких вхождений шаблона. Обычно она используется для поиска всех вхождений шаблона или для извлечения частей строки с использованием групп захвата, особенно когда вы ожидаете несколько совпадений на вход.
SELECT *
FROM REGEXP_MATCHES('Name: John Doe; Email: john.doe@example.com; Phone: 123-456-7890', '(\w+):\s*([^;]+)');
Функция REGEXP_SPLIT_TO_TABLE разбивает строку на основе шаблона в качестве разделителя и возвращает фрагменты в виде строк в таблице. Она полезна для разбиения строк со списком элементов или разбиения текста на слова или предложения.
SELECT *
FROM REGEXP_SPLIT_TO_TABLE('Name: John Doe; Email: john.doe@example.com; Phone: 123-456-7890', '; ');
https://devblogs.microsoft.com/azure-sql/unlocking-the-power-of-regex-in-sql-server/
#sql #database
Microsoft News
Unlocking the Power of Regex in SQL Server
Regular expressions, or regex, are powerful tools for text manipulation and pattern matching. They are incredibly useful in various scenarios, such as data validation, extraction, and transformation. SQL Server 2025 introduces native support for regex functions…
🔥14👍2🥱2👏1
B+ trees (Деревья B+) и их применение в базах данных
Деревья B+ являются наиболее широко используемой структурой данных для индексирования в современных реляционных системах баз данных. Они специально разработаны для эффективного хранения и извлечения больших объемов данных на диске, обеспечивая высокую производительность поиска, вставки, удаления и запросов диапазона.
Основные реляционные базы данных, такие как MySQL (InnoDB), PostgreSQL, SQL Server и Oracle, используют деревья B+ для первичных и вторичных индексов, что делает их незаменимыми для масштабируемых, высокопроизводительных систем баз данных.
КЛЮЧЕВЫЕ ХАРАКТЕРИСТИКИ
- Все данные в листовых узлах
В B+ дереве все фактические данные записей (или указатели на полные записи) хранятся исключительно в листовых узлах. Внутренние узлы хранят только ключи и указатели на дочерние узлы, облегчая навигацию.
- Сбалансированная, многоуровневая структура
B+ деревья всегда сбалансированы по высоте. Все листовые узлы находятся на одной глубине, обеспечивая сложность O(log n) для операций поиска, вставки и удаления, независимо от размера базы данных.
- Эффективные запросы диапазона и упорядоченные запросы
Листовые узлы связаны вместе в двунаправленном списке, что позволяет быстро выполнять последовательный доступ для запросов диапазона, таких как BETWEEN, ORDER BY и сканирование индексов.
- Высокая степень заполнения
Каждый узел может содержать много ключей (высокая степень заполнения), что минимизирует высоту дерева и уменьшает дисковый ввод-вывод за счет максимизации данных на чтение.
- Оптимизация диска
B+ деревья разработаны для соответствия размерам блоков диска, что уменьшает количество обращений к диску, необходимых для операций.
ПОЧЕМУ B+ ДЕРЕВЬЯ ПРЕДПОЧИТАЮТСЯ В БАЗАХ ДАННЫХ?
- Сбалансированная структура обеспечивает последовательный доступ.
- Высокая степень заполнения соответствует размерам страниц диска, уменьшая ввод-вывод.
- Связанные листья делают сканирование диапазона быстрым.
- Узлы могут быть разделены/объединены с минимальным блокированием, поддерживая высококонкурентные среды.
ИСПОЛЬЗОВАНИЕ В ОСНОВНЫХ СИСТЕМАХ БАЗ ДАННЫХ
- MySQL (InnoDB)
Кластерный индекс (первичный ключ): хранит всю строку данных в B+ дереве.
Вторичные индексы: B+ деревья содержат индексированные столбцы и указатели на первичный ключ.
- PostgreSQL
Тип индекса по умолчанию (btree) для большинства столбцов.
Используется для уникальных и неуникальных индексов.
Поддерживает эффективные запросы на равенство и диапазон.
- СУБД Oracle
B+ деревья используются для стандартных индексов (одиночные, составные, основанные на функциях).
Организованные таблицы индексов (IOT) хранят все данные в листовых блоках B+ дерева.
Листовые блоки связаны для сканирования диапазона.
#database
Деревья B+ являются наиболее широко используемой структурой данных для индексирования в современных реляционных системах баз данных. Они специально разработаны для эффективного хранения и извлечения больших объемов данных на диске, обеспечивая высокую производительность поиска, вставки, удаления и запросов диапазона.
Основные реляционные базы данных, такие как MySQL (InnoDB), PostgreSQL, SQL Server и Oracle, используют деревья B+ для первичных и вторичных индексов, что делает их незаменимыми для масштабируемых, высокопроизводительных систем баз данных.
КЛЮЧЕВЫЕ ХАРАКТЕРИСТИКИ
- Все данные в листовых узлах
В B+ дереве все фактические данные записей (или указатели на полные записи) хранятся исключительно в листовых узлах. Внутренние узлы хранят только ключи и указатели на дочерние узлы, облегчая навигацию.
- Сбалансированная, многоуровневая структура
B+ деревья всегда сбалансированы по высоте. Все листовые узлы находятся на одной глубине, обеспечивая сложность O(log n) для операций поиска, вставки и удаления, независимо от размера базы данных.
- Эффективные запросы диапазона и упорядоченные запросы
Листовые узлы связаны вместе в двунаправленном списке, что позволяет быстро выполнять последовательный доступ для запросов диапазона, таких как BETWEEN, ORDER BY и сканирование индексов.
- Высокая степень заполнения
Каждый узел может содержать много ключей (высокая степень заполнения), что минимизирует высоту дерева и уменьшает дисковый ввод-вывод за счет максимизации данных на чтение.
- Оптимизация диска
B+ деревья разработаны для соответствия размерам блоков диска, что уменьшает количество обращений к диску, необходимых для операций.
ПОЧЕМУ B+ ДЕРЕВЬЯ ПРЕДПОЧИТАЮТСЯ В БАЗАХ ДАННЫХ?
- Сбалансированная структура обеспечивает последовательный доступ.
- Высокая степень заполнения соответствует размерам страниц диска, уменьшая ввод-вывод.
- Связанные листья делают сканирование диапазона быстрым.
- Узлы могут быть разделены/объединены с минимальным блокированием, поддерживая высококонкурентные среды.
ИСПОЛЬЗОВАНИЕ В ОСНОВНЫХ СИСТЕМАХ БАЗ ДАННЫХ
- MySQL (InnoDB)
Кластерный индекс (первичный ключ): хранит всю строку данных в B+ дереве.
Вторичные индексы: B+ деревья содержат индексированные столбцы и указатели на первичный ключ.
- PostgreSQL
Тип индекса по умолчанию (btree) для большинства столбцов.
Используется для уникальных и неуникальных индексов.
Поддерживает эффективные запросы на равенство и диапазон.
- СУБД Oracle
B+ деревья используются для стандартных индексов (одиночные, составные, основанные на функциях).
Организованные таблицы индексов (IOT) хранят все данные в листовых блоках B+ дерева.
Листовые блоки связаны для сканирования диапазона.
#database
🔥9👍3👏1🏆1
Топ-10 методов масштабирования баз данных
1. Индексация
Создание индексов для столбцов, которые часто используются в запросах, для ускорения процесса извлечения данных.
2. Вертикальное масштабирование
Модернизация сервера базы данных путём добавления дополнительных процессоров (CPU), оперативной памяти (RAM) или места для хранения данных для обработки возросшей нагрузки.
3. Кеширование
Хранение часто запрашиваемых данных в оперативной памяти (например, с помощью Redis) для снижения нагрузки на базу данных и улучшения времени отклика.
4. Шардинг
Распределение данных между несколькими серверами путём разделения базы данных на более мелкие независимые шарды, что позволяет осуществлять горизонтальное масштабирование и улучшать производительность.
5. Репликация
Создание нескольких копий (реплик) базы данных на разных серверах, что позволяет распределять запросы на чтение между репликами и повышать доступность системы.
6. Оптимизация запросов
Настройка SQL-запросов, устранение ресурсоёмких операций и эффективное использование индексов для повышения скорости выполнения и снижения нагрузки на базу данных.
7. Пул соединений
Снижение накладных расходов на открытие и закрытие соединений с базой данных путём повторного использования существующих соединений, что улучшает производительность при высокой нагрузке.
8. Вертикальное партиционирование
Разделение больших таблиц на более мелкие, удобные для управления части (партиции), каждая из которых содержит подмножество столбцов из исходной таблицы.
9. Денормализация
Хранение данных в избыточном, но структурированном формате для минимизации сложных объединений (join) и ускорения операций чтения при высокой нагрузке.
10. Материализованные представления
Предварительный расчёт и сохранение результатов сложных запросов в виде отдельных таблиц, что позволяет избежать дорогостоящих пересчётов, снижает нагрузку на базу данных и улучшает время отклика.
#database
1. Индексация
Создание индексов для столбцов, которые часто используются в запросах, для ускорения процесса извлечения данных.
2. Вертикальное масштабирование
Модернизация сервера базы данных путём добавления дополнительных процессоров (CPU), оперативной памяти (RAM) или места для хранения данных для обработки возросшей нагрузки.
3. Кеширование
Хранение часто запрашиваемых данных в оперативной памяти (например, с помощью Redis) для снижения нагрузки на базу данных и улучшения времени отклика.
4. Шардинг
Распределение данных между несколькими серверами путём разделения базы данных на более мелкие независимые шарды, что позволяет осуществлять горизонтальное масштабирование и улучшать производительность.
5. Репликация
Создание нескольких копий (реплик) базы данных на разных серверах, что позволяет распределять запросы на чтение между репликами и повышать доступность системы.
6. Оптимизация запросов
Настройка SQL-запросов, устранение ресурсоёмких операций и эффективное использование индексов для повышения скорости выполнения и снижения нагрузки на базу данных.
7. Пул соединений
Снижение накладных расходов на открытие и закрытие соединений с базой данных путём повторного использования существующих соединений, что улучшает производительность при высокой нагрузке.
8. Вертикальное партиционирование
Разделение больших таблиц на более мелкие, удобные для управления части (партиции), каждая из которых содержит подмножество столбцов из исходной таблицы.
9. Денормализация
Хранение данных в избыточном, но структурированном формате для минимизации сложных объединений (join) и ускорения операций чтения при высокой нагрузке.
10. Материализованные представления
Предварительный расчёт и сохранение результатов сложных запросов в виде отдельных таблиц, что позволяет избежать дорогостоящих пересчётов, снижает нагрузку на базу данных и улучшает время отклика.
#database
❤13🥴1
Добавил мобильную версию руководства по языку SQL и работе с базами данных на примере SQL Server
https://www.rustore.ru/catalog/app/com.metanit.sql_tutorial
#sql #database
https://www.rustore.ru/catalog/app/com.metanit.sql_tutorial
#sql #database
🔥16🤮3❤2🥰1👏1
Фантомные чтения
(описание к предыдущему посту)
В PostgreSQL и MySQL возможно, что одинаковые запросы SELECT в рамках одной транзакции могут возвращать разные результаты.
Рассмотрим пример с базой данных, в которой работают два клиента. Клиент A начинает транзакцию и выполняет SELECT всех заказов с общей ценой > 100 долларов. Пока он продолжает выполнять другие запросы, клиент B вставляет в таблицу новый заказ и фиксирует изменения (COMMIT). Наконец, клиент A снова запрашивает заказы с общей суммой > 100 долларов, но на этот раз видит новую строку, добавленную клиентом B!
Допускается ли такое поведение, зависит от настроенного уровня изоляции.
По умолчанию PostgreSQL использует уровень READ COMMITTED, который допускает фантомные чтения. Отдельные запросы получают согласованное представление базы данных, но между запросами в рамках одной транзакции могут наблюдаться изменения, зафиксированные другими транзакциями.
Как и PostgreSQL, MySQL имеет четыре настраиваемых пользователем уровня изоляции. Использование строгого уровня, такого как SERIALIZABLE, предотвращает фантомные чтения, в то время как более свободные уровни, такие как READ COMMITTED, допускают их (по умолчанию в MySQL используется REPEATABLE READ).
Почему бы не установить везде уровень SERIALIZABLE? Всё дело в производительности! Более строгие уровни требуют большего количества блокировок и снижают производительность, в то время как более свободные уровни обеспечивают более высокую производительность за счёт возможных несоответствий.
#sql #mysql #postgresql #database
(описание к предыдущему посту)
В PostgreSQL и MySQL возможно, что одинаковые запросы SELECT в рамках одной транзакции могут возвращать разные результаты.
Рассмотрим пример с базой данных, в которой работают два клиента. Клиент A начинает транзакцию и выполняет SELECT всех заказов с общей ценой > 100 долларов. Пока он продолжает выполнять другие запросы, клиент B вставляет в таблицу новый заказ и фиксирует изменения (COMMIT). Наконец, клиент A снова запрашивает заказы с общей суммой > 100 долларов, но на этот раз видит новую строку, добавленную клиентом B!
Допускается ли такое поведение, зависит от настроенного уровня изоляции.
По умолчанию PostgreSQL использует уровень READ COMMITTED, который допускает фантомные чтения. Отдельные запросы получают согласованное представление базы данных, но между запросами в рамках одной транзакции могут наблюдаться изменения, зафиксированные другими транзакциями.
Как и PostgreSQL, MySQL имеет четыре настраиваемых пользователем уровня изоляции. Использование строгого уровня, такого как SERIALIZABLE, предотвращает фантомные чтения, в то время как более свободные уровни, такие как READ COMMITTED, допускают их (по умолчанию в MySQL используется REPEATABLE READ).
Почему бы не установить везде уровень SERIALIZABLE? Всё дело в производительности! Более строгие уровни требуют большего количества блокировок и снижают производительность, в то время как более свободные уровни обеспечивают более высокую производительность за счёт возможных несоответствий.
#sql #mysql #postgresql #database
Telegram
METANIT.COM
Фантомные чтения
(подробное описание в следующем посте)
(подробное описание в следующем посте)
❤3
6 основных типов ключей в базах данных:
1. Primary key (первичный ключ) — уникальный идентификатор для каждой записи в таблице; не может быть пустым и должен быть уникальным во всей таблице.
2. Foreign key (внешний ключ) — поле в таблице, которое соответствует первичному ключу другой таблицы; создаёт связь между таблицами.
3. Composite key (составной ключ) — комбинация двух или более столбцов, используемых как первичный ключ; применяется, если один столбец не может однозначно идентифицировать запись.
4. Alternate key (альтернативный ключ) — уникальный идентификатор записи, который не является первичным ключом; используется как вторичный способ поиска данных.
5. Candidate key (потенциальный ключ) — уникальный идентификатор записи, который потенциально может быть использован как первичный ключ.
6. Surrogate key (суррогатный ключ) — уникальный идентификатор, присвоенный записи в таблице, обычно создаваемый самой базой данных, а не пользователем.
#sql #database
1. Primary key (первичный ключ) — уникальный идентификатор для каждой записи в таблице; не может быть пустым и должен быть уникальным во всей таблице.
2. Foreign key (внешний ключ) — поле в таблице, которое соответствует первичному ключу другой таблицы; создаёт связь между таблицами.
3. Composite key (составной ключ) — комбинация двух или более столбцов, используемых как первичный ключ; применяется, если один столбец не может однозначно идентифицировать запись.
4. Alternate key (альтернативный ключ) — уникальный идентификатор записи, который не является первичным ключом; используется как вторичный способ поиска данных.
5. Candidate key (потенциальный ключ) — уникальный идентификатор записи, который потенциально может быть использован как первичный ключ.
6. Surrogate key (суррогатный ключ) — уникальный идентификатор, присвоенный записи в таблице, обычно создаваемый самой базой данных, а не пользователем.
#sql #database
❤8👍3🔥2🤔1
Многие используют СУБД Postgres, но не многие знают, что Postgres предоставляет специальную утилиту для проверки производительности - explain.
Для проверки производительности работы с базой данных регулярно запускайте команды
#sql #postgresql #database
Для проверки производительности работы с базой данных регулярно запускайте команды
explain и explain analyze и научитесь интерпретировать их выходные данные. Это может помочь найти узкие места при запросах к БД#sql #postgresql #database
👍23🔥5👏1
Что происходит, когда вы добавляете строку в Postgres?
(продолжение предыдущего поста)
Postgres должен гарантировать сохранность данных, обеспечивая при этом высокую производительность записи и возможность восстановления после сбоев. Ключ к решению этой задачи — журнал упреждающей записи (Write‑Ahead Log, WAL).
(1) Postgres получает запрос и определяет, на какую страницу данных его разместить. Эта страница может уже находиться в памяти (в буферном пуле), либо её придётся загрузить с диска, либо даже создать новую.
(2) Новая запись помещается только в эту страницу в памяти. Страница помечается как «грязная» (*dirty*), что означает: её нужно будет в будущем записать на диск — но не немедленно.
(3) Новая запись добавляется в буфер памяти для WAL. Она содержит всю информацию, необходимую для восстановления операции вставки.
(4) WAL записывается на диск (с помощью
Когда клиент получает подтверждение об успехе, данные гарантированно записаны в последовательный WAL (что обеспечивает высокую производительность записи), но не обязательно — в файл данных таблицы (где шаблоны операций ввода‑вывода менее предсказуемы). Последнее происходит позже — посредством контрольных точек, фоновых заданий или принудительной записи из‑за вытеснения страниц памяти. Если сбой сервера произойдёт до того, как данные будут записаны на диск, журнал будет воспроизведён для восстановления подтверждённых данных.
WAL — это основа всего процесса! Он обеспечивает высокопроизводительный ввод‑вывод и возможность восстановления после сбоев.
#sql #database #postgresql
(продолжение предыдущего поста)
Postgres должен гарантировать сохранность данных, обеспечивая при этом высокую производительность записи и возможность восстановления после сбоев. Ключ к решению этой задачи — журнал упреждающей записи (Write‑Ahead Log, WAL).
(1) Postgres получает запрос и определяет, на какую страницу данных его разместить. Эта страница может уже находиться в памяти (в буферном пуле), либо её придётся загрузить с диска, либо даже создать новую.
(2) Новая запись помещается только в эту страницу в памяти. Страница помечается как «грязная» (*dirty*), что означает: её нужно будет в будущем записать на диск — но не немедленно.
(3) Новая запись добавляется в буфер памяти для WAL. Она содержит всю информацию, необходимую для восстановления операции вставки.
(4) WAL записывается на диск (с помощью
fsync или аналогичного механизма), чтобы гарантировать сохранение данных в надёжном хранилище. После успешного выполнения этого шага Postgres возвращает клиенту подтверждение об успешном выполнении.Когда клиент получает подтверждение об успехе, данные гарантированно записаны в последовательный WAL (что обеспечивает высокую производительность записи), но не обязательно — в файл данных таблицы (где шаблоны операций ввода‑вывода менее предсказуемы). Последнее происходит позже — посредством контрольных точек, фоновых заданий или принудительной записи из‑за вытеснения страниц памяти. Если сбой сервера произойдёт до того, как данные будут записаны на диск, журнал будет воспроизведён для восстановления подтверждённых данных.
WAL — это основа всего процесса! Он обеспечивает высокопроизводительный ввод‑вывод и возможность восстановления после сбоев.
#sql #database #postgresql
Telegram
METANIT.COM
Что происходит, когда вы добавляете строку в Postgres?
(продолжение в следующем посте)
(продолжение в следующем посте)
👍11❤4👏1
Microsoft выпустил новое поколение свой СУБД - SQL Server 2025.
Основные изменения:
- Интеграция ИИ непосредственно в ядро SQL Server, что обеспечивает расширенный семантический поиск для более глубокого анализа и понимания естественного языка в корпоративных данных.
Управление моделями встроено в T-SQL, поддерживая бесшовную интеграцию с Microsoft Foundry, Azure OpenAI Service, OpenAI, Ollama и другими системами, что позволяет безопасно разворачивать их где угодно, как локально, так и в облаке. Разработчики могут легко переключаться между моделями, не изменяя код, а такие важные элементы ИИ, как векторное встраивание, фрагментация текста и индексация DiskANN, поддерживаются нативно.
- Большие возможности для разработчиков SQL за последнее десятилетие, оптимизируя разработку и повышая производительность. Встроенная поддержка JSON, REST API, регулярных выражений и нечеткого соответствия строк обеспечивает более эффективное обогащение и проверку данных. Потоковая передача событий изменений позволяет создавать приложения, управляемые событиями в режиме реального времени.
- Инструменты SQL. SQL Server 2025 предлагает важные обновления для всей платформы данных. SQL Server Management Studio (SSMS 22) уже доступна для всех пользователей и предлагает официальную поддержку SQL Server 2025, улучшенную поддержку ИИ и поддержку ARM64. SSMS 22 также включает поддержку ИИ при установке рабочей нагрузки GitHub Copilot, которая использует ту же подписку GitHub, что и GitHub Copilot в Visual Studio или VS Code.
- SQL Server 2025 продолжает развивать безопасность СУБД. Оптимизированная блокировка снижает потребление памяти для блокировки, минимизирует блокировку и повышает параллелизм.
Управление ресурсами пространства Tempdb повышает надежность сервера. Дополнительная оптимизация плана параметров делает производительность запросов более стабильной. SQL Server 2025 продолжает укреплять свои критически важные возможности, улучшая группы доступности Always On (AG) и возможности аварийного восстановления. Основное внимание уделяется более быстрому отказоустойчивому режиму, улучшенной диагностике и гибридной гибкости.
- SQL Server 2025 на Linux представляет несколько важных улучшений. Безопасность усилена поддержкой TLS 1.3, настраиваемыми политиками паролей и подписанными образами контейнеров. Поддержка платформ расширена и теперь включает RHEL 10 и Ubuntu 24.04, а производительность повышена благодаря поддержке tmpfs для tempdb и контейнерных развертываний. Расширенная аналитика доступна благодаря поддержке универсальных источников данных ODBC через PolyBase. Процесс разработки оптимизирован благодаря интеграции с Visual Studio Code для локального развертывания контейнеров с использованием расширения mssql и проверенных шаблонов развертывания в сотрудничестве с Red Hat, что обеспечивает поддержку современных рабочих нагрузок и сценариев ИИ в гибридных средах.
По словам Microsoft, предварительные тесты показывают, что SQL Server 2025, работающий на процессорах AMD EPYC с оборудованием HPE, обеспечивает ощутимый прирост производительности и ценности. Рабочая нагрузка объёмом 10 ТБ устанавливает новый рекорд производительности для SQL Server. По соотношению цена/производительность SQL Server 2025 демонстрирует улучшение на 4% в категории 3 ТБ по сравнению с предыдущими результатами.
https://techcommunity.microsoft.com/blog/sqlserver/sql-server-2025-is-now-generally-available/4470570
#sql #sqlserver #database
Основные изменения:
- Интеграция ИИ непосредственно в ядро SQL Server, что обеспечивает расширенный семантический поиск для более глубокого анализа и понимания естественного языка в корпоративных данных.
Управление моделями встроено в T-SQL, поддерживая бесшовную интеграцию с Microsoft Foundry, Azure OpenAI Service, OpenAI, Ollama и другими системами, что позволяет безопасно разворачивать их где угодно, как локально, так и в облаке. Разработчики могут легко переключаться между моделями, не изменяя код, а такие важные элементы ИИ, как векторное встраивание, фрагментация текста и индексация DiskANN, поддерживаются нативно.
- Большие возможности для разработчиков SQL за последнее десятилетие, оптимизируя разработку и повышая производительность. Встроенная поддержка JSON, REST API, регулярных выражений и нечеткого соответствия строк обеспечивает более эффективное обогащение и проверку данных. Потоковая передача событий изменений позволяет создавать приложения, управляемые событиями в режиме реального времени.
- Инструменты SQL. SQL Server 2025 предлагает важные обновления для всей платформы данных. SQL Server Management Studio (SSMS 22) уже доступна для всех пользователей и предлагает официальную поддержку SQL Server 2025, улучшенную поддержку ИИ и поддержку ARM64. SSMS 22 также включает поддержку ИИ при установке рабочей нагрузки GitHub Copilot, которая использует ту же подписку GitHub, что и GitHub Copilot в Visual Studio или VS Code.
- SQL Server 2025 продолжает развивать безопасность СУБД. Оптимизированная блокировка снижает потребление памяти для блокировки, минимизирует блокировку и повышает параллелизм.
Управление ресурсами пространства Tempdb повышает надежность сервера. Дополнительная оптимизация плана параметров делает производительность запросов более стабильной. SQL Server 2025 продолжает укреплять свои критически важные возможности, улучшая группы доступности Always On (AG) и возможности аварийного восстановления. Основное внимание уделяется более быстрому отказоустойчивому режиму, улучшенной диагностике и гибридной гибкости.
- SQL Server 2025 на Linux представляет несколько важных улучшений. Безопасность усилена поддержкой TLS 1.3, настраиваемыми политиками паролей и подписанными образами контейнеров. Поддержка платформ расширена и теперь включает RHEL 10 и Ubuntu 24.04, а производительность повышена благодаря поддержке tmpfs для tempdb и контейнерных развертываний. Расширенная аналитика доступна благодаря поддержке универсальных источников данных ODBC через PolyBase. Процесс разработки оптимизирован благодаря интеграции с Visual Studio Code для локального развертывания контейнеров с использованием расширения mssql и проверенных шаблонов развертывания в сотрудничестве с Red Hat, что обеспечивает поддержку современных рабочих нагрузок и сценариев ИИ в гибридных средах.
По словам Microsoft, предварительные тесты показывают, что SQL Server 2025, работающий на процессорах AMD EPYC с оборудованием HPE, обеспечивает ощутимый прирост производительности и ценности. Рабочая нагрузка объёмом 10 ТБ устанавливает новый рекорд производительности для SQL Server. По соотношению цена/производительность SQL Server 2025 демонстрирует улучшение на 4% в категории 3 ТБ по сравнению с предыдущими результатами.
https://techcommunity.microsoft.com/blog/sqlserver/sql-server-2025-is-now-generally-available/4470570
#sql #sqlserver #database
TECHCOMMUNITY.MICROSOFT.COM
SQL Server 2025 is Now Generally Available | Microsoft Community Hub
Today at Ignite, we announce the general availability of SQL Server 2025. This marks the latest milestone in the more than 30-year history of SQL Server. It...
🤡13👍6🔥3😁2🤝2🌚1
Что такое ACID
(продолжение предыдущего поста)
ACID - набор свойств, которые обеспечивают надежность и целостность данных при обработке транзакций в системах управления базами данных (СУБД). ACID расшифровывается как Atomicity (атомарность), Consistency (согласованность), Isolation (изолированность), Durability (долговечность)
1. Atomicity (Атомарность) — «Всё или ничего» (верхний левый угол):
* Гарантирует, что транзакция либо выполняется полностью, либо не выполняется вовсе.
* Если транзакция не может быть завершена, СУБД откатывает все изменения (возвращает базу данных к предыдущему состоянию).
* На схеме показан пример транзакции с операциями
2. Consistency (Согласованность) — «Сохранение инвариантов базы данных» (верхний правый угол):
* Обеспечивает, что каждая транзакция переводит базу данных из одного согласованного состояния в другое.
* Транзакции не нарушают правила целостности данных.
* На схеме показано, как база данных переходит из consistent state A (согласованное состояние A) в consistent state B (согласованное состояние B) через выполнение транзакций.
3. Isolation (Изолированность) — «Параллельные транзакции изолированы друг от друга» (нижний левый угол):
* Гарантирует, что каждая транзакция выполняется независимо от других, без видимости промежуточных изменений.
* Это предотвращает конфликты между транзакциями.
* На схеме изображены две транзакции (Transaction A и Transaction B), которые выполняются изолированно, не влияя друг на друга.
4. Durability (Долговечность) — «Данные сохраняются после фиксации транзакции даже при сбое системы» (нижний правый угол):
* Гарантирует, что изменения, внесённые транзакцией, сохраняются и становятся постоянными.
* Даже если система выйдет из строя после фиксации транзакции, данные останутся доступными.
* На схеме показан процесс:
1. Фиксация транзакции (commit).
2. Репликация данных на копии базы (replica a, replica b), что обеспечивает сохранность информации.
#database #sql
(продолжение предыдущего поста)
ACID - набор свойств, которые обеспечивают надежность и целостность данных при обработке транзакций в системах управления базами данных (СУБД). ACID расшифровывается как Atomicity (атомарность), Consistency (согласованность), Isolation (изолированность), Durability (долговечность)
1. Atomicity (Атомарность) — «Всё или ничего» (верхний левый угол):
* Гарантирует, что транзакция либо выполняется полностью, либо не выполняется вовсе.
* Если транзакция не может быть завершена, СУБД откатывает все изменения (возвращает базу данных к предыдущему состоянию).
* На схеме показан пример транзакции с операциями
write 1, write 2, write 3, write 4, которые либо все фиксируются (commit all), либо отменяются (or nothing).2. Consistency (Согласованность) — «Сохранение инвариантов базы данных» (верхний правый угол):
* Обеспечивает, что каждая транзакция переводит базу данных из одного согласованного состояния в другое.
* Транзакции не нарушают правила целостности данных.
* На схеме показано, как база данных переходит из consistent state A (согласованное состояние A) в consistent state B (согласованное состояние B) через выполнение транзакций.
3. Isolation (Изолированность) — «Параллельные транзакции изолированы друг от друга» (нижний левый угол):
* Гарантирует, что каждая транзакция выполняется независимо от других, без видимости промежуточных изменений.
* Это предотвращает конфликты между транзакциями.
* На схеме изображены две транзакции (Transaction A и Transaction B), которые выполняются изолированно, не влияя друг на друга.
4. Durability (Долговечность) — «Данные сохраняются после фиксации транзакции даже при сбое системы» (нижний правый угол):
* Гарантирует, что изменения, внесённые транзакцией, сохраняются и становятся постоянными.
* Даже если система выйдет из строя после фиксации транзакции, данные останутся доступными.
* На схеме показан процесс:
1. Фиксация транзакции (commit).
2. Репликация данных на копии базы (replica a, replica b), что обеспечивает сохранность информации.
#database #sql
Telegram
METANIT.COM
Что такое ACID
(продолжение в следующем посте)
(продолжение в следующем посте)
❤6🔥4❤🔥3