Как масштабировать базы данных?
Партиционирование (разделение) базы данных — это процесс разделения большой таблицы или базы данных на более мелкие, удобные для управления части, известные как партиции. Это позволяет нам запрашивать только части данных, что ускоряет их загрузку.
В целом существует два типа партиционирования:
1. Горизонтальное партиционирование (шардинг). Разделяет таблицы по строкам, при этом каждая партиция содержит одинаковую схему, но разные строки. Идеально подходит для многопользовательских приложений, где данные можно разделить по клиентам или пользователям для распределённых вычислений, или когда данные слишком велики для хранения в одной базе данных.
Существуют различные виды шардинга:
* Хеш-шардинг (Hash-based sharding). Шард определяется с помощью хеш-функции на определённом ключевом столбце в каждой записи. Эта хеш-функция равномерно распределяет записи по доступным шардам. Основное преимущество — равномерное распределение данных и нагрузки, но это может усложнить запросы, охватывающие несколько шардов, и затруднить повторную шардизацию.
* Ранг-шардинг (Range-based sharding). Разделение данных на шарды на основе диапазонов определённого ключа. Например, идентификаторы клиентов от 1 до 1000 могут храниться в одном шарде, а идентификаторы 1001–2000 — в другом. Этот подход упрощает запросы, включающие операции с диапазонами, но может привести к неравномерному распределению данных и горячим точкам, если данные распределены неравномерно.
* Директивный шардинг (Directory-based sharding). Этот метод использует справочную таблицу для сопоставления ключей с соответствующими шардами. Он обеспечивает отличную гибкость, позволяя легко добавлять или удалять шарды и выполнять простую повторную шардизацию.
При шардинге каждый сервер базы данных должен быть структурно идентичен, а записи данных должны быть разделены по шардированной базе данных.
2. Вертикальное партиционирование. Разделяет таблицы по столбцам или таблицам, отделяя часто используемые столбцы от менее используемых, оптимизируя время доступа и эффективность кэширования. Таким образом, каждая таблица может быть размещена в отдельной базе данных.
Однако шардинг базы данных — сложная задача. Это отнимает много времени, поскольку необходимо настроить множество вещей, таких как перемещение данных и сопоставление запросов. Кроме того, это требует финансовых затрат.
Вот несколько эффективных практик при возникновении проблем с базой данных:
1. Вертикальное масштабирование — добавление дополнительных ресурсов на сервер БД (CPU, память и т. д.).
2. Репликация — создание реплики для чтения из вашей БД. Это помогает улучшить производительность чтения, но также необходимо включить кэширование.
Если всё вышеперечисленное не помогает, то можно прибегнуть к партиционированию:
* Используйте горизонтальное партиционирование для больших таблиц, где масштабируемость и производительность для определённых запросов имеют решающее значение.
* Используйте вертикальное партиционирование, когда у вас есть таблицы со множеством столбцов, но не все они часто используются вместе.
Партиционирование (разделение) базы данных — это процесс разделения большой таблицы или базы данных на более мелкие, удобные для управления части, известные как партиции. Это позволяет нам запрашивать только части данных, что ускоряет их загрузку.
В целом существует два типа партиционирования:
1. Горизонтальное партиционирование (шардинг). Разделяет таблицы по строкам, при этом каждая партиция содержит одинаковую схему, но разные строки. Идеально подходит для многопользовательских приложений, где данные можно разделить по клиентам или пользователям для распределённых вычислений, или когда данные слишком велики для хранения в одной базе данных.
Существуют различные виды шардинга:
* Хеш-шардинг (Hash-based sharding). Шард определяется с помощью хеш-функции на определённом ключевом столбце в каждой записи. Эта хеш-функция равномерно распределяет записи по доступным шардам. Основное преимущество — равномерное распределение данных и нагрузки, но это может усложнить запросы, охватывающие несколько шардов, и затруднить повторную шардизацию.
* Ранг-шардинг (Range-based sharding). Разделение данных на шарды на основе диапазонов определённого ключа. Например, идентификаторы клиентов от 1 до 1000 могут храниться в одном шарде, а идентификаторы 1001–2000 — в другом. Этот подход упрощает запросы, включающие операции с диапазонами, но может привести к неравномерному распределению данных и горячим точкам, если данные распределены неравномерно.
* Директивный шардинг (Directory-based sharding). Этот метод использует справочную таблицу для сопоставления ключей с соответствующими шардами. Он обеспечивает отличную гибкость, позволяя легко добавлять или удалять шарды и выполнять простую повторную шардизацию.
При шардинге каждый сервер базы данных должен быть структурно идентичен, а записи данных должны быть разделены по шардированной базе данных.
2. Вертикальное партиционирование. Разделяет таблицы по столбцам или таблицам, отделяя часто используемые столбцы от менее используемых, оптимизируя время доступа и эффективность кэширования. Таким образом, каждая таблица может быть размещена в отдельной базе данных.
Однако шардинг базы данных — сложная задача. Это отнимает много времени, поскольку необходимо настроить множество вещей, таких как перемещение данных и сопоставление запросов. Кроме того, это требует финансовых затрат.
Вот несколько эффективных практик при возникновении проблем с базой данных:
1. Вертикальное масштабирование — добавление дополнительных ресурсов на сервер БД (CPU, память и т. д.).
2. Репликация — создание реплики для чтения из вашей БД. Это помогает улучшить производительность чтения, но также необходимо включить кэширование.
Если всё вышеперечисленное не помогает, то можно прибегнуть к партиционированию:
* Используйте горизонтальное партиционирование для больших таблиц, где масштабируемость и производительность для определённых запросов имеют решающее значение.
* Используйте вертикальное партиционирование, когда у вас есть таблицы со множеством столбцов, но не все они часто используются вместе.
❤7🔥2👏2
Вертикальное и горизонтальное масштабирование базы данных (к предыдущему посту)
Балансировщик нагрузки vs Обратный прокси vs API Gateway (продолжение)
Балансировщик нагрузки (Load Balancer)
- Равномерно распределяет трафик между серверами для повышения эффективности.
- Работает на уровне 4 (TCP) или уровне 7 (HTTP/HTTPS).
- Сценарии использования: высоконагруженные сайты, отказоустойчивость.
- Преимущества: повышает отказоустойчивость, обрабатывает всплески нагрузки, позволяет масштабирование.
- Недостатки: может стать единой точкой отказа без избыточности.
- Примеры: HAProxy, AWS ELB, Nginx.
Обратный прокси (Reverse Proxy)
- Пересылает клиентские запросы на серверы, скрывая детали серверов.
- Работает на уровне 7 (HTTP/HTTPS).
- Сценарии использования: SSL-терминирование, кэширование, публичный доступ к API.
- Преимущества: улучшает производительность, добавляет безопасность, позволяет фильтровать контент.
- Недостатки: добавляет сетевую задержку.
- Примеры: Nginx, Apache HTTP Server.
API Gateway (API Шлюз)
- Маршрутизирует запросы к правильным сервисам.
- Работает на уровне 7 (HTTP/HTTPS).
- Сценарии использования: микросервисы, мобильные API.
- Преимущества: центральная точка входа для API, обрабатывает аутентификацию и дросселирование.
- Недостатки: добавляет задержку и сложность, может стать бутылочным горлышком.
- Примеры: Kong, AWS API Gateway, Apigee, Tyk.
Балансировщик нагрузки (Load Balancer)
- Равномерно распределяет трафик между серверами для повышения эффективности.
- Работает на уровне 4 (TCP) или уровне 7 (HTTP/HTTPS).
- Сценарии использования: высоконагруженные сайты, отказоустойчивость.
- Преимущества: повышает отказоустойчивость, обрабатывает всплески нагрузки, позволяет масштабирование.
- Недостатки: может стать единой точкой отказа без избыточности.
- Примеры: HAProxy, AWS ELB, Nginx.
Обратный прокси (Reverse Proxy)
- Пересылает клиентские запросы на серверы, скрывая детали серверов.
- Работает на уровне 7 (HTTP/HTTPS).
- Сценарии использования: SSL-терминирование, кэширование, публичный доступ к API.
- Преимущества: улучшает производительность, добавляет безопасность, позволяет фильтровать контент.
- Недостатки: добавляет сетевую задержку.
- Примеры: Nginx, Apache HTTP Server.
API Gateway (API Шлюз)
- Маршрутизирует запросы к правильным сервисам.
- Работает на уровне 7 (HTTP/HTTPS).
- Сценарии использования: микросервисы, мобильные API.
- Преимущества: центральная точка входа для API, обрабатывает аутентификацию и дросселирование.
- Недостатки: добавляет задержку и сложность, может стать бутылочным горлышком.
- Примеры: Kong, AWS API Gateway, Apigee, Tyk.
👍5❤3👏1
Добавил два новых мобильных приложения на Android для руководств с сайта:
Руководство по ассемблеру NASM:
https://www.rustore.ru/catalog/app/com.metanit.nasm
Руководство по созданию мобильных приложений для Android:
https://www.rustore.ru/catalog/app/com.metanit.android
Ну и из интереса сделал еще одну небольшую игру для Andoid - Судоку
Если кому интересно, игра в Rustore - https://www.rustore.ru/catalog/app/com.metanit.sudoku
Игра в Google Play - https://play.google.com/store/apps/details?id=com.metanit.sudoku
Руководство по ассемблеру NASM:
https://www.rustore.ru/catalog/app/com.metanit.nasm
Руководство по созданию мобильных приложений для Android:
https://www.rustore.ru/catalog/app/com.metanit.android
Ну и из интереса сделал еще одну небольшую игру для Andoid - Судоку
Если кому интересно, игра в Rustore - https://www.rustore.ru/catalog/app/com.metanit.sudoku
Игра в Google Play - https://play.google.com/store/apps/details?id=com.metanit.sudoku
RuStore
Руководство по ассемблеру NASM в каталоге RuStore
🚀 Руководство по ассемблеру NASM — Руководство по ассемблеру NASM 📱 Скачайте за 799 рублей на смартфон, ТВ или планшет. Официальная версия (1.0) в RuStore — до 1 тыс установок, рейтинг 0,0★. Безопасно для 0+.
👍21👎4🥰2👏1
SSO (Single Sign-On / Единый вход) (продолжение к предыдущему посту)
SSO можно представить как главный ключ, открывающий все разные замки. Эта технология позволяет пользователю входить в различные системы, используя единый набор учётных данных.
В наше время, когда мы получаем доступ к большему количеству приложений, чем когда-либо прежде, SSO становится важным решением для борьбы с усталостью от множества паролей и упрощает пользовательский опыт.
Чтобы полностью понять процесс SSO, давайте рассмотрим, как пользователь входит в LinkedIn с помощью Google в качестве поставщика удостоверений:
1. Запрос на доступ
Сначала пользователь пытается получить доступ к поставщику услуг (LinkedIn). На этом этапе пользователю предлагаются варианты входа в систему, и в этом примере он выбирает «Войти через Google».
2. Запрос на аутентификацию
Поставщик услуг (LinkedIn) перенаправляет пользователя к поставщику удостоверений (Google) с запросом на аутентификацию.
3. Проверка активной сессии
Получив запрос, поставщик удостоверений (Google) проверяет наличие активной сессии. Если она не найдена, запрашивается аутентификация.
4. Пользователь отправляет учётные данные
На этом этапе пользователь отправляет свои учётные данные (имя пользователя и пароль) поставщику удостоверений (IdP).
5. Проверка учётных данных
Поставщик удостоверений сверяет предоставленные учётные данные с каталогом пользователей (базой данных). Если учётные данные верны, IdP создаёт токен аутентификации или утверждение.
6. Поставщик удостоверений отправляет токен поставщику услуг
После создания токена или утверждения IdP отправляет его обратно поставщику услуг, подтверждая личность пользователя. Теперь пользователь аутентифицирован и может получить доступ к поставщику услуг (LinkedIn).
7. Доступ предоставлен с использованием существующей сессии
Поскольку поставщик удостоверений установил сессию, при попытке пользователя получить доступ к другому поставщику услуг (например, GitHub) ему не нужно повторно вводить свои учётные данные. Будущие поставщики услуг будут запрашивать аутентификацию у поставщика удостоверений, распознавать существующую сессию и предоставлять пользователю доступ на основе ранее подтверждённой сессии.
Рабочие процессы SSO, подобные описанному выше, работают на протоколах SSO — наборе правил, которые регулируют взаимодействие и доверие между IdP и SP. Распространённые протоколы включают язык разметки утверждений безопасности (SAML), OpenID Connect и OAuth.
SSO можно представить как главный ключ, открывающий все разные замки. Эта технология позволяет пользователю входить в различные системы, используя единый набор учётных данных.
В наше время, когда мы получаем доступ к большему количеству приложений, чем когда-либо прежде, SSO становится важным решением для борьбы с усталостью от множества паролей и упрощает пользовательский опыт.
Чтобы полностью понять процесс SSO, давайте рассмотрим, как пользователь входит в LinkedIn с помощью Google в качестве поставщика удостоверений:
1. Запрос на доступ
Сначала пользователь пытается получить доступ к поставщику услуг (LinkedIn). На этом этапе пользователю предлагаются варианты входа в систему, и в этом примере он выбирает «Войти через Google».
2. Запрос на аутентификацию
Поставщик услуг (LinkedIn) перенаправляет пользователя к поставщику удостоверений (Google) с запросом на аутентификацию.
3. Проверка активной сессии
Получив запрос, поставщик удостоверений (Google) проверяет наличие активной сессии. Если она не найдена, запрашивается аутентификация.
4. Пользователь отправляет учётные данные
На этом этапе пользователь отправляет свои учётные данные (имя пользователя и пароль) поставщику удостоверений (IdP).
5. Проверка учётных данных
Поставщик удостоверений сверяет предоставленные учётные данные с каталогом пользователей (базой данных). Если учётные данные верны, IdP создаёт токен аутентификации или утверждение.
6. Поставщик удостоверений отправляет токен поставщику услуг
После создания токена или утверждения IdP отправляет его обратно поставщику услуг, подтверждая личность пользователя. Теперь пользователь аутентифицирован и может получить доступ к поставщику услуг (LinkedIn).
7. Доступ предоставлен с использованием существующей сессии
Поскольку поставщик удостоверений установил сессию, при попытке пользователя получить доступ к другому поставщику услуг (например, GitHub) ему не нужно повторно вводить свои учётные данные. Будущие поставщики услуг будут запрашивать аутентификацию у поставщика удостоверений, распознавать существующую сессию и предоставлять пользователю доступ на основе ранее подтверждённой сессии.
Рабочие процессы SSO, подобные описанному выше, работают на протоколах SSO — наборе правил, которые регулируют взаимодействие и доверие между IdP и SP. Распространённые протоколы включают язык разметки утверждений безопасности (SAML), OpenID Connect и OAuth.
👍5🥰1👏1
"Эра программистов-людей подходит к концу"
Softbank (японская транснациональная инвестиционная холдинговая компания, специализирующаяся на управлении инвестициями) в этом году планируется развернуть миллиард агентов ИИ.
«Эра программистов-людей подходит к концу», — заявил основатель Softbank Масаёси Сон. «Наша цель — полностью передать кодирование и программирование агентам ИИ. (...) в настоящее время мы инициируем этот процесс».
Согласно отчёту, генеральный директор Softbank подсчитал, что для замены каждого сотрудника потребуется около 1000 агентов ИИ, поскольку «сотрудники обладают сложным мыслительным процессом».
Если Сону удастся добиться своего, Softbank в этом году отправит на работу первый миллиард агентов ИИ, а в будущем за ними последуют ещё триллионы. Большинство агентов ИИ будут работать на других агентов ИИ. Таким образом, задачи, переговоры и решения в Softbank будут автоматизированы. Таким образом, эти меры не будут ограничиваться программистами.
«Агенты будут активны 24 часа в сутки, 365 дней в году и будут взаимодействовать друг с другом», — сказал Сон. Они будут самостоятельно обучаться и собирать информацию. Японский бизнесмен ожидает, что агенты ИИ будут значительно более продуктивными и эффективными, чем люди. Они будут стоить всего 40 японских иен (в настоящее время около 23 евроцентов) в месяц. Исходя из заявленной цифры в 1000 агентов на сотрудника, это составляет 230 евро в месяц вместо зарплаты одного человека.
Сон считает галлюцинации, характерные для ИИ, «временной и незначительной проблемой». Для осуществления своей технологической мечты ему ещё нужны программное обеспечение и операционные системы для создания и управления легионами программ ИИ. И, конечно же, гигантские центры обработки данных и электростанции для их работы.
https://www.heise.de/en/news/Softbank-1-000-AI-agents-replace-1-job-10490309.html
Softbank (японская транснациональная инвестиционная холдинговая компания, специализирующаяся на управлении инвестициями) в этом году планируется развернуть миллиард агентов ИИ.
«Эра программистов-людей подходит к концу», — заявил основатель Softbank Масаёси Сон. «Наша цель — полностью передать кодирование и программирование агентам ИИ. (...) в настоящее время мы инициируем этот процесс».
Согласно отчёту, генеральный директор Softbank подсчитал, что для замены каждого сотрудника потребуется около 1000 агентов ИИ, поскольку «сотрудники обладают сложным мыслительным процессом».
Если Сону удастся добиться своего, Softbank в этом году отправит на работу первый миллиард агентов ИИ, а в будущем за ними последуют ещё триллионы. Большинство агентов ИИ будут работать на других агентов ИИ. Таким образом, задачи, переговоры и решения в Softbank будут автоматизированы. Таким образом, эти меры не будут ограничиваться программистами.
«Агенты будут активны 24 часа в сутки, 365 дней в году и будут взаимодействовать друг с другом», — сказал Сон. Они будут самостоятельно обучаться и собирать информацию. Японский бизнесмен ожидает, что агенты ИИ будут значительно более продуктивными и эффективными, чем люди. Они будут стоить всего 40 японских иен (в настоящее время около 23 евроцентов) в месяц. Исходя из заявленной цифры в 1000 агентов на сотрудника, это составляет 230 евро в месяц вместо зарплаты одного человека.
Сон считает галлюцинации, характерные для ИИ, «временной и незначительной проблемой». Для осуществления своей технологической мечты ему ещё нужны программное обеспечение и операционные системы для создания и управления легионами программ ИИ. И, конечно же, гигантские центры обработки данных и электростанции для их работы.
https://www.heise.de/en/news/Softbank-1-000-AI-agents-replace-1-job-10490309.html
🤡79🤣34😁5👀3🤔2🦄2👎1😱1🖕1
«Сбер»: базовые знания искусственного интеллекта обязательны как для действующих, так и для новых сотрудников
В «Сбере» сообщили, что базовые знания искусственного интеллекта и умение применять ИИ стали обязательны как для действующих, так и для новых сотрудников. Исключение по необходимости применения ИИ в «Сбере» будет сделано только для тех сотрудников, у кого специфика работы не связана с использованием таких сервисов, например уборщиков и грузчиков.
По словам первого заместителя предправления «Сбербанка» Александра Ведяхина, если 30 лет назад в резюме часто встречалась фраза «уверенный пользователь ПК», то сегодня требуются уже уверенные пользователи ИИ.
В «Сбере» требования к специфике знаний и навыков в ИИ различаются в зависимости от профиля кандидата. Например, для специалистов первой линии «Сбера», которые напрямую работают с клиентами, ключевое требование — способность применять ИИ‑инструменты для более эффективного решения повседневных задач. Речь идёт о базовых навыках работы с нейросетями — эти компетенции проверяются уже на собеседовании. Кандидатов в «Сбере» спрашивают об использовании ИИ‑инструментов в работе и повседневной жизни.
Специалистам аналитических и IT‑направлений «Сбера» нужно иметь более глубокие знания ИИ. От них в компании ожидают системной интеграции ИИ в профессиональную деятельность. Для проверки таких навыков на собеседованиях в «Сбере» введены практические задания по ИИ. Отдельное тестирование — фактчекинг и рерайтинг с помощью нейросетей.
Наибольшие требования в «Сбере» по ИИ предъявляются к разработчикам. Они должны не только свободно ориентироваться в ИИ‑инструментах, понимать принципы их работы, а в идеале иметь опыт создания собственных ИИ‑решений. Компетенции по ИИ в «Сбере» для разработчиков оцениваются на углублённых технических собеседованиях с профильными экспертами.
Руководителям высшего звена в «Сбере» критически важно понимать возможности ИИ и уметь принимать управленческие решения с опорой на данные, полученные с помощью интеллектуальных систем. Кросс‑интервьюер в «Сбере» теперь проверяет инновационность и адаптивность кандидата на руководящую должность с учётом его знаний и опыта применения ИИ, который оценивается в комплексе и соотносится с требованиями к конкретной позиции.
В «Сбере» добавили, что от стажёров и студентов требуется только желание обучиться работе с ИИ. В компании помогут научиться применять нейросети в работе.
https://www.sberbank.ru/ru/sberpress/all/article?newsID=2f9bea94-db49-4b88-ab98-350064f158df&blockID=1303®ionID=177&lang=ru&type=NEWS
В «Сбере» сообщили, что базовые знания искусственного интеллекта и умение применять ИИ стали обязательны как для действующих, так и для новых сотрудников. Исключение по необходимости применения ИИ в «Сбере» будет сделано только для тех сотрудников, у кого специфика работы не связана с использованием таких сервисов, например уборщиков и грузчиков.
По словам первого заместителя предправления «Сбербанка» Александра Ведяхина, если 30 лет назад в резюме часто встречалась фраза «уверенный пользователь ПК», то сегодня требуются уже уверенные пользователи ИИ.
В «Сбере» требования к специфике знаний и навыков в ИИ различаются в зависимости от профиля кандидата. Например, для специалистов первой линии «Сбера», которые напрямую работают с клиентами, ключевое требование — способность применять ИИ‑инструменты для более эффективного решения повседневных задач. Речь идёт о базовых навыках работы с нейросетями — эти компетенции проверяются уже на собеседовании. Кандидатов в «Сбере» спрашивают об использовании ИИ‑инструментов в работе и повседневной жизни.
Специалистам аналитических и IT‑направлений «Сбера» нужно иметь более глубокие знания ИИ. От них в компании ожидают системной интеграции ИИ в профессиональную деятельность. Для проверки таких навыков на собеседованиях в «Сбере» введены практические задания по ИИ. Отдельное тестирование — фактчекинг и рерайтинг с помощью нейросетей.
Наибольшие требования в «Сбере» по ИИ предъявляются к разработчикам. Они должны не только свободно ориентироваться в ИИ‑инструментах, понимать принципы их работы, а в идеале иметь опыт создания собственных ИИ‑решений. Компетенции по ИИ в «Сбере» для разработчиков оцениваются на углублённых технических собеседованиях с профильными экспертами.
Руководителям высшего звена в «Сбере» критически важно понимать возможности ИИ и уметь принимать управленческие решения с опорой на данные, полученные с помощью интеллектуальных систем. Кросс‑интервьюер в «Сбере» теперь проверяет инновационность и адаптивность кандидата на руководящую должность с учётом его знаний и опыта применения ИИ, который оценивается в комплексе и соотносится с требованиями к конкретной позиции.
В «Сбере» добавили, что от стажёров и студентов требуется только желание обучиться работе с ИИ. В компании помогут научиться применять нейросети в работе.
https://www.sberbank.ru/ru/sberpress/all/article?newsID=2f9bea94-db49-4b88-ab98-350064f158df&blockID=1303®ionID=177&lang=ru&type=NEWS
www.sberbank.ru
Искусственный интеллект — Excel XXI века
🤮25❤8🥴5🤔2👎1
Стратегии кэширования (продолжение к предыдущему посту)
Кэширование — это концепция хранения часто используемых данных во временном месте, доступ к которому осуществляется быстрее, чем к исходному источнику.
Базы данных часто являются основой приложений, храня критически важную информацию. Однако получение данных из базы данных может быть относительно медленной операцией, особенно для сложных запросов или больших наборов данных.
Таким образом, если мы используем кэширование данных, мы можем:
1. Значительно улучшить время отклика.
2. Снизить нагрузку на базу данных.
3. Обеспечить более плавный пользовательский опыт.
Стратегии, оптимизированные для чтения
Кэширование в стороне (Cache-Aside)
* Приложение сначала проверяет наличие данных в кэше.
* Если данные найдены (попадание в кэш), они возвращаются.
* Если нет (промах кэша), данные извлекаются из базы данных, сохраняются в кэше и затем возвращаются.
* Известна как «отложенная загрузка» — получение данных по требованию.
* Первый запрос для определённого фрагмента данных всегда приводит к промаху кэша, так как данные ещё не загружены.
* Отличается простотой реализации.
Применение:
* Для нагрузок с преобладанием операций чтения и редко изменяющимися данными.
Чтение через кэш (Read-Through)
* Кэш выступает в качестве основного источника данных.
* Если данных нет в кэше:
* они извлекаются из базы данных;
* сохраняются в кэше;
* возвращаются в приложение.
* По сути, это абстрагирование источника данных от приложения.
Применение:
* Для приложений, где критически важны сверхбыстрые операции чтения (аналитика в реальном времени и т. д.).
Предварительное обновление (Refresh-Ahead)
* Кэш проактивно обновляет данные до их истечения, снижая вероятность промахов кэша.
Применение:
* Для приложений с предсказуемыми шаблонами доступа к данным.
Клиентское кэширование (Client-Side Caching)
* Данные кэшируются на устройстве клиента.
* Повышенная сложность, требуется управление аннулированием кэша на стороне клиента.
Применение:
* Для приложений с часто используемым статическим контентом или когда персонализация не является основной задачей.
Стратегии, оптимизированные для записи
Запись через кэш (Write-Through)
* Данные сначала записываются в кэш, а затем «немедленно» в базу данных.
* Операция записи считается завершённой только после обновления и кэша, и базы данных.
* Обеспечивает строгую согласованность данных между кэшем и базой данных.
Применение:
* Для приложений, где критически важна согласованность данных.
Запись позади (Write-Behind / Write-Back)
* Данные сначала записываются в кэш, а затем «асинхронно» в базу данных.
Применение:
* Для приложений, где производительность записи является приоритетом, и допустима некоторая потеря данных.
Запись в обход (Write-Around)
* Обходит кэш при записи, записывая напрямую в базу данных.
* Кэш обновляется только при последующих операциях чтения.
Применение:
* Для нагрузок с преобладанием операций записи, где большинство данных записывается один раз и редко читается.
Кэширование — это концепция хранения часто используемых данных во временном месте, доступ к которому осуществляется быстрее, чем к исходному источнику.
Базы данных часто являются основой приложений, храня критически важную информацию. Однако получение данных из базы данных может быть относительно медленной операцией, особенно для сложных запросов или больших наборов данных.
Таким образом, если мы используем кэширование данных, мы можем:
1. Значительно улучшить время отклика.
2. Снизить нагрузку на базу данных.
3. Обеспечить более плавный пользовательский опыт.
Стратегии, оптимизированные для чтения
Кэширование в стороне (Cache-Aside)
* Приложение сначала проверяет наличие данных в кэше.
* Если данные найдены (попадание в кэш), они возвращаются.
* Если нет (промах кэша), данные извлекаются из базы данных, сохраняются в кэше и затем возвращаются.
* Известна как «отложенная загрузка» — получение данных по требованию.
* Первый запрос для определённого фрагмента данных всегда приводит к промаху кэша, так как данные ещё не загружены.
* Отличается простотой реализации.
Применение:
* Для нагрузок с преобладанием операций чтения и редко изменяющимися данными.
Чтение через кэш (Read-Through)
* Кэш выступает в качестве основного источника данных.
* Если данных нет в кэше:
* они извлекаются из базы данных;
* сохраняются в кэше;
* возвращаются в приложение.
* По сути, это абстрагирование источника данных от приложения.
Применение:
* Для приложений, где критически важны сверхбыстрые операции чтения (аналитика в реальном времени и т. д.).
Предварительное обновление (Refresh-Ahead)
* Кэш проактивно обновляет данные до их истечения, снижая вероятность промахов кэша.
Применение:
* Для приложений с предсказуемыми шаблонами доступа к данным.
Клиентское кэширование (Client-Side Caching)
* Данные кэшируются на устройстве клиента.
* Повышенная сложность, требуется управление аннулированием кэша на стороне клиента.
Применение:
* Для приложений с часто используемым статическим контентом или когда персонализация не является основной задачей.
Стратегии, оптимизированные для записи
Запись через кэш (Write-Through)
* Данные сначала записываются в кэш, а затем «немедленно» в базу данных.
* Операция записи считается завершённой только после обновления и кэша, и базы данных.
* Обеспечивает строгую согласованность данных между кэшем и базой данных.
Применение:
* Для приложений, где критически важна согласованность данных.
Запись позади (Write-Behind / Write-Back)
* Данные сначала записываются в кэш, а затем «асинхронно» в базу данных.
Применение:
* Для приложений, где производительность записи является приоритетом, и допустима некоторая потеря данных.
Запись в обход (Write-Around)
* Обходит кэш при записи, записывая напрямую в базу данных.
* Кэш обновляется только при последующих операциях чтения.
Применение:
* Для нагрузок с преобладанием операций записи, где большинство данных записывается один раз и редко читается.
👍11🔥4👏2