Tổng quan kiến thức cơ bản về MongoDB

6 min read

Đây là một cross-platform, DB hướng documents với hiệu năng cao, có thể đáp ứng cho đa dạng các hệ thống và dễ dàng để scale. Tư tưởng của MongoDB là thông qua khái niệm collection và document. 

1. MongoDB là gì?

  • MongoDB là cơ sở dữ liệu NoSQL phổ biến nhất. Nó là cơ sở dữ liệu định hướng tài liệu mã nguồn mở, được cấu trúc một cách linh hoạt. Các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúc nhất định nào.
  • Cấu trúc tài liệu MongoDB đơn giản (dạng JSON):
    No alt text provided for this image
  • Một số thuật ngữ thường dùng trong Mongodb:
    • _id:
      • _id là một trường bắt buộc trong mọi document của MongoDB. _id được sử dụng để đại diện cho tính duy nhất của một document trong một collection. Trường _id hoạt động giống như khóa chính (primary key) của document.
      • _id là một số thập lục phân 12 byte đảm bảo tính duy nhất của mọi document. Bạn có thể cung cấp _id trong khi chèn document. Trong 12 byte này:
      • 4 byte đầu tiên đại diện cho thời điểm hiện tại (dựa trên hệ giây của Unix Epoch);
      • 3 byte tiếp theo cho id máy;
      • 2 byte tiếp theo cho process id của máy chủ MongoDB;
      • 3 byte cuối cùng là giá trị gia tăng đơn giản.
      • MongoDB sẽ tự động cung cấp một id duy nhất cho document của bạn.
    • Document:
      • Document là đơn vị lưu trữ dữ liệu cơ bản trong cơ sở dữ liệu MongoDB.
      • Document mang vai trò tương tự như row trong các hệ thống cơ sở dữ liệu quan hệ truyền thống.
      • Document là một cách để sắp xếp và lưu trữ dữ liệu dưới dạng một tập hợp các cặp field-value. Document trong MongoDB không cần phải có cùng một bộ field hoặc cấu trúc với các document khác trong cùng một collection.
      • Đồng thời, các field chung trong document của một collection có thể chứa các loại dữ liệu khác nhau.
    • Collection:
      • Collection là một tập hợp các document MongoDB. Collection tương tự như table trong hệ thống cơ sở dữ liệu quan hệ. Các collection có tính chất schema less, do đó các document trong cùng một collection có thể có các trường khác nhau.
      • Thông thường, một collection chứa các document có mục đích tương tự hoặc liên quan với nhau.
    • Database:
      • Trong MongoDB, database là một container vật lý chứa tập hợp các collection. Một database có thể chứa 0 collection hoặc nhiều collection.
      • Một phiên bản máy chủ MongoDB có thể lưu trữ nhiều database và không có giới hạn về số lượng database có thể được lưu trữ trên một phiên bản, nhưng giới hạn ở không gian bộ nhớ ảo có thể được phân bổ bởi hệ điều hành.

2. MongoDB so với Relationship (Relational Database Management System):

  • Ít Schema hơn: MongoDB là một cơ sở dữ liệu dựa trên Document, một Collection giữ các Document khác nhau. Số trường, nội dung và kích cỡ của Document này có thể khác với Document khác.
  • Các giao dịch phức tạp không được hỗ trợ vì các hoạt động tham gia phức tạp không khả dụng.
  • MongoDB nhanh hơn so với RDBMS do các kỹ thuật lưu trữ và lập chỉ mục (indexing) hiệu quả.
  • MongoDB dễ dàng để mở rộng.
  • Khả năng truy vấn sâu hơn. MongoDB hỗ trợ các truy vấn động trên các Document. Chúng sử dụng một ngôn ngữ truy vấn dựa trên Document mà mạnh mẽ như SQL.
  • Việc chuyển đổi/ánh xạ của các đối tượng đến các đối tượng cơ sở dữ liệu là không cần thiết.
  • Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệu nhanh hơn.

3. Các tính năng chính của MongoDB:

  • Document Oriented: MongoDB lưu trữ subject chính với số lượng documents tối thiểu chứ không phải bằng cách chia nó thành nhiều cấu trúc quan hệ như RDBMS
  • Indexing: Khi không có index, CSDL sẽ không truy vấn hiệu quả vì phải quét mọi tài liệu của tập hợp để chọn những tài liệu phù hợp. Vì vậy Indexing là điều bắt buộc và MongoDB sử dụng nó để xử lý khối lượng dữ liệu khổng lồ trong thời gian rất ngắn.
  • Scalability: MongoDB mở rộng quy mô theo chiều ngang bằng cách sử dụng sharding (phân vùng dữ liệu trên các máy chủ khác nhau). Dữ liệu được phân vùng thành các khối dữ liệu bằng “shard key” và các khối dữ liệu này được phân phối đều trên các phân đoạn nằm trên nhiều máy chủ vật lý. Ngoài ra, các máy mới có thể được thêm vào cơ sở dữ liệu đang chạy.
  • Replication and High Availability: MongoDB tăng tính khả dụng của dữ liệu với nhiều bản sao dữ liệu trên các máy chủ khác nhau. Bằng cách cung cấp bản dự phòng, nó bảo vệ cơ sở dữ liệu khỏi các lỗi phần cứng. Nếu một máy chủ gặp sự cố, dữ liệu có thể được truy xuất dễ dàng từ các máy chủ đang hoạt động khác cũng có dữ liệu tương tự được lưu trữ trên chúng.
  • Aggregation: Các hoạt động tổng hợp xử lý các bản ghi dữ liệu và trả về kết quả tính toán. Nó tương tự như mệnh đề GROUPBY trong SQL. Một vài biểu thức tổng hợp là tổng, trung bình, tối thiểu, tối đa, v.v

4. Các trường hợp cần dùng:

  • Big data: MongoDB có giải pháp tích hợp để phân vùng và phân mảnh cơ sở dữ liệu của bạn.
  • Unstable Schema: Thêm một cột mới trong RDBMS thì khá khó khăn trong khi MongoDB vì không có lược đồ nên thêm một trường mới sẽ rất dễ dàng mà không ảnh hưởng đến các tài liệu cũ.
  • Distributed data: Dữ liệu được lưu trữ sao chép trên các máy chủ khác nhau. Việc khôi phục dữ liệu sẽ nhanh chóng và an toàn ngay cả khi có lỗi phần cứng.

5. Hỗ trợ:

  • MongoDB hỗ trợ trình điều khiển chính thức cho tất cả các ngôn ngữ lập trình phổ biến hiện nay như: C, C ++, Rust, C #, Java, Node.js, Perl, PHP, Python, Ruby, Scala, Go và Erlang.

6. Một số phương thức cơ bản:

  • Create new collection: db.createCollection(name, options)
  • Find:
    • db.posts.find( {category: "News"} )
    • db.posts.findOne( {category: "News"} )
  • Update:
    • db.posts.updateOne( { title: “Post Title 1” }, { $set: { likes: 2 } } )
    • db.posts.updateMany({}, { $inc: { likes: 1 } })
  • Delete:
    • db.posts.deleteOne({ title: "Post Title 5" })
    • db.posts.deleteMany({ title: “Post Title 5” })
  • Aggregate:
    • db.posts.aggregate([stage1, stage2, …, stageN])
  • Validate:
    • db.createCollection("posts", { validator: { $jsonSchema: { bsonType: "object", required: [ "title", "body" ],

7. Tổng kết:

Trên đây là thông tin tổng quát về chương trình cơ sở dữ liệu Mongodb. Hy vọng  bạn sẽ có cái nhìn tổng quan hơn Mongodb là gì. Đồng thời có thể ứng dụng hiệu quả Mongodb vào trong các trường hợp cần thiết nhất. Bạn đọc đừng quên cài đặt Mongodb để chủ động sử dụng ngay khi có nhu cầu nhé!

EXTRA READING:

Best practices khi thiết kế MongoDB schema – NCC ANT

Phân trang tốt hơn không dùng Offset – NCC ANT

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *