Kompania Microsoft hapën kodin burimor të sistemit NoSQL Garnet, i cili është i dizajnuar për krijimin e depozitave me cache dhe është kompatibil me bibliotekat ekzistuese të klientëve për depozitimin Redis. Garnet mbështet krijimin e grupeve të shkallëzuara për ruajtjen në cache të të dhënave, ku mund të përdoren replikimi, migrimi i çelësave dhe segmentimi i të dhënave midis nyjeve të grupit. Projekti është shkruar në gjuhën C# me një kern depozite në C++, është i hapur nën licencën MIT dhe mund të funksionojë në të gjitha platformat që mbështeten në .NET (platformat kryesore janë deklaruar si Linux dhe Windows).
Për ruajtjen e të dhënave, përdoret motori Tsavorite (forku i depozitës Microsoft FASTER), i cili mbështet përpunimin shumëthënës të kërkesave, transaksionet, vendosjen e ndryshimeve në modalitetin pa bllokim (checkpointing), rikuperimin nga dështimet, ruajtjen e kopjeve të tepërta dhe mbajtjen e logut të operacioneve. Përdoruesi i rrjetit në Garnet është ndërtuar duke përdorur arkitekturën e memories së ndarë, e propozuar nga projekti kërkimor ShadowFax. Procesimi TLS dhe ndërveprimi me depozitën kryhet në një përcjellës, çka lejon shmangien e shpenzimeve të kalimit të përcjellësve dhe përdorimin më efikas të caches CPU gjatë transferimit të të dhënave përmes rrjetit.
Arkitektura Garnet ndan një ndarje midis logjikës së analizës dhe përpunimit të kërkesave dhe operacioneve me ruajtjen. Të dhënat ruhet duke përdorur dy ruajtje në formatin çelës-vlerë, të implementuara mbi bibliotekën Tsavorite. Ruajtja e parë "themelore" është optimizuar për ekzekutimin e shpejtë të operacioneve me vargje, ndërsa ruajtja e dytë "objektore" është optimizuar për akomodimin e objekteve të komplikuara dhe tipeve të avancuara të të dhënave, si heshte dhe lista. Tipet e të dhënave në ruajtjen e dytë janë implementuar me ndihmën e biblioteka .NET. Të dhënat ruhen në heap (C# heap), çka lejon përditësimin efikas të tyre, dhe në formë të serilizuar në disk.

Karakteristikat e Garnet:
- Mundësia e vendosjes së ruajtjeve të shumëfishta, duke përfshirë memorien RAM, SSD dhe ruajtje në cloud, ku të dhënat më pak të kërkuara janë shtyrë në ruajtje më të ngadalta për krijimin e caches, që janë më të mëdha se memoria RAM.
- Përkrahje e zgjerueshme për pajisje, e cila lejon krijimin e niveleve të optimizuara për punë me pajisje të ndryshme, siç janë nivelet për SSD, diskët e fortë dhe ruajtjen cloud Azure Storage.
- Një mekanizëm efektiv për ripërdorimin e hapësirës së lirë në memorjen e operativ, duke parandaluar fragmentimin.
- Limita të përshtatshme për madhësinë e memories që përdoret për indeksat, logun dhe ruajtjen e objekteve.
- Për të aksesuar magazinën, përdoret protokolli RESP, i cili lejon përdorimin e Garnet me klientë Redis të pa modifikuar.
- Mbështetje për ruajtjen e vlerave si string dhe për struktura të ndërlikuara të dhënash, si lista, hesh, grupe, lista të renditura dhe të dhëna gjeolokacioni. Mundësia për të përcaktuar kohëzgjatjen e jetës së çelësit.
- Prania e një API për ekzekutimin e kërkesave analitike (HLL/Hyperloglog, Bitmap), transaksioneve (MULTI/EXEC) dhe përdorimin e paradigmatëve publikim/subskripcion.
- Prania e mjeteve për menaxhim fleksibël të aksesit përmes ACL.
- Mundësia për të përcaktuar konfigurimin në formatin JSON ose redis.conf.
- Mbështetje për lidhjen e trajtuesve të rinj në rrjet. Mundësia për të enkriptuar trafikun duke përdorur TLS (në bazë të SslStream).
- Mundësia për të krijuar zgjerime në gjuhën C#, që zbatojnë operacione të tjera me string dhe objekte.
- Mbështetje për procedurat e ruajtjes tranzaksionale që përfshijnë disa çelësa.
- Mundësia për t'u rikuperuar në një pozicion të ruajtur më parë (checkpoint-recovery). Prania e një rethi vetëm për shtim (AOF, skedari vetëm për shtim), ku të dhënat e vjetra mbeten të aksesueshme dhe nuk zëvendësohen.
- Mbështetje për krijimin e klasterit të ruajtjes me replikim, segmentim (Sharding), migrim dinamik të çelësave midis nyjave dhe rikuperim të nyjave që kanë dështuar.
- Performancë e lartë dhe vonesa të ulta gjatë ekzekutimit të kërkesave. Përpunim efikas i kërkesave të vogla të grupit me një numër të madh seancash klientësh, duke mundësuar një kapacitet (numri i kërkesave të përpunuara në sekondë) një rend më të lartë se zgjidhjet konkurruese. Kur ekzekutohet në makinat virtuale në atë që quhet cloud Azure, në shumicën e rasteve, vonesat e aksesit nga klienti nuk e kalojnë 300 mikrosekonda. Në testet e kryera, Garnet tejkalon ndjeshëm Redis, Dragonfly dhe KeyDB në performancë dhe reagim. Në disa teste, Garnet tejkalon sistemet konkurruese deri në dhjetë herë.




Burimi: opennet.ru




