Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 6755|Odpowiedź: 3

[Źródło] .NET/C# wykorzystuje Redis do implementacji algorytmu Bloom opartego na BitMap

[Skopiuj link]
Opublikowano 02.01.2023 17:37:01 | | | |
Wymagania: Niedawno widziałem film z algorytmem Redis Bloom na Bilibili, który rozwiązuje problem penetracji pamięci podręcznej, mówiąc wprost, dodaje warstwę logicznej oceny przed dostępem do bazy danych, aby sprawdzić, czy dane istnieją, a jeśli tak, to uzyskać dostęp do bazy. Na przykład, jeśli strona internetowa jest systemem informacyjnym, adresy URL artykułów są generowane przez samoprzyrastające identyfikatory klucza głównego (format URL example:/news-1.html), więc strona może mieć jedynie dziesiątki tysięcy artykułów i pamięci podręcznej.

Pierwotnie:

Request news resource -> Sprawdź, czy pamięć podręczna istnieje -> Obecność -> Pamięć podręczna zwraca dane.
Żądaj zasobów informacyjnych -> Sprawdź, czy pamięć podręczna istnieje -> nie istnieje -> Zapytaj z bazy danych -> Prezentuj -> Zwróć dane cache.
Zproś zasób wiadomości -> Sprawdź, czy pamięć podręczna istnieje -> nie istnieje -> Zapytanie z bazy danych -> Nie istnieje -> Zwraca błąd 404.

Teraz:

Poproś o źródło informacji -> algorytm Blooma -> Istnienie -> Postępuj zgodnie z oryginalną logiką.
Request news resource -> algorytm Blooma -> nie istnieje -> zwraca bezpośrednio błąd 404.

BloomFilter

Algorytm BloomFilter to algorytm planowania big data. W zbiorze z dużą ilością danych można dokładnie określić, że obiekt nie znajduje się w zbiorze; Można ocenić obiekt w zbiorze i zajmować niewiele miejsca. onoNie nadaje się do sytuacji wymagających wysokiej dokładności i zerowych błędów。 Efektywne wykorzystanie przestrzeni osiąga się poprzez poświęcenie częściowej dokładności.

Algorytm Blooma to metoda oparta naPoświęcić pewną dokładność na rzecz algorytmu filtrującego o niskim zużyciu pamięci, które mogą realizować filtrowanie, deduplikację i inne operacje dużej ilości danych.

Algorytm Bloom to po prostu abstrakcyjna koncepcja i może być implementowana na wiele sposobów, a użycie BitMap w Redis w artykule to prosta implementacja.

Odniesienie:Logowanie do linku jest widoczne.

Wprowadzenie do BitMap

BitMap to bitmapa, która w rzeczywistości jest tablicą bajtów, reprezentowaną w formie binarnej.Są tylko dwie liczby: 0 i 1, bitmapa polega na użyciu każdego bitu binarnego do przechowywania lub oznaczania wartości odpowiadającej elementowi. Zazwyczaj służy do określenia, czy dane istnieją, ponieważ są przechowywane w bitach, więc sam Bitmap znacznie oszczędza miejsce na dysku.

Jak pokazano na poniższym rysunku, ciąg jest przechowywany w formie binarnej w komputerze.



Typy danych BitMap w Redis

Typ danych dostarczany przez Redis to BitMap, a każdy bit odpowiada dwóm stanom: 0 i 1. Chociaż pamięć wewnętrzna nadal jest w typie String, Redis dostarcza instrukcje do bezpośredniej manipulacji BitMapą, którą można traktować jako tablicę bitową, a indeks tablicy to przesunięcie.

Jego zalety to:Niskie narzuty pamięci i wysoka wydajnośćA operacja jest prosta.

Oszczędzanie miejsca: bit służy do reprezentowania wartości lub stanu elementu, gdzie klucz to wartość odpowiadającego elementu. W rzeczywistości 8 bitów może stanowić bajt, więc oszczędza miejsce.
Wysoka wydajność: Złożoność czasowa setbit i getbit wynosi O(1), a efektywność innych bitów również jest wysoka.

Oto przykład użycia kolekcji zestawów i pamięci BitMap:

Typ danychKażdy userid zajmuje miejsceLiczba użytkowników, których trzeba przechowywaćWszystko zajmuje pamięć
zbiór32 bity to 4 bajty (zakładając, że userid używa liczb całkowitych, wiele stron faktycznie używa długich liczb całkowitych)50,000,00032 bity * 50 000 000 = 200 MB
Bitmapa1 bit100,000,0001 bit * 100 000 000 = 12,5 MB


Czas trochę się rozciąga

Pewnego dniaJeden miesiącJeden rok
zbiór200M6G72G
Bitmapa12,5 mln375M4.5G


Po obliczeniach stwierdzono, że wraz ze wzrostem czasu rosła ilość danych do zapisu, kontrast stawał się bardziej widoczny, a BitMap zajmował mniej miejsca niż ustawiony.

Redis zawiera następujące instrukcje obsługi BitMap:

polecenieIlustrująDostępne wersjeZłożoność czasowa
Logowanie do linku jest widoczne.Ustaw lub wyczyść bity na określonym offsetzie dla wartości ciągu danych zapisanych w kluczu.>= 2.2.0O(1)
Logowanie do linku jest widoczne.Dla wartości ciągu danych w kluczu uzyskamy bity na określonym offsecie.>= 2.2.0O(1)
Logowanie do linku jest widoczne.Liczy liczbę bitów w danym ciągu ustawionych na 1.>= 2.6.0O(N)
Logowanie do linku jest widoczne.Zwraca pozycję bitu binarnego w bitmapie, gdzie pierwsza wartość to bit.>= 2.8.7O(N)
Logowanie do linku jest widoczne.Manipulacja bitami na jednym lub kilku ciągów znaków przetrzymujących bity binarne.>= 2.6.0O(N)
Logowanie do linku jest widoczne.Polecenie BITFIELD może działać jednocześnie na wielu zakresach bitów w jednym wywołaniu.>= 3.2.0O(1)


Dokumentacja poleceń:Logowanie do linku jest widoczne.

Teraz, gdy masz krótkie zrozumienie algorytmu oraz cech bitmapowych i składni Redis, użyjmy redis, aby wykonać prostą operację.

Składnia SETBIT:Wartość przesunięcia klucza SETBIT

Ustaw id:9, 10, 156 na 1, a polecenie jest następujące:

Składnia GETBIT: przesunięcie klucza GETBIT

Aby ustalić, czy istnieje id: 10 czy 11, polecenie jest następujące:




.NET/C# manipuluje typem BitMap w Redis

Poznaliśmy kilka poleceń BitMap w redis i jak je programowo obsługiwać. Stwórz nowy projekt konsoli .NET 3.1, odwołaj się do pakietu StackExchange.Redis i użyj następującego polecenia:

Kod źródłowy przedstawia się następująco:



Istnieje wiele innych scenariuszy zastosowań bitmapowych dla Redis, jak poniżej:

  • Może być używany jako prosty filtr Bloom do określenia, czy użytkownik wykonał określone działania.
  • Statystyki dziennej aktywności użytkownika, miesięcznej aktywności oraz wskaźnika retencji
  • Zrozum statystyki liczby startów użytkowników
  • Obecność użytkowników w sieci i statystyki dotyczące osób

(Koniec)




Poprzedni:Wirtualni aktorzy: Dapr kontra Orleans
Następny:Alibaba Cloud SLB Load Balancing 503 – rozwiązywanie błędów
 Ziemianin| Opublikowano 02.01.2023 17:41:56 |
Opublikowano 02.01.2023 20:42:47 |
Nauczyłem się, dziękuję, i zdobyłem wiedzę
Opublikowano 06.01.2023 20:34:22 |
Naucz się uczyć
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com