Có điều gì đột phá về NoQuery không? [đóng cửa]


46

Tôi là một anh chàng Cơ sở dữ liệu quan hệ rất vững chắc và hiểu tất cả các dạng của dạng bình thường thứ 3, đánh giá cao gốc rễ lý thuyết tập đại số của SQL và có thể có thể quan hệ hóa một trái tim tan vỡ (hoặc không).

Tôi chưa tìm ra cấu trúc cơ sở dữ liệu quan hệ CHO những đêm hẹn hò với vợ tôi, nhưng tôi đã nghĩ về các dự án cơ sở dữ liệu quan hệ vào những đêm hẹn hò với vợ tôi ..

Bây giờ tôi đang nghe về NoQuery và đang nghiên cứu nó. Theo đuổi, có bất cứ điều gì về NoQuery là đột phá, tiểu thuyết toán học hay "bạn không thực sự cần phải sắp xếp dữ liệu của mình một cách liên quan, cách tiếp cận này dễ dàng hơn nhiều"?

Có phải NoQuery giống như một siêu vỏ cho cấu trúc dữ liệu? Trong tâm trí của tôi, dữ liệu cuối cùng phải có cấu trúc để được truy xuất và việc truy xuất phải được xác định theo một ngôn ngữ nào đó.


2
Những loại cơ sở dữ liệu NoQuery nào không có cấu trúc? Cơ sở dữ liệu tài liệu có thể được phân cấp, nhưng lưu trữ tối thiểu dữ liệu của họ trong các tài liệu có chứa dữ liệu ở một số định dạng. Cơ sở dữ liệu đồ thị và các cửa hàng khóa-giá trị khá tự giải thích. Cơ sở dữ liệu NoQuery nào không có ngôn ngữ để truy vấn? Một số cơ sở dữ liệu tài liệu chỉ đơn giản là tìm kiếm văn bản hoặc XQuery cho XML, như hai ví dụ. SPARQL được sử dụng cho các cửa hàng RDF.
Thomas Owens

2
Cập nhật cho "Tôi đã nghĩ về các dự án cơ sở dữ liệu quan hệ vào những đêm hẹn hò với vợ tôi .." :) LOL. Câu hỏi hay quá.
Rocklan

2
Cơ sở dữ liệu NoQuery có cấu trúc, nhưng cấu trúc không phải lúc nào cũng dễ dàng ánh xạ tới đại số quan hệ. Các NoQuery khác nhau sử dụng các cấu trúc khác nhau, một số là hashmap giá trị khóa, phân cấp, cơ sở dữ liệu đối tượng, cơ sở dữ liệu đồ thị hoặc kho lưu trữ tài liệu là các loại phổ biến của NoQuery. Tất cả những gì NoQuery thực sự là nhận ra rằng SQL không phải là thuốc chữa bách bệnh, rằng một số miền vấn đề ánh xạ kém sang đại số SQL / quan hệ.
Lie Ryan

7
NoQuery là một cái tên sai lệch. Nó ngụ ý một nhóm với các đặc điểm trong khi đặc điểm chung duy nhất không phải là cơ sở dữ liệu SQL quan hệ cổ điển. Đó là một bộ mở. Nó giống như mô tả mọi thực phẩm không phải là bánh mì là "gia đình không phải bánh mì".
Pieter B

2
Ok những gì ồn ào về NoQuery? Thật dễ dàng: chúng tôi đã có một thế hệ người lớn lên với cơ sở dữ liệu quan hệ và đó là công cụ duy nhất họ có. Bởi vì nếu bạn chỉ có một cái búa, mọi thứ sẽ trở thành một cái đinh. Sau đó, bạn nhận được những thứ xấu xí như cố gắng đưa các đối tượng vào cơ sở dữ liệu quan hệ hoặc xây dựng một công cụ tìm kiếm trên đó. Nhận thức lớn là: một cơ sở dữ liệu SQL tốt cho nhiều thứ, nhưng không phải là tất cả. "không phải là tất cả" là điều lớn.
Pieter B

Câu trả lời:


24

NoQuery mang tính tiến hóa hơn là cách mạng. Về cơ bản, nó kết hợp các ý tưởng hiện có về "lưu trữ cơ sở dữ liệu bên ngoài" với "sử dụng các cấu trúc dữ liệu quen thuộc, không phải các bảng quan hệ".

Có nhiều loại cơ sở dữ liệu hơn quan hệ, ví dụ cơ sở dữ liệu phân cấp . Mặc dù cổ xưa theo các tiêu chuẩn ngày nay, nó đã kết nối thực sự tốt với các cấu trúc dữ liệu của dữ liệu của nó (ví dụ: các bản ghi COBOL ). Vấn đề là, dữ liệu trong cơ sở dữ liệu được mô hình hóa chặt chẽ với cách các bản ghi được trình bày trong các ngôn ngữ lập trình sử dụng chúng.

Chuyển nhanh sang phát minh cơ sở dữ liệu quan hệ , trong đó cuối cùng cơ sở dữ liệu tách biệt mối quan tâm và, khi được chuẩn hóa đúng cách, là một cách tuyệt vời để hình dung hầu hết các loại dữ liệu và mối quan hệ giữa dữ liệu. Nó thực sự dễ hiểu so với các loại cơ sở dữ liệu khác. Tuy nhiên, điều mà nó hoàn toàn thất bại là lưu trữ dữ liệu theo cách phản chiếu các đối tượng và các lớp trong một chương trình. Do đó, việc phát minh ra ánh xạ quan hệ đối tượng . Nói cách khác, thiết kế cơ sở dữ liệu thực sự là một trở ngại cho thiết kế chương trình sử dụng nó, đó là lý do tại sao chúng ta cần các thư viện ORM như Hibernate. Trong khi sạch sẽ và nhất quán, luôn có sự nghi ngờ dai dẳng trong đầu tôi rằng có gì đó không hoàn toàn đúng ở đó.

Điều này đã tạo ra thêm hai loại cơ sở dữ liệu, cơ sở dữ liệu đối tượngNoQuery .

Cả hai đều cố gắng giải quyết các vấn đề được giới thiệu bởi các cơ sở dữ liệu quan hệ trong khi không cho chúng ta thấy sự kinh hoàng của các cơ sở dữ liệu phân cấp. Dữ liệu vẫn được đặt trong các kho lưu trữ gần giống với các bảng, nhưng thực tế lại giống như các cấu trúc dữ liệu lập trình hơn là các bảng quan hệ. Mặc dù cơ sở dữ liệu đối tượng tuân theo các quy tắc được xác định rõ ràng, nhưng sự hiểu biết của tôi là NoQuery khá độc đoán. Ví dụ, một bảng có thể được hiển thị dưới dạng bảng băm hoặc mảng. Không có một cách dễ dàng, được xác định rõ ràng để truy vấn chúng bằng cách sử dụng một công cụ tùy ý tương tự như Oracle SQL Developer hoặc SQL Server Management Studio .

Ý tưởng là người ta có thể định nghĩa các cấu trúc dữ liệu dễ dàng tìm kiếm trong mã, thay vì ghép các truy vấn SQL phù hợp hơn với công cụ cơ sở dữ liệu SQL thay vì thể hiện truy vấn mà người ta mong muốn. Ví dụ, các kết quả mờ hoặc một phần khó khăn hơn và hoạt động kém hơn trong cơ sở dữ liệu quan hệ, trong khi cơ sở dữ liệu NoQuery có thể có cấu trúc được tối ưu hóa cho tìm kiếm như vậy và hoàn thành trong một phần nhỏ thời gian.

Có các ngôn ngữ để truy vấn NoQuery. Tuy nhiên, không có ngôn ngữ phổ quát như SQL dành cho cơ sở dữ liệu quan hệ.


Chỉnh sửa muộn:

Mặc dù tôi đã đủ quen thuộc với cơ sở dữ liệu NoQuery, nhưng câu hỏi này là động lực để tôi mua một cuốn sách chất lượng về chủ đề này và bắt đầu đọc nó với mục tiêu cuối cùng là trở thành một chuyên gia thực sự về chủ đề này. Các ý kiến ​​còn lại được dựa trên NoQuery chưng cất: Hướng dẫn ngắn gọn về Thế giới mới nổi của sự tồn tại của Polyglot của Pramod SadalageMartin Fowler .

Các tác giả tuyên bố rằng các cơ sở dữ liệu quan hệ không mở rộng tốt cho các cụm có khả năng phục vụ dữ liệu cần thiết cho các trang web như Amazon và Google: NoQuery được phát triển để phù hợp với phân khúc này, giúp thư giãn tính đồng thời và độ bền trong ACID để cung cấp số lượng truy vấn lớn. phần lớn sử dụng dữ liệu tĩnh (do đó, các giao dịch ACID không quan trọng).

Hơn nữa, họ cho rằng cơ sở dữ liệu NoQuery hoạt động mà không có lược đồ (trang 10) cho phép cơ sở dữ liệu NoQuery sửa đổi cấu trúc dữ liệu dễ dàng hơn. Tôi không chắc chắn rằng sự hiện diện hay vắng mặt của một lược đồ chính thức có liên quan đến vấn đề này, vì cơ sở dữ liệu SQL cũng cho phép sửa đổi các lược đồ. Bất kể, hai tác giả nổi tiếng đưa ra tuyên bố vì vậy nó là giá trị kiểm tra.

Tôi tin rằng cả hai điểm chính này chỉ phục vụ để thực thi quan điểm chính của tôi rằng NoQuery là tiến hóa, không mang tính cách mạng. Họ vẫn lưu trữ dữ liệu và thực hiện các cải tiến gia tăng về quy mô và khả năng sửa đổi. Họ cũng đưa ra quan điểm rằng NoQuery không tìm cách chiếm đoạt cơ sở dữ liệu quan hệ như là vua lưu trữ dữ liệu, chỉ cung cấp một phương tiện lưu trữ dữ liệu thay thế cho các loại dữ liệu cần mở rộng và biến đổi theo cách mà họ tin rằng cơ sở dữ liệu không hỗ trợ đủ tốt.


2
Một số cơ sở dữ liệu NoQuery có ngôn ngữ truy vấn. Tôi đã sử dụng XQuery và SPARQL trước đây, nếu dữ liệu được lưu trữ trong XML hoặc RDF. Những ngôn ngữ có xu hướng được cấu trúc và để truy vấn. Nhưng một lần nữa, điều đó chỉ bao gồm các cơ sở dữ liệu NoQuery có chứa các định dạng dữ liệu được xác định rõ và không làm được gì nhiều cho các cặp văn bản hoặc khóa-giá trị.
Thomas Owens

@ThomasOwens Tôi đã chỉnh sửa câu trả lời của mình để cụ thể hơn.

1
Đây là một tổng quan thú vị về NoQuery nhưng không thực sự trả lời câu hỏi thực tế. Theo như tôi có thể nói điều duy nhất "đột phá" về NoQuery là dữ liệu của bạn không cần phải tuân theo một cấu trúc cụ thể trước khi được lưu trữ.
Rocklan

2
In other words, the design of the database is actually a hindrance to the design of the program that uses it, ...Tôi có cảm giác điều này là đặt xe ngựa trước ngựa trong rất nhiều trường hợp. Đối với các doanh nghiệp lớn có tập dữ liệu lớn, dữ liệu rất có giá trị và sẽ tồn tại trong một thời gian rất, rất dài - lâu hơn các ngôn ngữ, công cụ và mô hình lập trình nóng hiện tại. Có thể chính xác hơn để nói rằng OOP là một trở ngại cho thiết kế cơ sở dữ liệu và cố gắng thay đổi thiết kế cơ sở dữ liệu để phù hợp với mô hình lập trình có thể không phải là ý tưởng tốt nhất.
Doval

2
Tôi sẽ chỉ ra rằng tất cả chúng ta đều đang sử dụng một triển khai cơ sở dữ liệu bá đạo khá nhiều - nó được gọi là hệ thống tệp.
Wyatt Barnett

13

Tôi nghĩ rằng bạn chắc chắn muốn xem bài báo này của Erik Meijer & Gavin Bierman, với tiêu đề "Trái với niềm tin phổ biến, SQL và NoQuery thực sự chỉ là hai mặt của cùng một đồng tiền" . Nói tóm lại, nó tuyên bố rằng về mặt toán học, cả hai cách tiếp cận đều dựa trên cùng một lý thuyết, nhưng với một số khác biệt.

Theo ý kiến ​​của tôi, có một số khác biệt thú vị: hướng của các phụ thuộc kiểu chéo (FK trong SQL) trái ngược với SQL và NoQuery và loại bộ sưu tập không bị giới hạn để đặt trong NoQuery (và do đó một số hoạt động theo lý thuyết tập hợp có thể không áp dụng trong thế giới NoQuery nữa, nhưng một số người khác vẫn còn hiệu lực). Một điểm thú vị khác từ bài viết là ngôn ngữ truy vấn duy nhất được đề xuất để truy vấn cả cơ sở dữ liệu SQL và NoQuery. Nó được gọi là LINQ và nếu bạn nghĩ rằng bạn có thể đã nghe thấy tên này trước đây, thì bạn đã đúng: đó là ngôn ngữ truy vấn của Microsoft từ C #.


1
"Một điểm thú vị khác từ bài viết là ngôn ngữ truy vấn duy nhất được đề xuất để truy vấn cả cơ sở dữ liệu SQL và NoQuery. Nó được gọi là LINQ", không hoàn toàn đúng, 'Linq' không thể ánh xạ sang SQL theo kiểu 1: 1, do đó, bản dịch phải xảy ra để làm cho nó hoạt động trên các DB SQL. Có nghĩa là bất cứ điều gì có thể được giới thiệu để truy vấn cả hai, miễn là có một lớp dịch đảm bảo nó chạy trên mục tiêu DB
Frans Bouma

6
Vâng, người ta có thể lập luận rằng SQL cũng không được thực thi trực tiếp trên cơ sở dữ liệu. Những gì được thực hiện là một kế hoạch thực hiện và người ta cũng có thể lập luận rằng Linq có thể được dịch trực tiếp sang kế hoạch thực hiện. Vì vậy, không có sự khác biệt lớn sau tất cả.
Haspemulator

10

Câu trả lời của Snowman mô tả chính xác cách SQL và NoQuery khác nhau trong cấu trúc dữ liệu của họ và cách chúng được truy cập. Tuy nhiên, một sự khác biệt thậm chí quan trọng hơn là miền vấn đề tương ứng của họ.

NoQuery không phải là sự kế thừa của SQL. Thay vào đó, các nhánh khác nhau của NoQuery hy sinh một số phẩm chất của SQL để có thể tốt hơn những người khác . Định lý CAP nói rằng không thể có bất kỳ hệ thống cơ sở dữ liệu phân tán nào thỏa mãn tất cả các thuộc tính sau:

  • Tính nhất quán
  • khả dụng
  • Dung sai phân vùng

Do đó, một số biến thể NoQuery tuân theo nguyên tắc BASE thay vào đó, giúp nới lỏng ràng buộc luôn luôn đầy đủ của ACID , là cơ sở cho các cơ sở dữ liệu SQL cổ điển. Bằng cách mất một số đảm bảo tính nhất quán, họ có được khả năng kết hợp tính sẵn sàng cao và dung sai phân vùng trong các hệ thống phân tán rộng rãi, chẳng hạn như đối với các trang web có lượng dữ liệu và truy vấn người dùng cao, nhưng ít có nhu cầu về tính nhất quán hoàn hảo. Do đó, các cơ sở dữ liệu NoQuery như vậy là trung tâm của Google , FacebookAmazon . Vì vậy, để trả lời câu hỏi của bạn: Có, NoQuery đột phá ở chỗ nó cho phép khá nhiều dịch vụ web lớn như vậy.

Đây chỉ là một ví dụ, vì NoQuery là một lĩnh vực đa dạng và các biến thể của nó bao gồm khá nhiều sự kết hợp các tham số có thể có trong tam giác CAP .


Tôi không quen thuộc với Tìm kiếm đàn hồi. Một tìm kiếm nhanh trên google dường như cho thấy rằng nó hy sinh tính nhất quán (C), và do đó là AP, không phải là CAP, về mặt lý thuyết là không thể. Chỉnh sửa: Đây là phản hồi cho một nhận xét đã biến mất cho thấy rằng Tìm kiếm đàn hồi đáp ứng tất cả các thuộc tính của CAP.
Florian von Stosch

3
Ôi thật dễ thương, họ đã đi với BASE để chống lại ACID. Có một cách tiếp cận giữa mặt đất được gọi là REDOX hoặc SALT?
Patrick M

3

Các trường hợp sử dụng phổ biến của NoQuery là đột phá về mức tăng năng suất so với các cơ sở dữ liệu dựa trên SQL thông thường. Có một số yếu tố trong việc này.

Một là dọn phòng. Hầu hết các NoQuery là mã nguồn mở và có thể được cài đặt trên máy trạm hoặc máy ảo với một vài lệnh và hoạt động với các giá trị mặc định hợp lý. Theo kinh nghiệm của tôi, ngay cả Postgres và MySQL cũng không như vậy; cấu hình thường là cần thiết để bắt đầu ngay cả trên máy trạm cho mục đích phát triển.

Một cách khác là phát triển thuận tiện, như các câu trả lời khác đã mô tả chi tiết. Các khả năng lập chỉ mục JSON của Mongo, hoặc ngữ nghĩa khóa / giá trị của redis và Riak, có thể là tất cả các ứng dụng web nhất định cần để hoàn thành công việc và API rất dễ dàng. Một số NoQuery cung cấp API RESTful của riêng họ, trong khi với SQL, bạn thường phải tự viết chúng.

Những yếu tố này làm cho cơ sở dữ liệu NoQuery hấp dẫn cho các dự án quy mô nhỏ. Thời gian đón có xu hướng thấp. Chắc chắn, khi bạn đi vào sản xuất, bạn phải cấu hình để bảo mật và quy mô, nhưng khả năng bắt đầu mã hóa và cộng tác nhanh chóng là mạnh mẽ và, tôi lập luận, đột phá.

Ngoài ra, liên quan đến vấn đề trên, đối với các ứng dụng quy mô nhỏ (như dịch vụ nội bộ công ty hoặc ứng dụng đến ứng dụng), một nhóm có thể đứng lên cơ sở dữ liệu NoQuery sản xuất mà không liên quan đến các nhóm DBA của họ và không phải chịu hiệu suất hoặc tính toàn vẹn vấn đề là kết quả. Các DBA chuyên nghiệp có thể không thích điều này, nhưng các nhà phát triển coi DBA là nguồn gây cản trở (đúng hoặc sai) đôi khi xem NoQuery là một cách để vượt qua việc phải đối phó với chúng. Tôi thú nhận điều này - Tôi đã từng thay đổi một ứng dụng quy mô nhỏ từ Postgres sang SQLite để loại bỏ DBA đối nghịch và tôi đã chọn triển khai trên Mongo thay vì Oracle để tránh các quy trình phê duyệt DBA và hạn chế truy cập. Không có hậu quả bất lợi trong cả hai trường hợp.

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.