NoSQL là gì ? Tổng quan về NoSQL
NỘI DUNG BÀI VIẾT
Chúng ta đã nghe nhiều về SQL, về cơ sở dữ liệu, về mối quan hệ giữa các thực thể trong một cơ sở dữ liệu. Chúng ta đã được học về MySQL, về SQL Server, … đây đều là những cơ sở dữ liệu quan hệ. Hôm nay mình sẽ giới thiệu tới mọi người một loại cơ sở dữ liệu khác được gọi là NoSQL hay còn được gọi là cơ sở dữ liệu phi quan hệ. Chúng ta cùng tìm hiểu xem NoSQl là gì và nó có gì hay, tại sao chúng ta lại nên dùng ở bài viết này nhé.
Cơ sở dữ liệu NoSQL là gì ?
Cơ sở dữ liệu NoSQL là một cơ sở dữ liệu phi quan hệ và có sơ đồ linh hoạt để xây dựng các ứng dụng hiện đại. Cơ sở dữ liệu NoSQL được công nhận rộng rãi vì khả năng dễ phát triển, chức năng cũng như hiệu năng ở quy mô lớn. Nó tránh việc sử dụng join và rất dễ dàng để mở rộng.
Mục đích chính của việc sử dụng cơ sở dữ liệu NoSQL là dành cho các kho dữ liệu phân tán với nhu cầu lưu trữ dữ liệu lớn.
NoSQL được sử dụng trong big data và ứng dụng web real-time.
Cơ sở dữ liệu NoSQL là viết tắt của “Not Only SQL” hoặc “Not SQL”. Mặc dù một thuật ngữ tốt hơn sẽ là “NoREL”, NoSQL đã bắt kịp. Carl Strozz đã giới thiệu khái niệm NoSQL vào năm 1998.
RDBMS truyền thống sử dụng cú pháp SQL để lưu trữ và truy xuất dữ liệu. Thay vào đó, hệ thống cơ sở dữ liệu NoSQL bao gồm một loạt các công nghệ cơ sở dữ liệu có thể lưu trữ dữ liệu có cấu trúc, bán cấu trúc, phi cấu trúc. Hãy hiểu về NoSQL bằng một sơ đồ trong hướng dẫn cơ sở dữ liệu NoSQL này
Cơ chế hoạt động của cơ sở dữ liệu NoSQL
Cơ sở dữ liệu NoSQL sử dụng nhiều mô hình dữ liệu để truy cập và quản lý dữ liệu. Các loại cơ sở dữ liệu này được tối ưu hóa dành riêng cho các ứng dụng yêu cầu mô hình dữ liệu linh hoạt có lượng dữ liệu lớn và độ trễ thấp, có thể đạt được bằng cách giảm bớt một số hạn chế về tính nhất quán của dữ liệu của các cơ sở dữ liệu khác.
Hãy xem ví dụ về mô hình sơ đồ dành cho cơ sở dữ liệu sách đơn giản:
- Trong cơ sở dữ liệu quan hệ, hồ sơ về một cuốn sách thường được phân tách (hay còn gọi là “chuẩn hóa”) và lưu trữ trong các bảng tách biệt nhau, còn mối quan hệ được quy định bằng các ràng buộc khóa ngoại và khóa chính. Trong ví dụ này, bảng Sách có các cột cho ISBN, Tên sách và Số phiên bản, bảng Tác giả có các cột cho ID tác giả và Tên tác giả và cuối cùng, bảng Tác giả–ISBN có các cột cho ID tác giả và ISBN. Mô hình quan hệ được thiết kế để cho phép các cơ sở dữ liệu này thực thi tính toàn vẹn tham chiếu giữa nhiều bảng trong cơ sở dữ liệu, được chuẩn hóa để giảm dư thừa và thường được tối ưu hóa cho mục đích lưu trữ.
- Trong cơ sở dữ liệu NoSQL, hồ sơ về một cuốn sách thường được lưu trữ dưới dạng văn bản JSON. Với từng quyển sách, mục, ISBN, Tên sách, Số phiên bản, Tên tác giả và ID tác giả được lưu trữ dưới dạng thuộc tính trong một văn bản duy nhất. Trong mô hình này, dữ liệu được tối ưu hóa cho việc phát triển trực quan và khả năng thay đổi quy mô theo chiều ngang.
Vì sao chúng ta nên sử dụng NoSQL?
Khái niệm cơ sở dữ liệu NoSQL trở nên phổ biến với những công ty công nghệ lớn như Google, Facebook, Amazon, …, những công ty cần phải xử lý khối lượng dữ liệu khổng lồ. Thời gian phản hồi của hệ thống trở nên chậm nếu như bạn sử dụng RDBMS truyền thống để truy vấn khối lượng lớn dữ liệu.
Để giải quyết vấn đề này, chúng ta có thể “mở rộng quy mô” hệ thống của mình bằng cách nâng cấp phần cứng hiện có của chúng ta. Quá trình này là tốn kém.
Giải pháp thay thế cho vấn đề này là phân phối tải cơ sở dữ liệu trên nhiều máy chủ bất cứ khi nào tải tăng lên. Phương pháp này được gọi là “mở rộng quy mô”.
Qua đó chúng ta có thể thấy cơ sở dữ liệu NoSQL là lựa chọn cực kỳ thích hợp cho nhiều ứng dụng hiện đại, ví dụ như di động, web và trò chơi đòi hỏi phải sử dụng cơ sở dữ liệu cực kỳ thiết thực, linh hoạt, có khả năng thay đổi quy mô và hiệu năng cao để đem đến cho người dùng trải nghiệm tuyệt vời.
- Linh hoạt: Cơ sở dữ liệu NoSQL thường cung cấp các sơ đồ linh hoạt giúp công đoạn phát triển nhanh hơn và có khả năng lặp lại cao hơn. Mô hình dữ liệu linh hoạt biến cơ sở dữ liệu NoSQL thành lựa chọn lý tưởng cho dữ liệu không được tổ chức thành cấu trúc hoặc có cấu trúc chưa hoàn chỉnh.
- Khả năng thay đổi quy mô: Cơ sở dữ liệu NoSQL thường được thiết kế để tăng quy mô bằng cách sử dụng các cụm phần cứng được phân phối thay vì tăng quy mô bằng cách bổ sung máy chủ mạnh và tốn kém. Một số nhà cung cấp dịch vụ đám mây xử lý các hoạt động này một cách không công khai dưới dạng dịch vụ được quản lý đầy đủ.
- Hiệu năng cao: Cơ sở dữ liệu NoSQL được tối ưu hóa theo các mô hình dữ liệu cụ thể và các mẫu truy cập giúp tăng hiệu năng cao hơn so với việc cố gắng đạt được mức độ chức năng tương tự bằng cơ sở dữ liệu quan hệ.
- Cực kỳ thiết thực: Cơ sở dữ liệu NoSQL cung cấp các API và kiểu dữ liệu cực kỳ thiết thực được xây dựng riêng cho từng mô hình dữ liệu tương ứng.
Một số tính năng của NoSQL
Không quan hệ (non-relational)
- Cơ sở dữ liệu NoSQL không tuân theo mô hình quan hệ
- Không yêu cầu ánh xạ quan hệ đối tượng và chuẩn hóa dữ liệu
- Không có các tính năng phức tạp như query language, query planner, toàn vẹn tham chiếu, ACID
Schema-free
- Cơ sở dữ liệu NoSQL có thể không có schema hoặc có một schema linh hoạt
- Không yêu cầu bất kỳ loại định nghĩa nào về schema dữ liệu
- Cung cấp cấu trúc dữ liệu không đồng nhất trong cùng một miền
API đơn giản
- Cung cấp giao diện dễ sử dụng để lưu trữ và truy vấn dữ liệu được cung cấp
- API cho phép các phương pháp lựa chọn và thao tác dữ liệu cấp thấp
- Các giao thức dựa trên văn bản chủ yếu được sử dụng với HTTP REST với JSON
- Hầu như không sử dụng các tiêu chuẩn cho ngôn ngữ truy vấn NoSQL
Phân tán
- Nhiều cơ sở dữ liệu NoSQL có thể được thực thi theo kiểu phân tán
- Cung cấp khả năng tự động mở rộng quy mô và khả năng vượt qua lỗi
- Chỉ cung cấp tính nhất quán cuối cùng
- Shared Nothing Architecture. Điều này cho phép phối hợp ít hơn và phân tán cao hơn.
Các loại cơ sở dữ liệu NoSQL
- Khóa–giá trị (Key value): Cơ sở dữ liệu khóa–giá trị có khả năng phân mảnh cao và cho phép thay đổi quy mô theo chiều ngang ở các quy mô lớn mà các loại hình cơ sở dữ liệu khác không thể làm được. Mô hình dữ liệu khóa–giá trị được dùng cho trò chơi, công nghệ quảng cáo và đặc biệt thích hợp cho IoT. Amazon DynamoDB được thiết kế để có độ trễ ổn định chỉ vài mili giây cho khối lượng công việc thuộc quy mô bất kỳ. Hiệu năng ổn định này là lý do chính để di chuyển tính năng Stories của Snapchat (kể cả khối lượng công việc ghi lưu trữ lớn nhất của Snapchat) sang DynamoDB.
- Tài liệu (Document based): Trong mã ứng dụng, dữ liệu thường được biểu diễn dưới dạng một đối tượng hoặc văn bản dạng JSON vì đây là mô hình dữ liệu hiệu quả và trực quan cho các nhà phát triển. Cơ sở dữ liệu văn bản giúp nhà phát triển dễ dàng lưu trữ và truy vấn dữ liệu trong một cơ sở dữ liệu bằng cách sử dụng cùng một định dạng mô hình văn bản họ sử dụng trong mã ứng dụng của mình. Tính chất linh hoạt, bán cấu trúc và phân cấp của các văn bản và cơ sở dữ liệu văn bản cho phép chúng phát triển phù hợp với yêu cầu của ứng dụng. Mô hình văn bản phát huy hiệu quả với danh mục, hồ sơ người dùng và hệ thống quản lý nội dung, nơi từng văn bản là duy nhất và phát triển theo thời gian. Amazon DocumentDB (với khả năng tương thích MongoDB) và MongoDB là các cơ sở dữ liệu văn bản phổ biến cung cấp các API mạnh mẽ và trực quan để phát triển linh hoạt và lặp lại.
- Đồ thị (Graph-Based): Mục đích của cơ sở dữ liệu đồ thị là giúp việc dựng và chạy ứng dụng hoạt động với các bộ dữ liệu có khả năng kết nối cao trở nên dễ dàng. Cơ sở dữ liệu đồ thị thường được sử dụng cho các đồ thị tri thức, mạng xã hội, công cụ đề xuất và phát hiện lừa đảo. Amazon Neptune là dịch vụ cơ sở dữ liệu đồ thị được quản lý đầy đủ. Neptune hỗ trợ cả mô hình Đồ thị thuộc tính lẫn Framework mô tả tài nguyên (RDF), cung cấp cho người dùng lựa chọn hai API đồ thị: TinkerPop và RDF/SPARQL. Các cơ sở dữ liệu đồ thị phổ biến gồm có Neo4j và Giraph.
-
Cột (Column-based): Cơ sở dữ liệu hướng theo cột hoạt động trên các cột và dựa trên bài báo BigTable của Google. Mỗi cột được xử lý riêng biệt. Giá trị của cơ sở dữ liệu cột đơn được lưu trữ liền kề.
Ưu và nhược điểm của NoSQL
Ưu điểm
- Khả năng truy vấn dữ liệu lớn
- Mở rộng dễ dàng
- Nó cung cấp hiệu suất nhanh chóng và khả năng mở rộng theo chiều ngang.
- Có thể xử lý dữ liệu có cấu trúc, bán cấu trúc và phi cấu trúc với hiệu quả như nhau
- Lập trình hướng đối tượng dễ sử dụng và linh hoạt
- Cơ sở dữ liệu NoSQL không cần máy chủ hiệu suất cao chuyên dụng
- Hỗ trợ nền tảng và ngôn ngữ chính dành cho nhà phát triển
Nhược điểm
- Không có quy tắc tiêu chuẩn hóa
- Khả năng truy vấn hạn chế
- Cơ sở dữ liệu và công cụ RDBMS tương đối hoàn thiện
- Nó không cung cấp bất kỳ khả năng cơ sở dữ liệu truyền thống nào, như tính nhất quán khi nhiều transactions được thực hiện đồng thời.
- Khi khối lượng dữ liệu tăng lên, rất khó để duy trì các giá trị duy nhất vì các khóa trở nên khó khăn
- Các tùy chọn mã nguồn mở nên không quá phổ biến đối với các doanh nghiệp.
Leave a Reply