Sự khác biệt giữa NoQuery và RDBMS truyền thống là gì?


71

Sự khác biệt giữa NoQuery và RDBMS truyền thống là gì?

Trong vài tháng qua, NoQuery thường xuyên được nhắc đến trong các tin tức kỹ thuật. Các tính năng quan trọng nhất của nó so với RDBMS truyền thống là gì? Ở mức độ nào (vật lý, logic) làm sự khác biệt xảy ra?

Đâu là nơi tốt nhất để sử dụng NoQuery? Tại sao?

Câu trả lời:


61

NoQuery là viết tắt của "Không chỉ SQL" và thường có nghĩa là cơ sở dữ liệu không phải là cơ sở dữ liệu quan hệ, đã rất phổ biến trong những thập kỷ qua.

Lý do tại sao NoQuery trở nên phổ biến trong vài năm qua chủ yếu là vì, khi một cơ sở dữ liệu quan hệ phát triển từ một máy chủ, nó không còn dễ sử dụng nữa. Nói cách khác, chúng không mở rộng rất tốt trong một hệ thống phân tán. Tất cả các trang web lớn mà bạn đề cập đến Google, Yahoo, Facebook và Amazon (tôi không biết nhiều về Digg) có nhiều dữ liệu và lưu trữ dữ liệu trong các hệ thống phân tán vì nhiều lý do. Có thể là dữ liệu không phù hợp trên một máy chủ hoặc có những yêu cầu về tính sẵn sàng cao .

Định lý CAP

Các thuộc tính của một hệ phân tán có thể được mô tả bởi Định lý CAP . Trong ba thuộc tính bạn chỉ có thể có tối đa hai:

  • C onsistency
  • Một sự sẵn có
  • khoan dung vào mạng P artitioning

Amazon Dynamo sử dụng tính nhất quán cuối cùng để đến gần để có được cả ba thuộc tính. Tài liệu năng động : Cửa hàng giá trị khóa khả dụng cao của Amazon rất đáng đọc khi tìm hiểu về cơ sở dữ liệu NoQuery và các hệ thống phân tán. Amazon Dynamo có các thuộc tính A và P.

Google có một cách tiếp cận khác với BigTable , có các thuộc tính C và A.

Các cơ sở dữ liệu NoQuery khác

Như tôi đã viết lúc đầu, có nhiều loại cơ sở dữ liệu NoQuery khác, được thiết kế cho các yêu cầu khác nhau. Ví dụ: cơ sở dữ liệu đồ thị như Neo4j , cơ sở dữ liệu tài liệu như CouchDB và cơ sở dữ liệu đa phương thức / đối tượng như OrientDB .

Cuối cùng tôi muốn nói rằng cơ sở dữ liệu quan hệ sẽ vẫn phổ biến. Họ rất linh hoạt và có thể bảo trì. Nhưng chúng không phải luôn luôn là sự lựa chọn tốt nhất.


1
Tốt, câu trả lời đầy đủ.
TML

NoQuery KHÔNG có nghĩa là không liên quan, nó chỉ có nghĩa là một cái gì đó không phải là SQL DBMS.
nvogel

1
Có vẻ như tại Hội nghị O'Reilly Strata gần đây, Mark Madsen đã đưa ra một cách giải thích mới về "NoQuery" trong lịch sử cơ sở dữ liệu của mình để thay thế "Không chỉ SQL". Bây giờ là: "Không, SQL" ;-)
Lukas Eder

6
"Không chỉ" là một trang bị thêm, phong trào NoQuery ban đầu đã mạnh mẽ chống lại các cơ sở dữ liệu quan hệ. Sau đó, họ tấn công vào thế giới thực.
Gaius

22

NoQuery là một thuật ngữ rất rộng và thường được gọi là "Không chỉ SQL". Thuật ngữ này không được ủng hộ trong cộng đồng không phải RDBMS.

Bạn sẽ thấy rằng cơ sở dữ liệu NoQuery có một vài đặc điểm chung. Chúng có thể được tạm chia thành một vài loại:

  • cửa hàng khóa / giá trị
  • Cơ sở dữ liệu lấy cảm hứng từ Bigtable (dựa trên tài liệu Google Bigtable)
  • Cơ sở dữ liệu lấy cảm hứng từ máy phát điện
  • cơ sở dữ liệu phân tán
  • cơ sở dữ liệu tài liệu

Đây là một câu hỏi lớn, nhưng nó đã được trả lời khá tốt trong Khảo sát cơ sở dữ liệu phân tán này .

Đối với một câu trả lời ngắn:

Cơ sở dữ liệu NoQuery có thể phân phối với nhiều phần ACID khác nhau để đạt được một số lợi ích khác - dung sai phân vùng, hiệu suất, phân phối tải hoặc mở rộng tuyến tính khi bổ sung phần cứng mới.

Cho đến khi nào sử dụng chúng - điều đó phụ thuộc hoàn toàn vào nhu cầu của ứng dụng của bạn.


12

NoQuery là một loại cơ sở dữ liệu không có lược đồ cố định như RDBMS truyền thống. Với cơ sở dữ liệu NoQuery, lược đồ được xác định bởi nhà phát triển trong thời gian chạy. Họ không viết các câu lệnh SQL bình thường đối với cơ sở dữ liệu, mà thay vào đó sử dụng API để lấy dữ liệu mà họ cần. Cơ sở dữ liệu NoQuery thường có thể mở rộng quy mô trên các máy chủ vật lý khác nhau một cách dễ dàng mà không cần biết dữ liệu bạn đang tìm kiếm trên máy chủ nào.

Tuy nhiên, có một số sự đánh đổi cho tất cả tính linh hoạt này: Cơ sở dữ liệu NoQuery khá thiếu tính năng so với các hệ thống RDBMS như SQL Server, Oracle, DB2, MySQL, v.v. Không có Nhà môi giới dịch vụ, Ghi nhật ký giao dịch, Gói ETL, v.v.

NoQuery không phải là một cái gì đó mới. Nó thực sự đã được khoảng 50-60 năm. Trước đó, nó được gọi là COBOL. Cùng một ý tưởng chính xác, chỉ một nhóm khác đã đưa ra nó.


3
Điểm 1 không chính xác đối với nhiều (tất cả?) Cơ sở dữ liệu NoQuery trừ khi bạn nói rõ ràng với cơ sở dữ liệu rằng bạn không quan tâm nếu việc viết thành công. Ví dụ: Bất kỳ cơ sở dữ liệu được hỗ trợ bởi Hadoop sẽ ghi dữ liệu đến ba địa điểm đến địa ngục hoặc nước cao. Theo mặc định, Cassandra sẽ ghi vào ba vị trí và xác nhận việc viết là thành công khi hai thành công.
Jeremiah Peschka

3
Làm thế nào để nó xử lý đồng thời khi thực hiện các cập nhật đó? Có một giao dịch loại phân tán đi giữa chúng, hoặc là ghi ACKed trước khi xử lý và các máy chủ xử lý phần còn lại trong nền?
mrdenny

Đồng thời phụ thuộc hoàn toàn vào việc thực hiện. Riak sử dụng đồng hồ vector để đảm bảo đồng thời và trong trường hợp ghi xung đột, chúng có thể được đưa trở lại ứng dụng gọi để giải quyết. Những người khác sử dụng một chiến thắng viết cuối cùng.
Jeremiah Peschka

Theo như xác nhận viết - trong hầu hết các trường hợp, ghi không được thừa nhận cho đến khi HĐH thừa nhận ghi. Bạn thậm chí có thể đi xa đến mức yêu cầu xác nhận ghi bền, điều đó có nghĩa là các bit thực sự được xóa vào đĩa thay vì nằm trong bộ đệm của hệ điều hành. MongoDB thừa nhận ghi vào bộ nhớ theo mặc định nhưng có thể được cấu hình để yêu cầu xác nhận ghi vào đĩa. Việc nhân rộng được xử lý khác nhau với mỗi sản phẩm. Với Hadoop, máy khách ghi vào máy chủ A ghi vào B ghi vào C. Một khi C phản hồi thì việc ghi đã hoàn tất và máy khách nhận được ghi ack.
Jeremiah Peschka

Trong trường hợp đó tôi đứng sửa. Tôi đã xóa tuyên bố không chính xác. Tôi đã FUBAR bất cứ điều gì khác?
mrdenny

6

Về cơ bản phân phối với thiết lập quan hệ, với khóa chính và khóa ngoài và với chi phí bổ sung liên quan đến việc giữ an toàn giao dịch, thường mang lại cho bạn hiệu suất tăng cực cao. Tuy nhiên, điều này không phải là duy nhất đối với cơ sở dữ liệu / kho dữ liệu mới, ví dụ như MySQL đã được điều chỉnh để thực hiện ở "cấp độ NoQuery" bằng cách bỏ qua các lớp.

Nói tóm lại, bạn thường có thể có được hiệu suất ấn tượng nếu bạn chấp nhận rủi ro có thể mất dữ liệu. Hầu hết các hệ thống NoQuery làm điều này. Ví dụ, MongoDB giai đoạn thay đổi dữ liệu sẽ được ghi khi thuận tiện. Bản thân dữ liệu là an toàn và giao dịch an toàn, nhưng được lưu trữ trong bộ lưu trữ dễ bay hơi (bộ nhớ). Nếu bạn mất điện, bạn không thể chắc chắn 100% rằng bạn đã mất dữ liệu hoặc bạn không có dữ liệu bị hỏng.

Đó là một sự đánh đổi giữa an ninh và hiệu suất.


5

Một nơi tốt để bắt đầu là mục Wikipedia . Về cơ bản thay vì liên quan đến dữ liệu trong bảng này sang bảng khác, bạn lưu trữ mọi thứ dưới dạng cặp giá trị khóa và không có lược đồ cơ sở dữ liệu, thay vào đó, nó được xử lý theo mã.

Một số trang web sử dụng đồng thời cả NoQuery và các máy chủ RDBMS điển hình, nhưng để lưu trữ dữ liệu khác nhau. Vì vậy, bạn không phải chọn cái này hay cái khác.


Thực tế là phần lớn câu hỏi này có thể được trả lời bằng cách vào WP khiến tôi xoa cằm khi chiêm ngưỡng các câu trả lời ở đây. Tôi nghĩ đó là một "câu hỏi phụ" quá nhỏ nhưng đó thực sự là tất cả những gì chúng ta có ngay bây giờ.
jcolebrand

1
Lưu ý quan trọng ở đây là hỗ trợ quan hệ (khóa ngoại) trong cơ sở hạ tầng cơ sở dữ liệu / máy chủ sẽ giải phóng cơ sở dữ liệu / máy chủ khỏi tải và quản lý khóa để duy trì tính toàn vẹn tham chiếu. Hậu quả của việc này, sự đánh đổi, là tính toàn vẹn tham chiếu, tính nhất quán và các mối quan tâm ACID khác sau đó được đẩy ra các ứng dụng. Nhiều ứng dụng được hưởng lợi từ điều này thay vì bị giới hạn bởi nó. (Một số ứng dụng phải được đưa vào mô hình máy khách / máy chủ).
Jim Dennis

0

Tôi đã làm việc rất nhiều trên cơ sở dữ liệu MongoDB NoQuery và Oracle.

Lược đồ

Cơ sở dữ liệu SQL có lược đồ được xác định trước để lưu trữ dữ liệu có cấu trúc.

Trong cơ sở dữ liệu NoQuery, không có lược đồ được xác định trước, ở đây lược đồ là phần tử động nhất dựa trên các phần tử dữ liệu.

Khả năng mở rộng

Cơ sở dữ liệu SQL có khả năng mở rộng theo chiều dọc, có nghĩa là nếu chúng ta muốn mở rộng cơ sở dữ liệu cơ sở SQL, chúng ta cần tăng cường phần cứng mà Hệ thống DBMS được cài đặt. Đây là nơi đôi khi nó đi cho giới hạn của khả năng mở rộng.

Cơ sở dữ liệu NoQuery có khả năng mở rộng theo chiều ngang, có nghĩa là nếu chúng ta muốn mở rộng quy mô, chúng ta cần thêm nhiều nút hơn và tạo mạng phân phối dựa trên nhu cầu và sức mạnh cần thiết của chính chúng ta. Đây là cách họ giảm tải trên cơ sở dữ liệu

Phục hồi dữ liệu

Trong cơ sở dữ liệu dựa trên SQL, để xác định và thao tác dữ liệu, chúng ta có thể sử dụng SQL (Ngôn ngữ truy vấn có cấu trúc), rất mạnh mẽ hiện nay.

Về cơ sở dữ liệu NoQuery, các truy vấn tập trung vào bộ sưu tập và tài liệu. Đôi khi nó được gọi là UnQL (Ngôn ngữ truy vấn không cấu trúc). Điều này vẫn đang trong giai đoạn phát triển, vì vậy nó thay đổi từ nhà cung cấp sang nhà cung cấp cơ sở dữ liệu NoQuery.

Để biết thêm về sự khác biệt chính, blog của tôi: Sự khác biệt giữa cơ sở dữ liệu SQL và NoQuery

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.