NoSQL-utmärkelser: De bästa nyckelvärdesdatabaserna jämfört

De flesta applikationer behöver någon form av uthållighet - ett sätt att lagra informationen utanför applikationen för skydd. Det mest grundläggande sättet är att skriva data till filsystemet, men det kan snabbt bli ett långsamt och svårt sätt att lösa problemet. En fullständig databas ger ett kraftfullt sätt att indexera och hämta data, men det kan också vara överdrivet. Ibland är allt du behöver ett snabbt sätt att ta en information om friform, associera den med en etikett, stoppa den någonstans och dra tillbaka den igen i ett ögonblick.

Ange nyckelvärdeslagret. Det är i grunden en NoSQL-databas, men en med ett mycket specifikt syfte och en medvetet begränsad design. Dess uppgift är att låta dig ta data (ett värde), applicera en etikett på den (en nyckel) och lagra den antingen i minnet eller i något lagringssystem som är optimerat för snabb hämtning. Applikationer använder nyckelvärdesdatabaser för allt från cachningsobjekt till delning av vanligt förekommande data mellan applikationsnoder.

Många relationsdatabaser kan fungera som nyckelvärdesbutiker, men det är lite som att använda en traktorvagn för att köra livsmedelsbutiker. Det fungerar, men det är dramatiskt ineffektivt, och det finns mycket lättare sätt att lösa problemet. En nyckelvärdesbutik, som andra NoSQL-databaser, ger tillräckligt med infrastruktur för enkel värdelagring och hämtning, integreras mer direkt med applikationer som använder den och skalas på ett mer detaljerat sätt med applikationsarbetsbelastningen.

Nyckelvärde NoSQL-databasfunktioner jämfört

Fem produkter som används i stor utsträckning (inklusive en molntjänst) är värda att överväga; de faktureras uttryckligen som nyckelvärdesdatabaser eller erbjuder nyckelvärdeslagring som en central funktion. Deras grundläggande skillnader:

  • Hazelcast och Memcached tenderar mot minimalism och bryr sig inte ens att säkerhetskopiera data på disken.
  • Aerospike, Cosmos DB och Redis har fler funktioner, men kretsar fortfarande om nyckelvärdesmetaforen.

Tabell: Jämfört viktvärde NoSQL-databasprodukter

L W M S I A O

* Genom en tredjepartsimplementering.

Nyckel: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = Annat.
  Aerospike Hazelcast IMDG Microsoft Azure Cosmos DB Memcached Redis
Plattformar LWMO Java Endast moln LWMO LWMO
Aktuell version 3.14.1.1 3.9 Ej tillämpligt 1.5.1 4.0.1
Första utgåvan 2012 2008 2017 2003 2009
Licens AGPL Apache 2 Proprietär BSD BSD
Skivbackad Ja Nej Ja Nej JaBSD
Kluster Ja Ja Ja Nej Ja
Skärning / partitionering Ja Ja Ja Nej Ja
Native scripting Ja Java Ja Nej Ja
Transaktioner Per nyckel Ja Ja Nej Ja
Inbäddningsbar Ja*

Ja Nej Ja*

Ja*

Aerospike nyckel-värde NoSQL-databas på djupet

Om Redis är Memcached på steroider kan Aerospike sägas vara Redis på steroider. Liksom Redis är Aerospike en nyckelvärdesbutik som kan fungera som en ihållande databas eller en datacache. Aerospike är utformat för att vara enkelt att klustera och lätt att skala, för att bättre stödja företagets arbetsbelastningar.

Funktioner unika för Aerospike

Mycket inom Aerospike ekar både andra viktiga butiker och andra NoSQL-databaser. Data lagras och hämtas via nycklar, och data kan förvaras i ett antal grundläggande datatyper, inklusive 64-bitars heltal, strängar, dubbelprecisionsfloat och rå binär data som serieiserats från ett antal vanliga programmeringsspråk.

Aerospike kan också lagra data i komplexa typer - listor över värden, samlingar av nyckel-värdepar som kallas kartor och geospatial data i GeoJSON-format. Aerospike kan utföra integrerad bearbetning av geospatial data - som att bestämma vilka platser som lagras i databasen närmast varandra genom att bara utföra en fråga - vilket gör det till ett attraktivt alternativ för utvecklare av applikationer som är beroende av plats.

Data som lagras i Aerospike kan ordnas i flera hierarkiska behållare. Vissa NoSQL-system är dokumentorienterade, vilket betyder att data är inkapslade i något slags objekt, vanligtvis JSON. Med Aerospike är containrar ungefär som dokument, men med funktioner och beteenden som är specifika för Aerospike. Varje typ av behållare låter dig ställa in olika beteendegenskaper på data inuti den.

Till exempel bestämmer den översta nivån av behållare, namnområden, om data lagras på disk, i RAM eller båda; om data replikeras i klustret eller över kluster; och när eller hur data har upphört att gälla. Genom namnrymden låter Aerospike utvecklare behålla de data som oftast nås i minnet för snabbast möjliga svar.

Hur Aerospike hanterar lagring och kluster

Aerospike kan behålla sina data på nästan alla filsystem, men det har skrivits specifikt för att dra nytta av SSD-enheter. Med det sagt, förvänta dig inte att släppa Aerospike på någon gammal SSD och förvänta dig bra resultat. Aerospikes utvecklare håller en lista över godkända SSD-enheter, och de har skapat ett verktyg som heter ACT för att betygsätta prestanda för SSD-lagringsenheter under Aerospikes arbetsbelastningar.

Aerospike, som de flesta NoSQL-system, använder en delad-ingenting-arkitektur för replikering och kluster. Aerospike har inga huvudnoder och ingen manuell skärning. Varje nod är identisk. Data fördelas slumpmässigt över noderna och balanseras automatiskt för att förhindra att flaskhalsar bildas. Om du vill kan du ställa in regler för hur aggressivt data balanseras om. Du kan konfigurera flera kluster, som körs i olika nätverkssegment eller till och med olika datacenter, för att synkronisera med varandra.

Skript i Aerospike

Liksom Redis tillåter Aerospike utvecklare att skriva Lua-skript eller UDF (användardefinierade funktioner) som körs inuti Aerospike-motorn. Du kan använda UDF: er för att läsa eller ändra poster, men det är bäst att använda dem för att utföra snabba, skrivskyddade, kartreducerande operationer över samlingar eller "strömmar" av poster på flera noder.

Var kan jag få Aerospike

Aerospikes community-utgåva kan laddas ner direkt från Aerospikes webbplats. Detta inkluderar serverutgåvor för Linux, skrivbordsversioner för Apples MacOS och Microsofts Windows, molnutgåvor för Amazon EC2, Azure och Google Compute Engine och Docker-behållare. Enterprise-versionen av Aerospike är tillgänglig via Aerospikes Quick Start-program, som ger en obegränsad 90-dagars testversion.

Källkoden är tillgänglig på GitHub.

Hazelcast IMDG nyckel-värde NoSQL-databas på djupet

Hazelcast kommer att faktureras som ett "in-memory data grid", i huvudsak ett sätt att samla RAM- och CPU-resurser över flera maskiner för att tillåta att datauppsättningar distribueras över dessa maskiner och manipuleras i minnet.

NoSQL-databaser erbjuder funktioner för nyckelvärde, diagram eller dokument. Hazelcast koncentrerar sig på nyckelvärdesfunktionalitet och betonar snabb åtkomst till distribuerad data. Enligt tillverkarna kan den också användas som ett alternativ till produkter som Pivotal Gemfire, Software Terracotta och Oracle Coherence.

Hazelcast kan köras som en distribuerad tjänst eller inbäddas direkt i ett Java-program. Klienter finns tillgängliga för Java, Scala, .Net, C / C ++, Python och Node.js, och en för Go är på gång.

Funktioner unika för Hazelcast

Hazelcast är byggt med Java och har ett Java-centrerat ekosystem. Varje nod i ett Hazelcast-kluster kör en instans av Hazelcasts kärnbibliotek, IMDG, på JVM. Hur Hazelcast fungerar med data kartläggs också nära Javas språkstrukturer. Java: s Map-gränssnitt, till exempel, används av Hazelcast för att tillhandahålla lagring av nyckelvärden. Som med Memcached skrivs ingenting till disk; allt hålls i minnet hela tiden.

En fördel som Hazelcast kan erbjuda i en distribuerad miljö är "nära cache", där vanligt begärda objekt migreras till servern som gör förfrågningarna. På detta sätt kan förfrågningarna utföras direkt i minnet på samma system, utan att det krävs en rundresa över nätverket.

Bortsett från nyckel-värdepar kan du lagra och distribuera många andra typer av datastrukturer genom Hazelcast. Några är enkla implementeringar av Java-objekt, som Map. Andra är specifika för Hazelcast. MultiMap, till exempel, är en variant på nyckelvärdeslagring som kan lagra flera värden under samma nyckel. Dessa funktioner gör det möjligt att efterlikna vissa beteenden hos andra NoSQL-system, såsom att organisera data i dokument, men empasen ligger på strukturer som gör att data kan distribueras och nås snabbt.

Hur Hazelcast hanterar kluster

Hazelcast-kluster har ingen master- / slavinställning; allt är peer-to-peer. Data delas automatiskt ut och distribueras över alla medlemmar i klustret. Du kan också ange vissa klustermedlemmar som "lite", som inte innehåller några data först men senare kan marknadsföras till fullständiga medlemmar. Detta låter vissa noder användas strikt för beräkning, eller för att distribuera data gradvis genom ett kluster medan det tas online.

Hazelcast kan också säkerställa att operationer endast fortsätter om minst ett visst antal noder är online. Du måste dock konfigurera detta beteende manuellt, och det fungerar bara för vissa datastrukturer. Från och med Hazelcast version 3.9 kan du konfigurera om datastrukturer över ett kluster utan att först behöva ta det offline.

Var kan man få Hazelcast

Hazelcast finns att ladda ner direkt från Hazelcast-webbplatsen. Det distribueras vanligtvis som en samling Java .JAR-filer. Docker-bilder finns också i det officiella Docker-registret.

Du kan ladda ner företagsversionen av Hazelcast direkt från Hazelcast. Du kan också få en 30-dagars gratis provnyckel för Hazelcast.

Memcached nyckel-värde NoSQL-databas på djupet

Memcached är ungefär lika grundläggande och snabbt som nyckelvärdeslagring blir. Ursprungligen skrivet som ett accelerationsskikt för bloggplattformen LiveJournal, har Memcached sedan blivit en allestädes närvarande komponent i webbteknikstackar. Om du har många små fragment av data som kan associeras med en enkel nyckel och inte behöver replikeras mellan cacheinstanser, är Memcached rätt verktyg.

Funktioner unika för Memcached

Memcached används oftast för cachning av frågor från en databas och för att behålla resultaten uteslutande i minnet. I det avseendet är det till skillnad från många andra NoSQL-databaser, nyckel-värde eller på annat sätt, eftersom de lagrar data i någon beständig form. 

Memcached säkerhetskopierar inte sitt datalager till någonting. Alla tangenter hålls bara i minnet, så de förångas när Memcached-instansen eller servern som är värd för den återställs. Således kan Memcached egentligen inte användas som en ersättning för en NoSQL-databas.

Vad det kan användas till är dock ett höghastighets sätt att stash vanliga data som kan ta storleksordningar mer tid att fråga från en källa.

Alla data som kan serieiseras till en binär ström kan lagras i Memcached. Värden kan ställas in så att de löper ut efter en viss tid, eller på begäran, genom att hänvisa till nycklarna till värdena från en applikation. Mängden minne du ägnar åt en given instans av Memcached är helt upp till dig och flera servrar kan köra Memcached sida vid sida för att sprida ut belastningen. Vidare skalas Memcached linjärt med antalet kärnor som är tillgängliga i ett system eftersom det är en multitrådad applikation.

De flesta populära programmeringsspråk har klientbibliotek för Memcached. Tillåter till exempel libmemcachedC- och C ++ - program att arbeta direkt med Memcached-instanser. Det låter också Memcached bäddas in i C-program.

Hur Memcached hanterar kluster

Även om du kan köra flera instanser av Memcached, vare sig på samma server eller på flera noder i ett nätverk, finns det ingen automatisk federering eller synkronisering av data mellan instanser. De data som infogas i en Memcached-instans är endast tillgängliga från den instansen, period.

Var kan man få Memcached

Memcacheds källkod är tillgänglig för nedladdning från GitHub och från den officiella Memcached-webbplatsen. Linux-binärer finns i förvaret för de flesta Linux-distributioner. Windows-användare kan bygga det direkt från källan; vissa inofficiella binärer har byggts tidigare men verkar inte vara tillförlitliga tillgängliga.

Microsoft Azure Cosmos DB nyckel-värde NoSQL-databas på djupet

De flesta databaser har ett övergripande paradigm: dokumentlager, nyckel-värdebutik, bred kolumnlagring, grafdatabas och så vidare. Inte så Azure Cosmos DB. Hämtad från Microsofts NoSQL-databas som en tjänst, DocumentDB, Cosmos DB är Microsofts försök att skapa en enda databas som kan använda flera paradigmer.

Funktioner unika för Azure Cosmos DB

Cosmos DB använder det som kallas ett lagringssystem för atomrekord-sekvens för att stödja olika datamodeller. Atomer är primitiva typer som strängar, heltal och booleska värden. Records är samlingar av atomer, som structs i C. Sekvenser är arrays av antingen atomer eller records.

Cosmos DB använder dessa byggstenar för att replikera beteendet hos flera databastyper. Det kan reproducera beteendet hos tabeller som finns i konventionella relationsdatabaser. Men det kan också återge funktionaliteten hos datatyper som finns i NoSQL-system - schemaläggande JSON-dokument (DocumentDB och MongoDB) och grafer (Gremlin, Apache TinkerPop).