Nên sử dụng Cơ sở dữ liệu Mongo trong những trường hợp nào?

Published by: 0

Cơ sở dữ liệu Mongo

Tôi là một hacker và tôi đang làm việc tại CloudBoost.io. Chúng tôi làm việc với rất nhiều cơ sở dữ liệu (database) NoSQL và SQL. MongoDB quả là một cơ sở dữ liệu tuyệt vời và bài viết này dành để nói về ở đâu và trong trường hợp nào thì bạn NÊN và KHÔNG NÊN sử dụng MongoDB và nơi nào thì MongoDB sẽ phù hợp nhất. Quan điểm của tôi có thể chưa đúng, mong nhận được thêm ý kiến phản hồi từ các bạn.

Các cơ sở dữ liệu dạng document như MongoDB rất tuyệt vời để lưu trữ JSON vào trong một ‘collection’. Bạn có thể lưu trữ bất kỳ JSON Document nào mà bạn thích và phân loại chúng vào trong bất kỳ collection nào bạn muốn. JSON được lưu vào trong MongoDB được gọi là Binary JSON hoặc BSON và chúng cũng giống như bất kỳ JSON nào đều là schema-less. Vì vậy không giống như các cơ sở dữ liệu SQL truyền thống, bạn có thể lưu trữ bất cứ thứ gì bạn thích trong bất kỳ collection nào mà bạn muốn. Vâng, chính cái điểm tự do đó kết hợp với khả năng mở rộng theo chiều ngang của MongoDB là điều khiến cho các nhà phát triển hào hứng sử dụng nó. Điều này nghe thật tuyệt! Oh, nhưng đợi đã…

Tại sao không sử dụng nó nếu nó là một cơ sở dữ liệu “tuyệt vời”

Cơ sở dữ liệu mà bạn dùng cho ứng dụng của mình phụ thuộc vào kiểu ứng dụng mà bạn đang xây dựng. Bạn không phải là người chọn cơ sở dữ liệu, mà ứng dụng của bạn mới quyết định việc đó. Sau đây tôi sẽ đưa ra một số ví dụ:

Nếu bạn đang xây dựng một ứng dụng chứa dữ liệu có khái niệm giống như “document” thì MongoDB là một sự lựa chọn tốt. Ví dụ, nếu bạn đang xây dựng một blog engine, trong đó mỗi tác giả có nhiều blog và mỗi blog có nhiều comment, và nếu bạn nghĩ blog engine của mình sẽ mở rộng để chứa được HÀNG TẤN blog thì vâng, MongoDB là một sự lựa chọn rất tốt.

MongoDB không có mối quan hệ giữa các document và collection (bạn có thể có một Database Reference, nhưng chúng cũng không đủ đáp ứng cho yêu cầu quan hệ này).

Hãy thử suy nghĩ về document như là một “document” thực thụ, bạn có những mẩu dữ liệu mà chúng không liên kết với bất kỳ dữ liệu nào khác và không có cách nào có thể làm một phép join dễ dàng như bạn thường làm trong SQL.

Vâng, nếu không có mối quan hệ nào và bạn không thể join các table – thì tại sao người ta lại lao đầu vào sử dụng nó? Bởi vì nó có ưu điểm là khả năng mở rộng với lượng dữ liệu cực lớn và có một độ trễ rất thấp trong việc đọc/ghi khi so sánh với SQL. Đối với những ứng dụng mà dữ liệu phần lớn và không có mối liên hệ đồng thời cần khả năng mở rộng thì MongoDB là một sự lựa chọn hoàn hảo. Hầu hết các lập trình viên cũng sử dụng MongoDB để lưu trữ dữ liệu quan hệ và thực hiện phép join thủ công trong code của họ, điều này có thể hoạt động tốt trong một số trường hợp nào đó chỉ có join một cấp (one level join) / và có ít mối liên quan giữa dữ liệu nhưng không phải trường hợp nào cũng sử dụng được.

Vậy tôi nên sử dụng cơ sở dữ liệu nào?

Có rất nhiều kiểu cơ sở dữ liệu cho bạn chọn, và mỗi cơ sở dữ liệu phù hợp cho một tập các yêu cầu xác định trong ứng dụng của mình. Một số loại cơ sở dữ liệu phổ biến hiện nay là:

Document Databases (ví dụ: MongoDB): Các cơ sở dữ liệu dạng document thường được sử dụng để lưu trữ các JSON document trong các collection và để truy vấn các trường liên quan. Bạn có thể sử dụng cơ sở dữ liệu này để xây dựng các ứng dụng không có quá nhiều mối quan hệ giữa các document. Một ví dụ tốt của dạng ứng dụng này là – Blog Engine / Nếu bạn muốn lưu trữ một danh mục sản phẩm.

Graph Databases (ví dụ: Neo4j): Các cơ sở dữ liệu dạng đồ thị (graph) thường được sử dụng để lưu trữ mối quan hệ giữa các thực thể, trong đó các node là các thực thể và cạnh nối là mối quan hệ giữa chúng. Ví dụ: nếu bạn đang xây dựng một mạng xã hội và nếu Người A follow Người B. Thì Người A và Người B có thể là các node và “follow” là cạnh nối giữa chúng. Đồ thị (graph) là cách tuyệt vời để làm công việc join giữa các node thậm chí trong trường hợp chiều sâu của liên kết lên đến 100 cấp.

Cache (ví dụ: Redis): Cache thường được sử dụng khi bạn cần truy cập cực nhanh đến dữ liệu của mình. Ví dụ, nếu bạn đang xây dựng một ứng dụng thương mại điện tử. Bạn có các danh mục sản phẩm phải load trên mỗi sự kiện page load. Thay vì việc cứ phải truy cập cơ sở dữ liệu cho mỗi hoạt động đọc đó (cho mỗi lần page load) thường tốn nhiều thời gian và làm quá tải server. Để giải quyết vấn đề này bạn có thể lưu trữ nó trong cache sẽ giúp cho công việc đọc/ghi có tốc độ cực nhanh. Cache giống như Redis sẽ là một bộ đệm cho cơ sở dữ liệu của bạn phục vụ cho những truy xuất dữ liệu thường xuyên. Bạn có thể lưu trữ dữ liệu trong cache và không phải truy xuất cơ sở dữ liệu trong toàn bộ quá trình xử lý của hệ thống.

Search Databases (ví dụ: ElasticSearch): Nếu bạn muốn thực hiện một full text search trên dữ liệu của mình (ví dụ: các bài viết trong một tờ báo điện tử) thì bạn cần một search database như ElasticSearch, nó có thể giúp bạn thực thi việc tìm kiếm trên một lượng dữ liệu lớn và mang lại cho bạn một kết quả tìm kiếm chính xác với nhiều lựa chọn tối ưu.

Row Store (ví dụ: Cassandra): Cassandra thường được sử dụng để lưu trữ dạng dữ liệu theo thời gian như các phân tích / logs/ dữ liệu với số lượng lớn được thu về từ các bộ cảm biến sensor. Nếu bạn có một dạng ứng dụng kiểu đó mà có số lượng dữ liệu cần ghi rất lớn và ít phải đọc và dữ liệu là không có mối quan hệ (non-relational) thì Cassandra là một cơ sở dữ liệu mà bạn nên quan tâm đặc biệt.

Sử dụng nhiều cơ sở dữ liệu cùng lúc có được không?

Đây là một lựa chọn tối ưu cho những hệ thống lớn và phức tạp. Ngày nay nếu bạn đang xây dựng một ứng dụng, thì bạn có thể cần phải sử dụng 2 hoặc nhiều cơ sở dữ liệu cùng một lúc. Ví dụ, nếu ứng dụng của bạn làm công việc search thì bạn có thể phải sử dụng ElasticSearch, cho việc lưu trữ dữ liệu không có quan hệ thì MongoDB là lựa chọn tốt nhất, và nếu bạn đang xây dựng một IoT (Internet of Things) có rất nhiều bộ cảm biến trả về hàng tấn dữ liệu thì tại sao lại không sử dụng Cassandra. Việc sử dụng nhiều cơ sở dữ liệu để xây dựng một ứng dụng được gọi là “Polyglot Persistence”, tôi đã viết một bài blog nói về ưu và nhược điểm của việc sử dụng nhiều cơ sở dữ liệu. Bạn hãy thử đọc bài viết đó và để lại bình luận nếu bạn cảm thấy thú vị nhé!

Về tác giả bài viết:

Nawaz Dhandala là một entrepreneur và một hacker. Anh là một full stack developer và có thể hoàn thành công việc – cực nhanh. Nawaz thích làm việc với những người có đam mê và có giấc mơ lớn và đủ hoài bão thay đổi để khiến cho thế giới này ngày càng tốt đẹp hơn. Bạn có thể liên hệ với anh qua blog cá nhân hoặc qua email hotcomputerworks[at]hotmail.com

Minh Quân

Nguồn – [http://techmaster.vn/posts/33431/co-so-du-lieu-mongodb]

Leave a Reply