NoSQL vs json | xml

kongen

kongemedlem
NoSQL databaser lagrer data i dokumenter.

Om CouchDB fra wikipedia:
CouchDB does not store data and relationships in tables. Instead, each database is a collection of independent documents.

Hva er forskjellen på en NoSQL database og en filserver med helt vanlige .json / .xml filer?
 

impel

Medlem
Greia med en databaseserver er at man enkelt kan kjøre spørringer mot en større samling data. Dette er tungvindt og lite effektivt om alt er lagret direkte i f.eks. JSON-filer på disk.

Skal du f.eks finne en fil hvor en JSON-key har en gitt verdi, må du scanne gjennom alt av filer, mens med en databaseserver kjører du en spørring, enten det er SQL eller Javascript (Mongodb, Couchdb(?) osv), og databaseserveren tar seg av resten av jobben. Dette går vesentlig fortere da den har optimalisert måten data er strukturert på (trær, indekser osv).

Men hvis du ikke trenger å kjøre spørringer på dataene dine, kan du igrunnen bare lagre dem som filer rett på disk.
 

kongen

kongemedlem
Ok. Da må jeg teste ut noen databaser da.

Rart at ingen webhotelle tilbyr nosql-db'er. Det er jo fremtiden...

Å lage noe i dag med mysql er galskap :eek:
 

adeneo

Medlem
rdmbs, altså relasjonelle databaser, er i mange tilfeller mye enklere å bruke, og svært mye av logikken ligger ferdig innebygget i databasen.
Muligheten for enkle søk, spørringer som kan spesifisere nesten hva som helst, også på tvers av tabeller og databaser, dato og tidsfunksjoner, matematiske spørringer osv. gjør at databaser som MySQL fortsatt er svært populære.

Samtidig så er det slik at faren for å miste data er ofte er større i NoSQL, og hvis man har helt kritiske lagringer så er sannsynligvis ikke Couch eller Mongo det rette, selv om dette har blitt mye bedre de siste årene.
MySQL er også enkelt å sette opp, og det funker rett ut av boksen med PHP.

For nettsider som gjør enkle oppslag i ikke-kritiske data, så kan NoSQL være mer fornuftig, for eksempel når artikler, annonser, varer eller lignende kun skal hentes med en ID, så vil en "key/value store" være betydelig raskere og enklere å håndtere, men man mister en del muligheter.

Det vanligste nå i dag er å bruke det som passer.
Man bruker enkle key/value stores for data som kan hentes med enkle oppslag, og så kjøres backups i noe slik som ElasticSearch, som samtidig gir muligheten til å søke, faktisk langt bedre enn MySQL noen gang har gjort.
Redis brukes ofte for brukerdata som kan hentes rett fra minnet, Cassandra til interne meldinger og annet. Cassandra er vel faktisk nesten så nære man kommer SQL, men bruker i stedet noe som heter CQL som er nesten likt, men Cassandra er fortsatt NoSQL og kan utvides enkelt og er mye raskere.

Poenget er altså å bruke den databasen som passer, det finnes et utall å velge i, særlig blant Apache prosjektene hvor man har Hadoop/HBase, Cassandra, Couch, Riak, Voldemort, Hamster osv.

Det skal nevnes at Oracle har sin egen NoSQL løsning, og Berkeley er vel regnet for å være en av de raskere, men er fortsatt noe sær å bruke.

ElasticSearch er jo også en database, men det er ikke vanlig at den brukes til oppslag, man har som regel et eget oppsett med ElasticSearch som lagrer de samme dataene som hoveddatabasen, men som kun brukes til søk.

En oversikt over NoSQL løsninger finnes her -> NOSQL Databases

Så finnes det ting som Apache's Kafka, Zookeeper osv. som gjør det enklere å holde orden på store systemer over flere servere/datasenter osv. og en hel haug med andre ting, det er nesten så vanskelig å finne frem til det optimale systemet nå at folk flest ender opp med MySQL eller Microsoft produkter, og de fleste store nettsidene ender opp med å skrive sitt eget, eller i det minste modifisere noe, og mange av de databasene som er tilgjengelige i dag kommer opprinnelig fra steder som Google, Amazon, E-Bay osv.

Jeg ville normalt anbefale Cassandra, den kan brukes til alt og virker ganske likt som MySQL, i det minste til å begynne med, selv om det er en helt annerledes database.

The Apache Cassandra Project

Ellers så er Mongo veldig poppis nå, særlig da i en MEAN stack (Mongo, Express; Angular, Node), som er en helt annen verden i forhold til PHP og MySQL.
 
Sist redigert:
Topp