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ó 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
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á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
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
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
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
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
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 Users
và Hobbies
, 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 school
0 mới và sau đó thêm mảng school
0 vào từ điển school
2 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 school
2 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 school
2 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 school
2 Python của mình khi chúng tôi gọi Users
0, đ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