Sự khác biệt giữa cơ sở dữ liệu dựa trên Tài liệu và Khoá / Giá trị?


97

Tôi biết có ba loại cơ sở dữ liệu không phải sql khác nhau, phổ biến.

  • Khóa / Giá trị: Redis, Nội các Tokyo, Memcached
  • ColumnFamily: Cassandra, HBase
  • Tài liệu: MongoDB, CouchDB

Tôi đã đọc các blog dài về nó mà không hiểu nhiều lắm.

Tôi biết các cơ sở dữ liệu quan hệ và biết các cơ sở dữ liệu dựa trên tài liệu như MongoDB / CouchDB.

Ai đó có thể cho tôi biết sự khác biệt chính giữa những thứ này và 2 trước đây trong danh sách là gì không?


4
có năm: (1) Kho khóa-giá trị: Oracle Coherence, Redis, Nội các Kyoto (2) Cơ sở dữ liệu kiểu BigTable: Apache HBase, Apache Cassandra (3) Cơ sở dữ liệu tài liệu: MongoDB, CouchDB (4) Công cụ tìm kiếm toàn văn: Apache Lucene, Apache Solr (5) Biểu đồ cơ sở dữ liệu: neo4j, FlockDB, xem NoSQL-data-mô hình-kỹ thuật
Gary Gauh

Câu trả lời:


74

Sự khác biệt chính là mô hình dữ liệu và khả năng truy vấn.

Cửa hàng khóa giá trị

Loại đầu tiên rất đơn giản và có lẽ không cần giải thích gì thêm.

Mô hình dữ liệu: nhiều hơn các cửa hàng khóa-giá trị

Mặc dù có một số tranh luận về tên chính xác cho các cơ sở dữ liệu như Cassandra, tôi muốn gọi chúng là các cửa hàng gia đình cột . Mặc dù các cặp khóa-giá trị là một phần thiết yếu của Cassandra, nó không chỉ giới hạn ở đó. Nó cho phép bạn lồng các cặp khóa-giá trị, vì vậy một khóa có thể tham chiếu đến nhiều cặp khóa-giá trị phụ.

Mặc dù vậy, bạn không thể lồng các cặp khóa-giá trị vô thời hạn. Bạn bị giới hạn ở ba cấp độ (họ cột) hoặc bốn cấp độ lồng nhau (họ siêu cột). Trong trường hợp họ cột thuật ngữ không đổ chuông, hãy xem WTF là một bài báo SuperColumn , đó là một giải thích tốt về mô hình dữ liệu của Cassandra.

Cơ sở dữ liệu tài liệu , chẳng hạn như CouchDB và MongoDB lưu trữ toàn bộ tài liệu dưới dạng các đối tượng JSON . Bạn có thể coi các đối tượng này là các cặp khóa-giá trị lồng nhau. Không giống như Cassandra, bạn có thể lồng các cặp khóa-giá trị tùy thích. JSON cũng hỗ trợ mảng và hiểu các kiểu dữ liệu khác nhau, chẳng hạn như chuỗi, số và giá trị boolean.

Truy vấn

Tôi tin rằng các cửa hàng thuộc nhóm cột chỉ có thể được truy vấn bằng khóa hoặc bằng cách viết các hàm thu nhỏ bản đồ. Bạn không thể truy vấn các giá trị như bạn làm trong cơ sở dữ liệu SQL. Nếu ứng dụng của bạn cần các truy vấn phức tạp hơn, ứng dụng của bạn sẽ phải tạo và duy trì các chỉ mục để truy cập dữ liệu mong muốn.

Cơ sở dữ liệu tài liệu cũng hỗ trợ các truy vấn theo khóa và chức năng thu gọn bản đồ, nhưng cũng cho phép bạn thực hiện các truy vấn cơ bản theo giá trị, chẳng hạn như "Cung cấp cho tôi tất cả người dùng có hơn 10 bài đăng". Cơ sở dữ liệu tài liệu linh hoạt hơn theo cách này.


2
Vì vậy, các cửa hàng key-value như redit không cho phép bạn lưu trữ key: value lồng nhau? Và từ mô tả của bạn, sau đó lưu trữ toàn bộ cơ sở dữ liệu (từ RDBMS) vào Cassandra nghe có vẻ không thông minh lắm vì nó không cho phép truy vấn linh hoạt và có độ sâu lồng nhau hạn chế, tôi nói đúng không?
never_had_a_name

7
@ajsie: Đúng, cửa hàng khóa-giá trị không hỗ trợ các cặp khóa-giá trị lồng nhau. Hầu hết chúng đều hỗ trợ các giá trị chuyên biệt, chẳng hạn như danh sách. Cassandra rất khác với RDBMS, vì cả hai đều được thiết kế để giải quyết các vấn đề rất khác nhau. Hệ thống RDBMS nhắm vào dữ liệu quan hệ cần truy vấn phức tạp, trong khi Cassandra nhằm xử lý một lượng lớn dữ liệu chủ yếu là không quan hệ. Tất nhiên có thể di chuyển cơ sở dữ liệu RDBMS sang Cassandra, nhưng thực sự thì không thông minh lắm. Mỗi người trong số họ có công dụng riêng.
Niels van der Rest

Vì vậy, có phải mọi cơ sở dữ liệu tài liệu cũng là một kho lưu trữ giá trị, khóa mà giá trị chỉ đơn giản là một JSON như {value: base64 (val)}?
GroovyDotCom

@GroovyDotCom: Có, bạn có thể sử dụng cơ sở dữ liệu tài liệu để lưu trữ các đối tượng khóa / giá trị đơn giản.
Niels van der Rest

15

Ayende đã đưa ra một lời giải thích thú vị về sự khác biệt giữa cơ sở dữ liệu Key-Value và Document:

Cơ sở dữ liệu tài liệu, cốt lõi của nó, là một kho lưu trữ khóa / giá trị với một ngoại lệ chính. Thay vì chỉ lưu trữ bất kỳ đốm màu nào trong đó, một tài liệu db yêu cầu dữ liệu sẽ được lưu trữ ở định dạng mà cơ sở dữ liệu có thể hiểu được (tức là JSON, XML, v.v.). Trong hầu hết các dbs doc, điều đó có nghĩa là bây giờ chúng ta có thể cho phép các truy vấn trên dữ liệu tài liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.