MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB Analytics Series:SlamData – Изпълнявайте SQL и изграждайте отчети директно в MongoDB

Това е публикация за гости от John A. De Goes. Джон е технически директор и съосновател на SlamData. Когато не работите по сложни компилационни проблеми за SlamData, можете да намерите Джон да говори на конференции, да пише в блогове, да прекарва време със семейството си и да е активен в подножието на Скалистите планини. Свържете се с Джон на [email protected]

Хостингът на MongoDB е изключително успешен в общността на разработчиците, отчасти защото позволява на разработчиците да съхраняват структури от данни директно в бърза, мащабируема, модерна база данни .

Няма нужда да картографирате тези структури от данни в твърди, предварително дефинирани и плоски таблици, които трябва да бъдат сглобени отново по време на изпълнение чрез много междинни таблици. (Описан по този начин, релационният модел звучи някак старомодно, нали?)

За съжаление, световният софтуер за анализи и отчети не може да осмисли пострелационните данни. Ако не е плосък, ако не е единен, не можете да направите нищо с него в наследените решения за анализ и отчети!

Това е истински проблем, защото разработчиците създават приложения на MongoDB, които генерират тонове данни. В крайна сметка фирмите искат да нарязват и нарязват тези данни, да изграждат отчети и да събират информация.

Можете да направите всичко това днес, но трябва да пишете купи код, да трансформирате и репликирате данни на MongoDB в друга база данни или хранилище за данни или по друг начин да преминете през интензивна, продължителна болка и страдание от типа, който обичам да избягвам.

Точно затова основах SlamData. SlamData е компания с отворен код, която разработва инструмент за анализ и отчитане от следващо поколение за NoSQL данни.

Току-що пуснахме бета версията на SlamData, която поддържа MongoDB. В тази публикация ще говоря за това как можете да използвате тази бета версия за запитване на MongoDB с помощта на обикновен SQL, какви са някои от ограниченията, как SlamData се сравнява с конкуренцията и накъде отива проектът.

Получаване и инсталиране на SlamData

Можете да изградите SlamData от изходния код на Github. Но ако не обичате да се забърквате с изходния код, препоръчвам да изтеглите инсталаторите на GUI от уебсайта на SlamData.

Има предварително изградени инсталатори за Linux, OS X и Windows и те идват в комплект с всичко необходимо (с изключение на работещ екземпляр на MongoDB!).

По време на процеса на инсталиране, съветникът ще ви попита за URI на MongoDB Connection (който може да включва потребителско име и парола), конкретната база данни, която искате да използвате (не се притеснявайте, можете да добавите още по-късно) и къде в SlamData файлова система, която искате да монтирате тази база данни (която можете да оставите като '/', основния път).

След инсталацията можете да стартирате SlamData с двойно щракване. Имайте предвид, че всъщност има два компонента към SlamData:предния край и олекотен сървър, който се свързва с MongoDB. По подразбиране и двете ще бъдат инсталирани и и двете ще се стартират, когато щракнете двукратно върху SlamData.

SlamData Front-End

Предният край на SlamData, показан на екранната снимка по-горе, е визуален интерфейс към цялата сила на SlamData (има и REPL за тези, които предпочитат интерфейс от командния ред).

Дървото на файловата система ви показва всички монтирани бази данни, както и колекциите в тези бази данни. Това е визуално напомняне за всички данни, които можете да заявите, въпреки че в по-късните версии ще можете да правите много повече с файловата система.

Интерфейсът на редактора ви позволява да създавате бележници, които са колекции от текст (Markdown), заявки (SQL) и визуализации (диаграми). Бележникът е като отчет, с изключение на това, че за разлика от повечето отчети, той може да бъде интерактивен и може да се опреснява от данни в реално време.

Писане на заявки

Време е да напишете някои запитвания!

В тези примери ще предположа, че имате набора от данни за пощенски код, зареден във вашата база данни MongoDB, която можете да изтеглите от сайта на MongoDB.

Този набор от данни съдържа основна информация за пощенските кодове, като например къде се намират (град, щат, географско местоположение) и тяхното население.

Нека изтеглим първите 5 записа в zip:

ИЗБЕРЕТЕ * ОТ ОГРАНИЧЕНИЕ на ципове 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” :“НОВ САЙТ” , “loc” :[ -85.951086 , 32.941445] , “pop” :19942 , “state” :“AL”}

Кои са градовете, които имат топ 5 най-гъсто населени пощенски кодове? Парче торта:

ИЗБЕРЕТЕ град, изп. ОТ ципове ПОРЪЧАЙТЕ ПО поп ОГРАНИЧЕНИЕ НА ОПИСВАНЕ 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}

Диалектът на SQL на SlamData (наречен SlamSQL) има пълна поддръжка за вложени документи и масиви и имате достъп до тях с помощта на обикновена Javascript нотация (напр. SELECT foo.bar.baz).

Понякога ще искате да изгладите масив, за да можете да разровите съдържанието на този масив. В набора от данни zips има поле за локален масив, което съдържа геолокация. За да изравните този масив, просто използвайте оператора звезда (‘*’) като индекс на масива:

SELECT loc[*] ОТ ципове LIMIT 1

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

И накрая, нека използваме оператора GROUP BY на SQL, за да обобщим населението на всички пощенски кодове за всеки град и след това да извлечем 5-те най-населени градове:

ИЗБЕРЕТЕ град, SUM(поп) КАТО изскачане ОТ ципове ГРУПА ПО град ПОРЪЧКА ПО поп. ОГРАНИЧЕНИЕ НА ОПИСВАНЕ 5

Доста готино, а?

Повечето функции на MongoDB в момента се поддържат в бета версията, въпреки че вървят с техните стандартни SQL имена (или с техните PostgreSQL имена, според случая). Те включват следното:

  • CONCAT, LOWER, UPPER, SUBSTRING
  • ДАТА_ЧАСТ
  • COUNT, SUM, MIN, MAX, AVG
  • +, -, *, /, %
  • ARRAY_LENGTH

Бета ограничения

Бета версията се нарича „бета“ по причина:тя не внедрява целия SlamSQL и може да има няколко грешки в частите на SlamSQL, които прилага.

По-специално, трябва да обърнете внимание на следните ограничения:

  • Въпреки че GROUP BY се поддържа, клаузите HAVING все още не са внедрени.
  • Всички функции, които не се поддържат първоначално от конвейера за агрегиране (напр. дължина на низа), все още не се поддържат.
  • Избирането на отделни елементи от масива все още не се поддържа (напр. SELECT loc[0] FROM zip) поради известен проблем в MongoDB.
  • DISTINCT и други операции на ниво набор, като UNION, UNION ALL, все още не се поддържат.
  • JOIN все още не се поддържат в официално пуснатата версия (въпреки че имаме клон в Github , който ги поддържа, за тези, които обичат да са в кървене ръб!).
  • Има различни крайни случаи, които все още не са внедрени.

Как се нареждат SlamData

В момента на пазара няма много инструменти за извършване на анализи в MongoDB.

В света с отворен код:

  • Има драйвери MongoDB (достъпни в Python, Java и др.), но тези библиотеки са предназначени за разработчици, а не за анализатори или учени по данни, а вие трябва да напишете код, за да ги използвате.
  • PostgreSQL има обвивка за чужди данни с отворен код за MongoDB, предоставена от CitrusData. В момента той може да прокара само прости филтри в MongoDB. Всички други операции изискват поточно предаване на данните обратно от MongoDB към PostgreSQL.
  • MoSQL е инструмент с отворен код, който опростява ETL от MongoDB в PostgreSQL. Трябва строго да дефинирате схеми, да изравнявате данните си и да избягвате масиви, както и да поддържате отделна инфраструктура за анализ и отчитане.

В търговския сектор:

  • Data Studio на AquaFold има клиент MongoDB. Не е ясно какво точно насочва към драйвера, въпреки че изглежда, че това са някои изрази, филтри и може би групиране. За някои операции обаче данните трябва да се прехвърлят обратно към клиента, което го прави непрактично за много приложения.
  • JSONStudio има интерфейс, който ви позволява да създавате „визуално“ заявки на конвейер за рамката за агрегиране на MongoDB, но е обект на същите ограничения като агрегирането рамка и не се възползва от стандартизацията и декларативността на SQL.
  • Simba Technologies има MongoDB ODBC драйвер. Той може да изтласка някои филтри и агрегати към MongoDB, но всичко останало трябва да бъде предадено обратно на драйвера за по-нататъшна обработка.
  • Progress Software има семейство продукти за свързване на данни, наречени DataDirect, с конектор MongoDB. Не е ясно доколко тези драйвери се притискат към MongoDB, но вероятно са много подобни на драйвера от Simba и изискват да изградите схеми.
  • UnityJDBC има JDBC драйвер за MongoDB, но разчита на поточно предаване, за да свърши по-голямата част от работата (с изключение на необработеното и много просто филтриране).

SlamData се съпоставя много добре както с отворен код, така и с търговски предложения:

  1. SlamData е със 100% отворен код, без нищо за закупуване или лицензиране.
  2. SlamData изтласква 100% от всяка заявка надолу в MongoDB, без да предава нищо обратно към клиента. Някога.
  3. SlamData не изисква дефиниция на схема, картографиране на схема и ETL от какъвто и да е вид. Той просто работи с данните, тъй като вече съществуват в MongoDB.
  4. SlamData дава първокласен статус на вложените документи и масиви. Лесно е да се копае във всяка структура с помощта на чисто, просто и очевидно разширение на SQL (напр. foo.bar.baz[2].fuz).
  5. SlamData има очарователен, но лек преден край, който ви позволява да създавате интерактивни отчети, допълнени с диаграми. Лесно е да предадете предния край на „този човек“ във вашия екип или организация, което ви освобождава да правите това, за което ви се плаща, вместо да пишете код за генериране на отчети.

Пътна карта

В началото на октомври планираме да пуснем производствената версия на SlamData.

В тази версия ще разгледаме много от ограниченията на бета версията, ще подобрим начина, по който можем да компилираме SQL в MongoDB, и ще направим предния край много по-лесен за използване и по-мощен.

Като проект с отворен код, нашият успех се свежда до приемането. Ако искате да видите, че SlamData продължава да се развива в най-добрия инструмент с отворен код за анализи и отчитане на NoSQL, след това изтеглете SlamData, разклонете или означете хранилищата и коментирайте всички грешки, които откриете, или функции, които искате да видите добавени.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Направете нещо, ако нищо не е намерено с .find() mongoose

  2. Създаване на администраторска зона за пет минути с AdminBro, express, mongoDB, mongoose

  3. MongoDB $година

  4. MongoDB:Възможно ли е да се направи заявка, независимо от главните букви?

  5. Добавете ново поле към всеки документ в колекция MongoDB