Với hầu hết các thời kỳ web, hệ quản trị cơ sở dữ liệu quan hệ dựa trên SQL đã thống trị hầu hết các hệ quản trị cơ sở dữ liệu. Tuy nhiên, thời gian gần đây, một cách tiếp cận mới đã bắt đầu biết đến là NoSQL, tạo ra sự thay thế cho các hệ quản trị cơ sở dữ liệu quan hệ truyền thống.
NoSQL còn có nghĩa là Non – Relational – không ràng buộc. Tuy nhiên, thuật ngữ đó ít phổ biến hơn và ngày nay người ta thường dịch NoSQL thành Not only SQL – không chỉ SQL. NoSQ nói đến đến những cơ sở dữ liệu không dùng mô hình dữ liệu quan hệ để quản lý dữ liệu trong lĩnh vực phần mềm
Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụng làm tên gọi chung cho các cơ sở dữ liệu quan hệ nguồn mở nhỏ nhưng không sử dụng SQL cho truy vấn.
Vào năm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ NoSQL khi Johan Oskarsson của Last.fm muốn tổ chức một hội thảo về cơ sở dữ liệu nguồn mở phân tán. Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới: một thế hệ CSDL không ràng buộc, phân tán nguồn mở, khả năng mở rộng theo chiều ngang, có thể lưu trữ, xử lý từ một lượng rất nhỏ cho tới hàng petabytes dữ liệu trong hệ thống có độ chịu tải, chịu lỗi cao với những đòi hỏi về tài nguyên phần cứng thấp.
Một số đặc điểm nhận dạng cho thế hệ CSDL mới này bao gồm: schema-free, hỗ trợ mở rộng dễ dàng, API đơn giản, nhất quán cuối (eventual consistency), không giới hạn không gian dữ liệu,…
Sau đây là danh sách các CSDL NoSQL:
- Wide Column Store / Column Families: Hadoop/HBase – Apache, BigTable – Google, Cassandra – Facebook/Apache, Hypertable – Zvents Inc/Baidu, Cloudera, SciDB, Mnesia, Tablets,…
- Key-Value Store/Tuple store
- Key/value cache in RAM: memcached, Citrusleaf database, Velocity, Redis, Tuple space,…
- Key/value save on disk: Memcachedb, Berkeley DB, Tokyo Cabinet, Redis,…
- Eventually Consistent Key Value Store: Amazon Dynamo, Voldemort, Dynomite, KAI, Cassandra, Hibari, Project Voldemort,…
- Ordered key-value store: NMDB, Memcachedb, Berkeley DB,…
- Distributed systems: Apache River, MEMBASE, Azure Table Storage, Amazon Dynamo,…
- Document Store: Apache Jackrabbit, CouchDB, IBM Lotus Notes Storage Format (NSF), MongoDB, Terrastore, ThruDB, OrientDB, RavenDB,…
- Graph Database: Neo4J, Sones, AllegroGraph, Core Data, DEX, FlockDB, InfoGrid, OpenLink Virtuoso,…
Tuy cùng mang những đặc điểm chung của NoSQL nhưng mỗi CSDL NoSQL cũng có những đặc điểm riêng và vì thế thường được dùng cho những dự án khác nhau. Ví dụ:
- MongoDB và Redis là những lựa chọn tốt cho việc lưu trữ các dữ liệu thống kê ít được đọc mà lại được viết thường xuyên.
- Hadoop – CSDL dạng tự do, phân tán làm tốt công việc lưu trữ các dữ liệu lớn như các con số thống kê thời tiết hoặc công việc phân tích nghiệp vụ.
- Memcachedb – CSDL nhất thời chóng tàn, tuyệt vời trong lưu trữ các phiên làm việc web, các khóa và các con số thống kê ngắn hạn.
- Cassandra và Riak (các lưu trữ dư thừa, tự động tạo bó cluster) làm tốt trong các môi trường với các ứng dụng có tính sẵn sàng cao, khi thời gian sống tối đa là sống còn.
Để tìm hiểu sâu hơn về các CSDL hiện đại NoSQL, chúng ta đi nghiên cứu chi tiết CSDL đặc trưng là MongoDB.
Hệ quản trị cơ sở dữ liệu MongoDB
Trong những gương mặt góp phần làm suy tàn đế chế SQL thì MongoDB nổi lên là một CSDL đáng tin cậy và dễ dùng nhất. Mongo viết bằng C++. Nó thích hợp cho các ứng dụng tầm trung trở lên. Nếu tỉ lệ lượng dữ liệu ghi vào CSDL của ứng dụng lớn hơn lượng đọc thì đây càng là lựa chọn hợp lý.
MongoDB là một CSDL có khả năng mở rộng, hiệu suất cao, mã nguồn mở và hướng văn bản.
Trước khi đi vào tìm hiểu kỹ hơn về MongoDB, chúng ta làm quen với một số khái niệm cơ bản của MongoDB:
- Văn bản (document) là đơn vị cơ bản của dữ liệu trong MongoDB, nó tương đương với một dòng trong CSDL quan hệ.
- Bộ sưu tập (collection) có thể được coi như tương đương với một bảng.
- MongoDB có thể lưu trữ nhiều CSDL độc lập, mỗi CSDL này có các bộ sưu tập và điều khoản riêng của mình.
- MongoDB đi kèm với một trình tiện ích JavaScript đơn giản nhưng mạnh mẽ, nó hữu ích trong quản trị và thao tác dữ liệu.
- Mỗi văn bản có một khóa đặc biệt, đó là “_id”, nó là duy nhất trong bộ sưu tập của văn bản.
Văn bản
Văn bản là một khái niệm quan trọng trong MongoDB. Văn bản bao gồm tập hợp các khóa với các giá trị tương ứng.
Ví dụ: {“greeting” : “Hello, world!”}
Văn bản trên gồm một khóa là “greeting”, với giá trị là “Hello, world!”. Các văn bản có thể chứa nhiều cặp khóa/giá trị.
Ví dụ: {“greeting” : “Hello, world!”, “foo” : 3}
Một số lưu ý:
- Các cặp khóa/ giá trị trong văn bản được sắp xếp. Văn bản trên sẽ khác với văn bản sau {“foo” : 3, “greeting” : “Hello, world!”}.
- Khóa trong văn bản là một chuỗi
- MongoDB phân biệt chữ hoa chữ thường
- Văn bản trong MongoDB không được chứa những khóa giống nhau. Ví dụ văn bản sau là không hợp lệ {“greeting” : “Hello, world!”, “greeting” : “Hello, MongoDB!”}
Bộ sưu tập
Bộ sưu tập là một nhóm các văn bản. Nếu văn bản tương đương với dòng trong CSDL quan hệ thì bộ sưu tập tương đương với bảng.
Bộ sưu tập là một Schema-Free, nghĩa là các văn bản có hình dạng khác nhau có thể cùng được lưu trữ trong 1 bộ sưu tập.
Ví dụ các văn bản sau có thể cùng được lưu trong một bộ sưu tập:
{“greeting” : “Hello, world!”}
{“foo” : 5}
Bộ sưu tập được xác định bởi tên của nó là một chuỗi UTF-8
Các đặc trưng của MongoDB:
- Lưu trữ hướng văn bản: văn bản theo phong cách JSON với những lược đồ động đơn giản.
- Hỗ trợ chỉ mục đầy đủ: chỉ mục trên bất kỳ các thuộc tính.
- Tính sao lặp và tính sẵn sàng cao: mở rộng.
- Auto-sharding: mở rộng theo chiều ngang mà không ảnh hưởng đến chức năng.
- Truy vấn: đa dạng, truy vấn dựa trên văn bản.
- Cập nhật nhanh.
- Map/Reduce.
- GridFS: lưu trữ file với bất kỳ kích cỡ nào mà không làm phức tạp ngăn xếp.
- Hỗ trợ thương mại: hỗ trợ doanh nghiệp, đào tào, tư vấn.
Bộ môn Công nghệ thông tin
Trường Cao đẳng FPT Mạng cá cược bóng đá
cơ sở Hà Nội