Hãy thử tưởng tượng rằng bạn đang thành lập 1 hệ thống website thương mại điện tử (thu thập thông tin người dùng, ...), có liên quan tới nhiều đơn vị dữ liệu khác nhau. Nếu có 1 hệ quản trị cơ sở dữ liệu nào đó hoạt động nhanh hơn SQL Server nhiều lần, miễn phí, dễ giám sát và xử lý, toàn bộ hệ thống ứng dụng của bạn thì MongoDB chắc chắn sẽ là sự lựa chọn không thể tốt hơn.

Bài viết này sẽ tóm lược giới thiệu cơ bản về mongodb và cách truy suất mongodb trong java.

KHÁI NIỆM CƠ BẢN VỀ MONGODB?

MongoDB là một mã nguồn mở và là một tập tài liệu dùng cơ chế NoSQL để truy vấn, nó được viết bởi ngôn ngữ C++. Chính vì được viết bởi C++ nên nó có khả năng tính toán với tốc độ cao chứ không giống như các hệ quản trị CSDL hiện nay.

  • Mỗi một table (bảng dữ liệu) trong SQL sử dụng thì trong MongoDB gọi là collection (tập hợp)
  • Mỗi một record (bản ghi) trong MongoDB được gọi là document (tài liệu).

Một bản ghi của MongoDB được lưu trữ dưới dạng document (tài liệu), nó được ghi xuống với cấu trúc field (trường) và value (giá trị). Nó giống như là một đối tượng JSON có dạng như sau:

mot-ban-ghi-cua-mongodb-json-document

Cách MongoDB lưu trữ một bản ghi

Điều đó giúp bạn có thể dễ dàng ép kiểu sang array (mảng) để lập trình các ứng dụng một cách dễ dàng hơn. Nói một cách dễ hiểu thì mỗi một bản ghi của MongoDB là một mảng dữ liệu riêng biệt bao gồm các cặp key, value khác nhau do đó cách lưu trữ của MongoDB là phi cấu trúc dữ liệu.

 

MONGODB HOẠT ĐỘNG NHƯ THẾ NÀO?

Mô hình hoạt động của MongoDB

Mô hình hoạt động của MongoDB

  • MongoDB hoạt động dưới một tiến trình ngầm service luôn mở một cổng (Cổng mặc định là 27017) để lắng nghe các yêu cầu truy vấn, thao tác từ các ứng dụng gửi vào sau đó mới tiến hành xử lý.
  • Mỗi một bản ghi của MongoDB được tự động gắn thêm một field có tên “_id” thuộc kiểu dữ liệu ObjectId mà nó quy định để xác định được tính duy nhất của bản ghi này so với bản ghi khác, cũng như phục vụ các thao tác tìm kiếm và truy vấn thông tin về sau.
  • Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy vấn thông tin đạt hiệu suất cao nhất.
  • Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộ nhớ Ram, để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phải đọc từ ổ cứng.
  • Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứng dụng mặc định MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà sau 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng.

ƯU VÀ NHƯỢC ĐIỂM CỦA MONGODB LÀ GÌ?

a. Ưu điểm

  • Dữ liệu lưu trữ phi cấu trúc, không có tính ràng buộc, toàn vẹn nên tính sẵn sàng cao, hiệu suất lớn và dễ dàng mở rộng lưu trữ
  • Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ cứng nên tốc độ đọc và ghi cao

b. Nhược điểm

  • Không ràng buộc, toàn vẹn nên không ứng dụng được cho các mô hình giao dịch yêu cầu độ chính xác cao
  • Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng
  • Dữ liệu được caching, lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một bộ nhớ RAM lớn
  • Như đã giới thiệu ở trên, mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao.

TRUY SUẤT DỮ LIỆU MONGODB VỚI JAVA

Bạn cần có một cái nhìn trọng tâm vào cách sử lý Java với Database MongoDB để có cách tiếp cận tốt nhất.

Khi bạn làm việc với một cơ sở dữ liệu, câu hỏi của bạn luôn là làm thế nào tôi có thể truy vấn, insert, update và delete dữ liệu.

MongoDB không có khái niệm truy vấn Join giữa 2 Collection với nhau, mọi việc truy đều là truy vấn trên một Collection. Và như vậy bạn chẳng cần phải học làm thế nào để Join 2 Collection, mọi thứ chỉ còn là  viết điều kiện where cho một Collection. Cụ thể là:

  • Truy vấn ra dữ liệu thuộc điều kiện nào.
  • Update các Document thuộc vào điều kiện nào.
  • Delete các Document thuộc vào điều kiện nào.

Java cung cấp một class DBObject để mô tả một cấu trúc dữ liệu JSON, và nó mô tả điều kiện của câu truy vấn.

 

Tạo Project java kết nối mongodb

Tạo 1 ứng dụng java maven 

File/New/Other

 

Sau khi tạo xong cấu trúc thư mục có dạng như sau :

 

Tiếp theo ta phải khai báo thư viện ( Sử dụng maven )

Cấu hình file pom.xml

Down thư viện điều khiển mongo tại link :http://mvnrepository.com/artifact/org.mongodb/mongo-java-driver

 

Tạo 1 class MyConstants.java để chứa các tên kết nối.

 

Test connect với server mongodb

Kết quả chạy trên hàm main:

 

Thêm dữ liệu vào 1 Collection

MongoDB rất linh hoạt, nếu bạn muốn chèn một bản ghi (Document) vào một Collection. Nếu Collection này không tồn tại nó sẽ tự động được tạo ra, sau đó các bản ghi được chèn vào.

Trong ví dụ này chúng ta sẽ chèn 3-4 document vào Collection thanhdb. Trong MongoDB cột _id chính là khóa chính (Primary Key), trong trường hợp bạn chèn vào một tài  liệu (Document), mà không chỉ định rõ khóa chính, cột _id vẫn sẽ được tạo ra, với giá trị là một chuỗi ngẫu nhiên 36 ký tự.

 

Thêm mới 1 Collection

Khái niệm Collection trong MongoDB nó tương ứng với khái niệm Table (bảng) trong cơ sở dữ liệu quan hệ. Chúng ta xem một ví dụ lấy ra danh sách các Collection trong database:

 

Truy vấn đơn giản

Truy vấn dữ liệu từ Collection mà không có điều kiện

 

Truy vấn có điều kiện

 

Cập nhật dữ liệu với $set.

Nếu bạn muốn cập nhật 1 document tồn tại hoặc không tồn tại trong 1 Collection mà không phải thay thế toàn bộ document trong Collection đó thì phải phải thêm điều kiện cập nhật là $set.

 

Cập nhật dữ liệu với $inc.

Sử dụng $inc trong trường hợp bạn muốn tăng giá trị cho một cột nào đó. Chẳng hạn tìm các username tên Quân và update cột age lên 5555.

 

Hi vọng qua bài này các bạn sẽ có 1 cái nhìn bao quát đối với cơ sở dữ liệu phi quan hệ NoSql và hệ quản trị được đề cập trong đây là Mongodb. Cách thức khai thác dữ liệu từ Mongodb bằng Java.

Mã nguồn source code có thể download tại địa chỉ : http://www.mediafire.com/download/i8pdzw353dqlaqf/MongodbExample.7z


Leave a Comment

Fields with * are required.