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:
- Bred kolonne : Azure Cosmos DB , Accumulo , Cassandra , ScyllaDB , HBase .
- Dokument : Azure Cosmos DB , Apache CouchDB , ArangoDB , BaseX , Clusterpoint , Couchbase , eXist-db , IBM Domino , MarkLogic , MongoDB , OrientDB , Qizx , RethinkDB
- Nøgleværdi : Azure Cosmos DB , Aerospike , Apache Ignite , ArangoDB , Berkeley DB , Couchbase , Dynamo , FoundationDB , InfinityDB , MemcacheDB , MUMPS , Oracle NoSQL Database , OrientDB , Redis , Riak , SciDB , SDBM/Flat File dbm , ZooKe
- Graf : Azure Cosmos DB , AllegroGraph , ArangoDB , InfiniteGraph , Apache Giraph , MarkLogic , Neo4J , AgensGraph , OrientDB , Virtuoso
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
- db4o
- GemStone/S
- InterSystems Caché
- JADE
- ObjectDatabase ++
- ObjectDB
- Objektivitet/DB
- ObjectStore
- ODABA
- Prest
- Rige
- OpenLink Virtuoso
- Versant Object Database
- ZODB
Tabulær
Dobbelt butik
- Apache -floden
- GigaSpaces
- Tarantool
- TIBCO ActiveSpaces
- OpenLink Virtuoso
Triple/quad store (RDF) database
- AllegroGraph
- Apache JENA (Det er en ramme, ikke en database)
- MarkLogic
- Ontotext-OWLIM
- Oracle NoSQL database
- Profium Sense
- Virtuoso Universal Server
Værter
- Azure Cosmos DB
- Amazon DynamoDB
- Amazon DocumentDB
- Amazon SimpleDB
- Clusterpoint -database
- Cloudant Data Layer (CouchDB)
- Freebase
- Google Cloud Datastore
- Microsoft Azure Storage -tjenester
- OpenLink Virtuoso
- MongoDB Atlas
Databaser med flere værdier
- D3 Vælg database
- Extensible Storage Engine (ESE/NT)
- InfinityDB
- InterSystems Caché
- jBASE Vælg database
- mvBase Rocket Software
- mvEnterprise Rocket Software
- Northgate Information Solutions Reality, den originale Pick/MV -database
- OpenQM
- Revelation Software's OpenInsight (Windows) og Advanced Revelation (DOS)
- UniData Rocket U2
- UniVerse Rocket U2
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å
- CAP sætning
- Sammenligning af objektdatabasestyringssystemer
- Sammenligning af struktureret lagringssoftware
- Korrelationsdatabase
- C ++
- Database skalerbarhed
- Distribueret cache
- Facetteret søgning
- MultiValue database
- Multi-model database
- Triplestore
- Skema-agnostiske databaser
Referencer
Yderligere læsning
- Sadalage, Pramod; Fowler, Martin (2012). NoSQL Distilled: En kort guide til den nye verden af polyglot -persistens . Addison-Wesley. ISBN 978-0-321-82662-6.
- McCreary, Dan; Kelly, Ann (2013). Making Sense of NoSQL: En guide til ledere og os andre . ISBN 9781617291074.
- Wiese, Lena (2015). Avanceret datahåndtering til SQL, NoSQL, Cloud og distribuerede databaser . DeGruyter/Oldenbourg. ISBN 978-3-11-044140-6.
- Strauch, Christof (2012). "NoSQL -databaser" (PDF) .
-
Moniruzzaman, AB; Hossain, SA (2013). "NoSQL Database: New Era of Databases for Big data Analytics - Classification, Characteristics and Comparison". arXiv : 1307.0191 . Bibcode : 2013arXiv1307.0191M . Citer journal kræver
|journal=( hjælp ) -
Orend, Kai (2013). "Analyse og klassificering af NoSQL-databaser og evaluering af deres evne til at erstatte et objekt-relationelt persistenslag". CiteSeerX 10.1.1.184.483 . Citer journal kræver
|journal=( hjælp ) - Krishnan, Ganesh; Kulkarni, Sarang; Dadbhawala, Dharmesh Kirit. "Metode og system til versioneret deling, konsolidering og rapportering af oplysninger" .
eksterne links
- Strauch, Christoph. "NoSQL whitepaper" (PDF) . Stuttgart: Hochschule der Medien.
- Edlich, Stefan. "NoSQL -databaseliste" .
- Neubauer, Peter (2010). "Grafdatabaser, NOSQL og Neo4j" .
- Bushik, Sergey (2012). "En sælgeruafhængig sammenligning af NoSQL-databaser: Cassandra, HBase, MongoDB, Riak" . NetworkWorld.
- Zicari, Roberto V. (2014). "NoSQL -datalagre - artikler, papirer, præsentationer" . odbms.org .