Что делать если поврежден кэш
Эта ошибка не позволяет получить доступ, копировать, переименовывать или выполнять другие действия с файлами, хранящимися в разделе жесткого диска на вашем ПК. Вы можете столкнуться с этой ошибкой на других устройствах хранения файлов, таких как внешние жесткие диски, флэш-накопители USB, съемные жесткие диски и карты флэш-памяти.
Что вызывает эту ошибку? Как вы восстанавливаете свои данные? И, самое главное, как вы исправите ошибку и предотвратите ее повторение?
- Отформатируйте флешку
- Используйте утилиту Chkdsk Windows для исправления ошибок файловой системы .
- Переустановите Windows
Параллельные запросы на обновление данных
Посмотрите на такой простой кусочек кода:
Что произойдёт при отсутствии запрашиваемых данных в кэше? Судя по коду, должен запуститься механизм, который достанет эти данные. Если код выполняется только в один поток, то всё будет хорошо: данные будут загружены, помещены в кэш и при следующем запросе взяты уже оттуда. А вот при работе в несколько параллельных потоков всё будет иначе: загрузка данных будет происходить не один раз, а несколько.
Выглядеть это будет примерно так:
На момент начала обработки запроса в процессе №2 данных в кэше ещё нет, но они уже читаются из базы данных в процессе №1. В этом примере проблема не такая существенная, ведь запроса всего два, но их может быть гораздо больше.
Количество параллельных загрузок зависит от количества параллельных пользователей и времени, которое требуется на загрузку необходимых данных.
Предположим, у вас есть какой-то функционал, использующий кэш с нагрузкой 200 запросов в секунду. Если на на загрузку данных нужно 50 мс, то за это время вы получите 50 / (1000 / 200) = 10 запросов.
То есть при отсутствии кэша один процесс начнёт загружать данные, и за время загрузки придут ещё девять запросов, которые не увидят данные в кэше и тоже станут их загружать.
Эта проблема называется cache stampede (русского аналога этого термина я не нашёл, дословно это можно перевести как «паническое бегство кэша», и картинка в начале статьи показывает пример этого действия в дикой природе), hit miss storm («шторм непопаданий в кэш») или dog-pile effect («эффект собачьей стаи»). Есть несколько способов её решения:
Блокировка перед началом выполнения операции пересчёта/ загрузки данных
Суть этого метода состоит в том, что при отсутствии данных в кэше процесс, который хочет их загрузить, должен захватить лок, который не даст сделать то же самое другим параллельно выполняющимся процессам. В случае memcached простейший способ блокировки — добавление ключа в тот же кэширующий сервер, в котором должны храниться сами закэшированные данные.
При этом варианте данные обновляются только в одном процессе, но нужно решить, что делать с процессами, которые попали в ситуацию с отсутствующим кэшем, но не смогли получить блокировку. Они могут отдавать ошибку или какое-то значение по умолчанию, ждать какое-то время, после чего пытаться получить данные ещё раз.
Кроме того, нужно тщательно выбирать время самой блокировки — его гарантированно должно хватить на то, чтобы загрузить данные из источника и положить в кэш. Если не хватит, то повторную загрузку данных может начать другой параллельный процесс. С другой стороны, если этот временной промежуток будет слишком большим и процесс, получивший блокировку, умрёт, не записав данные в кэш и не освободив блокировку, то другие процессы также не смогут получить эти данные до окончания времени блокировки.
Вынос обновлений в фон
Основная идея этого способа — разделение по разным процессам чтения данных из кэша и записи в него. В онлайн-процессах происходит только чтение данных из кэша, но не их загрузка, которая идёт только в отдельном фоновом процессе. Данный вариант делает невозможными параллельные обновления данных.
Этот способ требует дополнительных «расходов» на создание и мониторинг отдельного скрипта, пишущего данные в кэш, и синхронизации времени жизни записанного кэша и времени следующего запуска обновляющего его скрипта.
Этот вариант мы в Badoo используем, например, для счётчика общего количества пользователей, про который ещё пойдёт речь дальше.
Вероятностные методы обновления
Суть этих методов заключается в том, что данные в кэше обновляются не только при отсутствии, но и с какой-то вероятностью при их наличии. Это позволит обновлять их до того, как закэшированные данные «протухнут» и потребуются сразу всем процессам.
Для корректной работы такого механизма нужно, чтобы в начале срока жизни закэшированных данных вероятность пересчёта была небольшой, но постепенно увеличивалась. Добиться этого можно с помощью алгоритма XFetch, который использует экспоненциальное распределение. Его реализация выглядит примерно так:
В данном примере $ttl — это время жизни значения в кэше, $delta — время, которое потребовалось для генерации кэшируемого значения, $expiry — время, до которого значение в кэше будет валидным, $beta — параметр настройки алгоритма, изменяя который, можно влиять на вероятность пересчёта (чем он больше, тем более вероятен пересчёт при каждом запросе). Подробное описание этого алгоритма можно прочитать в white paper «Optimal Probabilistic Cache Stampede Prevention», ссылку на который вы найдёте в конце этого раздела.
Нужно понимать, что при использовании подобных вероятностных механизмов вы не исключаете параллельные обновления, а только снижаете их вероятность. Чтобы исключить их, можно «скрестить» несколько способов сразу (например, добавив блокировку перед обновлением).
1. Восстановление поврежденных MP3 файлов онлайн
- Нажмите на кнопку Выбрать здесь файл MP3 на сайте.
Выберите MP3 и нажмите кнопку Открыть . - Затем нажмите кнопку Загрузить MP3 .
- Выберите параметр Восстановить продолжительность звука (время воспроизведения) .
– СВЯЗАННО: Загрузите музыкальный проигрыватель Plexamp для Windows 10
Решение 9 – Изменить параметры конфиденциальности
После этого проверьте, решена ли проблема.
Сбои в работе
Система не может быть надёжной на 100%, поэтому нужно предусмотреть, как она будет вести себя при сбоях. Сбои могут быть как в работе самого кэша, так и в работе базы данных.
При сбоях в работе базы данных и отсутствии кэша мы можем попасть в ситуацию cache stampede, про которую я тоже уже рассказывал раньше. Выйти из неё можно уже описанными способами, а можно записать в кэш заведомо некорректное значение с небольшим сроком жизни. В этом случае система сможет определить, что источник недоступен, и на какое-то время перестанет пытаться запрашивать данные.
Решение 1 – отформатировать флешку
Возможно, это самое простое решение для ошибки «файл или каталог поврежден и нечитаем». Но это не самый идеальный вариант. Форматирование жесткого диска просто означает, что вы стираете все файлы, хранящиеся на жестких дисках.
Форматируя жесткий диск, вы также избавляетесь от всего, что повредило ваши файлы. Теперь вы можете начать с чистого листа. Но очевидно, что это не всегда практическое решение, поскольку цель жесткого диска – хранить данные, которые вам полезны. Последнее, что вы можете захотеть, это удалить все это.
Чтобы отформатировать диск, выполните следующие действия;
Форматирование может быть самым быстрым решением, но оно также удалит все файлы с вашего диска, так что вы можете подумать дважды об его использовании. Если вы решите отформатировать диск, заранее сделайте резервную копию важных файлов.
Что вызывает ошибку «файл или каталог поврежден и нечитаем»?
Эта ошибка обычно является результатом некоторой формы повреждения файла или повреждения внешних устройств хранения данных, на которых хранятся затронутые файлы. Из-за этого вы не можете получить доступ к файлам или делать то, что вы хотите с ними. Это плохая новость, если у вас есть важные данные, хранящиеся в затронутых файлах.
Но как файлы на жестких дисках повреждаются в первую очередь?
Поврежденный MFT (главная таблица файлов)
В большинстве случаев это является следствием того, как вы используете и заботитесь о своих жестких дисках. Например, отсоединение кабеля внешнего жесткого диска от USB-порта ПК до того, как компьютер выполнит копирование файла, или во время выполнения какой-либо другой команды, связанной с внешним жестким диском, может повредить файлы.
Обычно это MFT, который поврежден. MFT является частью файловой системы NFTS, которая обрабатывает хранение файлов. Это место, где предоставляются все права доступа к файлу, и где записывается информация о размерах и именах файлов, а также время создания и последнего редактирования. Как только этот MFT поврежден, доступ к вашим файлам блокируется.
Прежде чем извлекать их из ПК, убедитесь, что вы освободили внешние запоминающие устройства от всех программ, которые могут быть на них запущены Windows. Самый безопасный способ извлечь внешние жесткие диски – щелкнуть значок диска в окне проводника Windows.
- ЧИТАЙТЕ ТАКЖЕ . 14 лучших жестких дисков для ПК с Windows 10
Физическое повреждение внешнего жесткого диска
Иногда причиной сбоя жесткого диска и последующей ошибки «файл или каталог поврежден и нечитаемый» является физическое повреждение самого внешнего жесткого диска.
Как и любые цифровые и механические устройства, хранящие важную информацию, вы должны защищать свои внешние устройства хранения от влаги, пыли, тепла и других повреждений.
Вирусная инфекция
Это самая страшная из всех возможных причин ошибки «Файл или каталог поврежден и нечитаем». Фактически, вирусная инфекция может привести к гораздо более серьезным последствиям, чем потеря ваших данных. Сегодня существует множество источников заражения вирусом, и каждый пользователь компьютера должен быть очень бдительным.
Вы можете открыть свой компьютер для заражения вирусом через веб-сайты, которые вы просматриваете, файлы, которые вы загружаете из Интернета, и переносные накопители, которые вы подключаете к компьютеру. Эти вирусы часто повреждают ваши файловые разделы, удаляют ваши данные и вносят несанкционированные изменения в настройки реестра вашего компьютера. Все это может привести к ошибке «файл или каталог поврежден и нечитаем».
Если вы подозреваете, что причиной повреждения файла может быть заражение вирусом, приобретите хорошее антивирусное программное обеспечение и незамедлительно просканируйте свой компьютер. В некоторых случаях антивирусная очистка ПК может быть достаточно для восстановления недоступных файлов.
Тем не менее, кто-то еще может быть более обеспокоен возможностью потери данных в результате ошибки. На жестком диске могут храниться данные за месяцы работы. Таким образом, восстановление этих данных будет более приоритетным. Так что имейте это в виду при рассмотрении доступных вам вариантов.
Решение 8 – Проверьте свой регион
После этого ваш регион будет изменен, и проблемы с Windows Store будут полностью решены.
Решение 3 – Кэш Rest Store
Если перезагрузка Магазина Windows не помогла, давайте попробуем сбросить кэш Магазина. Вот именно то, что вам нужно сделать:
- Включить просмотр скрытых папок.
- Скопируйте и вставьте этот путь в адресную строку Windows File Explorer, но замените его именем своей учетной записи:
- C: \ Users \\ AppData \ Local \ Packages \ Microsoft.WindowsStore_8wekyb3d8bbwe \ LocalState
- Переименуйте папку Cache из папки LocalState. Это ваш выбор, как переименовать его.
- Создайте новую пустую папку и назовите ее Cache.
- Перезагрузите компьютер, и все готово.
Теперь откройте Магазин еще раз и посмотрите, существует ли проблема. Если это так, перейдите к другому решению.
3. Ремонт музыкальных файлов с помощью All Media Fixer
– СВЯЗАННЫЕ: программные инструменты Jazz для Windows 10 для прослушивания и создания музыки
Помните, что в наши дни вы можете получить много музыки с MP3-сайтов.Если ваш испорченный аудиофайл воспроизводил музыку известного певца или композитора, есть большая вероятность, что вы можете скачать эту же музыку с веб-сайта MP3. Посетите веб-сайты MP3Juices и Emp3z, чтобы узнать, содержат ли они ту же музыку, что и ваш поврежденный файл.
В качестве альтернативы вы можете найти видео на YouTube (или Vimeo), которое воспроизводит ту же музыку, что и ваш поврежденный файл. YouTube содержит множество музыкальных видео, которые вы можете воспроизводить в своем браузере. Введите конкретное название музыки в поле поиска YouTube, чтобы найти видео для него.
Меня зовут Виктор Пряжников, я работаю в SRV-команде Badoo. Наша команда занимается разработкой и поддержкой внутреннего API для наших клиентов со стороны сервера, и кэширование данных — это то, с чем мы сталкиваемся каждый день.
Существует мнение, что в программировании есть только две по-настоящему сложные задачи: придумывание названий и инвалидация кэша. Я не буду спорить с тем, что инвалидация — это сложно, но мне кажется, что кэширование — довольно хитрая вещь даже без учёта инвалидации. Есть много вещей, о которых следует подумать, прежде чем начинать использовать кэш. В этой статье я попробую сформулировать некоторые проблемы, с которыми можно столкнуться при работе с кэшем в большой системе.
Я расскажу о проблемах разделения кэшируемых данных между серверами, параллельных обновлениях данных, «холодном старте» и работе системы со сбоями. Также я опишу возможные способы решения этих проблем и приведу ссылки на материалы, где эти темы освещены более подробно. Я не буду рассказывать, что такое кэш в принципе и касаться деталей реализации конкретных систем.
При работе я исхожу из того, что рассматриваемая система состоит из приложения, базы данных и кэша для данных. Вместо базы данных может использоваться любой другой источник (например, какой-то микросервис или внешний API).
Что делать, если ваши музыкальные файлы были повреждены
Решение 1 – WSReset
Первое логическое решение для решения этой проблемы – запуск сценария WSReset. Этот инструмент полностью сбрасывает Windows Store и устраняет возможные проблемы в пути (надеюсь). Так что это может быть полезно и для решения этой проблемы.
Вот что нужно сделать для сброса Магазина Windows:
Теперь откройте Магазин, снова войдите в свою учетную запись Microsoft и посмотрите, сможете ли вы снова загрузить и обновить приложения. Если проблема все еще существует, перейдите к другому решению.
@programmist_1C
Перед тем как начать исправлять базу обязательно сделайте резервную копию!
1. Через конфигуратор
Тестирование и исправление информационной базы в 1С 8.2 и 8.3.
Нужно войти в конфигуратор администрирование - тестирование и исправление.
2. Утилита chdbfl.exe
Если в конфигуратор войти нет возможности можно воспользоваться утилитой chdbfl.exe. Ее скачивать не нужно, она находится в папке, где установлена 1С.
Например в C:\Program Files (x86)\1cv8\8.3.10.2561\bin\chdbfl.exe , где 8.3.10.2561 - номер релиза платформы.
У меня утилита chdbfl.exe находится тут
Нужно ее запустить, выбрать файл 1Cv8.1CD в папке базы 1с, поставить галочку "Исправлять обнаруженные ошибки" и запустить.
3. Очистить кэш (более подробно смотреть тут) .
Бывают такие глюки\сбои которые очень хорошо исправляются очисткой кэша.
Например один пользователь входит в базу 1с и работает без проблем, а другой или войти не может или при входе у него куча ошибок и т.п.
Способ очень простой.
Нужно подключиться к компьютеру этого пользователя, запустить 1с чтобы появился список баз.
И сделать так:
1 Выбрать в списке нужную базу
2 Удалить ее из списка, сама база не удалится. Главное запомните или запишите где она лежит.
3 Заново ее пропишите.
Сейчас у одного из моих клиентов ситуация в которой не помог ни один из этих способов.
Клиент новый, поэтому я еще не до конца разобрался как у него все устроено.
База файловая, находится на вирт машине, 1с без сервера запускается с другой вирт. машины.
Возможно 1с просто не хватает ресурсов.
Базу скачал себе, запущу и попробую поработать в ней, если ошибка не появится, то проблема точно не в 1с, а в системном администрировании.
Тогда буду перенастраивать.
Скачал базу себе, тестировал ее весь день - ни одной ошибки.
Узнал что ресурсов на компьютере клиента достаточно.
Решено. Проблема была в платформе.
Переустановка платформы и удаление старых версий полностью решило проблему. :)
Заключение
В статье я затронул основные проблемы при работе с кэшем, но уверен, что, кроме них, есть множество других, и продолжать этот разговор можно очень долго. Надеюсь, что после прочтения моей статьи ваш кэш станет более эффективным.
2. Проверьте MP3 Repair Tool
Кроме того, вы можете восстановить поврежденные MP3-файлы с помощью бесплатного MP3 Repair Tool. Это утилита, которая исправляет аудио файлы, удаляя кадры. Вы можете восстановить MP3 с помощью MP3 Repair Tool следующим образом.
- Нажмите Загрузить на этой веб-странице, чтобы сохранить ZIP-файл MP3 Repair Tool.
- Затем распакуйте ZIP-файл, выбрав mp3rt.zip в Проводнике и нажав кнопку Извлечь все . Нажмите Обзор , чтобы выбрать папку для извлечения, и нажмите кнопку Извлечь .
- Затем откройте окно программного обеспечения из извлеченной папки.
skype: live:di-sem
Что вызывает ошибку «файл или каталог поврежден и нечитаем»?
Эта ошибка обычно является результатом некоторой формы повреждения файла или повреждения внешних устройств хранения данных, на которых хранятся затронутые файлы. Из-за этого вы не можете получить доступ к файлам или делать то, что вы хотите с ними. Это плохая новость, если у вас есть важные данные, хранящиеся в затронутых файлах.
Но как файлы на жестких дисках повреждаются в первую очередь?
Поврежденный MFT (главная таблица файлов)
В большинстве случаев это является следствием того, как вы используете и заботитесь о своих жестких дисках. Например, отсоединение кабеля внешнего жесткого диска от USB-порта ПК до того, как компьютер выполнит копирование файла, или во время выполнения какой-либо другой команды, связанной с внешним жестким диском, может повредить файлы.
Обычно это MFT, который поврежден. MFT является частью файловой системы NFTS, которая обрабатывает хранение файлов. Это место, где предоставляются все права доступа к файлу, и где записывается информация о размерах и именах файлов, а также время создания и последнего редактирования. Как только этот MFT поврежден, доступ к вашим файлам блокируется.
Прежде чем извлекать их из ПК, убедитесь, что вы освободили внешние запоминающие устройства от всех программ, которые могут быть на них запущены Windows. Самый безопасный способ извлечь внешние жесткие диски – щелкнуть значок диска в окне проводника Windows.
- ЧИТАЙТЕ ТАКЖЕ . 14 лучших жестких дисков для ПК с Windows 10
Физическое повреждение внешнего жесткого диска
Иногда причиной сбоя жесткого диска и последующей ошибки «файл или каталог поврежден и нечитаемый» является физическое повреждение самого внешнего жесткого диска.
Как и любые цифровые и механические устройства, хранящие важную информацию, вы должны защищать свои внешние устройства хранения от влаги, пыли, тепла и других повреждений.
Вирусная инфекция
Это самая страшная из всех возможных причин ошибки «Файл или каталог поврежден и нечитаем». Фактически, вирусная инфекция может привести к гораздо более серьезным последствиям, чем потеря ваших данных. Сегодня существует множество источников заражения вирусом, и каждый пользователь компьютера должен быть очень бдительным.
Вы можете открыть свой компьютер для заражения вирусом через веб-сайты, которые вы просматриваете, файлы, которые вы загружаете из Интернета, и переносные накопители, которые вы подключаете к компьютеру. Эти вирусы часто повреждают ваши файловые разделы, удаляют ваши данные и вносят несанкционированные изменения в настройки реестра вашего компьютера. Все это может привести к ошибке «файл или каталог поврежден и нечитаем».
Если вы подозреваете, что причиной повреждения файла может быть заражение вирусом, приобретите хорошее антивирусное программное обеспечение и незамедлительно просканируйте свой компьютер. В некоторых случаях антивирусная очистка ПК может быть достаточно для восстановления недоступных файлов.
Тем не менее, кто-то еще может быть более обеспокоен возможностью потери данных в результате ошибки. На жестком диске могут храниться данные за месяцы работы. Таким образом, восстановление этих данных будет более приоритетным. Так что имейте это в виду при рассмотрении доступных вам вариантов.
Решение 5 – Сброс пакетов приложений
Если ни одно из представленных выше решений не решило проблему, мы попытаемся решить ее одним заключительным шагом. А именно, как вы уже знаете, Windows Store является встроенной функцией и не может быть переустановлен стандартным способом. Но с некоторыми расширенными функциями Windows пользователи могут сбрасывать пакеты приложений, что несколько аналогично процедуре переустановки.
Эту операцию можно выполнить с помощью PowerShell, а именно так:
- Щелкните правой кнопкой мыши Пуск и откройте PowerShell (Admin).
- В командной строке скопируйте и вставьте следующую команду и нажмите Enter:
- Get-AppXPackage -AllUsers | Foreach
- Перезагрузите компьютер и не открывайте Windows Store и/или приложения.
- Щелкните правой кнопкой мыши Пуск и откройте командную строку (администратор).
- В командной строке введите WSReset.exe и нажмите Enter.
- Перезагрузите компьютер и найдите изменения в Магазине Windows.
Решение 10 – Создать новую учетную запись пользователя
После создания новой учетной записи пользователя переключитесь на нее и проверьте, сохраняется ли проблема. Если нет, вам нужно переместить свои личные файлы из старой учетной записи в новую и начать использовать новую учетную запись вместо старой.
Вот и все, мы, конечно, надеемся, что хотя бы одно из этих решений помогло вам решить проблему с Windows Store. Если у вас есть какие-либо комментарии, вопросы или альтернативные решения, сообщите нам об этом в комментариях ниже.
Примечание редактора . Этот пост был первоначально опубликован в мае 2017 года и с тех пор был полностью переработан и обновлен для обеспечения свежести, точности и полноты.
Как восстановить ваши данные
Помимо средств диагностики и восстановления, доступных в ОС Windows, есть несколько других сторонних программных средств, которые вы можете использовать для восстановления поврежденных файлов и восстановления ваших данных. Использование этих инструментов может сэкономить ваше время, особенно если вам не хватает технических навыков работы с компьютером.
- Купить версию Minitool Partition Wizard Pro + Boot Media Builder (специальное предложение для наших читателей)
Потеря доступа к вашим ценным данным ужасна. Но в большинстве случаев нет необходимости паниковать, так как исправление, как правило, легко. Те немногие, что мы здесь обсудили, позволят вам в кратчайшие сроки снова работать с вашей машиной в полной гармонии.
Магазин Windows является неотъемлемой частью Windows 10, а еще более важен в Windows 10 S. Почти каждый пользователь Windows 10 использует хотя бы одно приложение или игру из Магазина Windows. Таким образом, любые потенциальные проблемы с этой функцией могут испортить пользовательский опыт.
Решение 2 – Проверьте свой антивирус
Чтобы решить эту проблему, пользователи предлагают проверить антивирус и отключить определенные функции. После этого проверьте, не устранена ли проблема. Если это не помогает, возможно, вам придется полностью отключить антивирусное программное обеспечение и проверить, решает ли это проблему.
Если нет, ваш окончательный выбор будет удалить антивирусное программное обеспечение. После удаления антивируса проверьте, сохраняется ли проблема. Если нет, вы можете рассмотреть возможность перехода на другое антивирусное решение. На рынке есть много отличных антивирусных инструментов, но если вы ищете антивирус, который не будет мешать вашей системе, мы предлагаем попробовать BullGuard .
«Холодный» старт и «прогревание» кэша
Нужно отметить, что проблема массового обновления данных из-за их отсутствия в кэше может быть вызвана не только большим количеством обновлений одного и того же ключа, но и большим количеством одновременных обновлений разных ключей. Например, такое может произойти, когда вы выкатываете новый «популярный» функционал с применением кэширования и фиксированным сроком жизни кэша.
В этом случае сразу после выкатки данные начнут загружаться (первое проявление проблемы), после чего попадут в кэш — и какое-то время всё будет хорошо, а после истечения срока жизни кэша все данные снова начнут загружаться и создавать повышенную нагрузку на базу данных.
От такой проблемы нельзя полностью избавиться, но можно «размазать» загрузки данных по времени, исключив тем самым резкое количество параллельных запросов к базе. Добиться этого можно несколькими способами:
- плавным включением нового функционала. Для этого необходим механизм, который позволит это сделать. Простейший вариант реализации — выкатывать новый функционал включённым на небольшую часть пользователей и постепенно её увеличивать. При таком сценарии не должно быть сразу большого вала обновлений, так как сначала функционал будет доступен только части пользователей, а по мере её увеличения кэш уже будет «прогрет».
- разным временем жизни разных элементов набора данных. Данный механизм можно использовать, только если система в состоянии выдержать пик, который наступит при выкатке всего функционала. Его особенность заключается в том, что при записи данных в кэш у каждого элемента будет своё время жизни, и благодаря этому вал обновлений сгладится гораздо быстрее за счёт распределения последующих обновления во времени. Простейший способ реализовать такой механизм — умножить время жизни кэша на какой-то случайный множитель:
Если по какой-то причине не хочется использовать случайное число, можно заменить его псевдослучайным значением, полученным с помощью хеш-функции на базе каких-нибудь данных (например, User ID).
Пример
Я написал небольшой скрипт, который эмулирует ситуацию «непрогретого» кэша.
В нём я воспроизвожу ситуацию, при которой пользователь при запросе загружает данные о себе (если их нет в кэше). Конечно, пример синтетический, но даже на нём можно увидеть разницу в поведении системы.
Вот как выглядит график количества hit miss-ов в ситуации с фиксированным (fixed_cache_misses_count) и различным (random_cache_misses_count) сроками жизни кэша:
Видно, что в начале работы в обоих случаях пики нагрузки очень заметны, но при использовании псевдослучайного времени жизни они сглаживаются гораздо быстрее.
Решение 3 – Переустановите Windows
Но если файл на диске C выдает ошибку «Файл или каталог поврежден и нечитаем», и компьютер не перестает работать, утилита Chkdsk редко решает проблему. Один вариант у вас есть, чтобы переустановить ОС Windows. Это, конечно, должно быть последним средством после того, как все другие варианты были изучены.
Деление данных между кэширующими серверами
Если вы хотите использовать кэширование в достаточно большой системе, нужно позаботиться о том, чтобы можно было поделить кэшируемые данные между доступными серверами. Это необходимо по нескольким причинам:
- данных может быть очень много, и они физически не поместятся в память одного сервера;
- данные могут запрашиваться очень часто, и один сервер не в состоянии обработать все эти запросы;
- вы хотите сделать кэширование более надёжным. Если у вас только один кэширующий сервер, то при его падении вся система останется без кэша, что может резко увеличить нагрузку на базу данных.
Есть разные алгоритмы для реализации этого. Самый простой — вычисление номера сервера как остатка от целочисленного деления численного представления ключа (например, CRC32) на количество кэширующих серверов:
Такой алгоритм называется хешированием по модулю (англ. modulo hashing). CRC32 здесь использован в качестве примера. Вместо него можно взять любую другую хеширующую функцию, из результатов которой можно получить число, большее или равное количеству серверов, с более-менее равномерно распределённым результатом.
Этот способ легко понять и реализовать, он достаточно равномерно распределяет данные между серверами, но у него есть серьёзный недостаток: при изменении количества серверов (из-за технических проблем или при добавлении новых) значительная часть кэша теряется, поскольку для ключей меняется остаток от деления.
Я написал небольшой скрипт, который продемонстрирует эту проблему.
В нём генерируется 1 млн уникальных ключей, распределённых по пяти серверам с помощью хеширования по модулю и CRC32. Я эмулирую выход из строя одного из серверов и перераспределение данных по четырём оставшимся.
В результате этого «сбоя» примерно 80% ключей изменят своё местоположение, то есть окажутся недоступными для последующего чтения:
Total keys count: 1000000
Shards count range: 4, 5
ShardsBefore | ShardsAfter | LostKeysPercent | LostKeys |
---|---|---|---|
5 | 4 | 80.03% | 800345 |
Самое неприятное тут то, что 80% — это далеко не предел. С увеличением количества серверов процент потери кэша будет расти и дальше. Единственное исключение — это кратные изменения (с двух до четырёх, с девяти до трёх и т. п.), при которых потери будут меньше обычного, но в любом случае не менее половины от имеющегося кэша:
Я выложил на GitHub скрипт, с помощью которого я собрал данные, а также ipynb-файл, рисующий данную таблицу, и файлы с данными.
Для решения этой проблемы есть другой алгоритм разбивки — согласованное хеширование (англ. consistent hashing). Основная идея этого механизма очень простая: здесь добавляется дополнительное отображение ключей на слоты, количество которых заметно превышает количество серверов (их могут быть тысячи и даже больше). Сами слоты, в свою очередь, каким-то образом распределяются по серверам.
При изменении количества серверов количество слотов не меняется, но меняется распределение слотов между этими серверами:
- если один из серверов выходит из строя, то все слоты, которые к нему относились, распределяются между оставшимися;
- если добавляется новый сервер, то ему передаётся часть слотов от уже имеющихся серверов.
На картинке начального разбиения все слоты одного сервера расположены подряд, но в реальности это не обязательное условие — они могут быть расположены как угодно.
Основное преимущество этого способа перед предыдущим заключается в том, что здесь каждому серверу соответствует не одно значение, а целый диапазон, и при изменении количества серверов между ними перераспределяется гораздо меньшая часть ключей ( k / N , где k — общее количество ключей, а N — количество серверов).
Если вернуться к сценарию, который я использовал для демонстрации недостатка хеширования по модулю, то при той же ситуации с падением одного из пяти серверов (с одинаковым весом) и перераспределением ключей с него между оставшимися мы потерям не 80% кэша, а только 20%. Если считать, что изначально все данные находятся в кэше и все они будут запрошены, то эта разница означает, что при согласованном хешировании мы получим в четыре раза меньше запросов к базе данных.
Код, реализующий этот алгоритм, будет сложнее, чем код предыдущего, поэтому я не буду его приводить в статье. При желании его легко можно найти — на GitHub есть rendezvous hashing), но они гораздо менее распространены.
Вне зависимости от выбранного алгоритма выбор сервера на основе хеша ключа может работать плохо. Обычно в кэше находится не набор однотипных данных, а большое количество разнородных: кэшированные значения занимают разное место в памяти, запрашиваются с разной частотой, имеют разное время генерации, разную частоту обновлений и разное время жизни. При использовании хеширования вы не можете управлять тем, куда именно попадёт ключ, и в результате может получиться «перекос» как в объёме хранимых данных, так и в количестве запросов к ним, из-за чего поведение разных кэширующих серверов будет сильно различаться.
Чтобы решить эту проблему, необходимо «размазать» ключи так, чтобы разнородные данные были распределены между серверами более-менее однородно. Для этого для выбора сервера нужно использовать не ключ, а какой-то другой параметр, к которому нужно будет применить один из описанных подходов. Нельзя сказать, что это будет за параметр, поскольку это зависит от вашей модели данных.
В нашем случае почти все кэшируемые данные относятся к одному пользователю, поэтому мы используем User ID в качестве параметра шардирования данных в кэше. Благодаря этому у нас получается распределить данные более-менее равномерно. Кроме того, мы получаем бонус — возможность использования multi_get для загрузки сразу нескольких разных ключей с информацией о юзере (что мы используем в предзагрузке часто используемых данных для текущего пользователя). Если бы положение каждого ключа определялось динамически, то невозможно было бы использовать multi_get при таком сценарии, так как не было бы гарантии, что все запрашиваемые ключи относятся к одному серверу.
Что делать, если кеш Магазина Windows поврежден
Решение 7. Убедитесь, что вы загружаете последние обновления
Иногда могут возникнуть проблемы с Магазином Windows, если ваша система устарела. Многие пользователи сообщали о том, что кэш Магазина Windows может быть поврежден на их ПК, и для решения этой проблемы важно поддерживать вашу систему в актуальном состоянии.
Windows 10 обычно загружает необходимые обновления автоматически, но иногда вы можете пропустить одно или два обновления из-за определенных проблем. Однако вы всегда можете проверить наличие обновлений вручную, выполнив следующие действия:
- Откройте Настройки приложения .
- Теперь перейдите в раздел Обновление и безопасность .
- На правой панели нажмите кнопку Проверить обновления .
Windows проверит наличие доступных обновлений и загрузит их в фоновом режиме. После загрузки обновлений они будут установлены сразу после перезагрузки компьютера. Как только ваш компьютер обновится, убедитесь, что проблема все еще существует.
Решение 2. Используйте утилиту Chkdsk Windows для исправления ошибок файловой системы.
Перспектива потери данных приведет большинство людей в панику. Но прежде чем паниковать, попробуйте использовать параметр командной строки Chkdsk для очистки жесткого диска. Это обычно решает проблему и помогает вам восстановить ваши данные. Проблемы, которые может решить утилита Chkdsk, включают ошибки каталогов, потерянные кластеры и сшитые файлы.
Выполните следующие шаги, чтобы запустить утилиту chkdsk;
Решение 6 – Сбросить приложение Магазина Windows
После этого приложение восстановит настройки по умолчанию, и это решит эту проблему. Как видите, это простое и быстрое решение, поэтому обязательно попробуйте его.
«Горячие» ключи
Данные в кэше разнородные, некоторые из них могут запрашиваться очень часто. В этом случае проблемы могут создавать даже не параллельные обновления, а само количество чтений. Примером подобного ключа у нас является счётчик общего количества пользователей:
Этот счётчик — один из самых популярных ключей, и при использовании обычного подхода все запросы к нему будут идти на один сервер (поскольку это всего один ключ, а не множество однотипных), поведение которого может измениться и замедлить работу с другими ключами, хранящимися там же.
Чтобы решить эту проблему, нужно писать данные не в один кэширующий сервер, а сразу в несколько. В этом случае мы кратно снизим количество чтений этого ключа, но усложним его обновления и код выбора сервера — ведь нам нужно будет использовать отдельный механизм.
Мы в Badoo решаем эту проблему тем, что пишем данные во все кэширующие серверы сразу. Благодаря этому при чтении мы можем использовать общий механизм выбора сервера — в коде можно использовать обычный механизм шардирования по User ID, и при чтении не нужно ничего знать про специфику этого «горячего» ключа. В нашем случае это работает, поскольку у нас сравнительно немного серверов (примерно десять на площадку).
Если бы кэширующих серверов было намного больше, то этот способ мог бы быть не самым удобным — просто нет смысла дублировать сотни раз одни и те же данные. В таком случае можно было бы дублировать ключ не на все серверы, а только на их часть, но такой вариант требует чуть больше усилий.
Если вы используете определение сервера по ключу кэша, то можно добавить к нему ограниченное количество псевдослучайных значений (сделав из total_users_count что-то вроде t otal_users_count_1 , total_users_count_2 и т. д.). Подобный подход используется, например, в Etsy.
Если вы используете явные указания параметра шардирования, то просто передавайте туда разные псевдослучайные значения.
Главная проблема с обоими способами — убедиться, что разные значения действительно попадают на разные кэширующие серверы.
Решение 4 – Удалить приложение «Фильмы и ТВ»
- Нажмите Windows Key + S и введите powershell . Нажмите правой кнопкой мыши Windows PowerShell в списке результатов и выберите Запуск от имени администратора .
- Теперь запустите Get-AppxPackage * zunevideo * | Команда Remove-AppxPackage .
После запуска этой команды приложение «Фильмы и ТВ» будет удалено. Теперь вы сможете запустить Windows Store без каких-либо проблем. Если вам нужна дополнительная информация, ознакомьтесь с этой статьей, чтобы узнать, как удалить собственные приложения Windows 10.
Читайте также: