sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB Analytics Series:SlamData – Spouštějte SQL a sestavujte sestavy přímo na MongoDB

Toto je příspěvek od Johna A. De Goese. John je CTO a spoluzakladatel SlamData. Když nepracujete na složitých problémech s kompilací pro SlamData, můžete Johna najít mluvit na konferencích, blogovat, trávit čas se svou rodinou a být aktivní v podhůří Skalistých hor. Kontaktujte Johna na adrese [email protected]

Hosting MongoDB byl v komunitě vývojářů velmi úspěšný, částečně proto, že umožňuje vývojářům ukládat datové struktury přímo do rychlé, škálovatelné, moderní databáze. .

Není třeba mapovat tyto datové struktury na pevné, předdefinované a ploché tabulky, které je třeba za běhu znovu sestavit pomocí mnoha přechodných tabulek. (Takto popsaný relační model zní trochu staromódně, že?)

Světový analytický a reportovací software bohužel nedokáže porozumět postrelačním datům. Pokud není plochý, pokud není celý jednotný, nemůžete s ním v rámci starších řešení pro analýzu a vytváření sestav nic dělat!

To je skutečný problém, protože vývojáři vytvářejí aplikace MongoDB, které generují spoustu dat. Nakonec chtějí firmy tato data rozdělit na kousky, vytvořit sestavy a shromáždit přehled.

To vše můžete dělat dnes, ale musíte napsat hromady kódu, transformovat a replikovat data MongoDB do jiné databáze nebo datového skladu nebo jinak procházet intenzivní, dlouhotrvající bolestí a utrpením typu, kterému se rád vyhýbám.

To je přesně důvod, proč jsem založil SlamData. SlamData je společnost s otevřeným zdrojovým kódem, která vyvíjí analytický a reportovací nástroj nové generace pro data NoSQL.

Právě jsme spustili beta verzi SlamData, která podporuje MongoDB. V tomto příspěvku budu mluvit o tom, jak můžete tuto beta verzi použít k dotazování MongoDB pomocí běžného SQL, jaká jsou některá omezení, jak je SlamData ve srovnání s konkurencí a kam se projekt ubírá.

Získání a instalace SlamData

SlamData můžete sestavit ze zdrojového kódu na Github. Pokud se vám ale nelíbí šmejdit se zdrojovým kódem, doporučuji si stáhnout instalační programy GUI z webu SlamData.

Existují předpřipravené instalační programy pro Linux, OS X a Windows a jsou dodávány se vším, co potřebujete (kromě běžící instance MongoDB!).

Během procesu instalace se vás průvodce zeptá na URI připojení MongoDB (které může zahrnovat uživatelské jméno a heslo), konkrétní databázi, kterou chcete použít (nebojte se, později můžete přidat další) a kde v SlamData souborový systém, ke kterému chcete připojit tuto databázi (kterou můžete ponechat jako '/', kořenovou cestu).

Po instalaci můžete SlamData spustit dvojitým kliknutím. Všimněte si, že ve skutečnosti existují dvě součásti SlamData:front-end a odlehčený server, který se připojuje k MongoDB. Ve výchozím nastavení se nainstalují oba a oba se spustí, když dvakrát kliknete na SlamData.

Front rozhraní SlamData

Front-end SlamData, zobrazený na snímku obrazovky výše, je vizuálním rozhraním pro veškerou sílu SlamData (existuje také REPL pro ty, kteří preferují rozhraní příkazového řádku).

Strom souborového systému zobrazuje všechny připojené databáze a také kolekce uvnitř těchto databází. Je to vizuální připomenutí všech dat, na která se můžete dotazovat, i když v pozdějších verzích budete moci se systémem souborů dělat mnohem více.

Rozhraní editoru umožňuje vytvářet poznámkové bloky, což jsou kolekce textu (Markdown), dotazy (SQL) a vizualizace (grafy). Poznámkový blok je jako přehled, kromě toho, že na rozdíl od většiny přehledů může být interaktivní a může se obnovovat z aktuálních dat.

Psaní dotazů

Je čas napsat pár dotazů!

V těchto příkladech budu předpokládat, že máte soubor dat PSČ načtený do databáze MongoDB, kterou si můžete stáhnout z webu MongoDB.

Tato datová sada obsahuje základní informace o PSČ, např. kde se nacházejí (město, stát, geografická poloha) a jejich populaci.

Pojďme stáhnout prvních 5 položek zip:

SELECT * FROM zipy 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” :“NEW SITE” , “loc” :[ -85.951086 , 32.941445] , “pop” :19942 , “state” :“AL”}

Která města mají 5 nejlidnatějších PSČ? Kus dortu:

VYBERTE město, pop OD zipů OBJEDNEJTE PODLE 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″, “město” :“NEW YORK” , “pop” :100027}

{ “_id” :“90201″ , “city” :“BELL GARDENS” , “pop” :99568}

Dialekt SQL SlamData (nazývaný SlamSQL) má plnou podporu pro vnořené dokumenty a pole a přistupujete k nim pomocí běžného zápisu Javascriptu (např. SELECT foo.bar.baz).

Někdy budete chtít pole vyrovnat, abyste se mohli ponořit do obsahu tohoto pole. V sadě dat zip je pole loc Array, které obsahuje geolokaci. Chcete-li toto pole zploštit, stačí jako index pole použít operátor hvězdička (‚*‘):

SELECT loc[*] FROM zipy LIMIT 1

{ “_id” :{ “$oid” :“53ecf39574d2394acbd4b6f1″} , “loc” :-86,51557}

Nakonec pomocí SQL operátoru GROUP BY sečteme populaci všech PSČ pro každé město a poté extrahujeme 5 nejlidnatějších měst:

VYBERTE město, SOUČET (pop) JAKO pop OD zipů SKUPINA PODLE města ORDER BY pop DESC LIMIT 5

Docela v pohodě, co?

Většina funkcí MongoDB je v současné době podporována v beta verzi, i když se řídí svými standardními názvy SQL (případně názvy PostgreSQL). Patří mezi ně následující:

  • CONCAT, LOWER, UPPER, SUBSTRING
  • DATE_PART
  • POČET, SUM, MIN, MAX, AVG
  • +, -, *, /, %
  • ARRAY_LENGTH

Omezení beta verze

Beta se z nějakého důvodu nazývá „beta“:neimplementuje celý SlamSQL a může mít několik chyb v částech SlamSQL, které implementuje.

Zejména byste měli věnovat pozornost následujícím omezením:

  • Přestože je podporována funkce GROUP BY, klauzule HAVING dosud nebyly implementovány.
  • Všechny funkce, které agregační kanál nativně nepodporuje (např. délka řetězce), zatím nejsou podporovány.
  • Výběr jednotlivých prvků pole zatím není podporován (např. zipy SELECT loc[0] FROM) kvůli známému problému v MongoDB.
  • DISTINCT a další operace na úrovni sady, jako UNION, UNION ALL, zatím nejsou podporovány.
  • JOINy ​​zatím nejsou v oficiálně vydané verzi podporovány (ačkoli máme pobočku na Githubu, která je podporuje, pro ty, kteří chtějí být na rozpacích okraj!).
  • Existují různé okrajové případy, které ještě nejsou implementovány.

Jak se SlamData skládají

V současné době není na trhu mnoho nástrojů pro provádění analýzy na MongoDB.

Ve světě open source:

  • Jsou zde ovladače MongoDB (dostupné v Pythonu, Javě atd.), ale tyto knihovny jsou určeny pro vývojáře, nikoli pro analytiky nebo datové vědce, a pro vás k jejich použití je potřeba napsat kód.
  • PostgreSQL má open source obálku zahraničních dat pro MongoDB přidanou CitrusData. Právě teď může do MongoDB tlačit pouze jednoduché filtry. Všechny ostatní operace vyžadují streamování dat zpět z MongoDB do PostgreSQL.
  • MoSQL je nástroj s otevřeným zdrojovým kódem, který zjednodušuje ETL z MongoDB na PostgreSQL. Musíte pevně definovat schémata, zploštit svá data a vyhnout se polím a také udržovat samostatnou infrastrukturu pro analýzy a vytváření sestav.

V komerčním sektoru:

  • Datové studio AquaFold má klienta MongoDB. Není jasné, co přesně tlačí na řidiče, i když se zdá, že jsou to nějaké výrazy, filtry a možná seskupení. Pro některé operace však musí být data streamována zpět do klienta, což je pro mnoho aplikací nepraktické.
  • JSONStudio má rozhraní, které vám umožňuje „vizuálně“ vytvářet zřetězené dotazy pro agregační rámec MongoDB, ale podléhá stejným omezením jako agregace a netěží ze standardizace a deklarativnosti SQL.
  • Simba Technologies má ovladač MongoDB ODBC. Může stlačit některé filtry a agregace do MongoDB, ale vše ostatní musí být streamováno zpět do ovladače pro další zpracování.
  • Progress Software má řadu produktů pro datové připojení nazývaných DataDirect s konektorem MongoDB. Není jasné, jak moc tyto ovladače tlačí dolů na MongoDB, ale pravděpodobně jsou velmi podobné ovladači ze Simby a vyžadují, abyste vytvořili schémata.
  • UnityJDBC má ovladač JDBC pro MongoDB, ale většinu práce spoléhá na streamování (kromě hrubého a velmi jednoduchého filtrování).
  • li>

SlamData obstojí velmi dobře proti open source i komerčním nabídkám:

  1. SlamData je 100% open source, bez nutnosti nákupu nebo licence.
  2. SlamData přesune 100 % každého dotazu dolů do MongoDB, aniž by cokoli streamovalo zpět klientovi. někdy.
  3. SlamData nevyžaduje žádnou definici schématu, žádné mapování schématu ani žádné ETL jakéhokoli druhu. Pracuje pouze s daty, která již existují v MongoDB.
  4. SlamData poskytuje vnořeným dokumentům a polím prvotřídní stav. Je snadné proniknout do jakékoli struktury pomocí čistého, jednoduchého a zřejmého rozšíření SQL (např. foo.bar.baz[2].fuz).
  5. SlamData má elegantní, ale odlehčené rozhraní, které vám umožní vytvářet interaktivní přehledy doplněné grafy. Je snadné předat front-end „tomuto člověku“ ve vašem týmu nebo organizaci, což vám umožní dělat to, za co jste placeni, místo psaní kódu pro generování přehledů.

Cestovní mapa

Začátkem října plánujeme vydat produkční verzi SlamData.

V této verzi jsme se zabývali mnoha omezeními beta verze, zlepšili jsme způsob, jakým můžeme kompilovat SQL do MongoDB, a učinili jsme front-end mnohem snazším a výkonnějším.

Jako open source projekt spočívá náš úspěch v přijetí. Pokud chcete, aby se SlamData nadále vyvíjela v nejlepší nástroj s otevřeným zdrojovým kódem pro analýzy a reportování NoSQL, pak si stáhněte SlamData, rozvětvete nebo označte úložiště hvězdičkou a okomentujte všechny nalezené chyby nebo funkce, které byste rádi přidali.


  1. Nelze připojit Redis Cluster v Elasticache k PHP pomocí knihovny phpredis

  2. MongoDB:Co je sdružování připojení a časový limit?

  3. 3 způsoby, jak skrýt index z plánu dotazů v MongoDB

  4. MongoDB:Jak najít dokument podle id uvnitř vnořeného dokumentu