NoQuery Sử dụng Kịch bản tình huống hoặc KHI sử dụng NoQuery [đã đóng]


252

Với tất cả sự cường điệu dường như rất khó để tìm thấy thông tin đáng tin cậy về thời điểm sử dụng này. Vì vậy, tôi đặt ra các câu hỏi sau đây và tôi xin lỗi nếu đây là những câu hỏi thực sự ngớ ngẩn trước:

  1. Tôi có nên sử dụng NoQuery cho dữ liệu người dùng? Ví dụ: hồ sơ, tên người dùng + mật khẩu, v.v.
  2. Tôi có nên sử dụng NoQuery cho nội dung quan trọng? Ví dụ: bài viết, bài đăng trên blog, hàng tồn kho sản phẩm, vv

Tôi đang giả sử không? Và tôi cảm thấy như NoQuery chỉ dành cho những thứ có thể truy cập nhanh chóng mà từ đó mất dữ liệu. Nhưng tôi cũng đọc được rằng các ứng dụng NoQuery có tính năng dự phòng tích hợp để tôi không bị mất dữ liệu?

Ngoài ra nếu 2 ví dụ trên là xấu, bạn có thể cho tôi các trường hợp sử dụng kinh doanh cụ thể mà tôi sẽ sử dụng NoQuery không? Tôi thấy rất nhiều mô tả chung nhưng không có nhiều ví dụ thực tế. Điều duy nhất tôi có thể nghĩ đến là nhắn tin và phân tích từ người dùng đến người dùng.

Cảm ơn!

Câu trả lời:


183

Nó thực sự là một câu hỏi "nó phụ thuộc". Một số điểm chung :

  • NoQuery thường tốt cho dữ liệu không có cấu trúc / "schemaless" - thông thường, bạn không cần xác định rõ ràng lược đồ của mình trước và chỉ có thể bao gồm các trường mới mà không cần bất kỳ buổi lễ nào
  • NoQuery thường ưu tiên một lược đồ không chuẩn hóa do không hỗ trợ THAM GIA trên thế giới RDBMS. Vì vậy, bạn thường sẽ có một đại diện phẳng, không chuẩn hóa dữ liệu của bạn.
  • Sử dụng NoQuery không có nghĩa là bạn có thể mất dữ liệu. DB khác nhau có chiến lược khác nhau. ví dụ MongoDB - về cơ bản bạn có thể chọn mức độ nào để đánh đổi hiệu năng so với khả năng mất dữ liệu - hiệu suất tốt nhất = phạm vi lớn hơn cho việc mất dữ liệu.
  • Nó thường rất dễ dàng để mở rộng các giải pháp NoQuery. Thêm nhiều nút để sao chép dữ liệu là một cách để a) cung cấp nhiều khả năng mở rộng hơn và b) cung cấp bảo vệ nhiều hơn chống mất dữ liệu nếu một nút bị hỏng. Nhưng một lần nữa, phụ thuộc vào cấu hình / DB của NoQuery. NoQuery không nhất thiết có nghĩa là "mất dữ liệu" như bạn suy ra.
  • IMHO, các truy vấn / báo cáo phức tạp / động được phục vụ tốt nhất từ ​​RDBMS. Thông thường chức năng truy vấn cho NoQuery DB bị hạn chế.
  • Nó không phải là 1 hoặc sự lựa chọn khác. Kinh nghiệm của tôi đã sử dụng RDBMS kết hợp với NoQuery cho các trường hợp sử dụng nhất định.
  • Các DB NoQuery thường thiếu khả năng thực hiện các hoạt động nguyên tử trên nhiều "bảng".

Bạn thực sự cần phải xem và hiểu các loại cửa hàng NoQuery khác nhau là gì và cách chúng cung cấp khả năng mở rộng / bảo mật dữ liệu, v.v ... Thật khó để đưa ra câu trả lời xuyên suốt vì chúng thực sự khác nhau và giải quyết mọi thứ khác nhau .

Đối với MongoDb là một ví dụ, hãy xem Các trường hợp sử dụng của họ để xem những gì họ cho là sử dụng "rất phù hợp" và "ít phù hợp hơn" với MongoDb.


16
Khiếu nại về việc NoQuery không hỗ trợ tham gia là sai lệch. Một số cơ sở dữ liệu NoQuery thực sự tốt hơn nhiều khi tham gia so với cơ sở dữ liệu quan hệ. Một số không hỗ trợ họ cả. Câu trả lời này dường như nói nhiều về MongoDB nói riêng hơn là về NoQuery nói chung.
Alan Plum

1
Tóm tắt tuyệt vời. @AlanPlum, bạn đang đề cập đến cơ sở dữ liệu cụ thể nào của NoQuery?
brian

2
@brian Tôi là người đóng góp cho ArangoDB ( arangodb.com ), là sự kết hợp của cơ sở dữ liệu tài liệu (nghĩ MongoDB) và cơ sở dữ liệu đồ thị (nghĩ Neo4J) với không chỉ các giao dịch giá rẻ mà cả các giao dịch thực. Điều đó nói rằng, cơ sở dữ liệu NoQuery không phải là một nhóm đồng nhất và không thể khái quát hóa từ bất kỳ cơ sở dữ liệu NoQuery nào cho toàn bộ "danh mục".
Alan Plum

Nếu bạn thấy mình đang cân nhắc sử dụng RDB vì "tham gia không được hỗ trợ" trong NoQuery, tôi khuyên bạn nên xem video này từ AWS re: Invent. Phá vỡ toàn bộ cách tiếp cận NoQuery! Đã giúp tôi rất nhiều. youtu.be/HaEPXoXVf2k
dillon.harless

9

Tôi nghĩ rằng Nosql "phù hợp hơn" trong các kịch bản này ít nhất (được bổ sung nhiều hơn)

  1. Dễ dàng mở rộng quy mô theo chiều ngang bằng cách chỉ cần thêm nhiều nút.

  2. Truy vấn trên tập dữ liệu lớn

    Hãy tưởng tượng hàng tấn tweet được đăng trên twitter mỗi ngày. Trong RDMS, có thể có các bảng có hàng triệu (hoặc hàng tỷ?) Hàng và bạn không muốn truy vấn trực tiếp trên các bảng đó, thậm chí không đề cập đến, hầu hết thời gian, các phép nối bảng cũng cần cho các truy vấn phức tạp.

  3. Nút cổ chai I / O

    Nếu một trang web cần gửi kết quả cho những người dùng khác nhau dựa trên thông tin thời gian thực của người dùng, có lẽ chúng ta đang nói về hàng chục hoặc hàng trăm ngàn yêu cầu đọc / ghi SQL mỗi giây. Sau đó, đĩa i / o sẽ là một nút cổ chai nghiêm trọng.


20
Tôi không hiểu điều gì có thể xảy ra với RDBMS cho # 2. Và NoQuery có ít I / O đĩa hơn theo # 3?
avi

5
Như @avi nói, tôi nghĩ không có vấn đề gì với # 2 miễn là bạn truy vấn các bảng qua chỉ mục. Hàng triệu hàng? Ok, chỉ lấy các chỉ mục tôi muốn sử dụng
Xtreme Biker

11
# 2 và 3 đều sai. Trong 2, tôi đã thực hiện các bài kiểm tra hiệu suất về nhập / xuất dữ liệu và thấy SQL Server 2014 đè bẹp Mongo về nhập và xuất dữ liệu lớn. Đối với 3, dữ liệu được gõ mạnh trong SQL thường mất (tôi đã thấy hơn 50% trước khi nén) chiếm ít không gian hơn so với cơ sở dữ liệu tài liệu.
brian

7
Vâng, và thậm chí cho # 1, tôi chỉ không nhận được nó. Mở rộng quy mô là một phần của hợp đồng phân cụm mà tất cả các rdbms đề xuất
Sebas

2
Cả ba điều này đều sai nếu bạn có tiền không giới hạn
Chazt3n
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.