Thứ Tư, 15 tháng 2, 2023

SQL và NoSQL

 

(Nguồn hình: https://medium.com/@freddyayala/nosql-vs-sql-a-dichotomy-daaa836125a9)

1.     SQL là gì?

SQL (Structured Query Language - Ngôn ngữ truy vấn có cấu trúc) là ngôn ngữ lập trình được sử dụng trích xuất, sắp xếp, quản lý và thao tác dữ liệu được lưu trữ trong cơ sở dữ liệu quan hệ (relational database).

Ngôn ngữ SQL được phát triển vào những năm 1970 bởi các nhà nghiên cứu của IBM là Raymond Boyce và Donald Chamberlin. Khi mới ra đời, ngôn ngữ này được gọi là SEQUEL, trong bài báo của Edgar Frank Codd về “A Relational Model of Data for Large Shared Data Banks” vào năm 1970. Trong bài báo của mình, Codd đề xuất rằng tất cả dữ liệu trong cơ sở dữ liệu nên được biểu diễn trong các mối quan hệ. Dựa trên lý thuyết này, Boyce và Chamberlin đã đưa ra SQL. Trong Oracle Quick Guides (Cornelio Books, 2013), tác giả Malcolm Coxall viết rằng phiên bản gốc của SQL được thiết kế để thao tác và truy xuất dữ liệu từ System R - cơ sở dữ liệu quan hệ ban đầu của IBM. Tuy nhiên, phải đến vài năm sau, ngôn ngữ SQL mới được cung cấp công khai. Năm 1979, một công ty có tên là Relational Software, sau này trở thành Oracle, đã phát hành thương mại phiên bản SQL của riêng mình, được gọi là Oracle V2.

Kể từ đó, Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI - the American National Standards Institute) và Tổ chức Tiêu chuẩn hóa Quốc tế (International Organization for Standardization) đã coi SQL là ngôn ngữ tiêu chuẩn trong giao tiếp cơ sở dữ liệu quan hệ. Mặc dù các nhà cung cấp SQL lớn có điều chỉnh ngôn ngữ theo phong cách riêng của họ, nhưng hầu hết các chương trình SQL của họ đều dựa trên phiên bản được ANSI phê duyệt.

SQL hoạt động như thế nào?

Khi một truy vấn SQL được viết và thực thi, thì SQL đó sẽ được xử lý bởi 'bộ xử lý ngôn ngữ truy vấn'  để phân tích cú pháp và tối ưu hóa lệnh truy vấn. Máy chủ SQL xử lý theo ba giai đoạn:

 

·      Kiểm tra và phân tích cú pháp (Parsing): Điều này đề cập đến quá trình kiểm tra chéo cú pháp của truy vấn.

·      Kết nối (Binding):  Bước này liên quan đến việc xác minh ngữ nghĩa truy vấn trước khi thực hiện nó.

·      Tối ưu hóa (Optimization): Xác định kế hoạch thi hiệu quả sao cho thời gian tối thiểu, nghĩa là thời gian phản hồi cho truy vấn SQL càng ngắn thì càng đánh giá cao.

2.    NoSQL là gì ?

Cơ sở dữ liệu NoSQL (not only SQL hoặc non-SQL) là cơ sở dữ liệu phi quan hệ, không phải dạng bảng và thực hiện lưu trữ thông tin khác với các cơ sở dữ liệu truyền thống. Cơ sở dữ liệu NoSQL có nhiều loại dựa trên mô hình dữ liệu của chúng. Các loại chính là tài liệu (document), khóa-giá trị (key-value), cột rộng (wide-column) và biểu đồ (graph). Chúng cung cấp các khung lưu trữ linh hoạt và dễ dàng mở rộng quy mô với lượng dữ liệu lớn và lượng người dùng cao.



(Nguồn hình: https://phoenixnap.com/kb/sql-vs-nosql)

Cơ sở dữ liệu NoSQL xuất hiện vào cuối những năm 2000 khi mà chi phí lưu trữ giảm đáng kể. Cái thời phải tạo ra một mô hình dữ liệu để tránh trùng lắp dữ liệu, tiết kiệm không gian lưu trữ - cho dù nó phức tạp và khó truy cập – đã không còn nữa. Chi phí phát triển phải chi cho các developers đang trở thành chi phí chính của quá trình phát triển phần mềm chứ không phải chi phí lưu trữ, vì vậy cơ sở dữ liệu NoSQL được phát triển để giúp tối ưu hóa cho năng suất của các developers. Càng ngày, lượng dữ liệu mà các ứng dụng cần lưu trữ và truy vấn tăng lên, những dữ liệu này có đủ hình dạng và kích cỡ — có cấu trúc (structured), bán cấu trúc (semi-structured) và đa hình (polymorphic) — và việc xác định trước khung lưu trữ dạng quan hệ trở nên gần như không thể. Vì vậy, người ta cần đến cơ sở dữ liệu NoSQL để  cho phép các nhà phát triển lưu trữ một lượng lớn dữ liệu phi cấu trúc, mang lại cho họ rất nhiều tính linh hoạt.

Ngoài ra, Tuyên ngôn Agile đang ngày càng trở nên phổ biến và các kỹ sư phần mềm đang suy nghĩ lại về cách họ phát triển phần mềm. Họ đã nhận ra sự cần thiết phải nhanh chóng thích ứng và thích ứng linh hoạt với các yêu cầu thay đổi.— kể cả những thay đổi về lưu trữ và truy vấn cơ sở dữ liệu. Cơ sở dữ liệu NoSQL đã mang lại cho họ sự linh hoạt này.

Điện toán đám mây cũng ngày càng phổ biến và các nhà phát triển bắt đầu sử dụng đám mây công cộng để lưu trữ ứng dụng và dữ liệu của họ. Họ muốn có khả năng phân tán dữ liệu trên nhiều máy chủ và khu vực để làm cho ứng dụng của họ linh hoạt, mở rộng quy mô thay vì mở rộng quy mô và định vị địa lý dữ liệu của họ một cách thông minh. Một số cơ sở dữ liệu NoSQL như MongoDB cung cấp các khả năng này.

(Nguồn hình: https://www.edureka.co/blog/sql-vs-nosql-db/)

·      Tại sao lại là NoSQL?

Cơ sở dữ liệu NoSQL được sử dụng trong hầu hết các ngành công nghiệp, từ những trường hợp có mức độ chính thống và quan trọng - như lưu trữ dữ liệu tài chính, hồ sơ chăm sóc sức khỏe - đến những trường hợp hài hước và đời thường hơn - ví dụ như lưu trữ dữ liệu từ các hộp thông minh chăm sóc thú cưng….

·      Khi nào nên sử dụng NoSQL? 

Khi quyết định sử dụng cơ sở dữ liệu nào, những người ra quyết định thường tìm thấy một hoặc nhiều yếu tố sau đây khiến họ chọn cơ sở dữ liệu NoSQL:

-       Phát triển Agile nhịp độ nhanh

-       Lưu trữ dữ liệu có cấu trúc và bán cấu trúc

-       Khối lượng dữ liệu khổng lồ

-       Yêu cầu về thiết kế hệ thống có quy mô mở rộng

-       Các mô hình ứng dụng hiện đại như vi-dịch vụ (microservices) và truyền phát theo thời gian thực (real-time streaming)

·      Lợi ích của cơ sở dữ liệu NoSQL là gì?

Cơ sở dữ liệu NoSQL có thể mang lại nhiều thuận lợi hơn cơ sở dữ liệu quan hệ ở những khía cạnh sau:

-        Mô hình dữ liệu linh hoạt: Cơ sở dữ liệu NoSQL thường có các khung lưu trữ và khai thác rất linh hoạt. Sự linh hoạt cho phép bạn dễ dàng thực hiện các thay đổi đối với cơ sở dữ liệu của mình khi các yêu cầu thay đổi. Bạn có thể lặp lại nhanh chóng và liên tục tích hợp các tính năng ứng dụng mới để cung cấp giá trị cho người dùng của mình nhanh hơn.

-       Phân chia dữ liệu theo chiều ngang: Hầu hết các cơ sở dữ liệu SQL đều yêu cầu bạn mở rộng quy mô theo chiều dọc (di chuyển sang máy chủ lớn hơn, đắt tiền hơn) khi bạn vượt quá yêu cầu về dung lượng của máy chủ hiện tại. Ngược lại, hầu hết các cơ sở dữ liệu NoSQL cho phép bạn dễ dàng mở rộng quy mô theo chiều ngang, nghĩa là bạn có thể tổ chức lưu trữ thêm trên các máy chủ bất cứ khi nào bạn cần.

-       Truy vấn nhanh: Dữ liệu trong cơ sở dữ liệu SQL thường được chuẩn hóa, do đó, các truy vấn thường làm phát sinh yêu cầu bạn kết nối dữ liệu từ nhiều bảng khác nhau. Khi các bảng của bạn tăng kích thước, việc thực thi nối có thể trở nên tốn thời gian. Ngược lại, dữ liệu trong cơ sở dữ liệu NoSQL thường được lưu trữ theo cách được tối ưu hóa cho các truy vấn. Ví dụ khi bạn sử dụng MongoDB, dữ liệu được truy cập cùng nhau sẽ được lưu trữ cùng nhau. Các truy vấn thường không yêu cầu join dữ liệu, vì vậy các truy vấn rất nhanh.

-       Tiện lợi cho các developers: Một số cơ sở dữ liệu NoSQL như MongoDB map cấu trúc dữ liệu của chúng sang cấu trúc dữ liệu của các ngôn ngữ lập trình phổ biến. Sự mapping này cho phép các nhà phát triển lưu trữ dữ liệu của họ giống như cách họ sử dụng dữ liệu đó trong lập trình ứng dụng thông thường. Mặc dù điều này nghe có vẻ tầm thường, nhưng việc mapping này có thể cho phép các developers viết ít code hơn, dẫn đến thời gian phát triển nhanh hơn và ít lỗi hơn.

Những hạn chế của cơ sở dữ liệu NoSQL là gì?

Một trong những nhược điểm thường được nhắc đến nhất của cơ sở dữ liệu NoSQL là chúng không hỗ trợ các giao dịch ACID (atomicity, consistency, isolation, durability) trên nhiều tài liệu. Với thiết kế lược đồ phù hợp, tính nguyên tử của một bản ghi có thể chấp nhận được đối với nhiều ứng dụng. Tuy nhiên, vẫn còn nhiều ứng dụng yêu cầu ACID trên nhiều bản ghi.  Để giải quyết các trường hợp sử dụng này, MongoDB đã thêm hỗ trợ cho các giao dịch ACID đa tài liệu trong bản phát hành 4.0 và mở rộng chúng trong 4.2 để mở rộng các cụm phân đoạn.

Vì các mô hình dữ liệu trong cơ sở dữ liệu NoSQL thường được tối ưu hóa cho các truy vấn chứ không phải để giảm trùng lặp dữ liệu, nên kích thước lưu trữ cơ sở dữ liệu NoSQL có thể lớn hơn cơ sở dữ liệu SQL. Nhưng chi phí lưu trữ hiện nay thấp đến mức hầu hết coi đây là một nhược điểm nhỏ và một số cơ sở dữ liệu NoSQL cũng hỗ trợ nén để giảm dung lượng lưu trữ.

Một nhược điểm khác là tùy thuộc vào loại cơ sở dữ liệu NoSQL bạn sử dụng, bạn có thể không đạt được tất cả các ưu thế của NoSQL  với chỉ một loại cơ sở dữ liệu duy nhất. Ví dụ: cơ sở dữ liệu đồ thị  (graph) rất tuyệt vời để phân tích các mối quan hệ trong dữ liệu của bạn nhưng có thể không cung cấp những gì bạn cần để truy xuất dữ liệu hàng ngày, chẳng hạn như truy vấn phạm vi. Khi chọn cơ sở dữ liệu NoSQL, hãy xem xét các trường hợp sử dụng của bạn sẽ là gì và liệu cơ sở dữ liệu có mục đích chung như MongoDB có phải là một lựa chọn tốt hơn hay không.

 

3.    So sánh SQL và NoSQL

 

SQL

NoSQL

Cơ sở dữ liệu quan hệ

Cơ sở dữ liệu phi quan hệ - hoặc cơ sở dữ liệu phân tán

Có khung lưu trữ và truy cập dạng tĩnh, xác định trước.

Có khung phân tích và lưu trữ động

Không phù hợp để lưu trữ dữ liệu phân cấp

phù hợp nhất cho việc lưu trữ dữ liệu phân cấp

Phù hợp nhất cho các truy vấn phức tạp

Không thuận lợi cho các truy vấn phức tạp

Có thể mở rộng theo chiều dọc

Có thể mở rộng theo chiều ngang

Tuân thủ thuộc tính ACID (atomicity, consistency, isolation, durability)

Tuân theo CAP (consistency, availability, partition tolerance)

Một số hệ quản trị CSDL: MySQL, PostgreSQL, Oracle, MS-SQL Server,...

MongoDB, GraphQL, HBase, Neo4j, Cassandra,...


 4.    Xu hướng phát triển của quản trị cơ sở dữ liệu

Tương lai của việc phát triển các hệ thống cơ sở dữ liệu kết hợp các thuộc tính ACID của SQL với các thuộc tính BASE của cơ sở dữ liệu NoSQL. Điều này có thể đạt được bằng cách triển khai kiến trúc microservices. Các dịch vụ yêu cầu cơ sở dữ liệu sở hữu thuộc tính ACID có thể sử dụng SQL và những dịch vụ yêu cầu thuộc tính CAP có thể sử dụng NoSQL. Một ví dụ điển hình là Facebook, sử dụng MySQL, Apache Cassandra và nhiều cơ sở dữ liệu SQL và NoSQL khác.

 

Tài liệu tham khảo

[1].         https://www.geeksforgeeks.org/difference-between-sql-and-nosql/

[2].         https://www.mongodb.com/nosql-explained/nosql-vs-sql

[3].         https://www.integrate.io/blog/the-sql-vs-nosql-difference/

[4].         https://www.ibm.com/cloud/blog/sql-vs-nosql

[5].         https://www.businessnewsdaily.com/5804-what-is-sql.html

[6].         https://www.spiceworks.com/tech/artificial-intelligence/articles/what-is-sql/

[7].         https://www.techtarget.com/searchdatamanagement/definition/SQL

[8].         https://www.mongodb.com/nosql-explained

[9].         https://dev.to/tecnosam/will-nosql-databases-replace-sql-databases-in-the-future-3hoa

 

Không có nhận xét nào:

Đăng nhận xét

Sandbox

Thuật ngữ "sandbox" trong bối cảnh công nghệ được dùng để chỉ một môi trường thử nghiệm an toàn, trong đó các phần mềm, chương tr...