Mục lục:
- Nhiều
- Lợi thế chính của cách tiếp cận này là trong các bộ dữ liệu rất lớn, bởi vì đối với một số yêu cầu lưu trữ, thậm chí cả máy chủ duy nhất có sẵn lớn nhất không thể lưu trữ hoặc xử lý tất cả dữ liệu bạn cần. Xem xét tất cả các tin nhắn trên Twitter và Facebook. Bạn cần một cơ chế phân phối để quản lý hiệu quả tất cả dữ liệu đó, ngay cả khi nó chủ yếu là về những gì mọi người đã có cho bữa ăn sáng và video mèo dễ thương.
Video: Passport.js & Nodejs Bài 2: Sử dụng kiểu chứng thực Local 2025
Các sách và blog của NoSQL đưa ra ý kiến khác nhau về cơ sở dữ liệu NoSQL. Bốn tính năng cốt lõi của NoSQL, được trình bày trong danh sách dưới đây, áp dụng cho hầu hết các cơ sở dữ liệu NoSQL. Danh sách so sánh NoSQL với các DBMS quan hệ truyền thống:
-
Schema agnostic: Một giản đồ cơ sở dữ liệu là mô tả tất cả các dữ liệu và cấu trúc dữ liệu có thể có trong một cơ sở dữ liệu quan hệ. Với một cơ sở dữ liệu NoSQL, một lược đồ không bắt buộc, cho phép bạn lưu trữ thông tin mà không cần phải thiết kế lược đồ phía trước.
-
Phi quan hệ: Mối quan hệ trong một cơ sở dữ liệu thiết lập kết nối giữa các bảng dữ liệu. Ví dụ: một danh sách các chi tiết giao dịch có thể được kết nối với một danh sách chi tiết giao hàng riêng biệt. Với một cơ sở dữ liệu NoSQL, thông tin này được lưu trữ như là một tổng hợp - một bản ghi duy nhất với tất cả mọi thứ về giao dịch, bao gồm địa chỉ giao hàng.
-
Phần cứng hàng hoá: Một số cơ sở dữ liệu được thiết kế để hoạt động tốt nhất (hoặc chỉ) với phần cứng lưu trữ và chế biến chuyên dụng. Với một cơ sở dữ liệu NoSQL, các máy chủ off-the-shelf giá rẻ có thể được sử dụng. Thêm nhiều máy chủ giá rẻ này cho phép các cơ sở dữ liệu NoSQL mở rộng để xử lý nhiều dữ liệu hơn.
-
Schema agnostic Cơ sở dữ liệu NoSQL không tương thích với lược đồ. Bạn không phải làm nhiều công việc thiết kế trước khi bạn có thể lưu trữ dữ liệu trong cơ sở dữ liệu NoSQL. Bạn có thể bắt đầu mã hóa và lưu trữ và truy xuất dữ liệu mà không biết cách cơ sở dữ liệu lưu trữ và hoạt động nội bộ. (Nếu và khi nào bạn cần chức năng nâng cao thì bạn có thể tự thêm các chỉ mục khác hoặc tinh chỉnh các cấu trúc lưu trữ dữ liệu theo cách thủ công). Schema agnosticism có thể là sự khác biệt quan trọng nhất giữa NoSQL và cơ sở dữ liệu quan hệ.
Ví dụ, trong một RDBMS truyền thống, bạn phải trải qua một quá trình thiết kế lại lược đồ. Lược đồ hướng dẫn cơ sở dữ liệu về những gì dữ liệu mong đợi. Thay đổi dữ liệu được lưu trữ, hoặc các cấu trúc, và bạn phải tái cơ sở dữ liệu bằng cách sử dụng một lược đồ đã sửa đổi. Nếu bạn đã thực hiện thay đổi, bạn sẽ phải mất rất nhiều thời gian để quyết định làm thế nào để tái kiến trúc các dữ liệu hiện có. Trong cơ sở dữ liệu NoSQL, bạn chỉ cần lưu trữ một cấu trúc dữ liệu khác. Không cần phải báo trước cho cơ sở dữ liệu.
Bạn có thể phải thay đổi các truy vấn của mình cho phù hợp, có thể thêmchỉ số
(chẳng hạn như chỉ số dãy số nguyên cho phép ít hơn và lớn hơn các truy vấn cụ thể của loại dữ liệu), nhưng toàn bộ quá trình là ít đau đớn hơn nhiều so với RDBMS.
RDBMS đã thực hiện vì tính linh hoạt của nó và bởi vì, bằng cách sử dụng SQL, nó đẩy nhanh việc thay đổi một truy vấn. Cơ sở dữ liệu NoSQL cung cấp tính linh hoạt này để thay đổi cả giản đồ và truy vấn, đây là một trong những lý do chính khiến chúng sẽ ngày càng được thông qua theo thời gian. Ngay cả khi truy vấn, bạn có thể không cần phải lo lắng quá nhiều về việc hiểu các thay đổi của lược đồ - hãy xem xét một chỉ mục qua một số tài khoản trường, nơi có số tài khoản
có thể được đặt ở bất cứ nơi nào trong tài liệu được lưu trữ trong một cơ sở dữ liệu NoSQL. Bạn có thể thay đổi cấu trúc và di chuyển nơi lưu trữ
số tài khoản và nếu phần tử có cùng tên ở nơi khác trong tài liệu, nó vẫn có sẵn cho truy vấn mà không cần thay đổi cơ chế truy vấn của bạn. Lưu ý rằng không phải tất cả các cơ sở dữ liệu NoSQL đều là các thuật toán không liên quan đến lược đồ. Một số, chẳng hạn như HBase, yêu cầu bạn phải dừng cơ sở dữ liệu để thay đổi các định nghĩa cột. Họ vẫn được coi là cơ sở dữ liệu NoSQL bởi vì không phải tất cả các trường được xác định (cột trong trường hợp này) đều phải được biết trước cho mỗi bản ghi - chỉ các gia đình cột. RDBMS cho phép các trường riêng lẻ trong hồ sơ được xác định là giá trị null
. Vấn đề với một RDBMS là dung lượng và hiệu suất dữ liệu được lưu trữ bị ảnh hưởng tiêu cực khi lưu trữ được dành riêng cho các giá trị null chỉ trong trường hợp hồ sơ có thể ở một thời gian tương lai có một giá trị trong cột đó. Trong Cassandra, bạn chỉ đơn giản là không cung cấp dữ liệu của cột đó, giúp giải quyết vấn đề.
Không liên quan Các hệ thống quản lý cơ sở dữ liệu quan hệ là cách chiếm ưu thế để lưu trữ dữ liệu ứng dụng trong hơn 20 năm. Rất nhiều công việc toán học đã được thực hiện để chứng minh cho lý thuyết đó củng cố chúng. Sự củng cố này mô tả các bảng liên quan với nhau như thế nào. Một dòng đơn hàng có thể liên quan đến nhiều hàng Địa chỉ Giao hàng nhưng mỗi hàng Giao hàng Địa chỉ liên quan đến nhiều Hàng đặt hàng. Đây là
Nhiều
-
đến - Nhiều mối quan hệ . Cơ sở dữ liệu NoSQL không có khái niệm này về mối quan hệ giữa các hồ sơ của họ. Họ thay vì denormalize dữ liệu. Điều này có nghĩa là trong một cơ sở dữ liệu NoSQL sẽ có một cấu trúc Order với Địa chỉ Phân phối được nhúng. Điều này có nghĩa là địa chỉ phân phối được nhân đôi trong mọi hàng Đặt hàng sử dụng nó. Cách tiếp cận này có lợi thế là không đòi hỏi phải có nhiều thời gian truy vấn phức tạp trên nhiều cấu trúc dữ liệu (bảng). Cơ sở dữ liệu NoSQL không lưu trữ thông tin về cách các hồ sơ riêng lẻ liên quan đến các bản ghi khác trong cơ sở dữ liệu, có vẻ giống như một giới hạn. Tuy nhiên, cơ sở dữ liệu NoSQL linh hoạt hơn về cấu trúc dữ liệu bạn có thể lưu trữ. Xem xét đơn đặt hàng từ nhà bán lẻ trực tuyến. Thứ tự có thể bao gồm mã sản phẩm, số lượng, giá mục, mô tả mặt hàng, cũng như thông tin về người đặt hàng, chẳng hạn như địa chỉ giao hàng và thông tin thanh toán.
Thay vì phải chèn mười hàng trong nhiều bảng trong cơ sở dữ liệu quan hệ, bạn có thể lưu trữ một cấu trúc cho tất cả thông tin đơn đặt hàng này - ví dụ như là một tài liệu JSON hoặc XML.
Trong lý thuyết cơ sở dữ liệu quan hệ, mục tiêu là để
bình thường hoá
dữ liệu của bạn (nghĩa là để tổ chức các trường và bảng để loại bỏ dữ liệu trùng lặp). Trong NoSQL-cơ sở dữ liệu - đặc biệt là Tài liệu hoặc Tổng hợp các cơ sở dữ liệu - bạn thường cố ý denormalize dữ liệu, lưu trữ một số dữ liệu nhiều lần.
Bạn có thể lưu trữ, ví dụ: "Địa chỉ Giao hàng của Khách hàng" nhiều lần trên nhiều đơn hàng mà khách hàng làm theo thời gian, chứ không lưu trữ nó một lần và tham khảo theo nhiều đơn đặt hàng. Làm như vậy đòi hỏi thêm không gian lưu trữ, và một chút suy nghĩ trong quản lý trong ứng dụng của bạn. Vậy tại sao? Có hai lợi thế để lưu trữ dữ liệu nhiều lần: Dễ dàng lưu trữ và tìm kiếm:
Chỉ cần lưu và nhận một bản ghi.
Truy vấn tốc độ:
-
Trong cơ sở dữ liệu quan hệ, bạn nối thông tin và thêm các ràng buộc trên các bảng tại thời gian truy vấn. Điều này có thể yêu cầu công cụ cơ sở dữ liệu đánh giá nhiều bảng. Khó khăn truy vấn nhiều hơn bạn có trên các bảng khác nhau, bạn càng làm giảm tốc độ truy vấn của bạn. (Đây là lý do tại sao một RDBMS có lượt xem trước) Trong một cơ sở dữ liệu NoSQL, tất cả thông tin bạn cần để đánh giá truy vấn của bạn là trong một tài liệu. Do đó, bạn có thể nhanh chóng xác định danh sách các tài liệu phù hợp. Các quan điểm quan hệ và denormalizations NoSQL là các cách tiếp cận khác nhau cho vấn đề dữ liệu lan truyền trên các bản ghi. Trong NoSQL, bạn có thể phải duy trì nhiều denormalizations đại diện cho các quan điểm khác nhau của cùng một dữ liệu. Cách tiếp cận này làm tăng chi phí lưu trữ nhưng cho bạn thời gian truy vấn tốt hơn nhiều.
-
Với chi phí lưu trữ thấp và giảm tốc độ phát triển và truy vấn, dữ liệu denormalized (hay quan điểm vật chất
) không phải là lý do giết người để giảm các giải pháp NoSQL. Đây chỉ là một cách khác để tiếp cận cùng một vấn đề, với lợi thế và bất lợi riêng của nó.
NoSQL được phân loại cao và sử dụng phần cứng hàng hoá Trong nhiều cơ sở dữ liệu NoSQL, một quyết định thiết kế quan trọng là sử dụng nhiều máy tính để lưu trữ dữ liệu cho một cơ sở dữ liệu duy nhất, thay vì có toàn bộ cơ sở dữ liệu trên một máy chủ duy nhất. Lưu trữ dữ liệu trên nhiều máy và cho phép truy vấn nó rất khó. Bạn phải gửi truy vấn đến tất cả các máy chủ và chờ đợi trả lời. Hy vọng rằng, bạn thiết lập các máy để họ đủ nhanh để nói chuyện với nhau để xử lý các truy vấn phân tán!
Lợi thế chính của cách tiếp cận này là trong các bộ dữ liệu rất lớn, bởi vì đối với một số yêu cầu lưu trữ, thậm chí cả máy chủ duy nhất có sẵn lớn nhất không thể lưu trữ hoặc xử lý tất cả dữ liệu bạn cần. Xem xét tất cả các tin nhắn trên Twitter và Facebook. Bạn cần một cơ chế phân phối để quản lý hiệu quả tất cả dữ liệu đó, ngay cả khi nó chủ yếu là về những gì mọi người đã có cho bữa ăn sáng và video mèo dễ thương.
Lợi thế của việc phân phối cơ sở dữ liệu của bạn là bạn có thể sử dụng các máy chủ rẻ hơn, được gọi là
máy chủ hàng hóa
.Ngay cả đối với các bộ dữ liệu nhỏ hơn, có thể rẻ hơn để mua ba máy chủ hàng hóa thay vì một máy chủ duy nhất, cao hơn.
Một ưu điểm chính khác là việc bổ sung tính sẵn sàng cao sẽ dễ dàng hơn; bạn đã có một nửa ở đó bằng cách phân phối dữ liệu của bạn. Nếu bạn sao chép dữ liệu một lần hoặc hai lần trên các máy chủ khác trong cụm, dữ liệu của bạn sẽ vẫn có thể truy cập được, ngay cả khi một trong những máy chủ bị treo, ghi và chết. Không phải tất cả các cơ sở dữ liệu mã nguồn mở đều hỗ trợ tính sẵn có cao trừ khi bạn mua phiên bản cơ sở dữ liệu được hỗ trợ và trả phí từ công ty phát triển nó. Một ngoại lệ đối với quy tắc phân phối cao là cơ sở dữ liệu đồ thị. Để có thể trả lời một cách hiệu quả các truy vấn đồ thị nhất định, dữ liệu cần được lưu trữ trên một máy chủ duy nhất. Chưa có ai giải quyết được vấn đề cụ thể này.
Cẩn thận xem xét liệu bạn cần một cửa hàng ba hoặc một cửa hàng đồ họa. Ba cửa hàng thường được phân phối, trong khi các cửa hàng đồ thị không. Cái nào bạn cần phụ thuộc vào các truy vấn bạn phải hỗ trợ.