2008-12-11 18 views
11

Trong số các giới hạn đã biết của các bộ lồng nhau của Joe Celko (duyệt trước khi duyệt qua) được đánh dấu sự hủy hoại trong hiệu suất khi cây phát triển đến kích thước lớn.Khoảng thời gian lồng nhau là một giải pháp khả thi cho tập lồng nhau (sửa đổi trước khi đặt hàng traversal) RDBMS hiệu suất degredation?

Vadim Tropashko đề xuất lồng khoảng, và cung cấp các ví dụ và lý thuyết giải thích trong bài viết này: http://arxiv.org/html/cs.DB/0401014

Đây có phải là một giải pháp khả thi, được có bất kỳ ví dụ khả thi (trong ngôn ngữ bất kỳ) trừu tượng ra khỏi lớp DB mẹ đẻ?

+0

Hãy xem câu hỏi của tôi: http://stackoverflow.com/questions/1049748/improving-nested-sets-modified-preorder-tree-traversal Vui lòng nhận xét nếu bạn muốn. Tôi đang nghiên cứu không gian này ngay bây giờ. –

+0

Đó là một ý tưởng vô cùng khéo léo, tôi sẽ cho nó điều đó. Nhưng nó thực sự có khả năng nhanh hơn con trỏ mẹ trong cơ sở dữ liệu hỗ trợ truy vấn đệ quy, như các bản phát hành gần đây của tất cả các cơ sở dữ liệu nghiêm túc (tức là mọi thứ nhưng MySQL!) Làm gì? –

Trả lời

7

While I've seen examples for nested sets, tôi chưa thấy nhiều khoảng thời gian lồng nhau, mặc dù trong lý thuyết, không khó để chuyển đổi từ người này sang người khác. Thay vì thực hiện quá trình truyền tải trước để gắn nhãn các nút, thực hiện đệ quy lần đầu tiên. Bí quyết là tìm ra cách hiệu quả nhất để ghi nhãn n con của một nút. Vì nút giữa a/b và c/d là (a + c)/(b + d), một chèn chèn máy lạnh (ví dụ, chèn các con từ trái sang phải), chạy nguy cơ tạo ra cùng một mức tăng theo cấp số nhân ví dụ: trong các giá trị chỉ mục, sử dụng toàn bộ materialized path. Nó không phải là khó khăn để chống lại hiệu ứng này - tạo ra các chỉ số mới một tại một thời điểm, chèn từng tại vị trí tạo ra mẫu số kết quả thấp nhất.

Theo như suy thoái hiệu suất hoạt động, phụ thuộc nhiều vào các hoạt động bạn định làm. Vẫn còn một số thao tác đòi hỏi phải gắn nhãn lại toàn bộ cây - tập hợp lồng nhau hoặc các phương thức khoảng thời gian lồng nhau đều hoạt động tốt nhất cho các cấu trúc hiếm khi thay đổi. Nếu bạn đang thực hiện rất nhiều thay đổi cấu trúc cho cấu trúc phân cấp, cấu trúc bảng cha-con 'chuẩn' có thể dễ dàng hơn để làm việc. hãy nhớ rằng một số thao tác (chẳng hạn như số con cháu) dễ dàng hơn nhiều với việc ghi nhãn số nguyên của các tập lồng nhau so với các phương thức khoảng thời gian.

2

Tôi đã viết một đá quý tóm tắt tất cả các tính toán của khoảng thời gian lồng nhau được sử dụng với ActiveRecord của Rails https://github.com/clyfe/acts_as_nested_interval/ được sử dụng trong sản xuất trên một số hệ thống.