NoQuery là gì, nó hoạt động như thế nào và nó mang lại lợi ích gì? [đóng cửa]


168

Tôi đã nghe những điều về NoQuery và cuối cùng nó có thể trở thành sự thay thế cho các phương thức lưu trữ SQL DB do thực tế là tương tác DB thường là một cổ chai cho tốc độ trên web.

Vì vậy, tôi chỉ có một vài câu hỏi:

  1. Chính xác thì nó là gì?

  2. Làm thế nào nó hoạt động?

  3. Tại sao nó sẽ tốt hơn việc sử dụng Cơ sở dữ liệu SQL? Và nó tốt hơn bao nhiêu?

  4. Là công nghệ quá mới để bắt đầu triển khai chưa hoặc có đáng để xem xét không?


Câu trả lời:


110
  1. Chính xác thì nó là gì?

    Một mặt, một hệ thống cụ thể , nhưng nó cũng đã trở thành một từ chung cho nhiều loại phụ trợ lưu trữ dữ liệu mới không tuân theo mô hình DB quan hệ.

  2. Làm thế nào nó hoạt động?

    Mỗi hệ thống được gắn nhãn với tên chung hoạt động khác nhau, nhưng ý tưởng cơ bản là cung cấp khả năng mở rộng và hiệu suất tốt hơn bằng cách sử dụng các mô hình DB không hỗ trợ tất cả chức năng của RDBMS chung, nhưng vẫn đủ chức năng để hữu ích. Theo một cách nào đó, nó giống như MySQL, một lúc thiếu sự hỗ trợ cho các giao dịch, nhưng chính xác là điều đó, đã vượt trội so với các hệ thống DB khác. Nếu bạn có thể viết ứng dụng của mình theo cách không yêu cầu giao dịch, thì thật tuyệt.

  3. Tại sao nó sẽ tốt hơn việc sử dụng Cơ sở dữ liệu SQL? Và nó tốt hơn bao nhiêu?

    Sẽ tốt hơn khi trang web của bạn cần mở rộng quy mô lớn đến mức RDBMS tốt nhất chạy trên phần cứng tốt nhất bạn có thể đủ khả năng và tối ưu hóa càng nhiều càng tốt, đơn giản là không thể theo kịp tải. Nó tốt hơn bao nhiêu tùy thuộc vào trường hợp sử dụng cụ thể (rất nhiều hoạt động cập nhật kết hợp với nhiều liên kết rất khó đối với RDBMS "truyền thống") - cũng có thể là hệ số 1000 trong các trường hợp cực đoan.

  4. Là công nghệ quá mới để bắt đầu triển khai chưa hoặc có đáng để xem xét không?

    Phụ thuộc chủ yếu vào những gì bạn đang cố gắng để đạt được. Nó chắc chắn đủ trưởng thành để sử dụng. Nhưng rất ít ứng dụng thực sự cần phải mở rộng quy mô đó. Đối với hầu hết, một RDBMS truyền thống là đủ. Tuy nhiên, với việc sử dụng internet trở nên phổ biến hơn mọi lúc, nhiều khả năng các ứng dụng sẽ trở nên phổ biến hơn (mặc dù có lẽ không chiếm ưu thế).


2
có nghĩa là transactiongì?
Shawn Mclean


Liên kết "nhiều phụ trợ lưu trữ dữ liệu mới" đã chết
csguy

1
@csguy cảm ơn, được thay thế bằng một thứ ít có khả năng biến mất
Michael Borgwardt

135

Không có thứ gì như NoQuery!

NoQuery là một từ thông dụng.

Trong nhiều thập kỷ, khi mọi người nói về cơ sở dữ liệu, họ có nghĩa là cơ sở dữ liệu quan hệ. Và khi mọi người đang nói về cơ sở dữ liệu quan hệ, họ có nghĩa là những người bạn kiểm soát với Ngôn ngữ truy vấn có cấu trúc của Edgar F. Codd. Lưu trữ dữ liệu theo một cách khác? Điên cuồng! Bất cứ điều gì khác chỉ là phẳng.

Nhưng trong vài năm qua, mọi người bắt đầu đặt câu hỏi về giáo điều này. Mọi người tự hỏi nếu các bảng có hàng và cột thực sự là cách duy nhất để biểu diễn dữ liệu. Mọi người bắt đầu suy nghĩ và mã hóa, và đưa ra nhiều khái niệm mới về cách dữ liệu có thể được tổ chức. Và họ bắt đầu tạo ra các hệ thống cơ sở dữ liệu mới được thiết kế cho những cách làm việc mới với dữ liệu này.

Các triết lý của tất cả các cơ sở dữ liệu này là khác nhau. Nhưng có một điểm chung của tất cả các cơ sở dữ liệu này là Ngôn ngữ truy vấn có cấu trúc không còn phù hợp để sử dụng chúng. Vì vậy, mỗi cơ sở dữ liệu đã thay thế SQL bằng các ngôn ngữ truy vấn của riêng họ. Và vì vậy, thuật ngữ NoQuery đã ra đời, như một nhãn hiệu cho tất cả các công nghệ cơ sở dữ liệu thách thức mô hình cơ sở dữ liệu quan hệ cổ điển.

Vậy cơ sở dữ liệu NoQuery có điểm gì chung?

Thật ra, không nhiều.

Bạn thường nghe những cụm từ như:

  • NoQuery có khả năng mở rộng!
  • NoQuery là dành cho BigData!
  • NoQuery vi phạm ACID!
  • NoQuery là một kho lưu trữ khóa / giá trị được tôn vinh!

Điều đó có đúng không? Chà, một số câu lệnh này có thể đúng với một số cơ sở dữ liệu thường được gọi là NoQuery, nhưng mỗi câu lệnh cũng sai với ít nhất một câu lệnh khác. Trên thực tế, điểm chung duy nhất của cơ sở dữ liệu NoQuery là chúng là các cơ sở dữ liệu không sử dụng SQL. Đó là nó. Điều duy nhất định nghĩa chúng là những gì làm cho chúng khác biệt với nhau.

Vì vậy, những gì đặt cơ sở dữ liệu NoQuery khác nhau?

Vì vậy, chúng tôi đã làm rõ rằng tất cả các cơ sở dữ liệu thường được gọi là NoQuery là quá khác nhau để đánh giá chúng cùng nhau. Mỗi người trong số họ cần được đánh giá một cách riêng biệt để quyết định xem họ có phù hợp để giải quyết một vấn đề cụ thể không. Nhưng chúng ta bắt đầu từ đâu? Rất may, cơ sở dữ liệu NoQuery có thể được nhóm thành các danh mục nhất định, phù hợp cho các trường hợp sử dụng khác nhau:

Định hướng tài liệu

Ví dụ: MongoDB, CouchDB

Điểm mạnh: Dữ liệu không đồng nhất, hướng đối tượng làm việc, phát triển nhanh

Ưu điểm của họ là không yêu cầu cấu trúc dữ liệu nhất quán. Chúng rất hữu ích khi các yêu cầu của bạn và do đó bố cục cơ sở dữ liệu của bạn thay đổi liên tục hoặc khi bạn đang xử lý các bộ dữ liệu thuộc về nhau nhưng trông vẫn rất khác nhau. Khi bạn có nhiều bảng có hai cột được gọi là "khóa" và "giá trị", thì những bảng này có thể đáng để xem xét.

Cơ sở dữ liệu đồ thị

Ví dụ: Neo4j, Gi hươu cao cổ.

Điểm mạnh: Khai thác dữ liệu

Trong khi hầu hết các cơ sở dữ liệu NoQuery từ bỏ khái niệm quản lý quan hệ dữ liệu, các cơ sở dữ liệu này chấp nhận nó thậm chí còn nhiều hơn cả các cơ sở dữ liệu được gọi là cơ sở dữ liệu quan hệ.

Trọng tâm của họ là xác định dữ liệu bằng mối quan hệ của nó với dữ liệu khác. Khi bạn có nhiều bảng có khóa chính là khóa chính của hai bảng khác (và có thể một số dữ liệu mô tả mối quan hệ giữa chúng), thì đây có thể là một số thứ dành cho bạn.

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

Ví dụ: Redis, Cassandra, MemcacheDB

Điểm mạnh: Tra cứu nhanh các giá trị bằng các phím đã biết

Chúng rất đơn giản, nhưng điều đó làm cho chúng nhanh và dễ sử dụng. Khi bạn không có nhu cầu về các thủ tục được lưu trữ, các ràng buộc, trình kích hoạt và tất cả các tính năng cơ sở dữ liệu nâng cao đó và bạn chỉ muốn lưu trữ và truy xuất dữ liệu nhanh chóng, thì chúng là dành cho bạn.

Thật không may, họ cho rằng bạn biết chính xác những gì bạn đang tìm kiếm. Bạn cần hồ sơ của User157641? Không có vấn đề, sẽ chỉ mất vài giây. Nhưng điều gì sẽ xảy ra khi bạn muốn tên của tất cả người dùng trong độ tuổi từ 16 đến 24, có "bánh quế" là thực phẩm yêu thích của họ và đăng nhập trong 24 giờ qua? May mắn lớn. Khi bạn không có khóa xác định và duy nhất cho một kết quả cụ thể, bạn không thể lấy nó ra khỏi cửa hàng KV của mình một cách dễ dàng.

SQL có lỗi thời không?

Một số người đề xuất NoQuery cho rằng cơ sở dữ liệu NoQuery yêu thích của họ là cách thức mới để thực hiện và SQL là một điều của quá khứ.

Họ có đúng không?

Không, tất nhiên họ không. Mặc dù có những vấn đề mà SQL không phù hợp, nhưng nó vẫn có những điểm mạnh. Rất nhiều mô hình dữ liệu được trình bày đơn giản nhất là một tập hợp các bảng tham chiếu lẫn nhau. Đặc biệt bởi vì hầu hết các lập trình viên cơ sở dữ liệu đã được đào tạo trong nhiều thập kỷ để nghĩ về dữ liệu theo cách quan hệ và cố gắng đưa suy nghĩ này lên một công nghệ mới không được tạo ra cho nó hiếm khi kết thúc tốt đẹp.

Cơ sở dữ liệu NoQuery không phải là sự thay thế cho SQL - chúng là một sự thay thế.

Hầu hết các hệ sinh thái phần mềm xung quanh các cơ sở dữ liệu NoQuery khác nhau vẫn chưa hoàn thiện. Mặc dù có những tiến bộ, bạn vẫn chưa có các công cụ bổ sung hoàn thiện và mạnh mẽ như các công cụ có sẵn cho cơ sở dữ liệu SQL phổ biến.

Ngoài ra, có nhiều bí quyết hơn cho SQL xung quanh. Các thế hệ các nhà khoa học máy tính đã dành hàng thập kỷ sự nghiệp của họ để nghiên cứu tập trung vào cơ sở dữ liệu quan hệ và nó cho thấy: Tài liệu viết về cơ sở dữ liệu SQL và mô hình hóa dữ liệu quan hệ, cả thực tế và lý thuyết, có thể lấp đầy nhiều thư viện đầy sách. Làm thế nào để xây dựng cơ sở dữ liệu quan hệ cho dữ liệu của bạn là một chủ đề được nghiên cứu kỹ lưỡng, thật khó để tìm ra một trường hợp góc trong đó không có cách thực hành tốt nhất được chấp nhận trong sách.

Mặt khác, hầu hết các cơ sở dữ liệu NoQuery vẫn còn trong giai đoạn trứng nước. Chúng tôi vẫn đang tìm ra cách tốt nhất để sử dụng chúng.


Tôi giả sử câu trả lời cho câu hỏi Liệu NoQuery có nghĩa là cơ sở dữ liệu không liên quan? là Không vì cơ sở dữ liệu đồ thị cũng là NoQuery và chúng có liên quan. Chính xác?
tomasb

1
@tomasb Nó phụ thuộc vào cách bạn xác định "cơ sở dữ liệu quan hệ". Trong cơ sở dữ liệu đồ thị, quan hệ thậm chí còn quan trọng hơn trong các cơ sở dữ liệu thường được gọi là quan hệ.
Phi

"Không có vấn đề, sẽ chỉ mất vài giây." - tôi không thể có được thông số đọc không giao dịch tương tự trong ví dụ psql?
Nakilon

2
Câu trả lời hay, diễn đạt gần như chính xác như Adam Ruins mọi thứ ngoại trừ đó là "Philipp Ruins noQuery" ;-)
JGlass

2
Đây phải là câu trả lời tốt nhất.

28

Vì ai đó nói rằng bài viết trước của tôi không có chủ đề, tôi sẽ cố gắng bù đắp :-) NoQuery không phải và không bao giờ được dự định là một sự thay thế cho cơ sở dữ liệu SQL chính thống hơn, nhưng một vài từ để có được những điều trong quan điểm đúng.

Trọng tâm của triết lý NoQuery là sự cân nhắc rằng, có thể vì lý do thương mại và tính di động, các công cụ SQL có xu hướng coi thường sức mạnh to lớn của hệ điều hành UNIX và các dẫn xuất của nó.

Với cơ sở dữ liệu dựa trên hệ thống tệp, bạn có thể tận dụng ngay khả năng và sức mạnh ngày càng tăng của hệ điều hành cơ bản, vốn đang tăng đều đặn trong nhiều năm nay theo luật Moore. Với cách tiếp cận này, nhiều lệnh hệ điều hành cũng tự động trở thành "toán tử cơ sở dữ liệu" (nghĩ về "ls" "sort", "find" và vô số tiện ích shell UNIX khác).

Với suy nghĩ này và một chút sáng tạo, bạn thực sự có thể nghĩ ra một cơ sở dữ liệu dựa trên hệ thống tệp có thể khắc phục các hạn chế của nhiều công cụ SQL phổ biến, ít nhất là đối với các mẫu sử dụng cụ thể, đó là toàn bộ triết lý của NoQuery, theo cách tôi nhìn thấy nó

Tôi chạy hàng trăm trang web và tất cả chúng đều sử dụng NoQuery ở mức độ lớn hơn hoặc thấp hơn. Trên thực tế, họ không lưu trữ một lượng dữ liệu khổng lồ, nhưng ngay cả khi một số trong số họ có thể tôi có thể nghĩ đến việc sử dụng sáng tạo NoQuery và hệ thống tập tin để khắc phục bất kỳ tắc nghẽn nào. Một cái gì đó có thể sẽ khó khăn hơn với "tù" SQL truyền thống. Tôi khuyên bạn nên google cho "unix", "manis" và "shaffer" để hiểu ý của tôi.


9

Nếu tôi nhớ lại một cách chính xác, nó đề cập đến các loại cơ sở dữ liệu không nhất thiết phải theo mẫu quan hệ. Cơ sở dữ liệu tài liệu xuất hiện trong tâm trí, cơ sở dữ liệu không có cấu trúc cụ thể và không sử dụng SQL làm ngôn ngữ truy vấn cụ thể.

Nhìn chung, nó phù hợp hơn với các ứng dụng web dựa trên hiệu suất của cơ sở dữ liệu và không cần các tính năng nâng cao hơn của Công cụ cơ sở dữ liệu quan hệ. Ví dụ: Cửa hàng Khóa-> Giá trị cung cấp truy vấn đơn giản theo giao diện id có thể nhanh hơn 10 - 100 lần so với triển khai máy chủ SQL tương ứng, với chi phí bảo trì nhà phát triển thấp hơn.

Một ví dụ là bài viết này cho Cửa hàng Tuple OLTP , đã hy sinh các giao dịch để xử lý luồng đơn (không có vấn đề đồng thời vì không cho phép đồng thời) và giữ tất cả dữ liệu trong bộ nhớ; đạt được hiệu suất tốt hơn 10 - 100 lần so với một hệ thống điều khiển RDBMS tương tự . Về cơ bản, nó đang di chuyển khỏi chế độ xem 'Một kích thước phù hợp với tất cả' của các hệ thống cơ sở dữ liệu và SQL.


1
Liên kết đầu tiên của bạn đề cập đến ý nghĩa của NoQuery (được gắn nhãn "này") dường như đã chết, vui lòng sửa lại.
việc

7

Trong thực tế, NoQuery là một hệ thống cơ sở dữ liệu hỗ trợ truy cập nhanh vào các đối tượng nhị phân lớn (docs, jpgs, v.v.) bằng cách sử dụng chiến lược truy cập dựa trên khóa. Đây là một sự khởi đầu từ truy cập SQL truyền thống chỉ đủ tốt cho các giá trị chữ và số. Không chỉ chiến lược lưu trữ và truy cập nội bộ mà cả cú pháp và giới hạn về định dạng hiển thị cũng hạn chế SQL truyền thống. Việc triển khai BLOB của cơ sở dữ liệu quan hệ truyền thống cũng chịu những hạn chế này.

Đằng sau bối cảnh đó là một sự thừa nhận gián tiếp về sự thất bại của mô hình SQL để hỗ trợ bất kỳ dạng OLTP hoặc hỗ trợ cho các định dạng dữ liệu mới. "Hỗ trợ" có nghĩa là không chỉ lưu trữ mà còn có khả năng truy cập đầy đủ - lập trình và truy vấn bằng cách sử dụng mô hình chuẩn.

Những người đam mê quan hệ đã nhanh chóng sửa đổi định nghĩa của NoQuery từ Not-SQL thành Not-Only-SQL để giữ cho SQL vẫn còn trong hình! Điều này không tốt đặc biệt là khi chúng ta thấy rằng hầu hết các chương trình Java ngày nay đều sử dụng ánh xạ ORM của mô hình quan hệ cơ bản. Một khái niệm mới phải có một định nghĩa rõ ràng. Khác nó sẽ kết thúc như SOA.

Cơ sở của các hệ thống NoQuery nằm trong cặp khóa - giá trị ngẫu nhiên. Nhưng điều này không phải là mới. Các hệ thống cơ sở dữ liệu truyền thống như IMS và IDMS đã hỗ trợ các khóa ramdom băm (không sử dụng bất kỳ chỉ mục nào) và chúng vẫn làm. Trong thực tế IDMS đã có một từ khóa NONQuery, nơi họ hỗ trợ truy cập SQL vào cơ sở dữ liệu mạng cũ hơn mà họ gọi là NONQuery.


5

Nó giống như bể sục: cả thương hiệu và tên chung. Đây không chỉ là một công nghệ cụ thể, mà là một loại công nghệ cụ thể , trong trường hợp này đề cập đến các "cơ sở dữ liệu" quy mô lớn (thường thưa thớt) như BigTable hoặc CouchDB của Google.


5

NoQuery chương trình thực tế dường như là một cơ sở dữ liệu quan hệ được triển khai trong awk bằng cách sử dụng các tệp phẳng trên phụ trợ. Mặc dù họ tuyên bố, "Về cơ bản, NoQuery không có giới hạn tùy ý và có thể hoạt động ở những sản phẩm khác không thể. Ví dụ: không có giới hạn về kích thước trường dữ liệu, số lượng cột hoặc kích thước tệp", tôi không nghĩ đó là cơ sở dữ liệu quy mô lớn của tương lai.

Như Joel nói, các cơ sở dữ liệu có khả năng mở rộng ồ ạt như BigTable hoặc HBase , thú vị hơn nhiều. GQL là ngôn ngữ truy vấn được liên kết với BigTable và Máy ứng dụng. Phần lớn SQL được điều chỉnh để tránh các tính năng mà Google coi là cổ chai (như tham gia). Tuy nhiên, tôi chưa từng nghe điều này được gọi là "NoQuery" trước đây.


5

NoQuery là một hệ thống cơ sở dữ liệu không sử dụng các truy vấn SQL dựa trên chuỗi để tìm nạp dữ liệu.

Thay vào đó, bạn xây dựng các truy vấn bằng API mà họ sẽ cung cấp, ví dụ Amazon DynamoDB là một ví dụ điển hình về cơ sở dữ liệu NoQuery.

Cơ sở dữ liệu NoQuery tốt hơn cho các ứng dụng lớn trong đó khả năng mở rộng là quan trọng.


1

NoQuery có nghĩa là cơ sở dữ liệu không liên quan?

Có, NoQuery khác với RDBMS và OLAP. Nó sử dụng các mô hình nhất quán lỏng lẻo hơn các cơ sở dữ liệu quan hệ truyền thống.

Các mô hình nhất quán được sử dụng trong các hệ thống phân tán như hệ thống bộ nhớ chia sẻ phân tán hoặc lưu trữ dữ liệu phân tán.

Làm thế nào nó hoạt động nội bộ?

Các hệ thống cơ sở dữ liệu NoQuery thường được tối ưu hóa cao cho các hoạt động truy xuất và nối thêm và thường cung cấp ít chức năng ngoài lưu trữ bản ghi (ví dụ: lưu trữ khóa-giá trị). Tính linh hoạt trong thời gian chạy giảm so với các hệ thống SQL đầy đủ được bù đắp bằng mức tăng đáng kể về khả năng mở rộng và hiệu suất cho các mô hình dữ liệu nhất định.

Nó có thể hoạt động trên dữ liệu có cấu trúc và không cấu trúc. Nó sử dụng Bộ sưu tập thay vì Bảng

Làm thế nào để bạn truy vấn "cơ sở dữ liệu" như vậy?

Xem SQL vs NoQuery: Trận chiến của các phần cuối ; nó giải thích tất cả

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.