MongoDB-hosting har haft stor succes i udviklerfællesskabet, delvist fordi det giver udviklere mulighed for at gemme datastrukturer direkte i en hurtig, skalerbar, moderne database .
Der er ingen grund til at kortlægge disse datastrukturer til stive, foruddefinerede og flade tabeller, der skal samles igen ved kørsel gennem masser af mellemliggende tabeller. (Beskrevet på den måde, lyder den relationelle model lidt gammeldags, ikke?)
Desværre kan verdens analyse- og rapporteringssoftware ikke give mening i post-relationelle data. Hvis det ikke er fladt, hvis det ikke er helt ensartet, kan du ikke gøre noget med det i ældre analyse- og rapporteringsløsninger!
Det er et reelt problem, fordi udviklere skaber MongoDB-apps, der genererer tonsvis af data. Til sidst ønsker virksomheder at opdele disse data, opbygge rapporter og samle indsigt.
Du kan gøre alt det i dag, men du skal skrive bunker kode, transformere og replikere MongoDB-data til en anden database eller datavarehus eller på anden måde gennemgå intense, langvarige smerter og lidelser af den type, jeg gerne vil undgå.
Det er præcis derfor, jeg grundlagde SlamData. SlamData er en open source-virksomhed, der udvikler et næste generations analyse- og rapporteringsværktøj til NoSQL-data.
Vi har netop lanceret betaversionen af SlamData, som understøtter MongoDB. I dette indlæg vil jeg tale om, hvordan du kan bruge denne beta til at forespørge MongoDB ved hjælp af almindelig SQL, hvad nogle af begrænsningerne er, hvordan SlamData er i forhold til konkurrenterne, og hvor projektet er på vej hen.
Hent og installer SlamData
Du kan bygge SlamData fra kildekoden på Github. Men hvis du ikke kan lide at rode med kildekode, anbefaler jeg at downloade GUI-installationsprogrammerne fra SlamData-webstedet.
Der er forudbyggede installationsprogrammer til Linux, OS X og Windows, og de leveres med alt, hvad du har brug for (undtagen en kørende forekomst af MongoDB!).
Under installationsprocessen vil guiden bede dig om MongoDB Connection URI (som kan indeholde et brugernavn og adgangskode), den specifikke database, du vil bruge (bare rolig, du kan tilføje flere senere), og hvor i SlamData filsystem, du vil montere den database (som du kan lade være '/', rodstien).
Efter installationen kan du starte SlamData med et dobbeltklik. Bemærk, at der faktisk er to komponenter til SlamData:frontenden og en letvægtsserver, der forbinder til MongoDB. Som standard vil begge være installeret, og begge starter, når du dobbeltklikker på SlamData.
SlamData Front-End
SlamData-frontenden, vist på skærmbilledet ovenfor, er en visuel grænseflade til al kraften i SlamData (der er også en REPL for dem, der foretrækker en kommandolinjegrænseflade).
Filsystemtræet viser dig alle de monterede databaser, såvel som samlingerne inde i disse databaser. Det er en visuel påmindelse om alle de data, du kan forespørge på, selvom du i senere versioner vil være i stand til at gøre meget mere med filsystemet.
Editor-grænsefladen giver dig mulighed for at oprette notesbøger, som er samlinger af tekst (Markdown), forespørgsler (SQL) og visualiseringer (diagrammer). En notesbog er som en rapport, bortset fra i modsætning til de fleste rapporter kan den være interaktiv og kan opdateres fra livedata.
Skrivning af forespørgsler
Tid til at skrive nogle forespørgsler!
I disse eksempler vil jeg antage, at du har postnummerdatasættet indlæst i din MongoDB-database, som du kan downloade fra MongoDB-webstedet.
Dette datasæt har grundlæggende oplysninger om postnumre, såsom hvor de er placeret (by, stat, geo) og deres befolkning.
Lad os trække de første 5 zip-indgange tilbage:
VÆLG * FRA zips LIMIT 5
{ “_id” :“35004″ , “city” :“ACMAR” , “loc” :[ -86.51557 , 33.584132] , “pop” :6055 , “state” :“AL”}
{ “_id” :“35005″ , “city” :“ADAMSVILLE” , “loc” :[ -86.959727 , 33.588437] , “pop” :10616 , “state” :“AL”}
{ “_id” :“35006″ , “city” :“ADGER” , “loc” :[ -87.167455 , 33.434277] , “pop” :3205 , “state” :“AL”}
{ “_id” :“35007″ , “city” :“KEYSTONE” , “loc” :[ -86.812861 , 33.236868] , “pop” :14218 , “state” :“AL”}
{ “_id” :“35010″ , “city” :“NYT SITE” , “loc” :[ -85.951086 , 32.941445] , “pop” :19942 , “state” :“AL”}
Hvilke byer har de 5 mest folkerige postnumre? Et stykke kage:
VÆLG by, pop FRA lynlås BESTIL VED pop DESC LIMIT 5
{ “_id” :“60623″ , “city” :“CHICAGO”, “pop” :112047}
{ “_id” :“11226″ , “city” :“BROOKLYN” , “pop” :111396}
{ “_id” :“10021″ , “city” :“NEW YORK”, “pop” :106564}
{ “_id” :“10025″ , “city” :“NEW YORK”, “pop” :100027}
{ “_id” :“90201″ , “city” :“BELL GARDENS” , “pop” :99568}
SlamDatas dialekt af SQL (kaldet SlamSQL) har fuld understøttelse af indlejrede dokumenter og arrays, og du får adgang til dem ved hjælp af almindelig Javascript-notation (f.eks. SELECT foo.bar.baz).
Nogle gange vil du gerne udjævne et array, så du kan grave i indholdet af det array. I zips-datasættet er der et lokalitetsmatrixfelt, der indeholder en geoplacering. For at udjævne denne matrix skal du blot bruge stjerneoperatoren ('*') som matrixindekset:
VÆLG loc[*] FRA zips LIMIT 1
{ “_id” :{ “$oid” :“53ecf39574d2394acbd4b6f1″} , “loc” :-86.51557}
Lad os endelig bruge SQL's GROUP BY-operator til at opsummere populationen af alle postnumre for hver by, og derefter udtrække de 5 mest folkerige byer:
VÆLG by, SUM(pop) SOM pop FRA lynlås GRUPPER EFTER by BESTIL EFTER pop DESC LIMIT 5
Ret sejt, ikke?
De fleste MongoDB-funktioner understøttes i øjeblikket i betaversionen, selvom de går efter deres standard SQL-navne (eller efter deres PostgreSQL-navne, alt efter tilfældet). Disse omfatter følgende:
- CONCAT, LOWER, UPPER, SUBSTRING
- DATE_PART
- ANTAL, SUM, MIN, MAX, GEN.
- +, -, *, /, %
- ARRAY_LENGTH
Beta-begrænsninger
Betaen kaldes "beta" af en grund:den implementerer ikke hele SlamSQL og kan have nogle få fejl i de dele af SlamSQL den implementerer.
Du bør især være opmærksom på følgende begrænsninger:
- Selvom GROUP BY understøttes, er HAVING klausuler endnu ikke implementeret.
- Alle funktioner, der ikke er indbygget understøttet af Aggregation Pipeline (f.eks. strenglængde), er endnu ikke understøttet.
- Valg af individuelle array-elementer er endnu ikke understøttet (f.eks. SELECT loc[0] FROM zips) på grund af et kendt problem i MongoDB.
- DISTINCT og andre sæt-niveau-operationer som UNION, UNION ALL er endnu ikke understøttet.
- JOINs er endnu ikke understøttet i den officielt frigivne version (selvom vi har en filial på Github, der understøtter dem, for dem, der kan lide at være på blødning kant!).
- Der er forskellige kantsager, der endnu ikke er implementeret.
Hvordan SlamData stables op
I øjeblikket er der ikke mange værktøjer på markedet til at lave analyser på MongoDB.
I open source-verdenen:
- Der er MongoDB-driverne (tilgængelige i Python, Java osv.), men disse biblioteker er designet til udviklere, ikke analytikere eller dataforskere, og du skal skrive kode for at bruge dem.
- PostgreSQL har en open source udenlandsk dataindpakning til MongoDB, som CitrusData bidrager med. Lige nu kan den kun skubbe simple filtre ind i MongoDB. Alle andre operationer kræver streaming af data tilbage fra MongoDB til PostgreSQL.
- MoSQL er et open source-værktøj, der forenkler ETL fra MongoDB til PostgreSQL. Du skal nøje definere skemaer, udjævne dine data og undgå arrays samt opretholde en separat infrastruktur til analyser og rapportering.
I den kommercielle sektor:
- AquaFolds Data Studio har en MongoDB-klient. Det er ikke klart præcist, hvad det skubber ned til føreren, selvom det ser ud til at være nogle udtryk, filtre og måske gruppering. For nogle operationer skal data dog streames tilbage til klienten, hvilket gør det upraktisk for mange applikationer.
- JSONStudio har en grænseflade, der giver dig mulighed for "visuelt" at opbygge pipelineforespørgsler til MongoDB-aggregationsrammerne, men det er underlagt alle de samme begrænsninger som aggregeringen ramme, og drager ikke fordel af standardiseringen og deklarativiteten af SQL.
- Simba Technologies har en MongoDB ODBC-driver. Det kan skubbe nogle filtre og sammenlægninger ned til MongoDB, men alt andet skal streames tilbage til driveren for yderligere behandling.
- Progress Software har en familie af dataforbindelsesprodukter kaldet DataDirect, med en MongoDB-forbindelse. Det er ikke klart, hvor meget disse drivere presser ned til MongoDB, men de minder sandsynligvis meget om driveren fra Simba, og de kræver, at du bygger skemaer.
- UnityJDBC har en JDBC-driver til MongoDB, men den er afhængig af streaming til at udføre det meste af arbejdet (bortset fra rå og meget enkel filtrering).
SlamData klarer sig meget godt i forhold til både open source og kommercielle tilbud:
- SlamData er 100 % open source, uden noget at købe eller licensere.
- SlamData skubber 100 % af hver forespørgsel ned i MongoDB uden at streame noget tilbage til klienten. nogensinde.
- SlamData kræver ingen skemadefinition, ingen skematilknytning og ingen ETL af nogen art. Det fungerer bare med dataene, da det allerede findes i MongoDB.
- SlamData giver indlejrede dokumenter og arrays førsteklasses status. Det er nemt at grave ind i enhver struktur ved hjælp af en ren, enkel og indlysende udvidelse af SQL (f.eks. foo.bar.baz[2].fuz).
- SlamData har en smart, men let front-end, der lader dig bygge interaktive rapporter, komplet med diagrammer. Det er nemt at overdrage front-end til "den person" i dit team eller din organisation, hvilket giver dig mulighed for at gøre, hvad du bliver betalt for at gøre i stedet for at skrive kode til at generere rapporter.
Køreplan
I begyndelsen af oktober planlægger vi at frigive produktionsversionen af SlamData.
I denne udgivelse har vi behandlet mange af betaens begrænsninger, forbedret måden, vi kan kompilere SQL til MongoDB på, og gjort frontend meget nemmere at bruge og mere kraftfuldt.
Som et open source-projekt kommer vores succes ned til adoption. Hvis du vil se SlamData fortsætte med at udvikle sig til det bedste open source-værktøj til NoSQL-analyse og -rapportering, så download SlamData, fordel eller stjerne lagrene og kommenter om eventuelle fejl, du finder, eller funktioner, du gerne vil have tilføjet.