Tvrtka Microsoft je otvorila izvorne kodove NoSQL sustava Garnet, koji je osmišljen za izradu cache skladišta i kompatibilan je s postojećim klijentskim bibliotekama za Redis skladište. Garnet podržava izradu skalabilnih klastera za keširanje podataka, u kojima se može koristiti replikacija, migracija ključeva i segmentacija podataka između čvorova klastera. Projekt je napisan u programskom jeziku C# s jezgrom skladišta u C++, otvoren je pod MIT licencom i može raditi na svim platformama koje podržava .NET (primarne platforme su Linux i Windows).
Za pohranu podataka koristi se Tsavorite motor (fork Microsoft FASTER skladišta), koji podržava višestruko procesiranje zahtjeva, transakcije, neblokirajuće snimanje promjena (checkpointing), oporavak od pogrešaka, pohranu redundantnih kopija i vođenje operativnog dnevnika. Mrežni procesor u Garnetu izgrađen je korištenjem arhitekture zajedničke memorije koju je predložila istraživačka inicijativa ShadowFax. Obrada TLS i interakcija sa skladištem odvijaju se u jednoj niti, što omogućuje izbjegavanje troškova prebacivanja niti i efikasnije korištenje CPU keša prilikom prijenosa podataka mrežom.
Arhitektura Garnet odvaja logiku analize i obrade zahtjeva od operacija sa skladištem. Podaci se pohranjuju koristeći dva skladišta u formatu ključ-vrijednost, provedena na temelju Tsavorite biblioteke. Prvo 'glavno' skladište optimizirano je za brzu izvedbu operacija sa stringovima, dok je drugo 'objektno' skladište optimizirano za pohranu složenih objekata i proširenih tipova podataka, poput hashova i listi. Tipovi podataka u drugom skladištu realizirani su uz pomoć .NET biblioteka. Podaci se pohranjuju u hrpi (C# heap), što omogućuje njihovo efikasno ažuriranje, te u serijaliziranom obliku na disku.

Značajke Garneta:
- Moguća je implementacija višeslojnih skladišta, koja obuhvaćaju radnu memoriju, SSD uređaje i cloud skladišta, u kojima se manje traženi podaci prebacuju u sporija skladišta za kreiranje keševa većih od radne memorije.
- Proširena podrška za uređaje koja omogućava stvaranje slojeva optimiziranih za rad s različitim uređajima, uključujući slojeve za SDD, tvrde diskove i Azure Storage.
- Učinkovit mehanizam ponovne upotrebe oslobođenog prostora u radnoj memoriji koji sprječava fragmentaciju.
- Prilagodljive granice za veličinu memorije koja se koristi za indekse, logove i pohranu objekata.
- Za pristup pohrani koristi se RESP protokol, što omogućava korištenje Garnet-a s neizmijenjenim Redis klijentima.
- Podrška za pohranu i jednostavnih vrijednosti i složenih struktura podataka, poput lista, hash-eva, skupova, sortiranih listi i geopozicijskih podataka. Mogućnost definiranja vremena trajanja ključa.
- Postoji API za provođenje analitičkih upita (HLL/Hyperloglog, Bitmap), transakcija (MULTI/EXEC) i korištenje paradigme objavljivanja/pretplate.
- Postoje alati za fleksibilno upravljanje pristupom kroz ACL.
- Mogućnost definiranja konfiguracije u JSON formatu ili redis.conf.
- Podrška za povezivanje dodatnih mrežnih procesora. Mogućnost enkripcije prometa koristeći TLS (na bazi SslStream).
- Mogućnost stvaranja ekstenzija na jeziku C# koji implementiraju dodatne operacije sa stringovima i objektima.
- Podrška za transakciona pohranjenja procedura koje obuhvaćaju više ključeva.
- Mogućnost obnavljanja stanja s prethodno spremljene pozicije (checkpoint-recovery). Postoji način samo dodavanja (AOF, append-only file), u kojem svi stari podaci ostaju dostupni i ne zamjenjuju se.
- Podrška za stvaranje skladišnog klastera s replikacijom, segmentacijom (Sharding), dinamičkom migracijom ključeva između čvorova i oporavkom neispravnih čvorova.
- Visoka performansa i niske latencije prilikom izvršavanja upita. Učinkovita obrada malih grupnih upita uz veliki broj klijentskih sesija, omogućavajući kapacitet (broj obrađenih upita u sekundi) red veličine veći od konkurentskih rješenja. Prilikom pokretanja u virtualnim mašinama U oblaku Azure, u većini slučajeva, latencije klijentskog pristupa ne prelaze 300 mikrosekundi. U provedenim testovima, Garnet značajno nadmašuje Redis, Dragonfly i KeyDB po performansama i odzivu. U nekim testovima, Garnet premašuje konkurentske sustave deset puta.




Izvor: opennet.ru




