MongoDB-hosting is enorm succesvol geweest in de ontwikkelaarsgemeenschap, deels omdat het ontwikkelaars in staat stelt om gegevensstructuren rechtstreeks op te slaan in een snelle, schaalbare, moderne database .
Het is niet nodig om die datastructuren toe te wijzen aan starre, vooraf gedefinieerde en platte tabellen die tijdens runtime opnieuw moeten worden samengesteld via een groot aantal tussenliggende tabellen. (Zo beschreven, klinkt het relationele model nogal ouderwets, nietwaar?)
Helaas kan de analyse- en rapportagesoftware van de wereld post-relationele gegevens niet begrijpen. Als het niet plat is, als het niet allemaal uniform is, kun je er niets mee doen in legacy-analyse- en rapportageoplossingen!
Dat is een echt probleem, omdat ontwikkelaars MongoDB-apps maken die tonnen gegevens genereren. Uiteindelijk willen bedrijven deze gegevens opdelen, rapporten maken en inzicht verzamelen.
Je kunt dat vandaag allemaal doen, maar je moet stukjes code schrijven, MongoDB-gegevens transformeren en repliceren naar een andere database of datawarehouse, of anderszins intense, langdurige pijn en lijden ondergaan van het type dat ik graag wil vermijden.
Dat is precies waarom ik SlamData heb opgericht. SlamData is een open source-bedrijf dat een analyse- en rapportagetool van de volgende generatie voor NoSQL-gegevens ontwikkelt.
We hebben zojuist de bètaversie van SlamData gelanceerd, die MongoDB ondersteunt. In dit bericht zal ik het hebben over hoe je deze bèta kunt gebruiken om MongoDB te doorzoeken met gewone SQL, wat enkele van de beperkingen zijn, hoe SlamData zich verhoudt tot de concurrentie en waar het project naartoe gaat.
SlamData ophalen en installeren
U kunt SlamData bouwen vanuit de broncode op Github. Maar als je niet graag met broncode rommelt, raad ik je aan de GUI-installatieprogramma's van de SlamData-website te downloaden.
Er zijn vooraf gebouwde installatieprogramma's voor Linux, OS X en Windows, en ze worden geleverd met alles wat je nodig hebt (behalve een draaiende instantie van MongoDB!).
Tijdens het installatieproces zal de wizard u vragen om de MongoDB Connection URI (die een gebruikersnaam en wachtwoord kan bevatten), de specifieke database die u wilt gebruiken (maak u geen zorgen, u kunt later meer toevoegen) en waar in de SlamData bestandssysteem dat u die database wilt koppelen (die u kunt laten staan als '/', het rootpad).
Na de installatie kunt u SlamData starten met een dubbelklik. Merk op dat er eigenlijk twee componenten zijn voor SlamData:de front-end en een lichtgewicht server die verbinding maakt met MongoDB. Standaard worden beide geïnstalleerd en beide worden gestart wanneer u dubbelklikt op SlamData.
SlamData-front-end
De front-end van SlamData, weergegeven in de bovenstaande schermafbeelding, is een visuele interface voor alle kracht van SlamData (er is ook een REPL voor degenen die de voorkeur geven aan een opdrachtregelinterface).
De bestandssysteemboom toont u alle gekoppelde databases, evenals de collecties binnen deze databases. Het is een visuele herinnering aan alle gegevens die u kunt opvragen, hoewel u in latere versies veel meer met het bestandssysteem kunt doen.
Met de editor-interface kunt u notitieblokken maken, dit zijn verzamelingen tekst (Markdown), query's (SQL) en visualisaties (grafieken). Een notitieblok is als een rapport, behalve dat het, in tegenstelling tot de meeste rapporten, interactief kan zijn en kan worden vernieuwd vanuit live gegevens.
Query's schrijven
Tijd om wat vragen te schrijven!
In deze voorbeelden ga ik ervan uit dat je de postcodedataset hebt geladen in je MongoDB-database, die je kunt downloaden van de MongoDB-site.
Deze dataset bevat basisinformatie over postcodes, zoals waar ze zich bevinden (stad, staat, geo) en hun bevolking.
Laten we de eerste 5 zip-items terugtrekken:
SELECTEER * UIT ritsen LIMIET 5
{ “_id” :“35004″ , “stad” :“ACMAR” , “loc” :[-86.51557 , 33.584132] , “pop” :6055 , “staat” :“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” :“NIEUWE SITE” , “loc” :[-85.951086 , 32.941445] , “pop” :19942 , “state” :“AL”}
Wat zijn de steden met de top 5 van meest bevolkte postcodes? Een fluitje van een cent:
SELECT city, pop UIT ritsen ORDER BY pop BESCHRIJVING LIMIET 5
{ “_id” :“60623″ , “stad” :“CHICAGO” , “pop” :112047}
{ “_id” :“11226″ , “stad” :“BROOKLYN” , “pop” :111396}
{ “_id” :“10021″ , “stad” :“NEW YORK” , “pop” :106564}
{ “_id” :“10025″ , “stad” :“NEW YORK” , “pop” :100027}
{ “_id” :“90201″ , “stad” :“BELL GARDENS” , “pop” :99568}
SlamData's dialect van SQL (genaamd SlamSQL) biedt volledige ondersteuning voor geneste documenten en arrays, en u opent ze met de gewone Javascript-notatie (bijv. SELECT foo.bar.baz).
Soms wil je een array afvlakken, zodat je in de inhoud van die array kunt graven. In de zips-gegevensset bevindt zich een loc-arrayveld dat een geolocatie bevat. Om deze array af te vlakken, gebruikt u gewoon de steroperator ('*') als de array-index:
SELECTEER loc[*] FROM zips LIMIT 1
{ “_id” :{ “$oid” :“53ecf39574d2394acbd4b6f1″} , “loc” :-86.51557}
Laten we tot slot de GROUP BY-operator van SQL gebruiken om de populatie van alle postcodes voor elke stad samen te vatten en vervolgens de top 5 van meest bevolkte steden eruit te halen:
SELECT city, SUM(pop) AS pop FROM zips GROUP PER city ORDER BY pop BESCHRIJVING LIMIET 5
Best wel cool, hè?
De meeste MongoDB-functies worden momenteel ondersteund in de bèta, hoewel ze hun standaard SQL-namen gebruiken (of hun PostgreSQL-namen, al naar gelang het geval). Deze omvatten het volgende:
- CONCAT, LOWER, UPPER, SUBSTRING
- DATE_PART
- COUNT, SUM, MIN, MAX, AVG
- +, -, *, /, %
- ARRAY_LENGTH
Bètabeperkingen
De bèta wordt niet voor niets "bèta" genoemd:hij implementeert niet alle SlamSQL en kan een paar bugs bevatten in de delen van SlamSQL die hij wel implementeert.
U dient in het bijzonder op de volgende beperkingen te letten:
- Hoewel GROUP BY wordt ondersteund, zijn er nog geen HAVING-clausules geïmplementeerd.
- Alle functies die niet standaard worden ondersteund door de aggregatiepijplijn (bijv. tekenreekslengte) worden nog niet ondersteund.
- Het selecteren van individuele array-elementen wordt nog niet ondersteund (bijv. SELECT loc[0] FROM zips) vanwege een bekend probleem in MongoDB.
- DISTINCT en andere bewerkingen op setniveau, zoals UNION, UNION ALL, worden nog niet ondersteund.
- JOIN's worden nog niet ondersteund in de officieel uitgebrachte versie (hoewel we een branch op Github hebben die ze ondersteunt, voor degenen die graag op de bloeding zijn rand!).
- Er zijn verschillende randgevallen die nog niet zijn geïmplementeerd.
Hoe SlamData zich opstapelt
Momenteel zijn er niet veel tools op de markt om analyses uit te voeren op MongoDB.
In de open source wereld:
- Er zijn de MongoDB-stuurprogramma's (beschikbaar in Python, Java, enz.), maar deze bibliotheken zijn ontworpen voor ontwikkelaars, niet voor analisten of gegevenswetenschappers, en u moet code schrijven om ze te gebruiken.
- PostgreSQL heeft een open source externe datawrapper voor MongoDB, bijgedragen door CitrusData. Op dit moment kan het alleen eenvoudige filters in MongoDB duwen. Alle andere bewerkingen vereisen het terugstromen van de gegevens van MongoDB naar PostgreSQL.
- MoSQL is een open source-tool die ETL vereenvoudigt van MongoDB naar PostgreSQL. U moet schema's strikt definiëren, uw gegevens afvlakken en arrays vermijden, en een aparte infrastructuur onderhouden voor analyse en rapportage.
In de commerciële sector:
- AquaFold's Data Studio heeft een MongoDB-client. Het is niet precies duidelijk wat het naar de bestuurder duwt, hoewel het enkele uitdrukkingen, filters en misschien groepering lijkt te zijn. Voor sommige bewerkingen moeten gegevens echter worden teruggestreamd naar de client, waardoor dit voor veel toepassingen onpraktisch is.
- JSONStudio heeft een interface waarmee u 'visueel' pijplijnquery's kunt bouwen voor het MongoDB-aggregatieframework, maar het is onderhevig aan dezelfde beperkingen als de aggregatie framework, en profiteert niet van de standaardisatie en declarativiteit van SQL.
- Simba Technologies heeft een MongoDB ODBC-stuurprogramma. Het kan enkele filters en aggregaties naar MongoDB pushen, maar al het andere moet voor verdere verwerking naar de driver worden gestreamd.
- Progress Software heeft een reeks dataconnectiviteitsproducten genaamd DataDirect, met een MongoDB-connector. Het is niet duidelijk hoeveel deze stuurprogramma's naar MongoDB pushen, maar ze lijken waarschijnlijk erg op het stuurprogramma van Simba, en ze vereisen wel dat je schema's bouwt.
- UnityJDBC heeft een JDBC-stuurprogramma voor MongoDB, maar voor het meeste werk is het afhankelijk van streaming (behalve voor onbewerkte en zeer eenvoudige filtering).
SlamData doet het goed bij zowel open source als commerciële aanbiedingen:
- SlamData is 100% open source, je hoeft niets te kopen of te licentiëren.
- SlamData pusht 100% van elke query naar MongoDB, zonder iets terug te streamen naar de client. Ooit.
- SlamData vereist geen schemadefinitie, geen schematoewijzing en geen enkele ETL. Het werkt gewoon met de gegevens zoals deze al bestaan in MongoDB.
- SlamData geeft geneste documenten en arrays een eersteklas status. Het is gemakkelijk om in elke structuur te graven met behulp van een schone, eenvoudige en voor de hand liggende extensie van SQL (bijv. foo.bar.baz[2].fuz).
- SlamData heeft een hippe maar lichtgewicht front-end waarmee je interactieve rapporten kunt maken, compleet met grafieken. Het is gemakkelijk om de front-end over te dragen aan 'die persoon' in uw team of organisatie, zodat u kunt doen waarvoor u wordt betaald in plaats van code te schrijven om rapporten te genereren.
Routekaart
We zijn van plan om begin oktober de productieversie van SlamData uit te brengen.
In deze release hebben we veel van de beperkingen van de bèta aangepakt, de manier waarop we SQL naar MongoDB kunnen compileren verbeterd en de front-end een stuk gebruiksvriendelijker en krachtiger gemaakt.
Als open source-project komt ons succes neer op adoptie. Als je wilt dat SlamData zich blijft ontwikkelen tot de beste open source-tool voor NoSQL-analyse en -rapportage, download dan SlamData, fork of star de repositories en becommentarieer eventuele bugs die je tegenkomt of functies die je graag zou willen zien toegevoegd.