Vì sao SQL tốt hơn NoSQL? (Phần 1)

Tài Lê

Active member
Kể từ khi máy tính chào đời, chúng ta đã chứng kiến sự phát triển về khối lượng data, đòi hỏi công nghệ lưu trữ data, xử lí và phân tích cũng phải được nâng tầm theo. Trong thập kỉ vừa qua, software developer xem SQL như là một di tích khi không thể theo kịp tốc độ phát triển của data volume, dẫn đến sự nổi lên của NoSQL: MapReduce và Bigtable, Cassandra, MongoDB, và nhiều nữa.

Thế nhưng SQL đã bắt đầu sống dậy. Tất cả các bên cung cấp dịch vụ cloud giờ còn có cả dịch vụ managed relational database như: Amazon RDS, Google Cloud SQL, Azure Database cho PostgreSQL. Theo Amazon, PostgreSQL- và MySQL-compatible database Aurora database của hãng là dịch vụ có tốc độ phát triển nhanh nhất trong lịch sử của AWS. SQL interfaces của Hadoop và Spark liên tục được cải thiện. Tháng vừa rồi thì Kafka launched SQL support.

Trong bài viết này chúng ta sẽ tìm hiểu nguyên nhân cho sự hồi sinh của SQL, cũng như ý nghĩa của nó đối với tương lai của data engineering và analysis.

Part 1: A New Hope – Một hi vọng mới
Để hiểu được vì sao SQL trở lại ta phải quay về cội nguồn xuất phát của nó.

Câu chuyện của chúng ta bắt đầu với ngiên cứu của IBM trong những năm đầu của thập niên 70s. Khi đó, các ngôn ngữ query vẫn còn dựa rất nhiều vào thuật toán phức tạp. Donald Chamberlin và Raymond Boyce, hai chàng trai còn “non” trong thế giới lập trình, đã vô cùng ấn tượng với relational data model nhưng họ nhận ra các ngôn ngữ query sẽ chỉ làm “nghẽn lỗ chai”. Do đó cả hai quyết tâm tạo ra một ngôn ngữ query mới, dễ hiểu cho ngay cả user không giỏi toán học và computer programming.



Đây là thời điểm trước cả internet, máy tính cá nhân, khi mà C chỉ vừa mới được giới thiệu với toàn thế giới, đã có 2 nhà khoa học máy tính trẻ nhận ra rằng sự thành công của ngành công nghệ đa phần đến từ việc phát triển một nhóm người dùng thay vì bỏ công đào tạo các chuyên gia lập trình. Họ muốn một ngôn ngữ query dễ đọc như tiếng anh.

Kết quả là thế giới biết tới SQL vào năm 1974. và trong vài thập kỉ tiếp theo, SQL sẽ trở nên vô cùng nổi tiếng. Các database như System R, Ingres, DB2, Oracle, SQL Server, PostgreSQL, MySQL cũng nhanh chóng đô hộ cả ngành công nghệ software. SQL được xem như cầu nối tới database cũng như là lingua franca giúp tăng sự đa dạng cho ecosystem.

Trong một khoảng thời gian, SQL gần như là một ông hoàn cho đến khi Internet xuất hiện.

Part 2: NoSQL Strikes Back – NoSQL tấn công
Trong khi Chamberlin và Boyce đang phát triển SQL, cả hai đều không hay biết việc một nhóm engineer tại California đang thực hiện một project mà sau này đe dọa tới sự tồn tại của SQL. Nó có tên gọi là ARPANET, chào đời vào ngày 29 tháng 10 năm 1969.



Thế nhưng SQL vẫn sống khỏe cho đến khi một engineer khác xuất hiện và sáng tạo ra World Wide Web vào 1989.



Như cỏ dại sau mưa, Internet và Web phát triển mạnh mẽ, ảnh hưởng đến thế giới của chúng ta tại nhiều phương diện khác nhau, nhưng với cộng đồng data thì một vấn đề mới đã xuất hiện: các nguồn mới generate data với volume và vận tốc ngày càng cao.

Và khi Internet ngày càng to lớn thì cộng đồng cũng phát hiện rằng relational databases tại thời điểm đó không đủ khả năng để load khối lượng data như vậy dẫn đến hiện trạng overload của rất nhiều database khác nhau.

Ngay lúc đó 2 ông lớn Internet đã đột phá khi phát triển ra các distributed non-relational systems mới để cứu vãn tình hình: MapReduce (2004) và Bigtable (2006) bởi Google, Dynamo (2007) bởi Amazon. Chúng còn dẫn tới sự ra đời của các non-relational databases, bao gồm Hadoop, Cassandra MongoDB. Do các systems này được tạo ra từ con số không, chúng cũng xung đột với SQL, dẫn tới sự bùng nổ của NoSQL.

Không có gì ngạc nhiên khi cộng đồng software developer chào đón NoSQL vô cùng nồng nhiệt. Sao mà không phấn khích khi NoSQL vừa mới vừa đẹp, chứa đựng sức mạnh và qui mô lớn, cứ như rằng nó chính là con đường thành công dành cho engineer. Thế rồi vấn đề mới lại xuất hiện.



Developer nhanh chóng nhận ra việc thiếu vắng SQL hóa ra lại khiến mọi thứ khá giới hạn. Do mỗi NoSQL database đều có một ngôn ngữ query riêng cũng như qui luật riêng, kèm theo đó hệ ecosystem nghèo nàn khiến cho không chỉ việc học chúng đã khó mà kết nối các database tới app cũng trở nên phức tạp. Đó là chưa kể các công ty còn phải tự phát triển tool phù hợp cho riêng mình.

Những ngôn ngữ NoSQL này do còn mới nên chúng cũng chưa thật sự trưởng thành, trong khi với SQL thì đã có nhiều năm phát triển relational databases giúp các tính năng của nó đã được cải thiện. Do đó, sự non nớt của NoSQL khiến tăng mức độ phức tạp khi làm app. Sự thiếu vắng của JOINs cũng gây ra các vấn đề đối với data.

Một vài NoSQL databases đã thử phát triển những ngôn ngữ Query tương tự như “SQL” (Cassandra’s CQL) nhưng nó lại khiến mọi thứ tệ hơn với việc các engineers bị nhầm lẫn khi sử dụng nó.



Sau một thời gian khổ cực, ngày càng có nhiều developer chán nản với NoSQL.
 
Bên trên