MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Loạt bài phân tích MongoDB:SlamData - Chạy SQL &tạo báo cáo trực tiếp trên MongoDB

Đây là một bài đăng của John A. De Goes. John là CTO &Đồng sáng lập của SlamData. Khi không giải quyết các vấn đề phức tạp về biên dịch cho SlamData, bạn có thể thấy John đang phát biểu tại các hội nghị, viết blog, dành thời gian cho gia đình và hoạt động tích cực ở chân núi Rocky Mountains. Liên hệ với John tại [email protected]

Lưu trữ MongoDB đã rất thành công trong cộng đồng nhà phát triển, một phần vì nó cho phép các nhà phát triển lưu trữ cấu trúc dữ liệu trực tiếp trong cơ sở dữ liệu hiện đại, có thể mở rộng, nhanh chóng .

Không cần ánh xạ các cấu trúc dữ liệu đó thành các bảng cứng, được xác định trước và phẳng phải được tập hợp lại trong thời gian chạy thông qua nhiều bảng trung gian. (Được mô tả theo cách đó, mô hình quan hệ nghe có vẻ lỗi thời phải không?)

Thật không may, phần mềm báo cáo và phân tích của thế giới không thể hiểu được dữ liệu hậu quan hệ. Nếu nó không phẳng, nếu nó không đồng nhất, bạn không thể làm gì với nó bên trong các giải pháp báo cáo và phân tích cũ!

Đó là một vấn đề thực sự, bởi vì các nhà phát triển tạo ra các ứng dụng MongoDB tạo ra rất nhiều dữ liệu. Cuối cùng, các doanh nghiệp muốn chia nhỏ dữ liệu này, xây dựng báo cáo và thu thập thông tin chi tiết.

Bạn có thể làm tất cả những điều đó ngày hôm nay, nhưng bạn cần phải viết mã, chuyển đổi và sao chép dữ liệu MongoDB vào một cơ sở dữ liệu hoặc kho dữ liệu khác, hoặc nếu không thì phải trải qua những cơn đau dữ dội, kéo dài và đau khổ theo kiểu mà tôi muốn tránh.

Đó chính xác là lý do tại sao tôi thành lập SlamData. SlamData là một công ty nguồn mở đang phát triển công cụ báo cáo và phân tích thế hệ tiếp theo cho dữ liệu NoSQL.

Chúng tôi vừa ra mắt phiên bản beta của SlamData, hỗ trợ MongoDB. Trong bài đăng này, tôi sẽ nói về cách bạn có thể sử dụng bản beta này để truy vấn MongoDB bằng SQL thông thường, một số hạn chế là gì, SlamData so với đối thủ như thế nào và dự án sẽ diễn ra như thế nào.

Lấy và cài đặt SlamData

Bạn có thể xây dựng SlamData từ mã nguồn trên Github. Nhưng nếu bạn không thích sử dụng mã nguồn, tôi khuyên bạn nên tải xuống trình cài đặt GUI từ trang web SlamData.

Có những trình cài đặt được tạo sẵn cho Linux, OS X và Windows và chúng đi kèm với mọi thứ bạn cần (ngoại trừ phiên bản đang chạy của MongoDB!).

Trong quá trình cài đặt, trình hướng dẫn sẽ hỏi bạn về URI kết nối MongoDB (có thể bao gồm tên người dùng và mật khẩu), cơ sở dữ liệu cụ thể mà bạn muốn sử dụng (đừng lo lắng, bạn có thể bổ sung thêm sau) và vị trí trong SlamData hệ thống tệp bạn muốn gắn kết cơ sở dữ liệu đó (bạn có thể để là '/', đường dẫn gốc).

Sau khi cài đặt, bạn có thể khởi chạy SlamData bằng một cú nhấp đúp. Lưu ý rằng thực tế có hai thành phần đối với SlamData:giao diện người dùng và một máy chủ nhẹ kết nối với MongoDB. Theo mặc định, cả hai sẽ được cài đặt và cả hai sẽ khởi chạy khi bạn nhấp đúp vào SlamData.

SlamData Front-End

Giao diện người dùng SlamData, được hiển thị trong ảnh chụp màn hình ở trên, là một giao diện trực quan cho tất cả sức mạnh của SlamData (cũng có REPL, dành cho những người thích giao diện dòng lệnh).

Cây hệ thống tệp hiển thị cho bạn tất cả các cơ sở dữ liệu được gắn kết, cũng như các bộ sưu tập bên trong các cơ sở dữ liệu này. Đó là lời nhắc trực quan về tất cả dữ liệu bạn có thể truy vấn, mặc dù trong các phiên bản sau, bạn sẽ có thể làm được nhiều việc hơn với hệ thống tệp.

Giao diện trình soạn thảo cho phép bạn tạo sổ ghi chép, là tập hợp văn bản (Markdown), truy vấn (SQL) và trực quan hóa (biểu đồ). Sổ ghi chép giống như một báo cáo, ngoại trừ hầu hết các báo cáo, sổ ghi chép có thể tương tác và có thể làm mới từ dữ liệu trực tiếp.

Viết truy vấn

Đã đến lúc viết một số truy vấn!

Trong các ví dụ này, tôi giả sử bạn đã tải Tập dữ liệu mã Zip vào cơ sở dữ liệu MongoDB của mình, bạn có thể tải xuống tập này từ trang MongoDB.

Tập dữ liệu này có thông tin cơ bản về mã zip, chẳng hạn như vị trí của chúng (thành phố, tiểu bang, địa lý) và dân số của chúng.

Hãy kéo lại 5 mục zip đầu tiên:

CHỌN * TỪ HẠN MỨC 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 ”}

Những thành phố có 5 mã zip hàng đầu đông dân nhất là gì? Miếng bánh:

CHỌN thành phố, bật TỪ KHÓA ĐƠN ĐẶT HÀNG BẰNG HẠN MÔ TẢ pop 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}

Phương ngữ SQL của SlamData (được gọi là SlamSQL) có hỗ trợ đầy đủ cho các tài liệu và mảng lồng nhau và bạn truy cập chúng bằng cách sử dụng ký hiệu Javascript thông thường (ví dụ:SELECT foo.bar.baz).

Đôi khi, bạn muốn làm phẳng một mảng để có thể tìm hiểu nội dung của mảng đó. Trong tập dữ liệu nén, có một trường mảng loc chứa vị trí địa lý. Để làm phẳng mảng này, chỉ cần sử dụng toán tử dấu sao (‘*’) làm chỉ số mảng:

CHỌN địa điểm [*] TỪ KHOÁ LIMIT 1

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

Cuối cùng, hãy sử dụng toán tử GROUP BY của SQL để tổng hợp dân số của tất cả các mã zip cho mỗi thành phố, sau đó trích xuất 5 thành phố đông dân nhất hàng đầu:

CHỌN thành phố, SUM (pop) NHƯ pop TỪ zip NHÓM THEO thành phố ĐẶT HÀNG THEO pop DESC GIỚI HẠN 5

Khá tuyệt phải không?

Hầu hết các hàm MongoDB hiện được hỗ trợ trong bản beta, mặc dù chúng đi theo tên SQL tiêu chuẩn của chúng (hoặc theo tên PostgreSQL của chúng, tùy từng trường hợp). Chúng bao gồm những điều sau:

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

Giới hạn Beta

Bản beta được gọi là “beta” vì một lý do:nó không triển khai tất cả SlamSQL và có thể có một vài lỗi trong các phần của SlamSQL mà nó triển khai.

Đặc biệt, bạn cần lưu ý những hạn chế sau:

  • Mặc dù GROUP BY được hỗ trợ nhưng mệnh đề HAVING vẫn chưa được triển khai.
  • Tất cả các chức năng không được hỗ trợ bởi Đường ống tổng hợp (ví dụ:độ dài chuỗi) đều chưa được hỗ trợ.
  • Việc chọn các phần tử mảng riêng lẻ chưa được hỗ trợ (ví dụ:SELECT loc [0] FROM zips) do một sự cố đã biết trong MongoDB.
  • DISTINCT và các hoạt động cấp thiết lập khác như UNION, UNION ALL, chưa được hỗ trợ.
  • JOIN chưa được hỗ trợ trong phiên bản phát hành chính thức (mặc dù chúng tôi có một chi nhánh trên Github hỗ trợ chúng, dành cho những ai thích tham gia cạnh!).
  • Có nhiều trường hợp cạnh khác nhau chưa được triển khai.

Cách SlamData xếp chồng lên nhau

Hiện tại, không có nhiều công cụ trên thị trường để thực hiện phân tích trên MongoDB.

Trong thế giới nguồn mở:

  • Có trình điều khiển MongoDB (có sẵn bằng Python, Java, v.v.), nhưng những thư viện này được thiết kế cho các nhà phát triển, không phải nhà phân tích hoặc nhà khoa học dữ liệu, và bạn cần viết mã để sử dụng chúng.
  • PostgreSQL có một trình bao bọc dữ liệu nước ngoài mã nguồn mở cho MongoDB do CitrusData đóng góp. Hiện tại, nó chỉ có thể đẩy các bộ lọc đơn giản vào MongoDB. Tất cả các hoạt động khác đều yêu cầu truyền dữ liệu trở lại từ MongoDB sang PostgreSQL.
  • MoSQL là một công cụ mã nguồn mở giúp đơn giản hóa ETL từ MongoDB thành PostgreSQL. Bạn cần xác định rõ ràng các lược đồ, làm phẳng dữ liệu và tránh các mảng, cũng như duy trì cơ sở hạ tầng riêng biệt để phân tích và báo cáo.

Trong lĩnh vực thương mại:

  • AquaFold’s Data Studio có ứng dụng khách MongoDB. Không rõ chính xác những gì nó đẩy xuống trình điều khiển, mặc dù nó có vẻ là một số biểu thức, bộ lọc và có thể là nhóm. Tuy nhiên, đối với một số hoạt động, dữ liệu phải được truyền trực tiếp trở lại máy khách, điều này không thực tế đối với nhiều ứng dụng.
  • JSONStudio có giao diện cho phép bạn tạo các truy vấn đường ống "trực quan" cho khung tổng hợp MongoDB, nhưng nó phải chịu tất cả các hạn chế giống như tập hợp và không được hưởng lợi từ việc chuẩn hóa và khai báo của SQL.
  • Simba Technologies có Trình điều khiển MongoDB ODBC. Nó có thể đẩy một số bộ lọc và tổng hợp xuống MongoDB, nhưng mọi thứ khác phải được phát trực tiếp trở lại trình điều khiển để xử lý thêm.
  • Phần mềm Tiến bộ có dòng sản phẩm kết nối dữ liệu được gọi là DataDirect, với trình kết nối MongoDB. Không rõ những trình điều khiển này đẩy xuống MongoDB bao nhiêu, nhưng chúng có thể rất giống với trình điều khiển từ Simba và chúng yêu cầu bạn xây dựng các lược đồ.
  • UnityJDBC có trình điều khiển JDBC cho MongoDB, nhưng nó dựa vào tính năng phát trực tuyến để thực hiện hầu hết công việc (ngoại trừ lọc thô và rất đơn giản).

SlamData tích hợp rất tốt so với các dịch vụ mã nguồn mở và thương mại:

  1. SlamData là nguồn mở 100%, không cần mua hay cấp phép.
  2. SlamData đẩy 100% mọi truy vấn xuống MongoDB mà không truyền tải bất kỳ thứ gì trở lại máy khách. Đã từng.
  3. SlamData không yêu cầu định nghĩa giản đồ, không ánh xạ lược đồ và không có ETL nào. Nó chỉ hoạt động với dữ liệu vì nó đã tồn tại trong MongoDB.
  4. SlamData cung cấp cho các tài liệu và mảng được lồng vào trạng thái hạng nhất. Thật dễ dàng để tìm hiểu bất kỳ cấu trúc nào bằng cách sử dụng phần mở rộng rõ ràng, đơn giản và rõ ràng của SQL (ví dụ:foo.bar.baz [2] .fuz).
  5. SlamData có giao diện người dùng nhanh nhưng nhẹ cho phép bạn tạo các báo cáo tương tác, hoàn chỉnh với các biểu đồ. Thật dễ dàng giao giao diện người dùng cho “người đó” trong nhóm hoặc tổ chức của bạn, giúp bạn thoải mái làm những việc bạn được trả tiền để làm thay vì viết mã để tạo báo cáo.

Lộ trình

Vào đầu tháng 10, chúng tôi dự định phát hành phiên bản sản xuất của SlamData.

Trong bản phát hành này, chúng tôi sẽ giải quyết nhiều hạn chế của bản beta, cải thiện cách chúng tôi có thể biên dịch SQL thành MongoDB và làm cho giao diện người dùng dễ sử dụng hơn và mạnh mẽ hơn.

Là một dự án mã nguồn mở, thành công của chúng tôi đến từ việc áp dụng. Nếu bạn muốn thấy SlamData tiếp tục phát triển thành công cụ mã nguồn mở tốt nhất để phân tích và báo cáo NoSQL, thì hãy tải xuống SlamData, fork hoặc gắn dấu sao cho các kho và nhận xét về bất kỳ lỗi nào bạn tìm thấy hoặc các tính năng bạn muốn thấy được thêm vào.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bắt đầu với quản lý người dùng MongoDB

  2. Sử dụng nhiều cơ sở dữ liệu Mongodb với Meteor.js

  3. Cách bật tính năng ghi nhật ký cho Mongoose và trình điều khiển MongoDB Node.JS

  4. Viết nhật ký MongoDB có đảm bảo độ bền không?

  5. Bắt đầu với Python và MongoDB