Các mẫu mô hình hóa cho kho document, key-value, wide-column, graph và vector — khi nào nên nhúng, tham chiếu, phi chuẩn hóa hay gom theo khung thời gian.
Kho NoSQL đánh đổi schema cố định và join để lấy khả năng mở rộng ngang. Mỗi họ cơ sở dữ liệu mô hình hóa quan hệ theo cách riêng, nên chính access pattern — chứ không phải dạng chuẩn — quyết định cấu trúc.
Bảng tham chiếu · 28 mục
Mô hình hóa dữ liệu NoSQLExplained
28 of 28 rows
Document (Tài liệu)
Các tài liệu con lồng nhau nằm trong một tài liệu cha duy nhất, thay vì chia thành các bảng riêng.
Quan hệ một-vài được đọc cùng nhau. Một đơn hàng cùng các dòng hàng. Một người dùng với ba địa chỉ.
Chỉ lưu id ngoài, không lưu dữ liệu. Giải quyết bằng lần đọc thứ hai hoặc $lookup.
Các thực thể con lớn, dùng chung, hoặc tự cập nhật độc lập. Liên kết nhiều-nhiều giữa các collection.
Cha nhúng một mảng con ngắn; toàn bộ vừa vặn và được tải lên như một tài liệu duy nhất.
Vài số điện thoại hoặc tùy chọn trên hồ sơ. Một lần đọc trả về cả cha lẫn con.
Con nằm trong collection riêng; mỗi con mang id của cha, hoặc cha giữ một mảng id có giới hạn.
Tập hợp quá lớn hoặc quá độc lập để nhúng. Truy vấn con theo id cha.
Con lưu id của cha; cha không bao giờ liệt kê con vì tập hợp không có giới hạn trên.
Sự kiện, log hoặc lượt bình chọn gắn với một máy chủ hay người dùng. Lọc con theo id cha và phân trang.
Tài liệu của nhiều loại thực thể dùng chung một collection, phân biệt bằng trường type.
Bình luận hoặc thông báo gắn vào nhiều loại cha, đều truy vấn bằng một cách.
Vài thực thể cực đoan được tách khỏi hình dạng chung để kích thước hay lưu lượng của chúng không bóp méo phần còn lại.
Tài khoản người nổi tiếng mà danh sách người theo dõi hay bộ đếm sẽ lớn hơn tài liệu bình thường.
Mỗi bản sửa đổi là một tài liệu mới cùng id và số phiên bản tăng dần; truy vấn chọn bản mới nhất.
Nhật ký kiểm toán và lịch sử chỉnh sửa, nơi bản cũ vẫn truy vấn được.
Các giá trị dẫn xuất được tính lúc ghi và lưu ngay cạnh dữ liệu mà chúng tóm tắt.
Tổng, điểm đánh giá và top-N vốn mỗi lần đọc lại phải chạy aggregation.
Key-value và wide-column
Thuật ngữ thiết kế DynamoDB: gộp nhiều loại thực thể vào một bảng bằng khóa partition và sort quá tải.
Lấy các item đa dạng trong một truy vấn duy nhất mà không cần join.
Một thuộc tính khóa phục vụ nhiều loại thực thể, đánh dấu bằng tiền tố như USER# hoặc ORDER#.
Thiết kế single-table. Gom các item liên quan vào một partition và lấy chúng trong một truy vấn.
Khóa partition rải hàng qua các node; khóa sort sắp xếp trong từng partition.
Cassandra và DynamoDB. Quét khoảng, log có thứ tự, khóa phức hợp phân cấp.
Xếp nhiều thuộc tính vào một khóa sort có dấu phân cách — country#region#city — để so khớp tiền tố đi xuống theo tầng.
Phân cấp và bộ lọc đa chiều. Một truy vấn khoảng có thứ tự thay cho nhiều lần tra index.
Gom sự kiện vào các cửa sổ cố định — giờ, ngày, tháng — dưới partition hoặc bảng riêng.
Số liệu, log và telemetry IoT. Giới hạn kích thước partition và loại bỏ dần dữ liệu nguội.
Nhân đôi các trường đọc nhiều giữa các bản ghi để truy vấn không phải đuổi theo lần tra cứu thứ hai.
Khối lượng đọc nhiều, nơi tính nhất quán cuối cùng chấp nhận được và chi phí lưu trữ rẻ.
Chỉ mục phụ dựng trên thuộc tính chỉ một số item mang; item không có nó không bao giờ vào chỉ mục.
Đường truy cập thay thế. Tìm tập con thưa — đơn hàng còn mở, hàng chưa gửi — mà không quét toàn bảng.
Viết ra trước các truy vấn chính xác; bố cục bảng suy ra từ chúng, chứ không từ thực thể hay dạng chuẩn.
Công việc schema của Cassandra và DynamoDB. Một bảng cho mỗi nhóm truy vấn; mô hình dữ liệu chép lại câu hỏi.
Truy vấn phải chạy song song lên nhiều partition hay node vì không khóa nào khớp với câu hỏi.
Là dấu hiệu cần thiết kế cho biến mất, không phải mục tiêu. Đổi khóa bảng để truy vấn phổ biến rơi vào một partition.
Bản sao được đẩy tới view của từng người đọc lúc ghi, hoặc được thu thập và hòa trộn lúc đọc.
Feed và timeline. Fan-out lúc ghi cho tệp khán giả nhỏ, lúc đọc cho tệp khổng lồ.
Kết quả truy vấn dựng sẵn, lưu thành bảng riêng và luôn được cập nhật theo bảng gốc.
Các hình thức đọc thay thế trên một đường ghi duy nhất. Phục vụ những truy vấn bảng gốc không trả lời được.
Graph (Đồ thị)
Mỗi cạnh là một hàng hoặc bộ giá trị trỏ từ node nguồn tới node đích.
Kho graph và property. Tra cứu bạn của bạn, định tuyến, gợi ý.
Mỗi quan hệ là một tài liệu trong collection riêng, mang id from và to cùng thuộc tính của liên kết.
Đồ thị trong kho tài liệu. Thuộc tính nằm trên chính liên kết — điểm đánh giá, vai trò, dấu thời gian.
Mỗi node lưu bộ đếm trái và phải từ phép duyệt theo chiều sâu; một cây con nằm trong khoảng của cha.
Cây đọc nhiều. Một truy vấn BETWEEN trả về cả cây con; phép chèn phải đánh số lại phép duyệt.
Một bảng riêng ghi mọi cặp tổ tiên-hậu duệ, kể cả chính node đó ở độ sâu bằng không.
Truy vấn cả nhánh ở mọi độ sâu. Join đơn giản, trả giá bằng lưu trữ và bảo trì.
Đồ thị thuộc tính gắn các cặp khóa-giá trị lên node và cạnh; RDF phát biểu mọi thứ bằng bộ ba subject-predicate-object.
Đồ thị thuộc tính cho duyệt phức tạp (Neo4j); RDF cho linked open data và trao đổi ontology.
Vector
Một mảng float chiều cao nằm cạnh metadata. Chỉ mục ANN tìm các láng giềng gần nhất.
Tìm kiếm ngữ nghĩa, truy xuất RAG, gợi ý và độ tương đồng trên nội dung phi cấu trúc.
Tài liệu nguồn được chia — theo kích thước, phần chồng lấp hoặc cấu trúc — trước khi từng mảnh được nhúng riêng.
Chất lượng truy xuất RAG. Kích thước chunk đánh đổi độ chính xác với độ bao phủ; phần chồng lấp bảo vệ câu bị cắt ngang.
Độ tương đồng vector dày chạy cạnh so khớp từ khóa; hai danh sách xếp hạng hòa thành một kết quả.
Truy vấn cần cả thuật ngữ chính xác lẫn ý nghĩa, kèm bộ lọc metadata phía trên.