NoSQL đàm luận

https://potato.fsoft.com.vn/wp-content/uploads/2017/06/Lua%CC%A3%CC%82n-ba%CC%80n-ve%CC%82%CC%80-NoSQL_banner_vie.jpg
Độc cô cửu kiếm là một bí kíp kiếm thuật tối thượng xuất hiện trong bộ tiểu thuyết kiếm hiệp Tiếu ngạo giang hồ của Kim Dung, bắt nguồn từ một đại cao thủ kiếm thuật là Độc Cô Cầu Bại và có truyền nhân là Phong Thanh Dương và Lệnh Hồ Xung. Độc cô cửu kiếm được coi là triết lý đặc sắc của Đạo gia đề cao việc sử dụng kiếm thuật một cách linh hoạt theo phương châm “dĩ vô chiêu thắng hữu chiêu” (không có chiêu số mà thắng chiêu số).

Những tưởng triết lý trên chỉ được dùng trong kiếm thuật, ngờ đâu trong giới code đạo, lại xuất hiện một nhân vật kiệt xuất là Carlo Strozzi, với biệt danh là Độc Cô Đạo Code, đã sáng tạo ra một công nghệ mới là NoSQL, cơ sở dữ liệu không quan hệ

NoSQL là gì

Đây là thuật ngữ chung cho các hệ cơ sở dữ liệu không sử dụng mô hình dữ liệu quan hệ. NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị – khóa và hệ thống lưu trữ phân tán.
Trước khi NoSQL ra đời, võ lâm hào kiệt trong giới code đạo đều khá quen thuộc với loại cơ sở dữ liệu quan hệ (Relational datatabase), bao gồm các bảng, record. Các bảng này có mối liên hệ với nhau thông qua các khóa chính, khóa ngoại lai (Primary key, Foreign key). Developer sẽ sử dụng những chiêu thức khác nhau để thao tác với cơ sở dữ liệu dạng này như Select, Join, Union….
Tuy nhiên với NoSQL, Carlo Strozzi đã đưa ra những nguyên tắc hoàn toàn trái ngược
Những chiêu thức của Relational database như Select, Join, Union dù có tinh diệu đến đâu nhưng nếu có quá nhiều bảng quan hệ và dữ liệu lớn thì tốc độ ra chiêu đều sẽ bị ảnh hưởng (low performance). Còn NoSQL không có quan hệ thì lo gì đến performance.
Luận bàn về NoSQL_vie

Sự khác biệt giữa NoSQL và SQL

1
Nếu như relational database dùng dữ liệu kiểu table record làm chuẩn, thì NoSQL lại chọn dữ liệu JSON làm đầu. Sử dụng dạng dữ liệu Key và Value, cho phép giảm thiểu tối đa các phép tính toán, các chiêu thức đọc ghi trở nên nhanh hơn hẳn, đảm bảo được yêu cầu xử lý dữ liệu lớn như dữ liệu mạng xã hội.
Hơn thế nữa, muốn luyện thành cơ sở dữ liệu quan hệ, coder phải thuộc lòng khẩu quyết, nắm vững các lệnh phức tạp của SQL, ngoài ra còn phải đầu tư ngân lượng để nâng cấp, bảo trì phần cứng server khi dữ liệu lưu trữ quá lớn, quả thật là khó càng thêm khó…
Trong khi đó NoSQL lại có thiết kế đơn giản, gọn nhẹ hơn. Người học NoSQL cũng không cần tư chất thông minh cũng lĩnh hội được hết nhưng tinh hoa code đạo trong NoSQL.
Sự khác biệt giữ NoSQL và SQL chỉ cần gói gọn như sau
Screen Shot 2017-06-01 at 10.13.45 AM

Đặc điểm của NoSQL

NoSQL sử dụng triết lý kiếm thuật thượng thừa của Độc Cô Cầu Bại. Khẩu quyết của NoSQL chỉ gói gọn trong 4 từ

Phi Quan hệ

Bỏ qua sự ràng buộc, tạo ra tính đơn giản trong thiết kế, chỉ sử dụng kiểu dữ liệu Khóa – Giá trị (Key –Value), nhưng lại tùy vào loại dữ liệu mà thay đổi, biến ảo khôn lường như nước chảy mây trôi, phù hợp với loại dữ liệu không có cấu trúc.

Phân tán

Relational Database thường lưu dữ liêu trên một server. Nhưng với NoSQL, dữ liệu được lưu phân tán(distributed) trên các server khác nhau

Đơn giản

Không sử dụng những bảng quan hệ phức tạp, chỉ dùng cơ sở dữ liệu key-value, không sử dụng quá nhiều chiêu thức (command) như Relational Database.

Linh Hoạt

Cấu trúc dữ liệu được thiết kế cho các cơ sở dữ liệu NoSQL (ví dụ: khóa-giá trị (key-value), wide column, biểu đồ hoặc tài liệu) khác với cấu trúc dữ liệu được sử dụng mặc định trong các cơ sở dữ liệu quan hệ, khiến cho nó thao tác nhanh hơn trong NoSQL

Các dạng database của NoSQL

Từ đại tổ sư Carlo Strozzi , người sáng tạo ra NoSQL. NoSQL đã có rất nhiều truyền nhân như Redis, Hadoop, Memcache. Nhưng đến thời của MongoDB, NoSQL mới thực sự phát triển đến mức thượng thừa, xuất thần nhập hóa, đạt cảnh giới cao nhất của Code đạo.
Các loại database của MongoDB không nhiều và phức tạp như cơ sở dữ liệu quan hệ, chỉ xoanh quanh 4 loại
  • Key-Value Database
  • Document Database
  • Column-Family Database
  • Graph Database
2
Tuy nhiên, triết lý của MongoDB lại quán triệt sâu sắc tư tưởng của Độc Cô Cầu Bại. Đó là developer sử dụng database, không phải database sử dụng developer. Tuy số loại database là hữu hạn (tĩnh). nhưng khi được thi triển thì lại biến ảo vô cùng (động), ẩn chứa huyền cơ.

Key-Value Database

3
Dữ liệu được lưu trữ trong database dưới dạng key-value. Để truy vấn dữ liệu trong database, ta dựa vào key để lấy value ra. Các database dạng này có tốc độ truy vấn rất nhanh, thường dùng để làm cache cho ứng dụng.
Võ lâm đồng đạo đã từng sử dụng Amazon Redis thì sẽ biết cái này
Database tiêu biểu: Riak, Redis, MemCache, Project Voldemort, CouchBase
Document Database
Mỗi đối tượng được lưu trong database dưới dạng document, tương tự record của cơ sở dữ liệu quan hệ. Dữ liệu lưu ở dạng BSON, JSON hoặc XML.
Nếu như table của Relational Database được thiết kế schema cố định ngay từ đầu, như định nghĩa số trường, kiểu dữ liệu thì với Document Base, có thể thêm sửa trường, thay đổi table… dễ dàng, luôn biến hóa, lấy động chế tĩnh.
MongoDB là tiêu biểu cho database dạng này
4

Column-Family Database

Ở SQL, dữ liệu lưu theo hàng (record), nhưng trường hợp này lại lưu theo cột. Mỗi cột có Key/ID để xác định.
Ví dụ về cách lưu data kiểu Column-Family
Screen Shot 2017-06-01 at 10.18.17 AM
Column-Family Database được sử dụng khi cần ghi một số lượng lớn dữ liệu, big data.
Apache HBase, Google BIGTABLE là loại database tiêu biểu cho loại dữ liệu này
Graph Database
Dữ liệu trong graph database được lưu dưới dạng các node. Mỗi node sẽ có 1 label, properties tương tự như một row trong SQL. Các node này được kết nối với nhau bằng các relationship. Graph database tập trung nhiều vào relationship giữa các node, áp dụng nhiều thuật toán duyệt node để tăng tốc độ.
5
Đối với dữ liệu có quan hệ như trên, lưu trữ dạng graph database sẽ cho phép truy vấn nhanh và đơn giản hơn nhiều so với kiểu quan hệ truyền thống. Ứng dụng nhiều trong data mining, mạng noron…
Neo4J là một dạng database tiêu biểu dùng loại này

Lời kết

Có thể nói với triết lí lấy vô chiêu thắng hữu chiêu, lấy phi quan hê để thắng quan hệ, NoSQL sẽ trở thành một xu hướng mới trong việc lưu trữ dữ liệu.
Nhưng liệu NoSQL có thể thay thế hẳn cho Relational Database truyền thống?? Đó còn là một câu hỏi chưa có câu trả lời.

Powered by Blogger.