Tìm hiểu về Cơ sở dữ liệu Phi quan hệ - NoSQL

Hệ quản trị cơ sở dữ liệu quan hệ (Relational database - RDBMS) ra đời vào những năm 70 của thế kỉ trước, cho phép các ứng dụng lưu trữ dữ liệu thông qua ngôn ngữ truy vấn và mô hình hóa dữ liệu tiêu chuẩn (Structured Query Language - SQL). SQL nói chung hay cụ thể như RDBMS là một sản phẩm đã có bề dày sử dụng từ nhiều thập kỷ phát triển công nghệ, cho thấy khả năng ứng dụng và đáp ứng tốt trong thử nghiệm ứng suất thực tế. Vào thời điểm đó, việc lưu trữ dữ liệu khá tốn kém, tuy nhiên các lược đồ dữ liệu cũng tương đối đơn giản, dễ hiểu nên nhu cầu về một công cụ mới là chưa cần thiết.

Càng về sau, công nghệ ngày càng phát triển, nhất là từ khi web nổi lên, khối lượng dữ liệu, thông tin về người dùng, về sản phẩm, đối tượng, sự kiện mà các hệ thống cần phải xử lý giờ đây ngày 1 lớn. Ví dụ như Google, Facebook phải lưu trữ và xử lý một lượng dữ liệu cực lớn mỗi ngày. Ngay cả việc hiển thị một trang web hoặc trả lời một yêu cầu API có thể làm mất hàng chục hoặc hàng trăm yêu cầu cơ sở dữ liệu khi các ứng dụng xử lý thông tin ngày một phức tạp.
Giờ đây thì SQL lại gây một số cản trở với những hạn chế - cụ thể là lược đồ/schema cứng nhắc, thiếu linh hoạt - khiến chúng trở nên ít phù hợp hơn với các loại ứng dụng khác.

Để đáp ứng những cần thiết về cơ sở dữ liệu, những cơ sở hạ tầng phục vụ và cả những chiến lược liên tục được các nhà phát triển đưa ra và cũng đã có những thay đổi đáng kể. Những công nghệ đám mây đơn giản hơn và giá cả hợp lý đã xuất hiện để thay thế những máy chủ phức tạp và đắt tiền. Hay nữa là những kĩ sư sử dụng các phương pháp đẩy nhanh tốc độ, nhằm mục đích liên tục phát triển và rút ngắn các chu trình, mục đích để truy vấn dữ liệu với tốc độ nhanh, đáp ứng nhu cầu của người dùng.

Và như vậy, NoSQL đã ra đời để phục vụ những yêu cầu phù hợp với hiện tại. Hệ thống NoSQL lưu trữ và quản trị dữ liệu sao cho có thể hỗ trợ được tốc độ vận hành ở công suất cao và cung cấp tính linh hoạt tuyệt vời cho các nhà phát triển sử dụng. Không giống với cơ sở dữ liệu SQL, rất nhiều cơ sở dữ liệu NoSQL có thể mở rộng theo chiều ngang trên hàng trăm hoặc hàng ngàn máy chủ.

Tuy nhiên, hệ thống NoSQL không nhất quán dữ liệu giống như SQL. Trên thực tế, cơ sở dữ liệu SQL không ưu tiên hiệu suất và khả năng mở rộng mà thường sẽ đẩy việc tuân thủ các thuộc tính ACID đảm bảo độ tin cậy cho các giao dịch lên trước, trong khi cơ sở dữ liệu NoSQL gần như bỏ qua các đảm bảo ACID để ưu tiên tốc độ và khả năng mở rộng.

Nói tóm lại, SQL và NoSQL có những sự đánh đổi khác nhau trong hệ thống của mình. Mặc dù cả hai có thể cạnh tranh trong bối cảnh của một dự án, nhưng khi đặt trong một bức tranh tổng thể thì lại có vai trò hỗ trợ, bổ sung cho nhau. Việc quyết định lựa chọn công cụ nào cần phụ thuộc vào tính chất công việc thực tế.

Phân biệt SQL và NoSQL

SQL Database NoSQL Database
Lịch sửĐược phát triển vào những năm 1970 với làn sóng ứng dụng lưu trữ dữ liệu đầu tiên.Được phát triển vào những năm 2000 để giải quyết các hạn chế của cơ sở dữ liệu SQL, đặc biệt liên quan đến quy mô, nhân rộng và lưu trữ dữ liệu phi cấu trúc.
CSDL đại diệnMySQL, Postgres, Oracle DatabaseMongoDB, Cassandra, HBase, Neo4j
Mô hình dữ liệuCác bản ghi riêng lẻ (ví dụ: "nhân viên") được lưu trữ dưới dạng các hàng trong bảng, với mỗi cột lưu trữ một phần dữ liệu cụ thể về bản ghi đó (ví dụ: "người quản lý", "ngày được thuê"...), giống như một bảng tính. Các kiểu dữ liệu riêng biệt được lưu trữ trong các bảng riêng biệt và sau đó được nối với nhau khi các truy vấn phức tạp hơn được thực thi. Ví dụ: "văn phòng" có thể được lưu trữ trong một bảng và "nhân viên" trong bảng khác. Khi người dùng muốn tìm địa chỉ làm việc của nhân viên, công cụ cơ sở dữ liệu sẽ nối các bảng "nhân viên" và "văn phòng" lại với nhau để có được tất cả thông tin cần thiết.Khác nhau dựa trên loại cơ sở dữ liệu NoSQL. Ví dụ: các key-value store hoạt động tương tự như cơ sở dữ liệu SQL, nhưng chỉ có hai cột ("khóa-key" và "giá trị-value"). Document database loại bỏ hoàn toàn mô hình table-and-row, lưu trữ tất cả dữ liệu có liên quan với nhau tại một "tài liệu" duy nhất trong JSON, XML hoặc định dạng khác, có thể lồng các giá trị theo thứ bậc.
Khả năng mở rộngTheo chiều dọc, có nghĩa là máy chủ duy nhất phải ngày càng mạnh mẽ để đáp ứng nhu cầu mở rộng của dữ liệu. Có thể mở rộng cơ sở dữ liệu SQL trên nhiều máy chủ, nhưng cần bổ sung thêm kỹ thuật quan trọng.Theo chiều ngang, có nghĩa là để thêm dung lượng, người quản trị cơ sở dữ liệu chỉ cần thêm nhiều máy chủ hoặc đám mây. Cơ sở dữ liệu NoSQL tự động phân tán dữ liệu trên các máy chủ khi cần thiết
Mô hình phát triểnKết hợp mã nguồn mở (ví dụ: Postgres, MySQL) và mã nguồn đóng (ví dụ: Cơ sở dữ liệu Oracle)Mã nguồn mở
Thao tác dữ liệuNgôn ngữ cụ thể bằng cách sử dụng các câu lệnh Select, Insert, Update.
Ví dụ: SELECT fields FROM table WHERE…
Thông qua các API hướng đối tượng
Tính nhất quánCó tính nhất quán mạnh mẽPhụ thuộc vào hệ thống. Có hệ thống ưu tiên cung cấp tính nhất quán (ví dụ: MongoDB) trong khi một số khác cung cấp tính nhất quán cuối cùng (ví dụ: Cassandra)
Lược đồCấu trúc và kiểu dữ liệu được cố định trước. Để lưu trữ thông tin về một mục dữ liệu mới, toàn bộ cơ sở dữ liệu phải được thay đổi, trong thời gian đó cơ sở dữ liệu phải được ngoại tuyến.Các bản ghi có thể thêm thông tin mới một cách nhanh chóng, không giống như các hàng trong bảng SQL, dữ liệu khác nhau có thể được lưu trữ cùng nhau khi cần thiết. Đối với một số cơ sở dữ liệu việc thêm các trường mới một cách linh hoạt sẽ khó khăn hơn.

Đặc điểm của NoSQL

  • NoSQL lưu trữ dữ liệu của mình theo dạng cặp giá trị “key – value”. Sử dụng số lượng lớn các node để lưu trữ thông tin.
  • Mô hình phân tán dưới sự kiểm soát phần mềm.
  • Chấp nhận dữ liệu bị trùng lặp do một số node sẽ lưu cùng thông tin giống nhau.
  • Một truy vấn sẽ được gửi tới nhiều máy cùng lúc, do đó khi một máy nào đó không phục vụ được sẽ không ảnh hưởng lắm đến chất lượng trả về kết quả.
  • Phi quan hệ – không có ràng buộc nào cho việc nhất quán dữ liệu.
  • Tính nhất quán không theo thời gian thực: Sau mỗi thay đổi CSDL, không cần tác động ngay đến tất cả các CSDL liên quan mà được lan truyền theo thời gian.

Các hệ thống NoSQL phổ biến

Với NoSQL, dữ liệu có thể được lưu trữ theo kiểu không có lược đồ hoặc dạng tự do. Dữ liệu bất kỳ có thể được lưu trữ trong bản ghi bất kỳ. Trong số các cơ sở dữ liệu NoSQL, có 4 mô hình lưu trữ dữ liệu phổ biến, do đó, có 4 loại hệ thống NoSQL phổ biến là Document database, Key-value stores, Wide column stores và Graph database.

1. Document database (ví dụ: CouchDB, MongoDB): Dữ liệu được thêm vào lưu trữ dưới dạng cấu trúc JSON tự do hoặc “tài liệu”, trong đó dữ liệu có thể là bất kỳ kiểu nào, từ số nguyên đến chuỗi hay đến các văn bản tự do.

  • Ưu điểm: Dùng khi dữ liệu nguồn không được mô tả đầy đủ.
  • Nhược điểm: Hiệu năng truy vấn, Không có cú pháp chuẩn cho câu truy vấn dữ liệu.

2. Key-value stores (ví dụ: Redis, Riak): Các giá trị dạng tự do, từ số nguyên hoặc chuỗi đơn giản đến các tài liệu JSON phức tạp, được truy cập trong cơ sở dữ liệu bằng các khóa.

  • Ưu điểm: Tìm kiếm rất nhanh.
  • Nhược điểm: Lưu dữ liệu không theo khuôn dạng (schema) nhất định.

3. Wide column stores (ví dụ: HBase, Cassandra): Dữ liệu được lưu trữ trong các cột thay vì các hàng như trong một hệ thống SQL thông thường. Bất kỳ số lượng cột nào (và do đó nhiều loại dữ liệu khác nhau) có thể được nhóm hoặc tổng hợp khi cần cho truy vấn hoặc chế độ xem dữ liệu.

  • Ưu điểm: Tìm kiếm nhanh, Phân tán dữ liệu tốt.
  • Nhược điểm: Hỗ trợ được với rất ít phần mềm.

4. Graph database (ví dụ: Neo4j): Dữ liệu được biểu diễn dưới dạng mạng hoặc đồ thị của các thực thể và các mối quan hệ của thực thể đó, với mỗi node trong biểu đồ là một khối dữ liệu ở dạng tự do.

  • Ưu điểm: Ứng dụng các thuật toán trên đồ thị như Đường đi ngắn nhất, liên thông,…
  • Nhược điểm: Phải duyệt nội bộ đồ thị, để trả lời lại các truy vấn. Không dễ để phân tán.

Lưu trữ dữ liệu loại bỏ lược đồ rất hữu ích trong các trường hợp sau:

  • Người dùng muốn truy cập nhanh vào dữ liệu, và mục tiêu là quan tâm nhiều hơn đến tốc độ, sự đơn giản của việc truy cập hơn là sự đáng tin cậy hoặc tính nhất quán của các giao dịch.
  • Người dùng lưu trữ một khối lượng dữ liệu lớn và không muốn hạn chế bản thân vào các lược đồ, vì việc thay đổi lược đồ sau này có thể diễn ra chậm và khó khăn.
  • Người đang lấy dữ liệu phi cấu trúc từ một hoặc nhiều nguồn và muốn giữ nguyên dữ liệu ở dạng ban đầu để tận dụng tối đa tính linh hoạt của nó.
  • Người dùng muốn lưu trữ dữ liệu theo cấu trúc phân cấp, nhưng lại muốn các cấu trúc phân cấp đó phải được mô tả bởi chính dữ liệu mà không phải là một lược đồ bên ngoài. NoSQL cho phép dữ liệu tự tham chiếu theo phương pháp phức tạp hơn cơ sở dữ liệu SQL mô phỏng.

Truy vấn cơ sở dữ liệu NoSQL

Ngôn ngữ truy vấn có cấu trúc được sử dụng bởi các cơ sở dữ liệu truyền thống cung cấp một cách thống nhất để giao tiếp với máy chủ khi lưu trữ và truy xuất dữ liệu. Cú pháp SQL được tiêu chuẩn hóa cao, do đó, trong khi các cơ sở dữ liệu riêng lẻ có thể xử lý các hoạt động khác nhau thì những điều cơ bản vẫn giống nhau.

Ngược lại, mỗi cơ sở dữ liệu NoSQL có cú pháp riêng để truy vấn và quản lý dữ liệu. Ví dụ, CouchDB sử dụng các yêu cầu dưới dạng JSON, được gửi qua HTTP, để tạo hoặc truy xuất tài liệu từ cơ sở dữ liệu của nó. MongoDB gửi các đối tượng JSON qua giao thức nhị phân, bằng giao diện dòng lệnh hoặc thư viện ngôn ngữ.

Một số công cụ của NoSQL có thể sử dụng cú pháp giống như SQL để làm việc với dữ liệu, nhưng chỉ trong phạm vi hạn chế. Ví dụ, Apache Cassandra, một cơ sở dữ liệu lưu trữ cột giống như ngôn ngữ của SQL - Ngôn ngữ truy vấn Cassandra (Cassandra Query Language - CQL). Một số cú pháp CQL nằm ngoài SQL, như các từ khóa SELECT hoặc INSERT, nhưng không có cách nào để thực hiện JOIN hoặc subquery trong Cassandra.

Kiến trúc “Không chia sẻ” - Shared-nothing

Một sự lựa chọn thiết kế của hệ thống NoSQL là kiến trúc không chia sẻ. Ở kiểu kiến trúc này, mỗi node server trong cụm hoạt động độc lập với mọi node khác. Hệ thống không cần phải nhận được sự đồng thuận từ mỗi node để trả lại dữ liệu cho khách hàng. Các truy vấn diễn ra nhanh chóng vì chúng có thể được trả về từ node nào gần nhất hoặc thuận tiện nhất.

Một lợi thế khác của “Shared-nothing” là khả năng phục hồi và mở rộng quy mô. Việc mở rộng cụm dễ dàng như quay các nút mới trong cụm và chờ chúng đồng bộ với các node khác. Nếu một node trong NoSQL bị hỏng, các máy chủ khác trong cụm sẽ tiếp tục hoạt động, tất cả các dữ liệu vẫn có sẵn để phục vụ các yêu cầu ngay cả khi có ít node hơn.

Những hạn chế của NoSQL

Nếu NoSQL cung cấp rất nhiều sự tự do và linh hoạt, tại sao không từ bỏ hoàn toàn SQL? Câu trả lời đơn giản: còn rất nhiều ứng dụng vẫn yêu cầu các loại ràng buộc, tính nhất quán và các biện pháp bảo vệ mà cơ sở dữ liệu SQL cung cấp. Trong những trường hợp đó, một số lợi thế trên nền tảng của NoSQL có thể bị chuyển thành nhược điểm.
Một số hạn chế khác xuất phát từ thực tế là các hệ thống NoSQL còn khá “non trẻ”, có thể kể đến một vài nhược điểm như sau:

1. Không có lược đồ

Ngay cả khi bạn lấy dữ liệu ở dạng tự do, bạn hầu như luôn cần áp đặt các ràng buộc để làm cho nó hữu ích. Với NoSQL, trách nhiệm sẽ được chuyển từ cơ sở dữ liệu sang nhà phát triển ứng dụng. Ví dụ, nhà phát triển có thể áp đặt cấu trúc thông qua một hệ thống map đối tượng quan hệ hoặc ORM. Nhưng nếu bạn muốn lược đồ tự dữ liệu, NoSQL thường sẽ không hỗ trợ.

Một số giải pháp NoSQL cung cấp các cơ chế xác thực và nhập dữ liệu tùy chọn. Chẳng hạn, Apache Cassandra có một loạt các kiểu dữ liệu nguyên gốc tương tự các kiểu dữ liệu được tìm thấy trong SQL thông thường.

2. Thiếu tính nhất quán

NoSQL đánh đổi sự nhất quán để ưu tiên tốc độ, hiệu suất hiệu quả hơn. Dữ liệu được chèn vào cụm dù thế nào cũng sẽ khả dụng trên toàn bộ hệ thống, nhưng không thể biết chắc chắn khoảng thời gian nào.

Một số cơ sở dữ liệu NoSQL có các cơ chế để khắc phục điều này. Chẳng hạn như MongoDB, hệ thống này đảm bảo tính nhất quán cho các hoạt động riêng lẻ, nhưng không phải cho toàn bộ cơ sở dữ liệu. Microsoft Azure CosmosDB cho phép bạn chọn mức độ nhất quán cho mỗi yêu cầu, do đó bạn có thể chọn hành vi phù hợp với trường hợp sử dụng của mình.

3. NoSQL lock-in

Hầu hết các hệ thống NoSQL đều tương tự về khái niệm, tuy nhiên, cách thực hiện lại rất khác nhau. Mỗi hệ thống sẽ có cơ chế truy vấn dữ liệu và quản lý riêng. Điều này có thể sẽ trở gây ra trở ngại nếu xảy ra các thay đổi hệ thống trong quá trình làm việc.

Ví dụ nếu bạn thay đổi hệ thống từ MongoDB sang CouchDB bạn sẽ phải làm nhiều viêc hơn là chỉ di chuyển dữ liệu. Bạn cũng phải điều hướng sự khác biệt trong truy cập dữ liệu và cách thức lập trình, nói cách khác, bạn phải viết lại các phần của ứng dụng truy cập cơ sở dữ liệu.

4. Kỹ năng non trẻ

Một hạn chế khác đối với NoSQL là người sử dụng có thể sẽ thiếu các kỹ năng chuyên môn ở mức tương đối. Trong khi thị trường dành cho SQL vẫn phát triển thì NoSQL còn rất non trẻ bởi hệ thống này còn khá mới và không phải ai cũng biết cách sử dụng thành thạo.

Theo thống kê của Truth.com vào cuối năm 2017, khối lượng danh sách công việc cho SQL, thông thường là MySQL MySQL, Microsoft SQL Server, Oracle Database,... cao hơn tổng ba năm với khối lượng công việc cho MongoDB, Couchbase và Cassandra. Nhu cầu của NoSQL đang tăng lên, nhưng nó vẫn là một phần nhỏ của thị trường cho SQL.

Triển khai NoSQL Database trong các doanh nghiệp, tổ chức

Với những lợi thế của mình, NoSQL trở nên cực kỳ phù hợp với các thách thức của việc lưu trữ dữ liệu hiện đại. Thêm nữa việc tiết kiệm chi phí và thời gian làm cho NoSQL càng thêm nổi bật so với các giải pháp cơ sở dữ liệu quan hệ.

Thông thường, các tổ chức sẽ bắt đầu với thử nghiệm quy mô nhỏ trên cơ sở dữ liệu NoSQL. Hầu hết các cơ sở dữ liệu này là nguồn mở, có nghĩa là chúng có thể được tải xuống, triển khai và mở rộng với chi phí thấp.

Nhiều tổ chức bắt đầu nhận thấy những lợi thế đáng kể khi sử dụng cơ sở dữ liệu NoSQL cho các dự án. Bởi vì chu kỳ phát triển nhanh hơn, các tổ chức có thể đổi mới nhanh hơn và cung cấp trải nghiệm khách hàng vượt trội hơn với chi phí thấp hơn. Với những ưu điểm trên, NoSQL đang được sử dụng nhiều trong các dự án Big Data, các dự án Real-time, số lượng dữ liệu nhiều.

Xem thêm:

Chủ Nhật, 23/06/2019 08:14
4,510 👨 15.419
0 Bình luận
Sắp xếp theo