Популярное

Что такое инвалидация: Инвалидация | это… Что такое Инвалидация?

Содержание

К вопросу об инвалидации кеша / Хабр

Инвалидация кеша, возможно, одна из самых запутанных вещей в программировании. Тонкость вопроса состоит в компромиссе между полнотой, избыточностью и сложностью этой процедуры. Так о чём же эта статья? Хотелось бы не привязываясь к какой-либо платформе, языку или фреймворку, подумать о том как следует реализовывать систему инвалидации. Ну а чтобы не писать обо всём и ни о чём, сконцентрируемся на кешировании результатов SQL-запросов построенных с помощью ORM, которые в наше время встречаются нередко.

Полнота и избыточность


Начнём всё же с общих соображений не специфичных ни для SQL-запросов, ни для ORM. Упомянутые полноту и избыточность я определяю следующим образом. Полнота инвалидации — это её характеристика, определяющая насколько часто и в каких случаях может/будет возникать ситуация когда в кеше будут содержаться грязные данные и как долго они там будут оставаться. Избыточностью, в свою очередь, назовём то как часто кеш будет инвалидироваться без необходимости.

Рассмотрим для примера распространённый способ инвалидации по времени. С одной стороны, он практически гарантирует, что сразу после изменения данных кеш грязен. С другой стороны, время которое кеш остаётся грязным, мы можем легко ограничить уменьшив время жизни (что в свою очередь сократит процент попаданий). Т.е. при сокращении времени жизни кеша полнота инвалидации улучшается, а избыточность ухудшается. В итоге, чтобы достигнуть идеальной полноты инвалидации (никаких грязных данных) мы должны выставить таймаут в 0, или, другими словами, отключить кеш. Во многих случаях временное устаревание данных в кеше допустимо. Например, как правило, не так уж и страшно если новость в блоке последних новостей появится там на несколько минут позже или общее количество пользователей вашей социальной сети будет указано с ошибкой в пару-тройку тысяч.

Инвалидация по событию


Способ с инвалидацией по времени хорош своей простотой, однако, не всегда применим. Что ж, можно сбрасывать кеш при изменении данных. Одной из проблем при таком подходе является то, что при добавлении нового запроса, который мы кешируем приходиться добавлять код для его инвалидации в при изменении данных. Если мы используем ORM, то данные изменяются (в хорошем случае) в одном месте — при сохранении модели. Наличие одного центрального кода изменения данных облегчает задачу, однако, при большом количестве разнообразных запросов приходиться всё время дописывать туда всё новые и новые строки сброса различных кусочков кеша. Таким образом, мы получаем на свою голову избыточную связность кода. Пора её ослабить.

Воспользуемся событиями — ORM при сохранении/удалении модели будет события генерировать, а мы при кешировании чего-либо будем тут же и вешать обработчик на соответствующее событие, удаляющий это что-либо из кеша. Всё отлично, однако, написание большого количества похожих обработчиков утомляет, плюс логика приложения зарастает логикой кеширования/инвалидации как свинья жиром.

Автоматическая инвалидация ORM-запросов


Вспомним, что у нас есть ORM, а для него каждый запрос представляет не просто текст, а определённую структуру — модели, дерево условий и прочее. Так что, по идее, ORM может и кешировать и вешать инвалидационные обработчики прямо при кешировании по мере надобности. Чертовски привлекательное решение для ленивых ребят, вроде меня.

Небольшой пример. Допустим мы выполняем запрос:

select * from post where category_id=2 and published

и кешируем его. Очевидно, нам нужно сбросить запрос если при добавлении/обновлении/удалении поста для его старой или новой версии выполняется условие category_id=2 and published=true. Через некоторое время для каждой модели образуются списки инвалидаторов, каждый из которых хранит список запросов, которые должен сбрасывать:

post:

    category_id=2 and published=true:

        select * from post where category_id=2 and published

        select count(*) from post where category_id=2 and published

        select * from post where category_id=2 and published limit 20

    category_id=3 and published=true:

        select * from post where category_id=3 and published limit 20 offset 20

    category_id=3 and published=false:

        select count(*) from post where category_id=3 and not published 

foo:

    a=1 or b=10: 

        or_sql

    a in (2,3) and b=10:

        in_sql

    a>1 and b=10: 

        gt_sql

и т. д.

В реальности в инвалидаторах удобнее хранить списки ключей кеша, а не тексты запросов, тексты здесь для наглядности.

Посмотрим, что будет происходить при добавлении объекта. Мы должны пройти по всему списку инвалидаторов и стереть ключи кеша для условий, выполняющихся для добавленного объекта. Но инвалидаторов может быть много, и храниться они должны там же где сам кеш, т.е. скорее всего не в памяти процесса и загружать их все каждый раз не хотелось бы, да и последовательная проверка всех условий больно долга.

Очевидно, нужно как-то группировать и отсеивать инвалидаторы без их полной проверки. Заметим, что картина когда условия различаются только значениями. Например, инвалидаторы в модели post все имеют вид category_id=? and published=?.. Сгруппируем инвалидаторы из примера по схемам:

post:

    category_id=? and published=?:

        2, true:

            select * from post where category_id=2 and published

            select count(*) from post where category_id=2 and published

            select * from post where category_id=2 and published limit 20

        3, true:

            select * from post where category_id=3 and published limit 20 offset 20

        3, false:

            select count(*) from post where category_id=3 and not published 

foo:

    a=? or b=?:

        1, 10:

            or_sql

    a in ? and b=?:

        (2,3), 10:

            in_sql

    a > ? and b=?:

        1, 10:

            gt_sql


Обратим внимание на условие category_id=? and published=?, зная значения полей добавляемого поста, мы можем однозначно заполнить метки «?». Если объект:

{id: 42, title: "…", content: "…", category_id: 2, published: true}

, то единственный подходящий инвалидатор из семейства будет category_id=2 and published=true и, следовательно нужно стереть соответствующие ему 3 ключа кеша. Т.е. не требуется последовательная проверка условий мы сразу получаем нужный инвалидатор по схеме и данным объекта.

Однако, что делать с более сложными условиями? В отдельных случаях кое-что можно сделать: or разложить на два инвалидатора, in развернуть в or. В остальных случаях либо придётся всё усложнить, либо сделать инвалидацию избыточной, отбросив такие условия. Приведём то, какими будут инвалидаторы для foo после таких преобразований:

foo:

    a = ?:

        1: or_sql

    b = ?:

        10: or_sql, gt_sql

    a = ? and b = ?:

        2, 10: in_sql

        3, 10: in_sql


Таким образом, нам нужно для каждой модели только хранить схемы (просто списки полей), по которым при надобности мы строим инвалидаторы и запрашиваем списки ключей, которые следует стереть.

Приведу пример процедуры инвалидации для foo. Пусть мы запросили из базы объект {id: 42, a: 1, b: 10}
сменили значение a на 2 и записали обратно. При обновлении процедуру инвалидации следует прогонять и для старого, и для нового состояния объекта. Итак, инвалидаторы для старого состояния: a=1, b=10, a=1 and b=10, соответствующие ключи or_sql и gt_sql (последний инвалидатор отсутсвует, можно считать пустым). Для нового состояния получаем инвалидаторы a=2, b=10, a=2 and b=10, что добавляет ключ in_sql. В итоге стираются все 3 запроса.

Реализация


Я старался по-возможности абстрагироваться от языка и платформы, однако, рабочая и работающая в довольно нагруженном проекте система тоже существует. Подробнее о ней и о хитростях реализации вообще в следующей статье.

Что такое Инвалидация, определение термина в Бизнес словарь





Все словариБольшой юридический словарьОднотомный большой юридический словарьСправочник лекарственных средствЭнциклопедия БиологияФинансовый словарьЭкономический словарьБольшой бухгалтерский словарьМедицинский словарьМорской словарьСоциологический словарьСексологический словарьАстрономический словарьБизнес словарьПолитический словарьСловарь литературных терминовМедицинский большой словарьЭнциклопедический словарьСловарь ЕфремовойЭнциклопедия КольераЭнциклопедия Брокгауза и ЕфронаТолковый словарь УшаковаСловарь ОжеговаСловарь ДаляСловарь наркотического сленгаСловарь воровского жаргонаСловарь молодёжного слэнгаСловарь компьютерного жаргонаМеталлы и сплавы. СправочникТолковый строительно-архитектурный словарьАрхитектурный словарьДжинсовый словарьСловарь по ландшафтному дизайнуАвтомобильный словарьКулинарный словарьСтроительный словарьПолиграфический словарьСловарь модыYoga Vedanta DictionaryСловарь йогиСловарь терминов Йоги и ведантыСозвездия, латинские названияСловарь музыкальных терминовБиографический словарьСловарь эпитетовСловарь курортовСловарь русских технических сокращенийЭтимологический словарь ФасмераСловарь иностранных словСловарь фразеологизмовСловарь географических названийСловарь символовСловарь синонимовСловарь нумизматаСловарь имёнСловарь мерСловарь русских фамилийЭтнографический словарьСловарь лекарственных растенийСловарь народовИсторический словарьРелигиозный словарьСловарь по мифологииБиблейская энциклопедияСловарь по искусствуФилософский словарьСловарь логикиПсихологический словарьВсё о вине, энциклопедический словарьКнига о вкусной и здоровой пищеКулинарный словарьПищевые добавкиСловарь алкогольных напитковЭнциклопедия трезвого образа жизни



Инвалидация — лишение законной силы.



Ivanov Alex



Выберите букву


А
Б
В
Г
Д
Е
Ж
З
И
К
Л
М
Н
О
П
Р
С
Т
У
Ф
Х
Ц
Ч
Ш
Щ
Э
Ю
Я


Популярные слова


Капитация
Фио
Завод
Инвентарь
Магнат
Андерлаинг
Пари-Пассу
Торг
Такса
Трэдинг
Обман
Инструмент
Талон
Тальман
Статут
Аквизитор
Каталог
Образец
Рекламация
Извещение


Инвалидность

Инвалидность

    • Все темы »
    • A
    • B
    • C
    • D
    • E
    • F
    • G
    • 90 004 H

    • I
    • J
    • K
    • L
    • M
    • N
    • O
    • P
    • Q
    • R
    • S
    • T
    • U
    • V
    • W
    • X 900 05
    • Д
    • З
    • Ресурсы »

      • Бюллетени
      • Факты в картинках
      • Мультимедиа
      • Публикации
      • Вопросы и Ответы
      • Инструменты и наборы инструментов
    • Популярный »

      • Загрязнение воздуха
      • Коронавирусная болезнь (COVID-19)
      • Гепатит
      • оспа обезьян
    • Все страны »
    • A
    • B
    • C
    • D
    • E
    • F
    • G
    • H
    • I
    • J
    • K
    • L
    • M
    • N
    • O
    • P
    • Q
    • R
    • S
    • T
    • U
    • В
    • Вт
    • X
    • Y
    • Z
    • Регионы »

      • Африка
      • Америка
      • Юго-Восточная Азия
      • Европа
      • Восточное Средиземноморье
      • Западная часть Тихого океана
    • ВОЗ в странах »

      • Статистика
      • Стратегии сотрудничества
      • Украина ЧП
    • все новости »

      • Выпуски новостей
      • Заявления
      • Кампании
      • Комментарии
      • События
      • Тематические истории
      • Выступления
      • Прожекторы
      • Информационные бюллетени
      • Библиотека фотографий
      • Список рассылки СМИ
    • Заголовки »
    • Сосредоточиться на »

      • Афганистан кризис
      • COVID-19 пандемия
      • Кризис в Северной Эфиопии
      • Сирийский кризис
      • Украина ЧП
      • Вспышка оспы обезьян
      • Кризис Большого Африканского Рога
    • Последний »

      • Новости о вспышках болезней
      • Советы путешественникам
      • Отчеты о ситуации
      • Еженедельный эпидемиологический отчет
    • ВОЗ в чрезвычайных ситуациях »

      • Наблюдение
      • Исследовать
      • Финансирование
      • Партнеры
      • Операции
      • Независимый контрольно-консультативный комитет
      • Призыв ВОЗ о чрезвычайной ситуации в области здравоохранения 2023 г.
    • Данные ВОЗ »

      • Глобальные оценки здоровья
      • ЦУР в области здравоохранения
      • База данных о смертности
      • Сборы данных
    • Панели инструментов »

      • Информационная панель COVID-19
      • Приборная панель «Три миллиарда»
      • Монитор неравенства в отношении здоровья
    • Основные моменты »

      • Глобальная обсерватория здравоохранения
      • СЧЕТ
      • Инсайты и визуализации
      • Инструменты сбора данных
    • Отчеты »

      • Мировая статистика здравоохранения 2022 г.
      • избыточная смертность от COVID
      • DDI В ФОКУСЕ: 2022 г.
    • О ком »

      • Люди
      • Команды
      • Состав
      • Партнерство и сотрудничество
      • Сотрудничающие центры
      • Сети, комитеты и консультативные группы
      • Трансформация
    • Наша работа »

      • Общая программа работы
      • Академия ВОЗ
      • Деятельность
      • Инициативы
    • Финансирование »

      • Инвестиционный кейс
      • Фонд ВОЗ
    • Подотчетность »

      • Аудит
      • Программный бюджет
      • Финансовые отчеты
      • Портал программного бюджета
      • Отчет о результатах
    • Управление »

      • Всемирная ассамблея здравоохранения
      • Исполнительный совет
      • Выборы Генерального директора
      • Веб-сайт руководящих органов
      • Портал государств-членов
    • Дом/
    • Вопросы здравоохранения/
    • Инвалидность

    Инвалидность и здоровье

    ©
    Кредиты

    Информационные бюллетени

    Базы данных и инструменты

    • Усиление сбора данных об инвалидности
    • График ВОЗ по оценке инвалидности (WHODAS)
    • Модельное обследование инвалидности

    Резолюции и решения

    Техническая работа

    • Сенсорные функции, инвалидность и реабилитация

    Подсветка

    Глобальный доклад о справедливости в отношении здоровья для лиц с ограниченными возможностями

    Наша работа

    Новости

    Все →

    Последние публикации

    Все →

    По оценкам, 1,3 миллиарда человек, или 16% населения мира, сегодня страдают значительной инвалидностью. Инвалиды…

    По оценкам, 1,3 миллиарда человек, или 16% населения мира, в настоящее время имеют серьезную инвалидность. Инвалиды…

    Документы

    Все →

    Инвалидность возникает в результате взаимодействия между состояниями здоровья, такими как деменция, слепота или травма спинного мозга, и окружающей средой…

    Тематические статьи

    Все →

    Видео

    Все →

    26 апреля 2023 г.

    Обеспечение справедливости в отношении здоровья для лиц с ограниченными возможностями

    10 февраля 2023 г.

    ВОЗ «Наука в 5: инвалидность и несправедливость в отношении здоровья» — 10 февраля 2023 г.

    3 декабря 2022 г.

    Послание Генерального директора ВОЗ по случаю Международного дня инвалидов 2022 г.

    2 декабря 2022 г.

    Презентация Глобального доклада ВОЗ о справедливости в отношении здоровья для лиц с ограниченными возможностями

    Кампания

    Международный день инвалидов

    Подшивка фактов

    События

    Все →

    Темы по теме здоровья

    Ссылки по теме

    Конвенция о правах инвалидов (КПИ)

    Что такое инвалидность? — Форум инвалидов и благотворительности

    Вернуться в библиотеку ресурсов

    Что такое

    Инвалидность?

    В этом вводном ресурсе объясняется, как определяется инвалидность, а также «модели инвалидности» или концепции, которые используются для понимания опыта инвалидности. Он также предлагает информацию о статистике инвалидности.

    Понимание инвалидности

    Определение

    В соответствии с юридическим определением, данным Законом об американцах с ограниченными возможностями, человек с ограниченными возможностями — это лицо, имеющее физические или психические нарушения, которые существенно ограничивают одну или несколько основных жизненных функций.

    Однако это определение не дает полной картины инвалидности. Важно осознавать разнообразие инвалидности. Инвалидность может быть видимой или невидимой, с чем человек рождается или приобретается в любой момент жизни. Многие люди просто представляют себе инвалидную коляску, когда думают об инвалидности, но существует так много типов инвалидности, помимо ограниченной подвижности. Когда мы говорим об инвалидности, мы должны помнить, что это включает, но никоим образом не ограничивается инвалидностью в области психического здоровья, хроническими заболеваниями, умственной отсталостью, а также нарушениями слуха и зрения.

    Модели инвалидности

    В то время как большинство людей с ограниченными возможностями считают инвалидность нарушением, определение ее исключительно как медицинского диагноза (физического, биологического, патологического) игнорирует структурные неравенства, которые часто вызывают или способствуют инвалидности. Этот способ мышления, известный как «медицинская модель», предполагает, что инвалидность человека — это проблема, которую необходимо решить, вылечить или искоренить, а не признать ее аспектом идентичности. Медицинские подходы, как правило, игнорируют тот факт, что многие инвалиды являются хроническими и не могут быть «исправлены», и что многие инвалиды не хотят «лечения». Напротив, «социальная модель» инвалидности считает «проблемой» общество и барьеры — будь то физические или поведенческие — которые оно ставит перед людьми с инвалидностью. Именно эти барьеры, а не человек, должны измениться.

    Суть в том, чтобы признать, что инвалидность сама по себе не является проблемой; это естественная часть человеческого опыта. Традиционно доноры рассматривали инвалидность в основном с помощью медицинской модели, но социальная модель имеет решающее значение для понимания того, как инвалидность пересекается с другими формами неравенства и вызывается ими.

    Дополнительная литература о моделях инвалидности:

    • Социальные и медицинские модели инвалидности: изменение парадигмы, искусство вне поля зрения
    • Социальная и медицинская модель инвалидности, Университет Лестера
    • Сериал о нескольких моделях инвалидности, Drake Music

    Помните, что инвалидность не зависит от класса, пола, расы, этнической принадлежности, но инвалидность непропорционально затрагивает тех, кто живет в бедности, женщин, а также чернокожих и цветных людей.

    Нажмите здесь, чтобы посмотреть расшифровку видео.

You may also like

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *