Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 6755|Відповідь: 3

[Джерело] .NET/C# використовує Redis для реалізації алгоритму Bloom на основі BitMap

[Копіювати посилання]
Опубліковано 02.01.2023 17:37:01 | | | |
Вимоги: Нещодавно я побачив відео алгоритму Redis Bloom на Bilibili, щоб вирішити проблему проникнення кешу, тобто додати рівень логічного судження перед доступом до бази даних, щоб визначити, чи існують дані, і якщо так, то отримати доступ до бази даних. Наприклад, якщо вебсайт є новинною системою, URL-адреси статей генеруються самозростаючими первинними ключовими ID (формат 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 MB
Бітові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# маніпулює типом BitMap Redis

Ми дізналися про кілька команд BitMap у redis та про те, як ними програмно керувати. Створіть новий консольний проєкт .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