MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Seri Analisis MongoDB:SlamData – Jalankan SQL &Bangun Laporan Langsung di MongoDB

Ini posting tamu oleh John A. De Goes. John adalah CTO &Co-Founder SlamData. Saat tidak mengerjakan masalah kompilasi yang rumit untuk SlamData, Anda dapat menemukan John berbicara di konferensi, blogging, menghabiskan waktu bersama keluarganya, dan aktif di kaki Pegunungan Rocky. Hubungi John di [email protected]

Hosting MongoDB telah sangat sukses di komunitas pengembang, sebagian karena memungkinkan pengembang untuk menyimpan struktur data secara langsung dalam database modern yang cepat, skalabel .

Tidak perlu memetakan struktur data tersebut ke tabel kaku, standar, dan datar yang harus dipasang kembali saat runtime melalui banyak tabel perantara. (Digambarkan seperti itu, model relasional terdengar agak kuno, bukan?)

Sayangnya, perangkat lunak analitik dan pelaporan dunia tidak dapat memahami data pasca-relasional. Jika tidak rata, jika tidak semuanya seragam, Anda tidak dapat melakukan apa pun dengannya di dalam solusi analitik dan pelaporan lawas!

Itu masalah sebenarnya, karena developer membuat aplikasi MongoDB yang menghasilkan banyak data. Pada akhirnya, bisnis ingin memisahkan data ini, membuat laporan, dan mengumpulkan wawasan.

Anda dapat melakukan semua itu hari ini, tetapi Anda perlu menulis sekumpulan kode, mengubah dan mereplikasi data MongoDB ke dalam database atau gudang data lain, atau melalui rasa sakit dan penderitaan yang intens dan berkepanjangan dari jenis yang ingin saya hindari.

Itulah tepatnya mengapa saya mendirikan SlamData. SlamData adalah perusahaan sumber terbuka yang mengembangkan alat analitik dan pelaporan generasi berikutnya untuk data NoSQL.

Kami baru saja meluncurkan SlamData versi beta, yang mendukung MongoDB. Dalam posting ini, saya akan berbicara tentang bagaimana Anda dapat menggunakan beta ini untuk melakukan query MongoDB menggunakan SQL biasa, beberapa batasannya, bagaimana SlamData dibandingkan dengan kompetisi, dan ke mana arah proyek.

Mendapatkan &Menginstal SlamData

Anda dapat membangun SlamData dari kode sumber di Github. Tetapi jika Anda tidak suka bermain-main dengan kode sumber, saya sarankan untuk mengunduh penginstal GUI dari situs web SlamData.

Ada penginstal bawaan untuk Linux, OS X, dan Windows, dan mereka disertakan dengan semua yang Anda butuhkan (kecuali instance MongoDB yang sedang berjalan!).

Selama proses instalasi, wizard akan meminta Anda untuk URI Koneksi MongoDB (yang dapat menyertakan nama pengguna dan kata sandi), database spesifik yang ingin Anda gunakan (jangan khawatir, Anda dapat menambahkan lebih banyak nanti), dan di mana dalam SlamData sistem file yang ingin Anda mount databasenya (yang dapat Anda tinggalkan sebagai '/', jalur root).

Setelah instalasi, Anda dapat meluncurkan SlamData dengan klik dua kali. Perhatikan bahwa sebenarnya ada dua komponen untuk SlamData:front-end, dan server ringan yang terhubung ke MongoDB. Secara default keduanya akan diinstal, dan keduanya akan diluncurkan saat Anda mengklik dua kali SlamData.

Front-End SlamData

Front-end SlamData, yang ditunjukkan pada tangkapan layar di atas, adalah antarmuka visual untuk semua kekuatan SlamData (ada REPL juga, bagi mereka yang lebih menyukai antarmuka baris perintah).

Pohon sistem file menunjukkan kepada Anda semua database yang dipasang, serta koleksi di dalam database ini. Ini adalah pengingat visual dari semua data yang dapat Anda kueri, meskipun dalam versi yang lebih baru Anda akan dapat melakukan lebih banyak hal dengan sistem file.

Antarmuka editor memungkinkan Anda membuat buku catatan, yang merupakan kumpulan teks (Penurunan harga), kueri (SQL), dan visualisasi (bagan). Buku catatan itu seperti laporan, kecuali tidak seperti kebanyakan laporan, buku catatan itu bisa interaktif dan bisa disegarkan dari data langsung.

Menulis Kueri

Saatnya menulis beberapa pertanyaan!

Dalam contoh ini, saya akan menganggap Anda memiliki Kumpulan Data Kode Pos yang dimuat ke dalam database MongoDB Anda, yang dapat Anda unduh dari situs MongoDB.

Kumpulan data ini memiliki informasi dasar tentang kode pos, seperti lokasinya (kota, negara bagian, geografis) dan populasinya.

Mari tarik kembali 5 entri zip pertama:

SELECT * FROM zip 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”}

Apa kota yang memiliki 5 kode pos terpadat? Sepotong kue:

PILIH kota, pop FROM zip ORDER BY pop DESC LIMIT 5

{ “_id” :“60623″ , “kota” :“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}

Dialek SQL SlamData (disebut SlamSQL) memiliki dukungan penuh untuk dokumen dan larik bersarang, dan Anda mengaksesnya menggunakan notasi Javascript biasa (mis. SELECT foo.bar.baz).

Terkadang, Anda ingin meratakan larik sehingga Anda dapat menggali isi larik itu. Di kumpulan data zip, ada bidang array lokasi yang berisi geolokasi. Untuk meratakan array ini, cukup gunakan operator bintang ('*') sebagai indeks array:

SELECT loc[*] FROM zip LIMIT 1

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

Terakhir, mari gunakan operator GROUP BY SQL untuk menjumlahkan populasi semua kode pos untuk setiap kota, lalu mengekstrak 5 kota terpadat teratas:

PILIH kota, SUM(pop) AS pop FROM zip GROUP BY city ORDER BY pop DESC LIMIT 5

Cukup keren, ya?

Sebagian besar fungsi MongoDB saat ini didukung dalam versi beta, meskipun mereka menggunakan nama SQL standarnya (atau dengan nama PostgreSQL, tergantung kasusnya). Ini termasuk yang berikut:

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

Batasan Beta

Beta disebut “beta” karena suatu alasan:ia tidak mengimplementasikan semua SlamSQL dan mungkin memiliki beberapa bug di bagian SlamSQL yang diimplementasikannya.

Secara khusus, Anda harus memperhatikan batasan berikut:

  • Meskipun GROUP BY didukung, klausa HAVING belum diterapkan.
  • Semua fungsi yang tidak didukung secara native oleh Aggregation Pipeline (mis. panjang string) belum didukung.
  • Memilih elemen array individual belum didukung (mis. SELECT loc[0] FROM zips) karena masalah yang diketahui di MongoDB.
  • DISTINCT, dan operasi set-level lainnya seperti UNION, UNION ALL, belum didukung.
  • BERGABUNG belum didukung dalam versi yang dirilis secara resmi (meskipun kami memiliki cabang di Github yang mendukungnya, bagi mereka yang suka terlibat tepi!).
  • Ada berbagai kasus tepi yang belum diterapkan.

Bagaimana SlamData Ditumpuk

Saat ini, tidak banyak alat di pasar untuk melakukan analisis di MongoDB.

Di dunia sumber terbuka:

  • Ada driver MongoDB (tersedia dalam Python, Java, dll.), tetapi perpustakaan ini dirancang untuk pengembang, bukan analis atau ilmuwan data, dan Anda perlu menulis kode untuk menggunakannya.
  • PostgreSQL memiliki pembungkus data asing open source untuk MongoDB yang disumbangkan oleh CitrusData. Saat ini, itu hanya dapat mendorong filter sederhana ke MongoDB. Semua operasi lain memerlukan streaming data kembali dari MongoDB ke PostgreSQL.
  • MoSQL adalah alat sumber terbuka yang menyederhanakan ETL dari MongoDB ke PostgreSQL. Anda perlu mendefinisikan skema secara kaku, meratakan data, dan menghindari larik, serta memelihara infrastruktur terpisah untuk analisis dan pelaporan.

Di sektor komersial:

  • Data Studio AquaFold memiliki klien MongoDB. Tidak jelas persis apa yang didorongnya ke pengemudi, meskipun tampaknya ada beberapa ekspresi, filter, dan mungkin pengelompokan. Namun, untuk beberapa operasi, data harus dialirkan kembali ke klien, sehingga tidak praktis untuk banyak aplikasi.
  • JSONStudio memiliki antarmuka yang memungkinkan Anda "secara visual" membuat kueri pipeline untuk kerangka kerja agregasi MongoDB, tetapi tunduk pada semua batasan yang sama seperti agregasi framework, dan tidak memanfaatkan standarisasi dan deklaratif SQL.
  • Simba Technologies memiliki Driver ODBC MongoDB. Itu dapat menekan beberapa filter dan agregasi ke MongoDB, tetapi yang lainnya harus dialirkan kembali ke driver untuk diproses lebih lanjut.
  • Progress Software memiliki rangkaian produk konektivitas data yang disebut DataDirect, dengan konektor MongoDB. Tidak jelas seberapa banyak driver ini mendorong ke MongoDB, tetapi mereka mungkin sangat mirip dengan driver dari Simba, dan mereka mengharuskan Anda membuat skema.
  • UnityJDBC memiliki driver JDBC untuk MongoDB, tetapi ia mengandalkan streaming untuk melakukan sebagian besar pekerjaan (kecuali untuk pemfilteran mentah dan sangat sederhana).

SlamData sangat cocok dengan penawaran open source dan komersial:

  1. SlamData adalah 100% open source, tanpa pembelian atau lisensi apa pun.
  2. SlamData mendorong 100% dari setiap kueri ke dalam MongoDB, tanpa mengalirkan apa pun kembali ke klien. Pernah.
  3. SlamData tidak memerlukan definisi skema, tidak ada pemetaan skema, dan tidak ada ETL dalam bentuk apa pun. Ini hanya berfungsi dengan data seperti yang sudah ada di MongoDB.
  4. SlamData memberikan dokumen bersarang dan array status kelas satu. Sangat mudah untuk menggali struktur apa pun menggunakan ekstensi SQL yang bersih, sederhana, dan jelas (mis. foo.bar.baz[2].fuz).
  5. SlamData memiliki front-end yang keren namun ringan yang memungkinkan Anda membuat laporan interaktif, lengkap dengan bagan. Sangat mudah untuk menyerahkan front-end kepada "orang itu" di tim atau organisasi Anda, membebaskan Anda untuk melakukan apa yang harus Anda lakukan daripada menulis kode untuk membuat laporan.

Peta Jalan

Pada awal Oktober, kami berencana untuk merilis versi produksi SlamData.

Dalam rilis ini, kami akan mengatasi banyak keterbatasan beta, meningkatkan cara kami mengompilasi SQL ke MongoDB, dan membuat front-end jauh lebih mudah digunakan dan lebih kuat.

Sebagai proyek sumber terbuka, kesuksesan kami bergantung pada adopsi. Jika Anda ingin melihat SlamData terus berkembang menjadi alat sumber terbuka terbaik untuk analitik dan pelaporan NoSQL, unduh SlamData, pisahkan atau beri bintang pada repositori, dan komentari bug yang Anda temukan atau fitur yang ingin Anda tambahkan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara Memeriksa Apakah Indeks Tersembunyi di MongoDB

  2. Perancah Yeoman, Mongoose, dan MongoDB

  3. MongoDB $dan Operator Pipa Agregasi

  4. Bagaimana cara memasukkan dokumen ke mongodb menggunakan luwak dan mendapatkan id yang dihasilkan?

  5. Pilih dokumen di mana semua nilai dalam bidang array ada di array lain