Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 6755|Ответ: 3

[Источник] .NET/C# использует Redis для реализации алгоритма Bloom на основе BitMap

[Скопировать ссылку]
Опубликовано 02.01.2023 17:37:01 | | | |
Требования: Недавно я увидел видео с алгоритмом Redis Bloom на Bilibili, который решает проблему проникновения в кэш, проще говоря, добавляет слой логического суждения перед доступом к базе данных, чтобы определить, существуют ли данные, и если да, то получить доступ к базе данных. Например, если сайт — это новостная система, а URL-адреса статей генерируются самоувеличивающимися первичными ключевыми идентификаторами (формат URL example:/news-1.html), сайт может содержать только десятки тысяч статей и кэшей.

Первоначально:

Запросить новостной ресурс -> Определить, существует ли кэш -> Присутствие -> Кэш возвращает данные.
Запросить новостные ресурсы -> Определить, существует ли кэш -> не существует -> Запросить из базы данных -> Представить -> Кэш и вернуть данные.
Запросить новостной ресурс -> Определить, существует ли кэш -> не существует -> Запрос из базы данных -> Не существует -> Возвращает ошибку 404.

Прямо сейчас:

Запросить новостной ресурс -> алгоритм Блума -> Существование -> Следовать исходной логике.
Запросить новостной ресурс -> алгоритм Блума -> не существует -> возвращает ошибку 404 напрямую.

BloomFilter

Алгоритм BloomFilter — это алгоритм планирования больших данных. В множестве с большим объёмом данных можно точно определить, что объект отсутствует в этом наборе; Можно оценить объект в множестве и занять мало места. оноОн не подходит для ситуаций, требующих высокой точности и отсутствия ошибок。 Эффективное использование пространства достигается за счёт жертвы частичной точности.

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

Алгоритм Блума — это всего лишь абстрактная концепция, которую можно реализовать разными способами, а использование BitMap в Redis в статье — это просто простая реализация.

Ссылка:Вход по гиперссылке виден.

Введение в битмап

BitMap — это растровый мап, который на самом деле представляет собой массив байтов, представленный в бинарном виде.Существует всего два числа — 0 и 1, растровая карта — использовать каждый бинарный бит для хранения или маркировки значения, соответствующего элементу. Обычно он используется для определения существования определённых данных, так как они хранятся в битах, поэтому сам растровый мап значительно экономит место для памяти.

Как показано на рисунке ниже, строка хранится в бинарном виде в компьютере.



Типы данных BitMap в Redis

Тип данных, предоставляемый Redis, — BitMap, и каждый бит соответствует двум состояниям: 0 и 1. Хотя внутреннее хранилище всё ещё находится в типе String, Redis предоставляет некоторые инструкции по прямой обработке BitMap, который можно рассматривать как битовый массив, а индекс массива — это смещение.

Её преимущества следующие:Низкие накладные расходы памяти и высокая эффективностьИ операция проста.

Экономия пространства: Бит используется для представления значения или состояния элемента, где key — значение соответствующего элемента. На самом деле, 8 бит могут составлять байт, что экономит место.
Высокая эффективность: Временная сложность setbit и getbit составляет O(1), а эффективность других битов тоже высока.

Вот пример использования коллекции множеств и хранилища BitMap:

тип данныхКаждый пользователь занимает местоКоличество пользователей, которых нужно хранитьВсё занимает память
набор32 бита — это 4 байта (если Userid использует целые числа, многие сайты действительно используют длинные целые числа)50,000,00032 бита * 50 000 000 = 200 МБ
Точечный рисунок1 бит100,000,0001 бит * 100 000 000 = 12,5 MB


Время немного растянулось

ОднаждыОдин месяцОдин год
набор200 м6G72G
Точечный рисунок12,5 млн375 м4,5G


После расчёта было установлено, что с увеличением времени количество данных увеличивается, контраст становится более заметным, а BitMap занимает меньше места, чем было установлено.

Redis предоставляет следующие инструкции по работе с BitMap:

командаиллюстрироватьДоступные версииВременная сложность
Вход по гиперссылке виден.Установите или очистите биты на указанном смещении для значения строки, хранящегося в ключе.>= 2.2.0O(1)
Вход по гиперссылке виден.Для значения строки, хранящегося в ключе, получите биты на указанном смещении.>= 2.2.0O(1)
Вход по гиперссылке виден.Считает количество битов в данной строке, которые равны 1.>= 2.6.0O(N)
Вход по гиперссылке виден.Возвращает позицию бинарного бита в битмапе, где первое значение — бит.>= 2.8.7O(N)
Вход по гиперссылке виден.Манипуляция битами на одной или нескольких строковых клавишах, которые содержат бинарные биты.>= 2.6.0O(N)
Вход по гиперссылке виден.Команда BITFIELD может работать на нескольких битовых диапазонах одновременно в одном вызове.>= 3.2.0O(1)


Документация командования:Вход по гиперссылке виден.

Теперь, когда у вас есть краткое представление об алгоритме, растровых функциях и синтаксисе Redis, давайте возьмём Redis для простой операции.

Синтаксис SETBIT:Смещение ключа SETBIT

Установите артикл id:9, 10, 156 по 1, и команда выглядит следующим образом:

Синтаксис GETBIT: смещение ключа GETBIT

Чтобы определить, существует ли id: 10 или 11, команда выглядит следующим образом:




.NET/C# управляет растровым типом Redis

В redis мы узнали о нескольких командах BitMap и о том, как ими управлять программно. Создайте новый консольный проект .NET 3.1, откройте ссылку на пакет StackExchange.Redis и используйте следующую команду:

Исходный код следующий:



Существует множество других сценариев применения растрового изображения для Redis, а именно следующие:

  • Его можно использовать как простой фильтр Bloom для определения, выполнил ли пользователь определённые действия.
  • Статистика ежедневной активности пользователя, ежемесячной активности и уровня удержания пользователей
  • Изучите статистику числа запусков пользователей
  • Онлайн-присутствие пользователей и статистика людей

(Конец)




Предыдущий:Виртуальные актёры: Dapr против Orleans
Следующий:Решение ошибок Alibaba Cloud SLB Load Balancing 503
 Хозяин| Опубликовано 02.01.2023 17:41:56 |
Опубликовано 02.01.2023 20:42:47 |
Я научился, спасибо, и получил знания
Опубликовано 06.01.2023 20:34:22 |
Учитесь учиться
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com