10 лучших методов масштабирования баз данных:
1. Индексация: cоздание индексов для часто запрашиваемых столбцов для ускорения поиска данных
2. Вертикальное масштабирование: обновление сервера базы данных, использование более мощного процессора, ОЗУ или хранилища для обработки возросшей нагрузки.
3. Кэшировнаие: хранение часто используемых данных в памяти (например, Redis, Memcached), чтобы снизить нагрузку на базу данных и улучшить время отклика
4. Шардинг: распределение данных по нескольким серверам, разделение БД на более мелкие независимые фрагменты, что обеспечивает горизонтальное масштабирование и повышение производительности.
5. Репликация : Создание нескольких копий (реплик) базы данных на разных серверах, что позволяет распределять запросы на чтение между репликами и повышать доступность.
6. Оптимизация запросов: тонкая настройка SQL-запросов, исключение дорогостоящих операций и эффективное использование индексов для повышения скорости выполнения и снижения нагрузки на базу данных.
7. Пул подключений: сокращение накладных расходов на открытие/закрытие соединений с базой данных за счет повторного использования существующих соединений, что повышает производительность при интенсивном трафике.
8. Декомпозиция БД: разделение больших таблиц на более мелкие, более управляемые части (разделы), каждая из которых содержит подмножество столбцов из исходной таблицы.
9. Денормализация: хранение данных в избыточном, но структурированном формате, чтобы минимизировать сложные соединения данных и ускорить рабочие нагрузки с интенсивным чтением.
10. Представления: предварительное вычисление и сохранение результаты сложных запросов в виде отдельных таблиц, чтобы избежать дорогостоящих пересчетов, снизить нагрузку на базу данных и улучшить время отклика.
1. Индексация: cоздание индексов для часто запрашиваемых столбцов для ускорения поиска данных
2. Вертикальное масштабирование: обновление сервера базы данных, использование более мощного процессора, ОЗУ или хранилища для обработки возросшей нагрузки.
3. Кэшировнаие: хранение часто используемых данных в памяти (например, Redis, Memcached), чтобы снизить нагрузку на базу данных и улучшить время отклика
4. Шардинг: распределение данных по нескольким серверам, разделение БД на более мелкие независимые фрагменты, что обеспечивает горизонтальное масштабирование и повышение производительности.
5. Репликация : Создание нескольких копий (реплик) базы данных на разных серверах, что позволяет распределять запросы на чтение между репликами и повышать доступность.
6. Оптимизация запросов: тонкая настройка SQL-запросов, исключение дорогостоящих операций и эффективное использование индексов для повышения скорости выполнения и снижения нагрузки на базу данных.
7. Пул подключений: сокращение накладных расходов на открытие/закрытие соединений с базой данных за счет повторного использования существующих соединений, что повышает производительность при интенсивном трафике.
8. Декомпозиция БД: разделение больших таблиц на более мелкие, более управляемые части (разделы), каждая из которых содержит подмножество столбцов из исходной таблицы.
9. Денормализация: хранение данных в избыточном, но структурированном формате, чтобы минимизировать сложные соединения данных и ускорить рабочие нагрузки с интенсивным чтением.
10. Представления: предварительное вычисление и сохранение результаты сложных запросов в виде отдельных таблиц, чтобы избежать дорогостоящих пересчетов, снизить нагрузку на базу данных и улучшить время отклика.
👍10✍3❤2👨💻1
Типы индексов базы данных
[1.] Кластерный индекс (clustered index)
◾️ Физически переупорядочивает строки данных на основе ключа индекса.
◾️ По одному индексу на таблицу
◾️ Значительно ускоряет запросы по диапазону (например, поиск всех заказов между датой X и Y) и запросы по индексированным столбцам
◾️ Может замедлить изменение данных (вставку, обновление, удаление) из-за переупорядочения.
[2.] Некластеризованный индекс (non-clustered index)
◾️ Создает отдельную структуру с указателями на строки данных, отсортированные по ключу индекса.
◾️ Допускается несколько индексов для одной таблицы.
◾️ Эффективно для поиска равенства (например, поиска клиента с идентификатором 123).
◾️ Может использоваться для индексов покрытия, где все требуемые столбцы включены в индекс.
[3.] Уникальный индекс
◾️ Гарантирует, что все значения в столбце или комбинации столбцов являются уникальными.
◾️ Могут быть кластеризованными или некластеризованными.
◾️ Предотвращает дублирование значений, обеспечивая целостность данных.
◾️ Часто используется для альтернативных ключей (кроме первичного ключа), которые должны быть уникальными.
[4.] Фильтрованный индекс (Filtered Index)
◾️ Индексирует только подмножество строк на основе предиката фильтра.
◾️ Улучшает производительность для запросов, которые часто фильтруют по указанному условию.
◾️ Уменьшает размер индекса по сравнению с индексацией всей таблицы.
[5.] Полнотекстовый индекс (Full-Text Index)
◾️ Обеспечивает эффективный поиск в текстовых данных (например, документах, статьях) на основе ключевых слов и фраз.
◾️ Использует специализированные алгоритмы индексации и поиска (например, инвертированные индексы).
Поддерживает такие лингвистические функции, как стемминг и тезаурус.
[6.] Композитный индекс (Composite Index)
◾️ Индекс, созданный по нескольким столбцам.
◾️ Может быть кластеризованным или некластеризованным.
◾️ Оптимизирует запросы, которые фильтруют или сортируют по нескольким столбцам.
◾️ Порядок столбцов в определении индекса имеет решающее значение для производительности.
[7.] Индекс покрытия/покрывающий индекс (Covering Index)
◾️ Включает все столбцы, необходимые для запроса, в сам индекс, избегая необходимости доступа к базовой таблице.
◾️ Может быть некластеризованным.
◾️ Значительно ускоряет запросы, которым нужны только данные из индексированных столбцов.
[8.] Индекс с включенными столбцами (Index with Included Columns)
◾️ Аналогично покрывающему индексу, но включает только неключевые столбцы.
◾️ Некластеризованные.
◾️ Может улучшить производительность запроса, если дополнительные столбцы используются часто.
[9.] XML-индекс
◾️ Индексирует XML-данные для эффективного выполнения запросов с использованием XPath или специфичных для XML функций.
◾️ Доступно в базах данных, поддерживающих типы данных XML.
◾️ Позволяет запрашивать определенные элементы или атрибуты в XML-документах.
[10.] Частичный индекс (Partial Index)
◾️ Индексирует только подмножество строк, которые соответствуют определенному условию.
◾️ Аналогично отфильтрованным индексам, но с большей гибкостью в определении условий фильтрации.
◾️ Может улучшить производительность запросов для узкоспециализированных вариантов использования.
[11.] Индекс битовой карты (Bitmap Index)
◾️ Эффективно индексирует столбцы с низкой кардинальностью (несколько уникальных значений).
◾️ Сохраняет битовые карты, указывающие, какие строки содержат определенное значение.
[1.] Кластерный индекс (clustered index)
◾️ Физически переупорядочивает строки данных на основе ключа индекса.
◾️ По одному индексу на таблицу
◾️ Значительно ускоряет запросы по диапазону (например, поиск всех заказов между датой X и Y) и запросы по индексированным столбцам
◾️ Может замедлить изменение данных (вставку, обновление, удаление) из-за переупорядочения.
[2.] Некластеризованный индекс (non-clustered index)
◾️ Создает отдельную структуру с указателями на строки данных, отсортированные по ключу индекса.
◾️ Допускается несколько индексов для одной таблицы.
◾️ Эффективно для поиска равенства (например, поиска клиента с идентификатором 123).
◾️ Может использоваться для индексов покрытия, где все требуемые столбцы включены в индекс.
[3.] Уникальный индекс
◾️ Гарантирует, что все значения в столбце или комбинации столбцов являются уникальными.
◾️ Могут быть кластеризованными или некластеризованными.
◾️ Предотвращает дублирование значений, обеспечивая целостность данных.
◾️ Часто используется для альтернативных ключей (кроме первичного ключа), которые должны быть уникальными.
[4.] Фильтрованный индекс (Filtered Index)
◾️ Индексирует только подмножество строк на основе предиката фильтра.
◾️ Улучшает производительность для запросов, которые часто фильтруют по указанному условию.
◾️ Уменьшает размер индекса по сравнению с индексацией всей таблицы.
[5.] Полнотекстовый индекс (Full-Text Index)
◾️ Обеспечивает эффективный поиск в текстовых данных (например, документах, статьях) на основе ключевых слов и фраз.
◾️ Использует специализированные алгоритмы индексации и поиска (например, инвертированные индексы).
Поддерживает такие лингвистические функции, как стемминг и тезаурус.
[6.] Композитный индекс (Composite Index)
◾️ Индекс, созданный по нескольким столбцам.
◾️ Может быть кластеризованным или некластеризованным.
◾️ Оптимизирует запросы, которые фильтруют или сортируют по нескольким столбцам.
◾️ Порядок столбцов в определении индекса имеет решающее значение для производительности.
[7.] Индекс покрытия/покрывающий индекс (Covering Index)
◾️ Включает все столбцы, необходимые для запроса, в сам индекс, избегая необходимости доступа к базовой таблице.
◾️ Может быть некластеризованным.
◾️ Значительно ускоряет запросы, которым нужны только данные из индексированных столбцов.
[8.] Индекс с включенными столбцами (Index with Included Columns)
◾️ Аналогично покрывающему индексу, но включает только неключевые столбцы.
◾️ Некластеризованные.
◾️ Может улучшить производительность запроса, если дополнительные столбцы используются часто.
[9.] XML-индекс
◾️ Индексирует XML-данные для эффективного выполнения запросов с использованием XPath или специфичных для XML функций.
◾️ Доступно в базах данных, поддерживающих типы данных XML.
◾️ Позволяет запрашивать определенные элементы или атрибуты в XML-документах.
[10.] Частичный индекс (Partial Index)
◾️ Индексирует только подмножество строк, которые соответствуют определенному условию.
◾️ Аналогично отфильтрованным индексам, но с большей гибкостью в определении условий фильтрации.
◾️ Может улучшить производительность запросов для узкоспециализированных вариантов использования.
[11.] Индекс битовой карты (Bitmap Index)
◾️ Эффективно индексирует столбцы с низкой кардинальностью (несколько уникальных значений).
◾️ Сохраняет битовые карты, указывающие, какие строки содержат определенное значение.
👍10❤2🔥1🤯1
Microsoft тестирует возможность установки Windows 11 в разделы диска с альтернативной файловой системой ReFS.
При чистой установке Windows с помощью файла ISO или прямой загрузке с помощью USB пользователь на этапе установки может выбрать в том числе тип файловой системы.
Возможность выбора типа файловой системы при разметке накопителя обнаружена в тестовой сборке с номером 27823 (Canary).
ReFS (Resilient File System) – файловая система, разрабатываемая Microsoft в качестве альтернативы NTFS. ReFS была представлена в 2012 г. и должна была стать альтернативой NTFS, переняв у нее все лучшее и отсеяв сложное. Например, в отличие от NTFS, ReFS не поддерживает короткие имена файлов, шифрование и сжатие на уровне файлов, а также жесткие ссылки и квоты. В то же время ReFS отличается более высокой надежностью, при этом в значительной степени сохраняет совместимость с возможностями NTFS
https://www.windowslatest.com/2025/03/27/windows-11-setup-will-let-you-choose-between-ntfs-and-refs-when-clean-installing/
При чистой установке Windows с помощью файла ISO или прямой загрузке с помощью USB пользователь на этапе установки может выбрать в том числе тип файловой системы.
Возможность выбора типа файловой системы при разметке накопителя обнаружена в тестовой сборке с номером 27823 (Canary).
ReFS (Resilient File System) – файловая система, разрабатываемая Microsoft в качестве альтернативы NTFS. ReFS была представлена в 2012 г. и должна была стать альтернативой NTFS, переняв у нее все лучшее и отсеяв сложное. Например, в отличие от NTFS, ReFS не поддерживает короткие имена файлов, шифрование и сжатие на уровне файлов, а также жесткие ссылки и квоты. В то же время ReFS отличается более высокой надежностью, при этом в значительной степени сохраняет совместимость с возможностями NTFS
https://www.windowslatest.com/2025/03/27/windows-11-setup-will-let-you-choose-between-ntfs-and-refs-when-clean-installing/
🤔6🙏3👏2👍1
Основные аспекты кэширования, которые следует учитывать:
Сценарии использования:
- Развертывание решения в памяти
- При работе с высоконагруженными системами
- Когда данные не обновляются часто
Техники кэширования:
- Cache aside
- Write-through
- Read-through
- Write-around
- Write-back
Алгоритмы удаления из кэша:
- Least Recently Used (LRU)
- Least Frequently Used (LFU)
- First-in First-out (FIFO)
- Random Replacement (RR)
Ключевые метрики:
- Коэффициент попадания в кэш
- Задержка
- Пропускная способность
- Коэффициент аннулирования (Invalidation Rate)
- Использование памяти
- использование ЦП
- Использование сети
Другие вопросы:
- Предварительная загрузка наиболее запрашиваемых данных при холодном пуске
- Время жизни (TTL)
Сценарии использования:
- Развертывание решения в памяти
- При работе с высоконагруженными системами
- Когда данные не обновляются часто
Техники кэширования:
- Cache aside
- Write-through
- Read-through
- Write-around
- Write-back
Алгоритмы удаления из кэша:
- Least Recently Used (LRU)
- Least Frequently Used (LFU)
- First-in First-out (FIFO)
- Random Replacement (RR)
Ключевые метрики:
- Коэффициент попадания в кэш
- Задержка
- Пропускная способность
- Коэффициент аннулирования (Invalidation Rate)
- Использование памяти
- использование ЦП
- Использование сети
Другие вопросы:
- Предварительная загрузка наиболее запрашиваемых данных при холодном пуске
- Время жизни (TTL)
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно алгоритмы балансировки нагрузки
👍7❤3🔥2
Типы ключей в базах данных
Primary key (Первичный ключ)
Уникальный идентификатор для каждой записи в таблице. Он не может быть равен NULL и должен быть уникальным для всей таблицы
Foreign key (Внешний ключ)
Поле в таблице, которое создает ссылочную связь между двумя таблицами. Оно используется для установления отношения между таблицами
Composite key (Составной ключ)
Комбинация двух или более столбцов, используемых в качестве первичного ключа, когда ни один отдельный столбец не достаточен для однозначной идентификации записи
Alternate key (Альтернативный ключ)
Уникальный идентификатор для записи, который не является первичным ключом. Его можно использовать в качестве вторичного ключа при поиске данных в таблице
Candidate key (Ключ-кандидат)
Уникальный идентификатор для записи в таблице, которая потенциально может использоваться в качестве первичного ключа
Surrogate key
Уникальный идентификатор для записи в таблице, обычно присваивается базой данных, а не самим пользователем
#database #sql
Primary key (Первичный ключ)
Уникальный идентификатор для каждой записи в таблице. Он не может быть равен NULL и должен быть уникальным для всей таблицы
Foreign key (Внешний ключ)
Поле в таблице, которое создает ссылочную связь между двумя таблицами. Оно используется для установления отношения между таблицами
Composite key (Составной ключ)
Комбинация двух или более столбцов, используемых в качестве первичного ключа, когда ни один отдельный столбец не достаточен для однозначной идентификации записи
Alternate key (Альтернативный ключ)
Уникальный идентификатор для записи, который не является первичным ключом. Его можно использовать в качестве вторичного ключа при поиске данных в таблице
Candidate key (Ключ-кандидат)
Уникальный идентификатор для записи в таблице, которая потенциально может использоваться в качестве первичного ключа
Surrogate key
Уникальный идентификатор для записи в таблице, обычно присваивается базой данных, а не самим пользователем
#database #sql
👍8🔥4🍾2
Media is too big
VIEW IN TELEGRAM
Стереотипы о программистах на различных языках согласно AI
😁30💩20🥰1👏1🤔1😢1
Схематически компиляция кода на C++ в exe-файл с помощью компилятора Microsoft Visual C++
#cpp
#cpp
👍11🍓6🔥3
Секционирование базы данных (partitioning) и Шардинг
Секционирование базы данных применяется для управляемости, а шардинг для масштабируемости.
Секционирование базы данных
Предполагает разделение данных на сегменты (разделы) для более удобного управления или группировки связанных данных.
Часто используется в рамках одной системы и прозрачно для приложения.
Шардинг
Предполагает разделение данных по нескольким базам данных или серверам для распределения нагрузки и горизонтального масштабирования.
Каждый сегмент работает независимо, и часто приложению требуется логика для направления запросов на нужный сегмент, если только система хранения данных не поддерживает перенаправление
Секционирование базы данных применяется для управляемости, а шардинг для масштабируемости.
Секционирование базы данных
Предполагает разделение данных на сегменты (разделы) для более удобного управления или группировки связанных данных.
Часто используется в рамках одной системы и прозрачно для приложения.
Шардинг
Предполагает разделение данных по нескольким базам данных или серверам для распределения нагрузки и горизонтального масштабирования.
Каждый сегмент работает независимо, и часто приложению требуется логика для направления запросов на нужный сегмент, если только система хранения данных не поддерживает перенаправление
👍8❤1🔥1
2 апреля 2025 года Роскомнадзор рекомендовал владельцам российских интернет-ресурсов отказаться от использования включённого по умолчанию расширения TLS ECH CDN-сервиса компании Cloudflare, так как оно обходит ограничения доступа к запрещённой в РФ информации.
В регуляторе сначала не пояснили, какое именно расширение имеется в виду, а также непонятно, где его надо отключить. Но потом появилсь дополнительная информация по этой ситуации.
«Американская компания CloudFlare, поставщик услуг CDN, включила в октябре 2024 года применение по умолчанию на своих серверах расширение TLS ECH (Encrypted Client Hello). Эта технология — средство обхода ограничений доступа к запрещенной в России информации. Его использование нарушает российское законодательство и ограничивается техническими средствами противодействия угрозам (ТСПУ)», — говорится в сообщении РКН.
«Рекомендуем владельцам информационных ресурсов отключить расширение TLS ECH или, что правильнее, использовать отечественные CDN‑сервисы, которые обеспечивают надёжное и безопасное функционирование ресурсов и защиту от компьютерных атак», — добавили в ведомстве.
https://www.interfax.ru/digital/1017951
В регуляторе сначала не пояснили, какое именно расширение имеется в виду, а также непонятно, где его надо отключить. Но потом появилсь дополнительная информация по этой ситуации.
«Американская компания CloudFlare, поставщик услуг CDN, включила в октябре 2024 года применение по умолчанию на своих серверах расширение TLS ECH (Encrypted Client Hello). Эта технология — средство обхода ограничений доступа к запрещенной в России информации. Его использование нарушает российское законодательство и ограничивается техническими средствами противодействия угрозам (ТСПУ)», — говорится в сообщении РКН.
«Рекомендуем владельцам информационных ресурсов отключить расширение TLS ECH или, что правильнее, использовать отечественные CDN‑сервисы, которые обеспечивают надёжное и безопасное функционирование ресурсов и защиту от компьютерных атак», — добавили в ведомстве.
https://www.interfax.ru/digital/1017951
Интерфакс
РКН рекомендует отказаться от обходящего блокировки расширения сервиса Cloudflare
Роскомнадзор (РКН) рекомендовал владельцам российских интернет-ресурсов отказаться от использования включённого по умолчанию расширения CDN-сервиса компании CloudFlare, так как оно обходит ограничения доступа к запрещённой в РФ информации."Американская компания…
🤡30🤣16👍2🥰2🖕2👏1
Рекомендации при разработке микросервисов:
1. Отдельное хранилище данных для каждого микросервиса.
2. Поддержка одинакового уровеня зрелости кода для разных сервисов
3. Отдельная сборка для каждого микросервиса
4. Каждый микросервис выполняет свою отдельную задачу
5. Развертывание в контейнерах
6. Разработка служб без сохранения состояния
7. Применение DDD (дизайн, ориентированный на предметную область)
8. Разработка микро-фронтенда
9. Оркестрация (автоматическое объединение, координация и управление) микросервисов
1. Отдельное хранилище данных для каждого микросервиса.
2. Поддержка одинакового уровеня зрелости кода для разных сервисов
3. Отдельная сборка для каждого микросервиса
4. Каждый микросервис выполняет свою отдельную задачу
5. Развертывание в контейнерах
6. Разработка служб без сохранения состояния
7. Применение DDD (дизайн, ориентированный на предметную область)
8. Разработка микро-фронтенда
9. Оркестрация (автоматическое объединение, координация и управление) микросервисов
👍16🔥1👏1