Hôm qua tôi có một buổi trao đổi với một số đồng nghiệp. Họ đã chỉ cho tôi một số thứ và tôi đã học được rất nhiều điều về cơ sở dữ liệu SQL và NoSQL.
Những gì tôi hiểu về SQL và NoSQL
SQL (Structured Query Language)
SQL là một cơ sở dữ liệu lưu trữ dữ liệu theo chiều dọc. Trong các cơ sở dữ liệu SQL, bạn lưu trữ dữ liệu dưới dạng các hàng và cột. Hàng đầu tiên chứa các trường (fields), và các hàng tiếp theo chứa dữ liệu tương ứng với các trường đó. Vì vậy, nó giống như việc thêm dữ liệu theo chiều dọc.
SQL chủ yếu được sử dụng trong các ứng dụng mà bạn đã biết trước cấu trúc dữ liệu (tức là các trường) trước khi lưu trữ. Ví dụ: nếu bạn muốn lưu thông tin người dùng hoặc dữ liệu ngân hàng, bạn có thể sử dụng cơ sở dữ liệu SQL.
NoSQL (Not Only SQL)
NoSQL là một cơ sở dữ liệu lưu trữ dữ liệu theo chiều ngang. Dữ liệu trong NoSQL được lưu trữ dưới định dạng JSON và bạn có thể thêm bao nhiêu trường tuỳ ý. Nó thường nhanh hơn so với SQL.
Khi bạn có dữ liệu động với nhiều trường khác nhau, bạn sử dụng cơ sở dữ liệu NoSQL. Ví dụ: khi lưu trữ dữ liệu sản phẩm, bạn sử dụng NoSQL. Nó lưu dữ liệu theo dạng JSON và có thể dễ dàng thêm trường mới khi cần, điều này khiến nó rất dễ mở rộng.
Ví dụ thực tế
Flipkart
Phần lớn dữ liệu của Flipkart được lưu bằng NoSQL. Lý do là vì Flipkart có rất nhiều sản phẩm với nhiều danh mục và cấu trúc dữ liệu khác nhau. Nếu dùng SQL thì sẽ rất phức tạp. Ví dụ: trong danh mục điện thoại, bạn có thể thấy các trường như kích thước màn hình, phụ kiện, trong khi ở danh mục quần áo, bạn lại thấy các trường như kích cỡ và màu sắc. NoSQL xử lý điều này rất dễ dàng.
Netflix
Netflix sử dụng mô hình lai, nghĩa là kết hợp cả SQL và NoSQL. Với dữ liệu như đề xuất phim hay danh sách xem sau, họ sử dụng NoSQL vì nó nhanh hơn khi xử lý tác vụ động. Nhưng với những dữ liệu như thông tin người dùng hay thanh toán, họ sử dụng SQL vì nó cung cấp cấu trúc tốt hơn và khả năng phân tích sâu hơn.
Uber (Ứng dụng đặt xe)
Uber cũng sử dụng cơ sở dữ liệu NoSQL vì thường xuyên có sự thay đổi về trường dữ liệu và danh mục. Ví dụ: nếu Uber ra mắt tính năng mới như đi chung xe (pool sharing) hoặc xe buýt, nếu dùng SQL thì họ phải tạo thủ công các trường mới, điều này làm cho ứng dụng khó mở rộng. Nhưng với NoSQL, việc thêm tính năng mới và các trường dữ liệu tương ứng sẽ dễ dàng hơn. Ngoài ra, với dữ liệu thời gian thực như vị trí xe, NoSQL cung cấp khả năng truy cập nhanh hơn.
Tại sao chúng ta sử dụng SQL?
SQL lưu trữ dữ liệu theo dạng hàng và cột, điều này giúp dễ dàng tạo ra các biểu đồ và báo cáo phân tích. Nó rất phù hợp với dữ liệu có cấu trúc rõ ràng như hệ thống ngân hàng, nơi mà tất cả các trường đều bắt buộc phải có. Nếu thiếu một trường, hệ thống sẽ báo lỗi — điều này rất hữu ích khi bạn muốn đảm bảo mọi thông tin đều đầy đủ.
Tại sao chúng ta sử dụng NoSQL?
NoSQL lưu trữ dữ liệu theo định dạng JSON, và bạn có thể thêm trường mới bất kỳ lúc nào. Nó linh hoạt và hoạt động tốt khi bạn cần thêm tính năng mới hoặc khi tốc độ là yếu tố quan trọng. Các thao tác trong NoSQL thường nhanh hơn và cho phép bạn cập nhật hoặc thêm trường mới dễ dàng mà không cần thay đổi cấu trúc tổng thể.
Định lý CAP (CAP Theorem)
Định lý CAP là một khái niệm nền tảng trong hệ thống phân tán. Nó đưa ra ba yếu tố đảm bảo:
Consistency
(Tính nhất quán): Luôn trả về dữ liệu mới nhất hoặc thông báo lỗi.Availability
(Tính sẵn sàng): Mỗi yêu cầu luôn nhận được phản hồi, dù là thành công hay lỗi.Partition Tolerance
(Chịu phân mảnh): Hệ thống vẫn hoạt động dù có sự cố mạng hoặc phân mảnh hệ thống.
Theo định lý: Một hệ thống phân tán bắt buộc phải chịu phân mảnh, nhưng chỉ có thể chọn một trong hai yếu tố còn lại — nhất quán hoặc sẵn sàng.
- CP (Consistency + Partition tolerance): Hệ thống ưu tiên tính nhất quán hơn tính sẵn sàng (ví dụ: NoSQL).
- AP (Availability + Partition tolerance): Hệ thống ưu tiên tính sẵn sàng hơn tính nhất quán (ví dụ: SQL).
Đó là tất cả những thứ mà tôi học thêm được từ SQL và NoSQL, hy vọng chúng sẽ hữu ích đối với các bạn!