10

Tôi bắt đầu một dự án mới có một số dữ liệu phân cấp và tôi đang xem tất cả các tùy chọn để lưu trữ trong cơ sở dữ liệu tại thời điểm này .dữ liệu phân cấp trong cơ sở dữ liệu: truy vấn đệ quy so với bảng đóng so với cơ sở dữ liệu đồ thị

Tôi đang sử dụng PostgreSQL, cho phép truy vấn đệ quy. Tôi cũng đã xem xét các mẫu thiết kế cho các cơ sở dữ liệu quan hệ, chẳng hạn như closure tables và tôi đã xem xét các giải pháp cơ sở dữ liệu đồ thị như neo4j.

Tôi rất khó để quyết định giữa các tùy chọn này. Ví dụ: cho rằng RDBMS của tôi cho phép truy vấn đệ quy, nó vẫn có ý nghĩa để sử dụng bảng đóng và làm thế nào để so sánh với các giải pháp cơ sở dữ liệu đồ thị về khả năng bảo trì và hiệu suất?

Bất kỳ ý kiến ​​/ kinh nghiệm nào cũng sẽ được đánh giá cao!

+1

Điều bảng đóng cửa đó thực sự khá gọn gàng. Không cần thiết nếu bạn có các truy vấn đệ quy, nhưng vẫn khá gọn gàng. Cám ơn bạn đã khiến tôi chú ý tới việc này. –

Trả lời

8

Bảng đóng cửa toàn bộ là không cần thiết nếu bạn có thể sử dụng các truy vấn đệ quy :)

Tôi nghĩ rằng nó tốt hơn nhiều để có một truy vấn đệ quy phức tạp mà bạn phải tìm ra một lần so với thỏa thuận với phụ IO (và không gian đĩa) của một bảng riêng biệt và các trình kích hoạt có liên quan.

Tôi đã thực hiện một số thử nghiệm đơn giản với truy vấn đệ quy trong postgres. Với một vài triệu hàng trong các truy vấn bảng vẫn còn < 10ms để trả lại tất cả cha mẹ của một đứa trẻ cụ thể. Trả lại tất cả trẻ em cũng nhanh, tùy thuộc vào cấp độ của phụ huynh. Dường như phụ thuộc nhiều vào đĩa IO tìm nạp các hàng thay vì tốc độ truy vấn. Điều này đã được thực hiện người dùng duy nhất, do đó, không chắc chắn như thế nào nó sẽ thực hiện theo tải. Tôi nghi ngờ nó sẽ rất nhanh vẫn còn nếu bạn cũng có thể giữ hầu hết các bảng trong bộ nhớ (và thiết lập postgres một cách chính xác). Phân cụm bảng theo id mẹ cũng có vẻ hữu ích.

+0

Cảm ơn, tôi nghĩ rằng nó có thể là như vậy – tospo

+1

Cảm ơn các tiêu chuẩn. –

+0

thường đồng ý, mặc dù thấy các mẫu đơn SQL của Bill Karwin cho hướng dẫn khi bạn vẫn có thể muốn sử dụng phương án thay thế cho cách tiếp cận danh sách kề (nơi parent_id là một trường) – Joffer

2

Trường cấp ("chiều sâu") của bảng đóng là thừa. Nó chỉ mất một truy vấn đệ quy để tính toán nó. Đó là về tiền nó lên.

Các vấn đề liên quan