Có nhất thiết phải học SQL trước MongoDB không?

Tôi cũng đã giới thiệu bạn với Ron. Hãy dành một chút thời gian và trở lại với Ron. Ron là khá thiết lập theo cách của mình. Ví dụ, anh ấy thích máy đánh chữ của mình. Không quan trọng máy tính mạnh hơn máy đánh chữ hàng triệu lần. Cho đến khi ai đó thuyết phục anh ấy ngược lại, anh ấy vẫn gắn bó với chiếc máy đánh chữ của mình

Có nhất thiết phải học SQL trước MongoDB không?

Có thể bạn không có tình yêu với máy đánh chữ. Nhưng có lẽ bạn yêu thích cơ sở dữ liệu SQL. Bạn đã sử dụng chúng trong nhiều năm, bạn đã học cách làm cho chúng hoạt động đủ tốt với bạn và bạn biết rằng việc học MongoDB sẽ yêu cầu bạn thay đổi suy nghĩ của mình. Nó có thực sự đáng để nỗ lực không?

Trong bài đăng này, chúng tôi sẽ xem xét bốn lý do hàng đầu tại sao bạn nên sử dụng MongoDB

Bài viết này dựa trên bài thuyết trình của tôi tại MongoDB World và MongoDB. địa phương Houston có tựa đề "Từ SQL đến NoSQL. Thay đổi suy nghĩ của bạn. "

Nếu bạn thích video hơn bài báo, hãy xem bản ghi âm. Slide có sẵn ở đây

Bạn có thể mở rộng quy mô rẻ hơn với MongoDB. Tại sao?

Hãy bắt đầu bằng cách nói về việc mở rộng cơ sở dữ liệu SQL. Thông thường, cơ sở dữ liệu SQL mở rộng theo chiều dọc - khi cơ sở dữ liệu trở nên quá lớn đối với máy chủ của nó, nó sẽ được di chuyển sang máy chủ lớn hơn

Có nhất thiết phải học SQL trước MongoDB không?
Chia tỷ lệ theo chiều dọc bằng cách di chuyển sang các máy chủ lớn hơn

Một vài vấn đề chính nảy sinh với tỷ lệ dọc

  • Các máy chủ lớn có xu hướng đắt hơn hai máy chủ nhỏ hơn có cùng tổng dung lượng

  • Máy chủ lớn có thể không khả dụng do hạn chế về chi phí, hạn chế của nhà cung cấp đám mây hoặc hạn chế về công nghệ (máy chủ có kích thước bạn cần có thể không tồn tại)

  • Di chuyển sang một máy chủ lớn hơn có thể yêu cầu thời gian ngừng hoạt động của ứng dụng

Khi bạn sử dụng MongoDB, bạn có thể linh hoạt mở rộng quy mô theo chiều ngang thông qua sharding. Sharding là một phương pháp phân phối dữ liệu trên nhiều máy chủ. Khi cơ sở dữ liệu của bạn vượt quá khả năng của máy chủ hiện tại, bạn có thể bắt đầu phân mảnh và chia nó thành hai máy chủ. Khi cơ sở dữ liệu của bạn tiếp tục phát triển, bạn có thể tiếp tục thêm nhiều máy chủ hơn. Ưu điểm là những máy chủ mới này không cần phải là máy lớn, đắt tiền - chúng có thể rẻ hơn, phần cứng hàng hóa. Ngoài ra, không cần thời gian chết

Có nhất thiết phải học SQL trước MongoDB không?
Mở rộng quy mô theo chiều ngang bằng cách thêm nhiều máy chủ hàng hóa

Các truy vấn của bạn thường sẽ nhanh hơn với MongoDB. Hãy kiểm tra tại sao

Ngay cả trong ví dụ đơn giản của chúng tôi trong bài đăng trước khi chúng tôi lập mô hình dữ liệu của Leslie bằng SQL, chúng tôi đã thấy rằng thông tin của cô ấy được trải rộng trên ba bảng. Bất cứ khi nào chúng tôi muốn truy vấn thông tin của Leslie, chúng tôi sẽ cần nối ba bảng lại với nhau

Trong ba bảng nhỏ này, việc tham gia sẽ rất nhanh. Tuy nhiên, khi các bảng phát triển và các truy vấn của chúng ta trở nên phức tạp hơn, việc nối các bảng lại với nhau trở nên rất tốn kém

Có nhất thiết phải học SQL trước MongoDB không?

Nhớ lại quy tắc ngón tay cái của chúng tôi khi lập mô hình dữ liệu trong MongoDB. dữ liệu được truy cập cùng nhau nên được lưu trữ cùng nhau. Khi bạn tuân theo quy tắc ngón tay cái này, hầu hết các truy vấn sẽ không yêu cầu bạn nối bất kỳ dữ liệu nào với nhau

Tiếp tục với ví dụ trước của chúng tôi, nếu chúng tôi muốn truy xuất thông tin của Leslie từ MongoDB, chúng tôi chỉ cần truy vấn một tài liệu trong bộ sưu tập Users. Do đó, truy vấn của chúng tôi sẽ rất nhanh

Khi các tài liệu và bộ sưu tập của chúng tôi ngày càng lớn hơn, chúng tôi không phải lo lắng về việc các truy vấn của mình bị chậm lại miễn là chúng tôi đang sử dụng các chỉ mục và tiếp tục tuân theo quy tắc ngón tay cái của mình. dữ liệu được truy cập cùng nhau nên được lưu trữ cùng nhau

Có nhất thiết phải học SQL trước MongoDB không?

Yêu cầu thay đổi. Đôi khi các thay đổi rất đơn giản và chỉ cần một vài chỉnh sửa đối với giao diện người dùng. Nhưng đôi khi các thay đổi đi xuống cơ sở dữ liệu

Trong bài đăng trước của loạt bài này, chúng tôi đã phát hiện ra—sau khi triển khai ứng dụng của mình—rằng chúng tôi cần lưu trữ thông tin về trường của Lauren. Hãy xem xét ví dụ này kỹ hơn một chút

Để thêm một cột school mới vào cơ sở dữ liệu SQL của chúng tôi, chúng tôi sẽ phải thay đổi bảng Users. Việc thực thi lệnh Alter Table có thể mất vài giờ tùy thuộc vào lượng dữ liệu trong bảng. Hiệu suất của ứng dụng của chúng tôi có thể bị giảm trong khi bảng đang bị thay đổi và chúng tôi có thể cần lên lịch thời gian ngừng hoạt động cho ứng dụng của mình

Có nhất thiết phải học SQL trước MongoDB không?

Bây giờ hãy xem làm thế nào chúng ta có thể làm điều gì đó tương tự trong MongoDB. Khi các yêu cầu của chúng tôi thay đổi và chúng tôi cần bắt đầu lưu trữ tên trường của người dùng trong tài liệu User, chúng tôi chỉ cần bắt đầu làm như vậy. Chúng tôi có thể chọn xem và khi nào cập nhật các tài liệu hiện có trong bộ sưu tập

Nếu chúng tôi đã triển khai xác thực lược đồ, chúng tôi sẽ có tùy chọn áp dụng xác thực cho tất cả các phần chèn và cập nhật hoặc chỉ áp dụng các phần chèn và cập nhật cho các tài liệu đã đáp ứng các yêu cầu của lược đồ. Chúng tôi cũng sẽ có lựa chọn đưa ra lỗi hoặc cảnh báo nếu quy tắc xác thực bị vi phạm

Với MongoDB, bạn có thể dễ dàng thay đổi hình dạng dữ liệu của mình khi ứng dụng của bạn phát triển

Có nhất thiết phải học SQL trước MongoDB không?

Thành thật mà nói với bạn, lợi thế này là một trong những điều ngạc nhiên lớn nhất đối với tôi. Tôi hình dung rằng việc bạn sử dụng cơ sở dữ liệu phụ trợ nào không quan trọng—mã tương tác với nó về cơ bản sẽ giống nhau. tôi đã sai

Có nhất thiết phải học SQL trước MongoDB không?
MFW Tôi nhận ra việc viết mã với MongoDB dễ dàng hơn nhiều

Tài liệu MongoDB ánh xạ tới cấu trúc dữ liệu trong hầu hết các ngôn ngữ lập trình phổ biến. Điều này nghe có vẻ đơn giản, nhưng nó tạo ra sự khác biệt lớn khi bạn viết mã

Một người bạn khuyến khích tôi thử nghiệm điều này, vì vậy tôi đã làm. Tôi đã triển khai mã để truy xuất và cập nhật thông tin hồ sơ người dùng. Mã của tôi có một số đơn giản hóa trong đó để cho phép tôi tập trung vào các tương tác với cơ sở dữ liệu hơn là giao diện người dùng. Tôi cũng giới hạn thông tin hồ sơ người dùng chỉ với thông tin liên hệ và sở thích

Dưới đây là so sánh việc triển khai của tôi bằng MySQL và MongoDB

Tôi đã viết mã bằng Python, nhưng đừng lo nếu bạn không quen với Python, tôi sẽ hướng dẫn bạn từng bước. Các khái niệm sẽ được áp dụng bất kể ngôn ngữ lập trình bạn chọn là gì

Hãy bắt đầu với những thứ hàng đầu điển hình. Chúng tôi sẽ nhập những gì chúng tôi cần, kết nối với cơ sở dữ liệu và khai báo các biến của chúng tôi. Tôi sẽ đơn giản hóa mọi thứ bằng cách mã hóa cứng ID người dùng của người dùng có hồ sơ mà chúng tôi sẽ truy xuất thay vì kéo nó một cách linh hoạt từ mã giao diện người dùng

Chúng tôi sẽ chuyển tùy chọn dictionary=True khi chúng tôi tạo con trỏ để mỗi hàng sẽ được trả về dưới dạng từ điển

Cho đến nay, mã gần như giống nhau

Lấy thông tin hồ sơ của người dùng

Bây giờ chúng tôi đã sẵn sàng kết nối cơ sở dữ liệu, hãy sử dụng chúng để truy xuất thông tin hồ sơ người dùng của chúng tôi. Chúng tôi sẽ lưu trữ thông tin hồ sơ trong Từ điển Python. Từ điển là một cấu trúc dữ liệu phổ biến trong Python và cung cấp một cách dễ dàng để làm việc với dữ liệu của bạn

Hãy bắt đầu bằng cách triển khai mã cho MySQL

Vì thông tin hồ sơ người dùng trải rộng trên bảng Users và bảng Hobbies, nên chúng tôi sẽ cần kết hợp chúng trong truy vấn của mình. Chúng tôi có thể sử dụng các báo cáo đã chuẩn bị để đảm bảo dữ liệu của chúng tôi được an toàn

Khi chúng tôi thực hiện truy vấn, kết quả được trả về cho mọi kết hợp người dùng/sở thích. Khi chúng tôi gọi fetchone(), chúng tôi nhận được một từ điển như sau

Bởi vì chúng tôi đã tham gia các bảng UsersHobbies, chúng tôi có kết quả cho từng sở thích mà người dùng này có. Để truy xuất tất cả các sở thích, chúng ta cần lặp lại con trỏ. Chúng tôi sẽ nối từng sở thích vào một mảng school0 mới và sau đó thêm mảng school0 vào từ điển school2 của chúng tôi

Bây giờ, hãy triển khai chức năng tương tự cho MongoDB

Vì chúng tôi đã lưu trữ tất cả thông tin hồ sơ người dùng trong tài liệu User nên chúng tôi không cần thực hiện bất kỳ liên kết nào. Chúng tôi chỉ có thể truy xuất một tài liệu trong bộ sưu tập của mình

Đây là nơi có lợi thế lớn mà các tài liệu MongoDB ánh xạ tới các cấu trúc dữ liệu trong hầu hết các ngôn ngữ lập trình phổ biến. Tôi không phải thực hiện bất kỳ công việc nào để đưa dữ liệu của mình vào Từ điển Python dễ làm việc. MongoDB tự động cung cấp cho tôi tất cả các kết quả trong Từ điển Python

Và thế là xong—chúng ta đã hoàn thành. Chúng tôi mất 12 dòng cho MySQL, chúng tôi có thể triển khai trong 1 dòng cho MongoDB

Từ điển school2 của chúng tôi hiện khá giống nhau ở cả hai đoạn mã

Bây giờ chúng tôi đã truy xuất thông tin hồ sơ của người dùng, chúng tôi có thể gửi thông tin đó lên ngăn xếp tới mã giao diện người dùng phía trước

Khi Leslie xem thông tin hồ sơ của cô ấy trong ứng dụng của chúng tôi, cô ấy có thể phát hiện ra mình cần cập nhật thông tin hồ sơ của mình. Mã giao diện người dùng sẽ gửi thông tin cập nhật đó trong từ điển Python tới các tệp Python mà chúng tôi đã viết

Để mô phỏng việc Leslie cập nhật thông tin hồ sơ của cô ấy, chúng ta sẽ tự cập nhật từ điển Python cho cả MySQL và MongoDB theo cách thủ công

Bây giờ, từ điển school2 của chúng ta đã được cập nhật, hãy đẩy thông tin đã cập nhật vào cơ sở dữ liệu của chúng ta

Hãy bắt đầu với MySQL. Trước tiên, chúng ta cần cập nhật thông tin được lưu trữ trong bảng Users

Thứ hai, chúng ta cần cập nhật sở thích của mình. Để đơn giản, chúng tôi sẽ xóa mọi sở thích hiện có trong bảng Hobbies cho người dùng này và sau đó chúng tôi sẽ chèn các sở thích mới vào bảng Hobbies

Bây giờ hãy cập nhật thông tin hồ sơ người dùng trong MongoDB. Vì thông tin hồ sơ của người dùng được lưu trữ trong một tài liệu nên chúng tôi chỉ phải thực hiện một lần cập nhật duy nhất. Một lần nữa, chúng ta sẽ được hưởng lợi từ việc ánh xạ các tài liệu MongoDB tới các cấu trúc dữ liệu trong hầu hết các ngôn ngữ lập trình phổ biến. Chúng tôi có thể gửi từ điển school2 Python của mình khi chúng tôi gọi Users0, điều này giúp đơn giản hóa đáng kể mã của chúng tôi

Chúng tôi mất 15 dòng cho MySQL, chúng tôi có thể triển khai trong 1 dòng cho MongoDB

Tóm tắt lập trình nhanh hơn

Trong ví dụ này, chúng tôi đã viết 27 dòng mã để tương tác với dữ liệu của mình trong MySQL và 2 dòng mã để tương tác với dữ liệu của chúng tôi trong MongoDB. Mặc dù ít dòng mã hơn không phải lúc nào cũng cho thấy mã tốt hơn, nhưng trong trường hợp này, chúng ta có thể đồng ý rằng ít dòng mã hơn sẽ dẫn đến việc bảo trì dễ dàng hơn và ít lỗi hơn

Các ví dụ trên tương đối đơn giản với các truy vấn nhỏ. Hãy tưởng tượng sự khác biệt sẽ lớn hơn bao nhiêu đối với các truy vấn lớn hơn, phức tạp hơn

Các tài liệu MongoDB ánh xạ tới các cấu trúc dữ liệu trong hầu hết các ngôn ngữ lập trình phổ biến có thể là một lợi thế rất lớn về thời gian để viết, gỡ lỗi và bảo trì mã

Đoạn mã trên được viết bằng Python và tận dụng Trình điều khiển Python MongoDB. Để có danh sách đầy đủ tất cả các ngôn ngữ lập trình có trình điều khiển MongoDB, hãy truy cập Hướng dẫn sử dụng MongoDB

Nếu bạn muốn lấy một bản sao mã trong các ví dụ trên, hãy truy cập repo GitHub của tôi

Trong bài đăng này, chúng tôi đã thảo luận về bốn lý do hàng đầu tại sao bạn nên sử dụng MongoDB

Hãy chú ý đến bài đăng cuối cùng trong loạt bài này, nơi tôi sẽ thảo luận về ba điều hàng đầu bạn cần biết khi chuyển từ SQL sang MongoDB

Tôi có thể học MongoDB mà không cần học SQL không?

MongoDB là một cơ sở dữ liệu NoSQL (không quan hệ). Có một số loại cơ sở dữ liệu NoSQL và MongoDB là cơ sở dữ liệu NoSQL dựa trên tài liệu là nguồn mở. Bài học về MongoDB này dành cho người mới bắt đầu, vì vậy ngay cả khi bạn chưa có hiểu biết trước về cơ sở dữ liệu, bạn vẫn có thể nắm bắt được .

SQL có cần thiết cho MongoDB không?

MySQL, giống như nhiều cơ sở dữ liệu quan hệ, sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) để truy cập. MongoDB sử dụng Ngôn ngữ truy vấn MongoDB (MQL), được thiết kế để các nhà phát triển dễ dàng sử dụng . Tài liệu so sánh cú pháp MQL và SQL cho các hoạt động cơ sở dữ liệu phổ biến.

Tôi nên học MySQL hay MongoDB trước?

MySQL là lựa chọn tuyệt vời nếu bạn có dữ liệu có cấu trúc và cần một cơ sở dữ liệu quan hệ truyền thống . MongoDB rất phù hợp để phân tích thời gian thực, quản lý nội dung, Internet vạn vật, di động và các loại ứng dụng khác.

Tôi nên học gì trước MongoDB?

Điều kiện tiên quyết. Trước khi tiếp tục với hướng dẫn này, bạn nên có hiểu biết cơ bản về cơ sở dữ liệu, trình soạn thảo văn bản và thực thi chương trình , v.v. Bởi vì chúng ta sẽ phát triển cơ sở dữ liệu hiệu suất cao, nên sẽ rất tốt nếu bạn hiểu về các khái niệm cơ bản của Cơ sở dữ liệu (RDBMS).