NoSQL - NoSQL

En NoSQL (oprindeligt refererende til "ikke- SQL " eller "ikke-relationel") database tilvejebringer en mekanisme til lagring og hentning af data, der er modelleret på andre måder end de tabelformede relationer, der bruges i relationelle databaser . Sådanne databaser har eksisteret siden slutningen af ​​1960'erne, men navnet "NoSQL" blev først opfundet i begyndelsen af ​​det 21. århundrede, udløst af Web 2.0 -virksomheders behov. NoSQL-databaser bruges i stigende grad i big data og real-time webapplikationer . NoSQL -systemer kaldes også nogle gange "Ikke kun SQL" for at understrege, at de muligvis understøtter SQL -lignende forespørgselssprog eller sidder sammen med SQL -databaser i polyglot -persistente arkitekturer.

Motiver for denne tilgang omfatter enkelhed i design , enklere "vandret" skalering til klynger af maskiner (hvilket er et problem for relationelle databaser), finere kontrol over tilgængelighed og begrænsning af objektrelationel impedansfejl . De datastrukturer, der anvendes af NoSQL databaser (f.eks nøgleværdipar , bred kolonne , graf eller dokument ) er forskellige fra dem, der anvendes som standard i relationelle databaser, hvilket gør nogle operationer hurtigere i NoSQL. Den særlige egnethed af en given NoSQL -database afhænger af det problem, den skal løse. Nogle gange ses de datastrukturer, der bruges af NoSQL -databaser, også som "mere fleksible" end relationelle databasetabeller.

Mange NoSQL -butikker kompromitterer konsistens (i betydningen i CAP -sætningen ) til fordel for tilgængelighed, partitionstolerance og hastighed. Barrierer for større vedtagelse af NoSQL-butikker omfatter brug af lavspørgsmålssprog (f.eks. I stedet for SQL), manglende evne til at udføre ad hoc- joins på tværs af tabeller, mangel på standardiserede grænseflader og enorme tidligere investeringer i eksisterende relationsdatabaser . De fleste NoSQL -butikker mangler ægte ACID -transaktioner, selvom et par databaser har gjort dem centrale i deres design.

I stedet tilbyder de fleste NoSQL -databaser et begreb om " eventuel konsistens ", hvor databaseændringer spredes til alle noder "til sidst" (typisk inden for millisekunder), så forespørgsler efter data sender muligvis ikke opdaterede data med det samme eller kan resultere i læsning af data, der er ikke nøjagtig, et problem kendt som forældet læser. Derudover kan nogle NoSQL -systemer udvise tabte skriverier og andre former for datatab . Nogle NoSQL-systemer leverer koncepter som f.eks. Forudgående logning for at undgå tab af data. For distribueret transaktionsbehandling på tværs af flere databaser er datakonsistens en endnu større udfordring, der er vanskelig for både NoSQL og relationelle databaser. Relationsdatabaser "tillader ikke, at referencielle integritetsbegrænsninger spænder over databaser". Få systemer opretholder både ACID -transaktioner og X/Open XA -standarder til distribueret transaktionsbehandling. Interaktive relationsdatabaser deler teknikker til konformation af relæanalyser som et fælles træk. Begrænsninger i grænseflademiljøet overvindes ved hjælp af semantiske virtualiseringsprotokoller, således at NoSQL -tjenester er tilgængelige for de fleste operativsystemer.

Historie

Udtrykket NoSQL blev brugt af Carlo Strozzi i 1998 til at navngive hans lette Strozzi NoSQL open-source relationsdatabase , der ikke afslørede standardstrukturen for Structured Query Language (SQL), men stadig var relationel. Hans NoSQL RDBMS adskiller sig fra det generelle koncept omkring NoSQL-databaser omkring 2009. Strozzi foreslår, at fordi den nuværende NoSQL -bevægelse "helt afviger fra den relationelle model, burde den derfor have været kaldt mere passende 'NoREL'" med henvisning til "ikke relationel".

Johan Oskarsson, dengang en udvikler på Last.fm , genindførte udtrykket NoSQL i begyndelsen af ​​2009, da han arrangerede et arrangement for at diskutere "open-source distribuerede, ikke-relationelle databaser ". Navnet forsøgte at mærke fremkomsten af ​​et stigende antal ikke-relationelle, distribuerede datalagre, herunder open source-kloner fra Googles Bigtable / MapReduce og Amazons DynamoDB .

Typer og eksempler

Der er forskellige måder at klassificere NoSQL -databaser med forskellige kategorier og underkategorier, hvoraf nogle overlapper hinanden. Det følgende er en grundlæggende klassificering efter datamodel med eksempler:

En mere detaljeret klassifikation er følgende, baseret på en fra Stephen Yen:

Type Bemærkelsesværdige eksempler på denne type
Nøgleværdi -cache Apache Ignite , Couchbase , Coherence , eXtreme Scale , Hazelcast , Infinispan , Memcached , Redis , Velocity
Nøgleværdi butik Azure Cosmos DB , ArangoDB , Aerospike , Couchbase , Redis
Nøgleværdi -butik (i sidste ende konsekvent) Azure Cosmos DB , Oracle NoSQL Database , Dynamo , Riak , Voldemort
Nøgleværdi (bestilt) FoundationDB , InfinityDB , LMDB , MemcacheDB
Dobbelt butik Apache -floden , GigaSpaces
Objektdatabase Objektivitet/DB , Prest , ZopeDB
Dokumentbutik Azure Cosmos DB , ArangoDB , BaseX , Clusterpoint , Couchbase , CouchDB , DocumentDB , Exist-db , IBM Domino , MarkLogic , MongoDB , Qizx , RethinkDB , Elasticsearch
Bred søjlebutik Azure Cosmos DB , Amazon DynamoDB , Bigtable , Cassandra , Google Cloud Datastore , HBase , Hypertable , ScyllaDB
Indfødt multi-model database ArangoDB , Azure Cosmos DB , OrientDB , MarkLogic

Korrelationsdatabaser er modeluafhængige, og i stedet for rækkebaseret eller kolonnebaseret lagring skal du bruge værdibaseret lagerplads.

Nøgleværdi butik

Nøgleværdi (KV) butikker bruger det associative array (også kaldet et kort eller en ordbog) som deres grundlæggende datamodel. I denne model repræsenteres data som en samling af nøgle -værdipar, således at hver mulig nøgle højst vises én gang i samlingen.

Nøgleværdimodellen er en af ​​de enkleste ikke-trivielle datamodeller, og rigere datamodeller implementeres ofte som en forlængelse af den. Nøgleværdimodellen kan udvides til en diskret ordnet model, der vedligeholder nøgler i leksikografisk rækkefølge . Denne udvidelse er beregningsmæssigt kraftfuld, i at den effektivt kan hente selektive centrale områder .

Nøgleværdibutikker kan bruge konsistensmodeller lige fra eventuel konsistens til serialiserbarhed . Nogle databaser understøtter bestilling af nøgler. Der er forskellige hardwareimplementeringer, og nogle brugere gemmer data i hukommelsen (RAM), mens andre på solid-state-drev (SSD) eller roterende diske (også kaldet harddisk (HDD)).

Dokumentbutik

Det centrale koncept for en dokumentlager er begrebet et "dokument". Selvom detaljerne i denne definition er forskellige mellem dokumentorienterede databaser, antager de alle, at dokumenter indkapsler og koder data (eller oplysninger) i nogle standardformater eller kodninger. Kodninger i brug inkluderer XML, YAML og JSON og binære formularer som BSON . Dokumenter adresseres i databasen via en unik nøgle, der repræsenterer det pågældende dokument. En anden definerende egenskab ved en dokumentorienteret database er et API eller forespørgselssprog til at hente dokumenter baseret på deres indhold.

Forskellige implementeringer tilbyder forskellige måder at organisere og/eller gruppere dokumenter på:

  • Samlinger
  • Tags
  • Ikke-synlige metadata
  • Directoryhierarkier

Sammenlignet med relationsdatabaser kunne samlinger betragtes som analoge med tabeller og dokumenter, der var analoge med poster. Men de er forskellige: hver post i en tabel har den samme rækkefølge af felter, mens dokumenter i en samling kan have felter, der er helt forskellige.

Kurve

Grafdatabaser er designet til data, hvis relationer er godt repræsenteret som en graf bestående af elementer forbundet med et begrænset antal relationer. Eksempler på data omfatter sociale relationer, offentlige transportforbindelser, vejkort, netværkstopologier osv.

Graf databaser og deres forespørgselssprog
Navn Sprog) Noter
AllegroGraph SPARQL RDF tredobbelt butik
Amazon Neptun Gremlin , SPARQL Grafisk database
ArangoDB AQL, JavaScript , GraphQL Multi-model DBMS- dokument , grafdatabase og nøgleværdi-butik
Azure Cosmos DB Gremlin Grafisk database
DEX/Sparksee C ++ , Java , C# , Python Grafisk database
FlockDB Scala Grafisk database
IBM DB2 SPARQL RDF tredobbelt butik tilføjet i DB2 10
InfiniteGraph Java Grafisk database
MarkLogic Java , JavaScript , SPARQL , XQuery Multi-model dokumentdatabase og RDF triple store
Neo4j Cypher Grafisk database
OpenLink Virtuoso C ++ , C# , Java , SPARQL Middleware og database motor hybrid
Oracle SPARQL 1.1 RDF tredobbelt butik tilføjet i 11g
OrientDB Java , SQL Multi-model dokument og graf database
OWLIM Java , SPARQL 1.1 RDF tredobbelt butik
Profium Sense Java , SPARQL RDF tredobbelt butik
Sqrrl Enterprise Java Grafisk database

Objektdatabase

Tabulær

Dobbelt butik

Triple/quad store (RDF) database

Værter

Databaser med flere værdier

Multimodel database

Ydeevne

Ydeevnen af ​​NoSQL -databaser evalueres normalt ved hjælp af metricen for gennemstrømning , som måles som operationer/sekund. Ydeevneevaluering skal være opmærksom på de rigtige benchmarks, f.eks. Produktionskonfigurationer, parametre i databaserne, forventet datamængde og samtidige brugerarbejdsbelastninger.

Ben Scofield vurderede forskellige kategorier af NoSQL -databaser som følger:

Datamodel Ydeevne Skalerbarhed Fleksibilitet Kompleksitet Funktionalitet
Nøgleværdi butik høj høj høj ingen variabel (ingen)
Kolonneorienteret butik høj høj moderat lav minimal
Dokumentorienteret butik høj variabel (høj) høj lav variabel (lav)
Grafisk database variabel variabel høj høj grafteori
Relationsdatabase variabel variabel lav moderat relationel algebra

Ydeevne og skalerbarhedssammenligninger foretages oftest ved hjælp af YCSB -benchmarket.

Håndtering af relationelle data

Da de fleste NoSQL -databaser mangler evne til at deltage i forespørgsler, skal databaseskemaet generelt designes anderledes. Der er tre hovedteknikker til håndtering af relationsdata i en NoSQL -database. (Se tabel Join og ACID Support for NoSQL -databaser, der understøtter joins.)

Flere forespørgsler

I stedet for at hente alle dataene med en forespørgsel, er det almindeligt at foretage flere forespørgsler for at få de ønskede data. NoSQL -forespørgsler er ofte hurtigere end traditionelle SQL -forespørgsler, så omkostningerne ved yderligere forespørgsler kan være acceptable. Hvis et for stort antal forespørgsler ville være nødvendige, er en af ​​de to andre tilgange mere passende.

Caching, replikering og ikke-normaliserede data

I stedet for kun at gemme udenlandske nøgler er det almindeligt at gemme faktiske udenlandske værdier sammen med modellens data. For eksempel kan hver blogkommentar indeholde brugernavnet ud over et bruger -id, hvilket giver let adgang til brugernavnet uden at kræve et andet opslag. Når et brugernavn ændres, skal dette nu ændres mange steder i databasen. Således fungerer denne tilgang bedre, når læsninger er meget mere almindelige end skriver.

Nesting data

Med dokumentdatabaser som MongoDB er det almindeligt at lægge flere data i et mindre antal samlinger. For eksempel i en blogprogram kan man vælge at gemme kommentarer i blogindlægsdokumentet, så man med en enkelt hentning får alle kommentarerne. I denne fremgangsmåde indeholder et enkelt dokument alle de data, du har brug for til en bestemt opgave.

ACID og deltag i support

En database er markeret som understøttende ACID -egenskaber (atomitet, konsistens, isolation, holdbarhed) eller joinforbindelser , hvis dokumentationen til databasen gør dette krav. Dette betyder dog ikke nødvendigvis, at kapaciteten understøttes fuldt ud på en måde, der ligner de fleste SQL -databaser.

Database SYRE Tilslutter sig
Aerospike Ja Ingen
Apache Ignite Ja Ja
ArangoDB Ja Ja
Sofa sofa Ja Ja
CouchDB Ja Ja
Db2 Ja Ja
InfinityDB Ja Ingen
LMDB Ja Ingen
MarkLogic Ja Ja
MongoDB Ja Ja
OrientDB Ja Ja

Se også

Referencer

Yderligere læsning

eksterne links