Thứ sáu, 09/08/2019 | 00:00 GMT+7

So sánh các mô hình và hệ thống quản lý cơ sở dữ liệu NoSQL

Khi hầu hết mọi người nghĩ về database , họ thường hình dung mô hình database quan hệ truyền thống bao gồm các bảng được tạo thành từ các hàng và cột. Trong khi các hệ thống quản lý database quan hệ vẫn xử lý phần lớn dữ liệu được chia sẻ trên internet, các mô hình dữ liệu thay thế đã trở nên phổ biến hơn trong những năm gần đây khi các nhà phát triển đã tìm cách giải quyết các hạn chế của mô hình quan hệ.

Các mô hình database phi quan hệ này, mỗi mô hình có những ưu điểm, nhược điểm và trường hợp sử dụng riêng, đã được gọi là cơ sở dữ liệu NoSQL .

Bài viết này sẽ giới thiệu cho bạn một vài mô hình database NoSQL được sử dụng phổ biến hơn. Nó sẽ cân nhắc một số điểm mạnh và điểm bất lợi của chúng, cũng như cung cấp một vài ví dụ về các hệ thống quản lý database và các trường hợp sử dụng tiềm năng cho từng hệ thống.

Database quan hệ và hạn chế của chúng

Database là các cụm thông tin hoặc dữ liệu được mô hình hóa một cách logic. Trong khi đó, hệ quản trị database (DBMS) là một chương trình máy tính tương tác với database . DBMS cho phép bạn kiểm soát quyền truy cập vào database , ghi dữ liệu, chạy truy vấn và thực hiện bất kỳ tác vụ nào khác liên quan đến quản lý database . Mặc dù hệ quản trị database thường được gọi là “cơ sở dữ liệu”, hai thuật ngữ này không thể hoán đổi cho nhau một cách chính xác. Database có thể là bất kỳ tập hợp dữ liệu nào, không chỉ là dữ liệu được lưu trữ trên máy tính, trong khi DBMS là phần mềm cụ thể cho phép bạn tương tác với database .

Tất cả các hệ quản trị database đều có một mô hình cơ bản cấu trúc cách dữ liệu được lưu trữ và truy cập. Hệ quản trị database quan hệ (RDBMS) là một DBMS sử dụng mô hình dữ liệu quan hệ. Trong mô hình này, dữ liệu được tổ chức thành các bảng, trong ngữ cảnh của RDBMS được gọi chính thức hơn là các quan hệ . Các hệ thống quản lý database quan hệ thường sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL) để quản lý và truy cập dữ liệu được lưu giữ trong database .

Trong lịch sử, mô hình quan hệ là cách tiếp cận được sử dụng rộng rãi nhất để quản lý dữ liệu và cho đến ngày nay, nhiều hệ quản trị database phổ biến nhất thực hiện mô hình quan hệ . Tuy nhiên, mô hình quan hệ có một số hạn chế có thể gây ra vấn đề trong một số trường hợp sử dụng nhất định.

Ví dụ, có thể khó mở rộng database quan hệ theo chiều ngang. Chia tỷ lệ theo chiều ngang , hoặc mở rộng quy mô , là thực hành thêm nhiều máy hơn vào một ngăn xếp hiện có để phân bổ tải và cho phép nhiều lưu lượng truy cập hơn và xử lý nhanh hơn. Điều này thường trái ngược với việc mở rộng quy mô dọc , liên quan đến việc nâng cấp phần cứng của một server hiện có, thường là bằng cách thêm nhiều RAM hoặc CPU.

Lý do khó mở rộng database quan hệ theo chiều ngang là do mô hình quan hệ được thiết kế đảm bảo tính nhất quán , nghĩa là các client truy vấn cùng một database sẽ luôn nhìn thấy dữ liệu mới nhất. Nếu bạn mở rộng quy mô database quan hệ theo chiều ngang trên nhiều máy, sẽ khó đảm bảo tính nhất quán vì client có thể ghi dữ liệu vào một nút chứ không phải các nút khác và có khả năng sẽ có độ trễ giữa lần ghi đầu tiên và thời gian khi các nút khác cập nhật để áp dụng thay đổi .

Một hạn chế khác được trình bày bởi các RDBMS là mô hình quan hệ được thiết kế để quản lý dữ liệu có cấu trúc hoặc dữ liệu phù hợp với kiểu dữ liệu được định nghĩa hoặc ít nhất được tổ chức theo một số cách xác định trước, làm cho nó có thể sắp xếp và tìm kiếm dễ dàng. Tuy nhiên, với sự phổ biến của máy tính cá nhân và sự gia tăng của Internet vào đầu những năm 1990, dữ liệu phi cấu trúc - chẳng hạn như email, ảnh, video, v.v. - trở nên phổ biến hơn.

Khi những hạn chế này ngày càng thắt chặt, các nhà phát triển bắt đầu tìm kiếm các giải pháp thay thế cho mô hình dữ liệu quan hệ truyền thống, dẫn đến sự phát triển phổ biến của database NoSQL.

Về NoSQL

Bản thân nhãn NoSQL có một định nghĩa khá mờ nhạt. “NoSQL” được đặt ra vào năm 1998 bởi Carlo Strozzi làm tên cho Database NoSQL mới của ông, được chọn đơn giản vì nó không sử dụng SQL để quản lý dữ liệu.

Thuật ngữ này mang một ý nghĩa mới sau năm 2009 khi Johan Oskarsson tổ chức một cuộc gặp mặt dành cho các nhà phát triển để thảo luận về sự phổ biến của “cơ sở dữ liệu nguồn mở, phân tán và không quan hệ” như CassandraVoldemort . Oskarsson đặt tên cho cuộc họp là “NOSQL” và kể từ đó thuật ngữ này đã được sử dụng như một phương thức tóm tắt cho bất kỳ database nào không sử dụng mô hình quan hệ. Thật thú vị, database NoSQL của Strozzi trên thực tế sử dụng mô hình quan hệ, nghĩa là database NoSQL ban đầu không phù hợp với định nghĩa hiện đại của NoSQL.

Vì “NoSQL” thường đề cập đến bất kỳ DBMS nào không sử dụng mô hình quan hệ, nên có một số mô hình dữ liệu hoạt động được liên kết với khái niệm NoSQL. Bảng sau bao gồm một số mô hình dữ liệu như vậy, nhưng xin lưu ý đây không phải là danh sách đầy đủ:

Mô hình database hoạt động Các DBMS mẫu
Kho key-value Redis, MemcacheDB
Database cột Cassandra, Apache HBase
Kho tài liệu MongoDB, Couchbase
Database đồ thị OrientDB, Neo4j

Bất chấp các mô hình dữ liệu cơ bản khác nhau này, hầu hết các database NoSQL đều có chung một số đặc điểm. Đầu tiên, database NoSQL thường được thiết kế để tối đa hóa tính khả dụng với chi phí nhất quán. Theo nghĩa này, tính nhất quán đề cập đến ý tưởng rằng bất kỳ thao tác đọc nào sẽ trả về dữ liệu mới nhất được ghi vào database . Trong database phân tán được thiết kế để có tính nhất quán cao, bất kỳ dữ liệu nào được ghi vào một nút sẽ ngay lập tức có sẵn trên tất cả các nút khác; nếu không, một lỗi sẽ xảy ra.

Ngược lại, database NoSQL đôi khi hướng đến tính nhất quán cuối cùng . Điều này nghĩa là dữ liệu mới được viết sẽ được cung cấp trên các nút khác trong database cuối cùng (thường trong vài phần nghìn giây), mặc dù không nhất thiết phải ngay lập tức. Điều này có lợi trong việc cải thiện tính khả dụng của dữ liệu của một người: mặc dù bạn có thể không thấy dữ liệu mới nhất được ghi, bạn vẫn có thể xem version cũ hơn của nó thay vì nhận được lỗi.

Database quan hệ được thiết kế để xử lý dữ liệu chuẩn hóa, nằm gọn trong một schemas được định nghĩa . Trong ngữ cảnh của DBMS, dữ liệu chuẩn hóa là dữ liệu được tổ chức theo cách để loại bỏ dư thừa - nghĩa là database chiếm càng ít không gian lưu trữ càng tốt - trong khi lược đồ là một phác thảo về cách dữ liệu trong database được cấu trúc.

Trong khi database NoSQL được trang bị để xử lý dữ liệu chuẩn hóa và chúng có thể sắp xếp dữ liệu trong một schemas được định nghĩa , các mô hình dữ liệu tương ứng của chúng thường cho phép linh hoạt hơn nhiều so với cấu trúc cứng nhắc do database quan hệ áp đặt.Do đó, database NoSQL nổi tiếng là sự lựa chọn tốt hơn để lưu trữ dữ liệu bán cấu trúc và phi cấu trúc. Tuy nhiên, hãy lưu ý đến điều đó, bởi vì database NoSQL không đi kèm với một schemas được định nghĩa , thường nghĩa là administrator database phải xác định cách dữ liệu được tổ chức và truy cập theo bất kỳ cách nào phù hợp nhất cho ứng dụng của họ.

Đến đây bạn đã có một số bối cảnh xung quanh database NoSQL là gì và điều gì làm cho chúng khác với database quan hệ, ta hãy xem xét kỹ hơn một số mô hình database NoSQL được triển khai rộng rãi hơn.

Database key-value

Database key-value , còn gọi là kho key-value , hoạt động bằng cách lưu trữ và quản lý các mảng kết hợp . Mảng kết hợp, còn gọi là từ điển hoặc bảng băm , bao gồm tập hợp các cặp key-value trong đó khóa đóng role là mã định danh duy nhất để truy xuất giá trị được liên kết. Giá trị có thể là bất kỳ thứ gì từ các đối tượng đơn giản, như số nguyên hoặc chuỗi, đến các đối tượng phức tạp hơn, như cấu trúc JSON.

Ngược lại với database quan hệ, database xác định cấu trúc dữ liệu được tạo thành từ các bảng hàng và cột với kiểu dữ liệu được định nghĩa , database key-value lưu trữ dữ liệu như một tập hợp duy nhất mà không có bất kỳ cấu trúc hoặc mối quan hệ nào. Sau khi kết nối với server database , một ứng dụng có thể xác định khóa (ví dụ: the_meaning_of_life ) và cung cấp giá trị phù hợp (ví dụ: 42 ), sau này có thể được truy xuất theo cách tương tự bằng cách cung cấp khóa. Database key-value coi bất kỳ dữ liệu nào được giữ bên trong nó như một đốm màu mờ đục; nó phụ thuộc vào ứng dụng để hiểu cách nó được cấu trúc.

Database key-value thường được mô tả là có hiệu suất cao, hiệu quả và có thể mở rộng. Các trường hợp sử dụng phổ biến cho database key-value là bộ nhớ đệm , hàng đợi thưquản lý phiên .

Một số repodata key-value nguồn mở phổ biến là:

Database Sự miêu tả
Redis Một repository dữ liệu trong bộ nhớ được sử dụng làm database , bộ nhớ cache hoặc môi giới thông báo, Redis hỗ trợ nhiều cấu trúc dữ liệu khác nhau, từ chuỗi đến bitmap, stream và index không gian.
Đã ghi nhớ Hệ thống bộ nhớ đệm đối tượng bộ nhớ có mục đích chung thường được sử dụng để tăng tốc các trang web và ứng dụng theo hướng dữ liệu bằng cách lưu dữ liệu và đối tượng vào bộ nhớ đệm.
Riak Database key-value phân tán với tính năng sao chép đa cụm và local nâng cao.

Database Columnar

Database cột , đôi khi được gọi là cơ sở dữ liệu hướng cột , là hệ thống database lưu trữ dữ liệu trong các cột. Điều này có vẻ tương tự với database quan hệ truyền thống, nhưng thay vì group các cột lại với nhau thành bảng, mỗi cột được lưu trữ trong một file hoặc vùng riêng biệt trong bộ nhớ của hệ thống.

Dữ liệu được lưu trữ trong database cột xuất hiện theo thứ tự bản ghi, nghĩa là mục nhập đầu tiên trong một cột có liên quan đến mục nhập đầu tiên trong các cột khác. Thiết kế này cho phép các truy vấn chỉ đọc các cột mà chúng cần, thay vì phải đọc mọi hàng trong bảng và loại bỏ dữ liệu không cần thiết sau khi nó được lưu trữ trong bộ nhớ.

Bởi vì dữ liệu trong mỗi cột là cùng một loại, nó cho phép các chiến lược tối ưu hóa lưu trữ và đọc khác nhau. Đặc biệt, nhiều administrator database cột thực hiện chiến lược nén chẳng hạn như mã hóa thời lượng chạy để giảm thiểu lượng không gian chiếm dụng bởi một cột.Điều này có thể mang lại lợi ích là tăng tốc độ đọc vì các truy vấn cần phải đi qua ít hàng hơn. Tuy nhiên, có một nhược điểm với database cột là hiệu suất tải có xu hướng chậm vì mỗi cột phải được ghi riêng biệt và dữ liệu thường được nén. Tải trọng gia tăng nói riêng, cũng như việc đọc các bản ghi riêng lẻ, có thể gây tốn kém về mặt hiệu suất.

Database hướng cột đã có từ những năm 1960. Tuy nhiên, kể từ giữa những năm 2000, database dạng cột đã được sử dụng rộng rãi hơn để phân tích dữ liệu vì mô hình dữ liệu dạng cột có lợi cho việc xử lý truy vấn nhanh. Chúng cũng được coi là có lợi trong các trường hợp ứng dụng cần thường xuyên thực hiện các chức năng tổng hợp , chẳng hạn như tìm tổng số trung bình hoặc tổng dữ liệu trong một cột. Một số hệ quản trị database dạng cột thậm chí có khả năng sử dụng các truy vấn SQL.

Một số database cột open-souce phổ biến là:

Database Sự miêu tả
Apache Cassandra Một cửa hàng chuyên mục được thiết kế để tối đa hóa khả năng mở rộng, tính sẵn có và hiệu suất.
Apache HBase Database phân tán hỗ trợ lưu trữ có cấu trúc cho lượng lớn dữ liệu và được thiết kế để hoạt động với thư viện phần mềm Hadoop .
ClickHouse Một DBMS chịu lỗi hỗ trợ tạo dữ liệu phân tích và truy vấn SQL theo thời gian thực.

Database hướng tài liệu

Database hướng tài liệu , hoặc kho tài liệu , là database NoSQL lưu trữ dữ liệu dưới dạng tài liệu. Kho lưu trữ tài liệu là một kiểu lưu trữ key-value : mỗi tài liệu có một định danh duy nhất - khóa của nó - và bản thân tài liệu đóng role là giá trị.

Sự khác biệt giữa hai mô hình này là, trong database key-value , dữ liệu được coi là không rõ ràng và database không biết hoặc quan tâm đến dữ liệu được giữ bên trong nó; Nó phụ thuộc vào ứng dụng để hiểu dữ liệu nào được lưu trữ. Tuy nhiên, trong repository tài liệu, mỗi tài liệu chứa một số loại metadata cung cấp một mức độ cấu trúc cho dữ liệu. Kho tài liệu thường đi kèm với API hoặc ngôn ngữ truy vấn cho phép user truy xuất tài liệu dựa trên metadata mà chúng chứa. Chúng cũng cho phép các cấu trúc dữ liệu phức tạp, vì bạn có thể lồng các tài liệu vào các tài liệu khác.

Không giống như database quan hệ, trong đó thông tin của một đối tượng nhất định có thể được trải rộng trên nhiều bảng hoặc database , database hướng tài liệu có thể lưu trữ tất cả dữ liệu của một đối tượng nhất định trong một tài liệu duy nhất. Các repository tài liệu thường lưu trữ dữ liệu dưới dạng tài liệu JSON , BSON , XML hoặc YAML và một số có thể lưu trữ các định dạng binary như tài liệu PDF. Một số sử dụng biến thể của SQL, tìm kiếm toàn văn hoặc ngôn ngữ truy vấn bản địa của riêng họ để truy xuất dữ liệu, và một số khác có nhiều hơn một phương thức truy vấn.

Database định hướng tài liệu đã có sự phát triển vượt bậc về mức độ phổ biến trong những năm gần đây. Nhờ có schemas linh hoạt, họ đã được sử dụng thường xuyên trong các nền tảng thương mại điện tử, viết blog và phân tích cũng như các hệ thống quản lý nội dung. Các kho tài liệu được coi là có khả năng mở rộng cao, với sharding là một chiến lược mở rộng theo chiều ngang phổ biến. Chúng cũng rất tốt để lưu giữ một lượng lớn thông tin phức tạp, không liên quan và có cấu trúc khác nhau.

Một số repodata dựa trên tài liệu nguồn mở phổ biến là:

Database Sự miêu tả
MongoDB Với mục đích chung, kho tài liệu phân tán, MongoDB là cơ sở dữ liệu hướng tài liệu được sử dụng rộng rãi nhất trên thế giới vào thời điểm viết bài này.
Couchbase Ban đầu được gọi là Membase, một repository dữ liệu tài liệu dựa trên JSON, tương thích với Memcached. Một database đa mô hình , Couchbase cũng có thể hoạt động như một kho key-value .
Apache CouchDB Một dự án của Apache Software Foundation, CouchDB lưu trữ dữ liệu dưới dạng tài liệu JSON và sử dụng JavaScript làm ngôn ngữ truy vấn của nó.

Database đồ thị

Database đồ thị có thể được coi là một danh mục con của mô hình lưu trữ tài liệu, trong đó chúng lưu trữ dữ liệu trong tài liệu và không nhấn mạnh rằng dữ liệu phải tuân theo một schemas được định nghĩa . Tuy nhiên, sự khác biệt là database biểu đồ thêm một lớp bổ sung vào mô hình tài liệu bằng cách làm nổi bật các mối quan hệ giữa các tài liệu riêng lẻ.

Để hiểu rõ hơn về khái niệm database đồ thị, điều quan trọng là phải hiểu các thuật ngữ sau:

  • Nút : Nút là đại diện của một thực thể riêng lẻ được theo dõi bởi database đồ thị. Nó ít nhiều tương đương với khái niệm bản ghi hoặc hàng trong database quan hệ hoặc tài liệu trong repository tài liệu. Ví dụ: trong database biểu đồ của các nghệ sĩ ghi âm nhạc, một nút có thể đại diện cho một nghệ sĩ biểu diễn hoặc ban nhạc.
  • Thuộc tính : Thuộc tính là thông tin phù hợp liên quan đến các nút riêng lẻ. Dựa trên ví dụ về nghệ sĩ thu âm của ta , một số thuộc tính có thể là “ca sĩ hát”, “nhạc jazz” hoặc “nghệ sĩ bán đĩa bạch kim”, tùy thuộc vào thông tin nào có liên quan đến database .
  • Cạnh : Còn gọi là đồ thị hoặc mối quan hệ , cạnh là đại diện cho cách hai nút có liên quan và là một khái niệm chính của database đồ thị phân biệt chúng với RDBMS và repository tài liệu. Các cạnh có thể được định hướng hoặc vô hướng .
    • Vô hướng : Trong đồ thị vô hướng, các cạnh giữa các nút tồn tại chỉ để hiển thị kết nối giữa chúng. Trong trường hợp này, các cạnh có thể được coi là mối quan hệ "hai chiều" - không có sự khác biệt ngụ ý giữa cách một nút liên quan với nút kia.
    • Có hướng : Trong một đồ thị có hướng, các cạnh có thể có các ý nghĩa khác nhau dựa trên hướng mà mối quan hệ bắt nguồn từ. Trong trường hợp này, các cạnh là mối quan hệ "một chiều". Ví dụ: database đồ thị có hướng có thể chỉ định mối quan hệ từ Sammy đến Seaweeds cho thấy rằng Sammy đã production một album cho group , nhưng có thể không hiển thị mối quan hệ tương đương từ The Seaweeds đến Sammy.

Một số hoạt động đơn giản hơn nhiều để thực hiện bằng cách sử dụng database đồ thị vì cách chúng liên kết và group các phần thông tin liên quan. Các database này thường được sử dụng trong những trường hợp quan trọng là có thể hiểu rõ hơn về mối quan hệ giữa các điểm dữ liệu hoặc trong các ứng dụng mà thông tin có sẵn cho user cuối được xác định bởi kết nối của họ với người khác, chẳng hạn như trong mạng xã hội. Chúng được sử dụng thường xuyên trong các công cụ phát hiện gian lận, khuyến nghị và các ứng dụng quản lý danh tính và quyền truy cập.

Một số database đồ thị nguồn mở phổ biến là:

Database Sự miêu tả
Neo4j Một DBMS tuân theo ACID với lưu trữ và xử lý biểu đồ root . Theo bài viết này, Neo4j là cơ sở dữ liệu đồ thị phổ biến nhất trên thế giới .
ArangoDB Không chỉ là database đồ thị, ArangoDB là database đa mô hình hợp nhất các mô hình dữ liệu đồ thị, tài liệu và key-value trong một DBMS. Nó có AQL (một ngôn ngữ truy vấn giống SQL root ), tìm kiếm toàn văn và một công cụ xếp hạng.
OrientDB Một database đa mô hình khác, OrientDB hỗ trợ các mô hình đồ thị, tài liệu, key-value và đối tượng.Nó hỗ trợ các truy vấn SQL và các giao dịch ACID.

Kết luận

Trong hướng dẫn này, ta chỉ giới thiệu một số mô hình dữ liệu NoSQL đang được sử dụng ngày nay. Một số mô hình NoSQL, chẳng hạn như cửa hàng đối tượng , đã có mức độ sử dụng khác nhau trong những năm qua nhưng vẫn là lựa chọn thay thế khả thi cho mô hình quan hệ trong một số trường hợp sử dụng. Những người khác, như cơ sở dữ liệu quan hệ đối tượngcơ sở dữ liệu chuỗi thời gian , kết hợp các phần tử của mô hình dữ liệu quan hệ và NoSQL để tạo thành một loại nền tảng trung gian giữa hai đầu của phổ.

Danh mục database NoSQL cực kỳ rộng và tiếp tục phát triển cho đến ngày nay. Nếu bạn muốn tìm hiểu thêm về các khái niệm và hệ thống quản lý database NoSQL, ta khuyên bạn nên xem thư viện nội dung liên quan đến NoSQL của ta .


Tags:

Các tin trước

Cách thêm truy vấn NoSQL vào MySQL với memcached trên Ubuntu 14.04 2015-07-31
Hiểu cơ sở dữ liệu SQL và NoSQL và các mô hình cơ sở dữ liệu khác nhau 2014-02-21