Định nghĩa MongoDB, NoSQL là gì?

Định nghĩa MongoDB, NoSQL là gì?

Trong bài viết này, tôi cố gắng đưa ra những thông tin cần thiết về NoSQL. NoSQL là gì? NoSQL để làm gì? Tại sao phải dùng NoSQL?...và giới thiệu về MongoDB.

Tôi không đi sâu vào những vấn đề như: NoSQL ra đời năm bao nhiêu, ai là cha đẻ của NoSQL hay quá trình phát triển của nó. Bạn có thể tìm kiếm các tài liệu liên quan đến NoSQL rất nhiều từ trên mạng. Vì vậy, tôi chỉ tập trung vào những điều cốt lõi để tạo bước đẩy cho chúng ta thao tác với NoSQL và MongoDBkhi làm việc với Java. (Vì đây là blog về Java).

Do đó, nếu bạn chưa biết tới NoSQL hay lần đầu làm việc với MongoDB thì trước tiên bạn nên tìm kiếm và đọc những tài liệu liên quan tới nó.

1. NoSQL là gì?

NoSQL là 1 dạng CSDL mã nguồn mở không sử dụng T-SQL để truy vấn thông tin. NoSQL viết tắt bởi: None-Relational SQL, hay có nơi thường gọi là Not-Only SQL.

NoSQL được phát triển trên Javascript Framework với kiểu dữ liệu là JSON và dạng dữ liệu theo kiểu key và value (1 đặc trưng về dữ liệu trong JSON). NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu xót cũng như hạn chế của mô hình dữ liệu quan hệ RDBMS về tốc độ, tính năng, khả năng mở rộng, memory cache,...

Chắc hẳn, bạn đã sử dụng 1 dạng CSDL quan hệ nào đó trước khi đọc bài viết này của tôi, có thể là: SQL Server, MySQL. Và tất nhiên không ít lần bạn vất vả trong việc chỉnh sửa các bảng dữ liệu khi liên quan tới khóa chính và khóa ngoại, hay 1 loạt các rắc rối khác trong quá trình làm việc. Bởi đó là CSDL quan hệ.

Với NoSQL bạn có thể mở rộng dữ liệu mà không lo tới những việc như tạo khóa ngoại, khóa chính, kiểm tra ràng buộc, .v.v...Vì NoSQL không hạn chế việc mở rộng dữ liệu nên tồn tại nhiều nhược điểm như: sự phục thuộc của từng bản ghi, tính nhất quán, toàn vẹn dữ liệu,....nhưng chúng ta có thể chấp nhận những nhược điểm đó để khiến ứng dụng cải thiện hiệu suất cao hơn khi giải quyết những bài toán lớn về hệ thống thông tin, phân tán hay lưu trữ dữ liệu.

Với các CSDL quan hệ, chi phí triển khai cũng như phát triển các ứng dụng sử dụng CSDL quan hệ cũng rất tốn kém và điều quan trọng được bộc lộ rõ khi truy vấn 1 lượng bản ghi lớn trong thời gian rất dài. Tiếp đó những thiết bị cầm tay như smartphone thì không phù hợp để triển khai CSDL quan hệ vì dung lượng bộ nhớ thấp và khả năng xử lý kém hơn máy tính. Và còn rất nhiều lí do khác nữa để chúng ta quyết định việc áp dụng NoSQL vào trong dự án của mình. Bạn có thể tham khảo thêm những thông tin khác về NoSQL trên mạng.

NoSQL được sử dụng ở đâu? NoSQL được sử dụng ở rất nhiều công ty, tập đoàn lớn, ví dụ như FaceBook sử dụng Cassandra do FaceBook phát triển, Google phát triển và sử dụng BigTable,...., và công ty mình đang làm việc sử dụng MongoDB.

Tham khảo: http://en.wikipedia.org/wiki/NoSQL

2. MongoDB là gì?

MongoDB là 1 hệ thống CSDL mã nguồn mở được phát triển và hỗ trợ bởi 10gen, là CSDL NoSQL hàng đầu được hàng triệu người sử dụng.

Thay vì lưu trữ dữ liệu dưới dạng bảng và các tuple như trong các CSDL quan hệ thì nó lưu trữ dữ liệu dưới dạng JSON (trong MongoDB được gọi là dạng BSON vì nó lưu trữ dưới dạng binary từ 1 JSON document).

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

  • Document data model with dynamic schemas
  • Full, flexible index support and rich queries
  • Auto-Sharding for horizontal scalability
  • Built-in replication for high availability
  • Text search
  • Advanced security
  • Aggregation Framework and MapReduce
  • Large media storage with GridFS

Định nghĩa MongoDB, NoSQL  là gì?

3. Cài đặt và sử dụng MongoDB.

Để sử dụng MongoDB, bạn lên trang chủ của MongoDB và tải về bản mới nhất tại đây. Hiện tại khi viết bài này, tôi đang sử dụng Windows nên không đưa hướng dẫn cài trên Ubuntu hay các hệ điều hành Linux khác. Tuy nhiên, bạn có thể cài đặt MongoDB của 10gen thông qua câu lệnh apt-get trong Ubuntu/Linux.

Khi tải xong, bạn giải nén file zip vừa tải về vào 1 thư mục nào đó trên ổ cứng, có thể là ổ C, D,....nhưng theo tôi bạn nên đặt ở phân vùng nào đó khác phân vùng windows, và đặt trong thư mục gốc. Ví dụ: D:\mongodb.

Định nghĩa MongoDB, NoSQL  là gì?

Định nghĩa MongoDB, NoSQL  là gì?

Để làm việc thuận tiện, tôi sẽ đặt Environment Variables tới thư mục mongodb này để sử dụng các công cụ của mongo thông qua Command Prompt ở bất kỳ đâu mà không cần phải thay đổi thư mục hiện hành để làm việc rồi mới có thể run các công cụ đó. Tôi làm như sau:

Định nghĩa MongoDB, NoSQL  là gì?

Sau khi cấu hình xong, tôi bật Command Prompt lên và bắt đầu start mongo server, để thuận tiện hơn đỡ phải gõ lệnh mỗi khi làm việc bạn có thể tạo 1 file .bat lưu nội dung câu lệnh bật mongo server để lần sau chỉ việc click-n-run mà thôi.

    Bình thường, tôi sẽ phải làm như sau để start server mongodb. (Nếu chưa có thư mục nào để lưu trữ database, bạn hãy tạo 1 thư mục nào đó, tôi thường đặt là data)

    Định nghĩa MongoDB, NoSQL  là gì?

Ok, tôi đã bật xong mongodb server và nó đang lắng nghe, chờ đợi 1 yêu cầu nào đó kết nối tới cổng27017 (cổng mặc định của mongodb) và cổng 28017 (cổng dành cho web admin).

Cảm thấy công việc quá nhàm chán và lặp đi lặp lại khi mỗi lần làm việc phải gõ lệnh như này để start server. Tôi tạo 1 file có tên startmongo.bat rồi ném vào đâu đó để sau này cần chạy mongodb thì không cần phải gõ lệnh ở Command Prompt nữa (có thể ném vào ổ C:\Windows\, để chạy trực tiếp trên hộp thoại Run cũng được). Tôi làm như sau:  

Định nghĩa MongoDB, NoSQL  là gì?

Tiếp theo, tôi phải kết nối vào server để làm việc, tôi tiếp tục bật Command Prompt và gõ lệnh, để tiện lợi hơn bạn có thể áp dụng tương tự như bước trên là tạo ra 1 file .bat. Tôi làm như sau:

Gõ lệnh mongo tại cửa sổ Command Prompt.  

Định nghĩa MongoDB, NoSQL  là gì?

Như bạn thấy, bên phía server đã nhận được 1 kết nối, và khi kết nối thành công chúng ta được chuyển ngay tới 1 database mặc định là test.

Bây giờ tôi cần tạo 1 database và thêm vào 1 user để xác thực khi đăng nhập để quản lý quyền hạn trên database mà tôi tạo ra. Tôi bắt tay vào làm như sau:

Tôi gõ lệnh use myFirstDatabase và nhận được 1 thông báo từ phía server trả về là "đã chuyển sang database myFirstDatabase". Mặc dù hiện tại chưa hề có database nào tênmyFirstDatabase nhưng nhờ có cơ chế tự động cấp phát nên bạn sẽ được cấp phát trước và khi có bất kỳ hành động nào tác động lên việc tạo mới hay chỉnh sửa database đó Mongo sẽ bắt đầu tạo các file database thực sự cho ta. Ngay lúc này, bạn có thể mở thư mục data lên và hoàn toàn thấy rằng không hề có file nào tên myFirstDatabase.    

Định nghĩa MongoDB, NoSQL  là gì?

Tiếp tục, tôi tạo 1 tài khoản để xác thực, tôi làm như sau:    

Định nghĩa MongoDB, NoSQL  là gì?

Tôi đã có 1 tài khoản trong database này, tôi muốn được xác thực trước khi làm việc với database của tôi, tôi làm như sau:    

Định nghĩa MongoDB, NoSQL  là gì?

Server phản hồi về 1 - tức là đã thành công. Tôi đã có được database như mong muốn, tôi cần có nơi để lưu những thông tin, tôi nghĩ ngay tới việc tạo 1 bảng nhưng bảng chỉ là 1 khái niệm trong CSDL quan hệ, trong NoSQL không có khái niệm bảng, nó chỉ có khái niệm Collection (rất gần gũi với Collection Framework trong Java). Collection sẽ có nhiệm vụ lưu trữ và truy vấn thao tác trên các dữ liệu được lưu trong nó, dữ liệu ở đây được phân chia thành các Document (trong CSDL quan hệ được gọi là các tuples). Document là 1 đối tượng dạng JSON chứa các key và value và ta có thể dễ dàng truy xuất giá trị thông qua các key của đối tượng JSON đó.

Về cơ bản, tôi lập 1 bảng so sánh CSDL quan hệ với MongoDB như sau:

RDBMS MongoDB
Database (.mdf, .ldf) Database (.ns, .x với x = 1, 2, 3, 4, 5...)
Tables Collections
Tuples Documents
Columns, Rows Keys, values
Indexes Indexes
Views, Functions, Procedures, Contraints, Triggers Không có              
Primary Keys ObjectId
Foreign Keys Không có
Login User Authenticate

 Để tạo 1 Collection (tức 1 bảng trong CSDL quan hệ), tôi làm như sau:

  Định nghĩa MongoDB, NoSQL  là gì?

Tôi đã có được 1 Collection tên là Game dùng để lưu trữ thông tin các Game mà tôi có, việc tiếp theo cần làm là tôi insert vào Collection này những thông tin cần thiết. Tôi làm như sau:  

Định nghĩa MongoDB, NoSQL  là gì?

    Nền tảng của NoSQL là Javascript, nên các câu lệnh bạn thấy đều là cú pháp Javascript thôi, không có gì khó khăn cả.

    Sau khi insert 2 game vào trong Collection, tôi muốn hiển thị xem có thật là đã insert vào hay chưa, hoặc đại loại là tôi muốn liệt kê những game mà tôi có. Tôi làm như sau:  

Định nghĩa MongoDB, NoSQL  là gì?

    Bây giờ, sau 1 thời gian ứng dụng chạy, và bắt đầu sinh ra những thông tin khác cần thêm vào trong mỗi Document, tôi hoàn toàn có thể scale nó dễ dàng mà không hề gặp rắc rối nào khác. Giả sử, tôi thêm vào 1 Game mới có thêm thông tin nào đó chẳng hạn, tôi làm như sau:

  Định nghĩa MongoDB, NoSQL  là gì?

   Bạn thấy dữ liệu thêm vào, không hề ảnh hưởng gì với những dữ liệu cũ. Trong MongoDB, cái mà xác định duy nhất document là key _id. Vì vậy nếu bạn muốn kiểm tra nghiệp vụ chi tiết hơn như kiểm tra xem tên Game này đã có trong CSDL hay chưa, chưa có thì insert vào có rồi thì báo lỗi chẳng hạn. Việc đó bạn phải validate ở tầng Bussiness Logic vì bản thân MongoDB nó không hỗ trợ cơ chế đó như trong SQL Server hay MySQL.

   Tùy theo dự án, tùy vào trường hợp mà bạn phân tích cái gì thì sử dụng CSDL quan hệ, cái gì thì sử dụng MongoDB để làm sao sử dụng đúng mục đích đem lại hiệu quả cao. Ví dụ như quản lý thông tin người dùng blog, tác giả bài viết, v.v.. bạn dùng CSDL quan hệ để quản lý, ok không vấn đề gì, nhưng để tập hợp dữ liệu dùng để thống kê xem trong tháng này có bao nhiêu người dùng Android, iOS, Firefox, Chrome, Opera Mini để truy cập vào trang web của bạn chẳng hạn thì giải pháp tốt nhất bạn hãy log lại những request đó vào MongoDB vì tác giả nhiều lắm cũng chỉ là 1 mình bạn hoặc vài chục người, bài viết cũng khoảng tầm vài nghìn bài viết hoặc hơn cũng không sao vì CSDL quan hệ vẫn đủ tốt để xử lý. Nhưng request từ người dùng thì là 1 vấn đề, số lượng có thể rất lớn so với bài viết trên blog, vài triệu hoặc vài trăm triệu request (người dùng F5 liên tục thì còn chết nữa), lúc đó việc thống kê sẽ gặp rắc rối khi sử dụng CSDL quan hệ vì chạy khá ì ạch, cho nên giải pháp dùng MongoDB có lẽ tốt hơn hẳn. Đây cũng là 1 ví dụ thực tế điển hình mà bạn có thể va vấp trong quá trình làm việc, và trong cuộc đời coder của mình.

Định nghĩa MongoDB, NoSQL  là gì?

Bài viết này chỉ là 1 bản chỉ đường (road-map) cho bạn để bạn biết được NoSQL là gì?, MongoDB là gì?, ưu và nhược điểm của nó để giúp thúc đẩy sự tò mò, tìm hiểu công nghệ của bạn. Bài viết không đi sâu vào hướng dẫn chi tiết hay cover lại kiến thức có trên mạng hay trên các trang blog khác và đảm bảo kiến thức nhất quán và phù hợp với thực tế.

Đây là 1 bản chỉ đường cho bạn khi tiếp cận với NoSQL, nên học gì?, nên làm gì?, làm như nào? áp dụng ra sao? Việc bạn đi đúng hướng hay không là do bạn quyết định. Tôi sẽ luôn chỉ đường để bạn thành công!

Bạn thấy bài viết này như thế nào?: 
Average: 9.3 (3 votes)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Bảng giá khuyến mãi SEO chào mừng 30/4 và 1/5

Bảng giá khuyến mãi SEO chào mừng 30/4 và 1/5

Việc phát triển website, SEO từ khóa tìm kiếm khách hàng, đã dần thay thế cho những hoạt động marketing truyền thống, chỉ với một website và vài từ khóa về sản phẩm, dịch vụ của bạn được đứng Top trong Google thì bạn đã có cơ hội tiếp cận với hàng ngàn khách hàng mỗi ngày.

SPAM trong eCommerce

Cách xác nhận email của bạn không SPAM trong eCommerce

In the world of eCommerce having the ability to communicate with customers and potential customers is priceless.

Microsoft sẽ phải bỏ tên gọi Metro vì vi phạm bản quyền

Microsoft sẽ phải bỏ tên gọi Metro vì vi phạm bản quyền

Một báo cáo mới đây cho biết, Microsoft sẽ ngưng sử dụng tên gọi Metro vào ngay tuần tới do công ty gặp rắc rối về bản quyền tên gọi này với một nhà bán lẻ của Đức có tên Metro AG.

Công ty diệt chuột T&C

 

Diet con trung