8

Tôi hiểu rằng các NoSQL DB định hướng tài liệu là "các phần mở rộng" của mô hình KV ở chỗ chúng cho phép bạn truy vấn nhiều hơn là chỉ một khóa tra cứu duy nhất. Nhưng một khi một cái gì đó là một "tài liệu", tôi cảm thấy như nó đã có một mô hình quan hệ nướng vào nó:Relational vs Columnar và Document Databases - không phải là chúng giống nhau không?

"myJson": { 
    "fizz": 4, 
    "buzz": "true", 
    "widget" : { 
     ...etc. 
    } 
} 

Đối với tôi, tôi không thấy sự khác biệt giữa JSON này, và một bảng json_objects với một fizz và trường buzz và mối quan hệ khóa ngoài với bảng widgets thứ hai.

Và "cột" DB giống như Cassandra giống như âm thanh thẳng đứng/bảng DB.

Vì vậy, tôi hỏi: điều gì khác biệt về DBs tài liệu và cột hướng, và phân biệt (từ RDBMSes) về chúng? Những vấn đề gì họ thích hợp nhất để giải quyết điều đó làm cho chúng vượt trội hơn so với các DB quan hệ trong một số trường hợp nhất định? Cảm ơn trước!

Trả lời

17

Trước tiên, tôi muốn nói rằng bạn rất đúng khi nói rằng NoSql khác với Cơ sở dữ liệu quan hệ và do đó khó có thể so sánh được. Với điều đó đang được nói có nhiều khác biệt lớn giữa hai cái có thể so sánh được.

Scaling
Mặc dù bạn có thể Shard một cơ sở dữ liệu MySql có issues với sharding và enforcing ACID properties khi một RDMS là trên nhiều máy tính sẽ rất khó khăn, giải pháp NoSQL như Cassandra nổi tiếng với khả năng của họ để phát triển không có vấn đề với một số trường hợp quản lý 400 nodes in a cluster mà không có sự cố. Không chỉ đơn giản là phát triển cơ sở dữ liệu Cassandra, mà hiệu năng cũng không bị ảnh hưởng.

Giản đồ (ít hơn) mô hình.
Các hệ thống cơ sở dữ liệu NoSQL được phát triển để quản lý khối lượng lớn dữ liệu không tuân theo lược đồ cố định. Điều này có nghĩa rằng ví dụ bạn muốn thêm một cột mới vào một gia đình cột hiện có trong Cassandra bạn không cần phải quay trở lại và sửa đổi các gia đình cột vì vậy không cần cho việc này:

ALTER TABLE table_name ALTER COLUMN column_name datatype; 

Chúng ta có thể thay vì chỉ cần thêm các cột mới khi chúng tôi tiếp tục và có thể kết thúc bằng 'bảng' sau:

key   | follower1 | follower2 | follower2   
-------------+------------+-------------+----------- 
lyubent  | joeb  | chuckn  | gordonf  
chuckn  | joeb  | gordonf     
gordonf  | chuckn         
joeb  | chuckn  | lyubent  | joeb   

Điều này cho phép các mô hình dữ liệu linh hoạt và dễ dàng mở rộng nhưng làm như vậy dữ liệu trở nên kém cấu trúc hơn.

Speed ​​ cơ sở dữ liệu
NoSQL được tối ưu hóa cho high write speeds trong khi mục đích RDBMS cho tốc độ đọc cao. Nhưng ngay cả với điều đó trong tâm trí các giải pháp NoSql vẫn có xu hướng outperform RDBMs hệ thống khi nói đến lần đọc. Điều này là do các cơ sở dữ liệu NoSql không thực hiện nhiều chức năng làm chậm hoạt động đọc/ghi/cập nhật trong Mô hình quan hệ như ví dụ về các thuộc tính và giao dịch ACID.

When should it be used?

  • Ứng dụng/trang web của bạn sẽ cần phát triển nhanh chóng nhưng bạn muốn bắt đầu nhỏ.
  • Bạn quan tâm nhiều hơn đến việc ghi dữ liệu so với việc đọc dữ liệu.(Rất nhiều tweet được đăng nhưng không phải tất cả đều được đọc)
  • Tính khả dụng của hệ thống của bạn quan trọng hơn là dữ liệu được cập nhật 100%. (Vì vậy, nếu bạn là ngân hàng, bạn không muốn NoSql nhưng nếu bạn là một trang web cần 100% thời gian hoạt động thì đó có thể là lựa chọn tốt)
  • Nếu dữ liệu được ghi cần phải thành công 100% thời gian, nhưng sự nhất quán cuối cùng không phải là một vấn đề.

Chỉ để minh họa trực quan, điều này đã giúp tôi hiểu rất nhiều về các giải pháp sql khác nhau phù hợp với thế giới cơ sở dữ liệu và cách thức phù hợp với mục đích.

Database Triad - Availability, Consistency and Partition Tolerance

+1

Sơ đồ đó hoàn toàn sai, bạn không thể có CA db. Nó không thể có A nếu nó không phải là phân vùng khoan dung. Sơ đồ đó được thực hiện bởi một người hiểu lầm định lý CAP. Bạn không thể chọn 2, bạn cần phải chọn giữa C hoặc A. http://codahale.com/you-cant-sacrifice-partition-tolerance Liên kết đó được twitted bởi Brewer (tác giả của định lý CAP). Chỉ cần suy nghĩ về nó, những gì tài sản CAP không phân phối MySql (sharded (có HBase không có? Hiển thị cho tôi một kịch bản mà MySql có sẵn và HBase không. – user1944408

+0

RDBMS hệ thống đảm bảo tính nhất quán và sharding làm cho hệ thống khoan dung để phân vùng. Định lý sau đó cho rằng hệ thống có thể không đảm bảo tính khả dụng, do đó hệ thống RDBMS là CP – user1944408

+7

@ user1944408 Phê bình luôn được đánh giá cao, tuy nhiên bạn nói sơ đồ là hoàn toàn sai vì nơi HBase và MySql đứng trên sơ đồ. hình ảnh đã được sử dụng trong một số [câu trả lời] (http://stackoverflow.com/questions/2794736/best-data-store-for-billions-of-rows#answer-2794983) trên SO và vui lòng đọc qua [bài viết này] (http://blog.nahurst.com/visual-guide-to-nosql-systems) biện minh lý do tại sao MySql được đặt là CA, hoặc nếu bạn không muốn ... chúng ở đó để so sánh, đó là hướng dẫn về cơ sở dữ liệu NoSql, chứ không phải RDBM ' . –

2

Không có lược đồ db, bạn không có cột và loại cố định.

Ví dụ sản phẩm 'Jeans' có thể có thuộc tính 'giá', 'chiều dài' và 'mô hình' (M/W) nhưng đối với sách sản phẩm bạn có thuộc tính 'giá', 'tác giả' và 'tiêu đề'. Rất khó để mô hình hóa trong RDBMS vì bạn không linh hoạt và người dùng không thể chèn các thuộc tính tùy ý để dễ sử dụng cơ sở dữ liệu tài liệu hơn. được tối ưu hóa cho loại dữ liệu này để bạn có thể dễ dàng tìm kiếm và lọc theo giá trị trên các thuộc tính tùy ý (ví dụ: tất cả các sản phẩm có độ dài> 30 và model = w).

Các vấn đề liên quan