Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 6755|Odpověď: 3

[Zdroj] .NET/C# používá Redis k implementaci Bloom algoritmu založeného na BitMapě

[Kopírovat odkaz]
Zveřejněno 02.01.2023 17:37:01 | | | |
Požadavky: Nedávno jsem viděl video algoritmu Redis Bloom na Bilibili, který řeší problém pronikání do cache, jednoduše řečeno, přidává vrstvu logického úsudku před přístupem do databáze, abych zjistil, zda data existují, a pokud ano, tak k databázi přistupovat. Například pokud je webová stránka zpravodajským systémem, URL adresy článků jsou generovány samopřirůstajícími primárními klíčovými ID (URL formát example:/news-1.html), web může mít pouze desítky tisíc článků a cache.

Původně:

Požádat o zpravodajský zdroj -> Zjistit, zda cache existuje -> Přítomnost -> Cache vrací data.
Požádat o zpravodajské zdroje -> Zjistit, zda cache existuje -> neexistuje -> Dotazovat z databáze -> Prezentovat -> Cache a vrátit data.
Požádat o zpravodajský zdroj -> Zjistit, zda cache existuje -> neexistuje -> Dotaz z databáze -> Neexistuje -> Vrátí chybu 404.

Hned teď:

Požádat o zpravodajský zdroj -> Bloomův algoritmus -> Existence -> Řiďte se původní logikou.
Požádat o zpravodajský zdroj -> Bloomův algoritmus -> neexistuje -> přímo vrací chybu 404.

BloomFilter

Algoritmus BloomFilter je algoritmus pro plánování velkých dat. V množině s velkým množstvím dat lze přesně určit, že objekt v této množině není; Je možné hodnotit objekt v množině a zabírat jen málo místa. onoNení vhodný pro situace, které vyžadují vysokou přesnost a nulové chyby。 Efektivní využití prostoru je dosaženo obětováním částečné přesnosti.

Bloomův algoritmus je metoda založená naObětovat určitou přesnost výměnou za filtrační algoritmus s nízkou spotřebou paměti, které mohou provádět filtrování, deduplikaci a další operace velkého množství dat.

Bloomův algoritmus je jen abstraktní koncept a lze jej implementovat mnoha způsoby, a použití BitMapu v Redis v článku je jen jednoduchá implementace.

Odkaz:Přihlášení k hypertextovému odkazu je viditelné.

Úvod do BitMap

BitMap je bitmapa, což je ve skutečnosti bajtové pole reprezentované binárně.Existují pouze dvě čísla, 0 a 1, bitmapa slouží k použití každého binárního bitu k uložení nebo označení hodnoty odpovídající prvku. Obvykle se používá k určení, zda určitá data existují, protože jsou uložena v bitech, takže samotný Bitmap výrazně šetří místo na úložišti.

Jak je znázorněno na obrázku níže, řetězec je uložen v binární formě v počítači.



Datové typy BitMap v Redis

Datový typ poskytnutý Redis je BitMap a každý bit odpovídá dvěma stavům: 0 a 1. Ačkoliv je interní paměť stále v typu String, Redis poskytuje některé instrukce pro přímou manipulaci s BitMapou, kterou lze chápat jako bitové pole, a index pole je offset.

Její výhody jsou:Nízká paměťová režie a vysoká účinnostA operace je jednoduchá.

Úspora místa: Bit se používá k reprezentaci hodnoty nebo stavu prvku, kde klíč je hodnota příslušného prvku. Ve skutečnosti může 8 bitů tvořit bajt, takže šetří prostor.
Vysoká efektivita: Časová složitost setbitu a getbitu je O(1) a efektivita ostatních bitů je také vysoká.

Zde je příklad použití kolekce setů a úložiště BitMap:

datový typKaždý userid zabírá místoPočet uživatelů, které je potřeba uložitVše zabírá paměť
nastavit32 bitů je 4 bajty (za předpokladu, že userid používá celá čísla, mnoho webů skutečně používá dlouhá celá čísla)50,000,00032 bitů * 50 000 000 = 200 MB
Bitmapa1 bit100,000,0001 bit * 100 000 000 = 12,5 MB


Čas se trochu protahuje

Jednoho dneJeden měsícJeden rok
nastavit200M6G72G
Bitmapa12,5M375M4,5G


Po výpočtu se zjistilo, že s postupem času se zvyšuje množství dat, která je třeba zaznamenat, kontrast je zřetelnější a BitMap zabírá méně místa než nastaveno.

Redis poskytuje následující instrukce pro provoz BitMapy:

příkazilustrovatDostupné verzeČasová složitost
Přihlášení k hypertextovému odkazu je viditelné.Nastavte nebo vymažte bity na specifikovaném offsetu pro hodnotu řetězce uloženou v klíči.>= 2.2.0O(1)
Přihlášení k hypertextovému odkazu je viditelné.Pro hodnotu řetězce uloženou v klíči získáme bity na určeném offsetu.>= 2.2.0O(1)
Přihlášení k hypertextovému odkazu je viditelné.Počítá počet bitů v daném řetězci, které jsou nastaveny na 1.>= 2.6.0O(N)
Přihlášení k hypertextovému odkazu je viditelné.Vrátí pozici binárního bitu v bitmapě, kde je první hodnota bit.>= 2.8.7O(N)
Přihlášení k hypertextovému odkazu je viditelné.Manipulace s bity na jednom nebo více řetězcových klíčích, které drží binární bity.>= 2.6.0O(N)
Přihlášení k hypertextovému odkazu je viditelné.Příkaz BITFIELD může pracovat s více bitranges současně během jednoho volání.>= 3.2.0O(1)


Dokumentace příkazů:Přihlášení k hypertextovému odkazu je viditelné.

Teď, když máte stručné pochopení algoritmu a bitmapových funkcí a syntaxe Redis, použijme redis k jednoduché operaci.

Syntaxe SETBIT:Hodnota posunu klíče SETBIT

Nastavte id článku 9, 10, 156 na 1 a příkaz je následující:

GETBIT syntaxe: GETBIT key offset

Pro určení, zda existuje id: 10 nebo 11, je příkaz následující:




.NET/C# manipuluje s typem BitMap v Redis

Naučili jsme se o několika BitMap příkazech v redisu a o tom, jak je programově ovládat. Vytvořte nový .NET 3.1 konzolový projekt, odkazujte na balíček StackExchange.Redis a použijte následující příkaz:

Zdrojový kód je následující:



Existuje mnoho dalších scénářů aplikace bitmapových map pro Redis, a to následovně:

  • Může být použit jako jednoduchý Bloom filtr k určení, zda uživatel provedl určité akce.
  • Statistiky denní aktivity uživatelů, měsíční aktivity a míry udržení uživatelů
  • Uvědomte si statistiky počtu spuštění uživateli
  • Online přítomnost uživatelů a statistiky o osobách

(Konec)




Předchozí:Virtuální herci: Dapr vs Orleans
Další:Alibaba Cloud SLB Load Balancing 503 Řešení chyb
 Pronajímatel| Zveřejněno 02.01.2023 17:41:56 |
Zveřejněno 02.01.2023 20:42:47 |
Naučil jsem se, děkuji, a získal znalosti
Zveřejněno 06.01.2023 20:34:22 |
Učte se učit
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com