2011-11-08 28 views
6

Tôi đang xây dựng ứng dụng web cần có mức ghi cao và hàng nghìn, thậm chí hàng triệu bản ghi phân cấp đại diện cho cây do người dùng xác định/xây dựng. Tôi không cố gắng xây dựng diễn đàn với các chủ đề nhưng cơ sở dữ liệu khổng lồ với hàng nghìn phân cấp nhỏ (cây có tối đa 10-20 hậu duệ) ...Lưu trữ dữ liệu phân cấp trong MySQL với tải ghi cao

Tôi biết nhiều mô hình để lưu trữ cấu trúc phân cấp - hiện tại tôi đang sử dụng Bộ lồng nhau nhưng hiệu suất với dữ liệu lớn và tải là vấn đề. Tôi cũng nghi ngờ rằng Danh sách Adjacency hoặc một cái gì đó tương tự có thể giải quyết điều này.

Tôi đã thử nghiệm với cơ sở dữ liệu Mongo là lưu trữ khóa/giá trị siêu nhanh nhưng tôi chỉ có thể sử dụng MySQL.

Tôi muốn nghe về những trải nghiệm của những người khác có vấn đề tương tự.

+0

Bạn có thể làm rõ một chút không? Bạn muốn lưu trữ tất cả điều này và truy vấn các cấu trúc phân cấp? Làm thế nào bạn sẽ làm các truy vấn của bạn? –

Trả lời

5

Nếu bạn có thể cài đặt các plugin MySQL, thì OQGraph công cụ lưu trữ là những gì bạn cần.

+1

+1 Tuy nhiên việc cài đặt một plugin không mở cho tất cả mọi người. Đó là lý do tại sao tôi đã trao tiền thưởng cho @barryhunter – Johan

+0

Cảm ơn anyway;) Hãy nhớ rằng, càng có nhiều người biết về OQGraph, chúng tôi có thể thấy nó sớm hơn như là một phần của cài đặt mặc định tại các công ty hosting :) – Mchl

4

Sự cố với bộ lồng nhau là gì?

Có tính lại giá trị lft/rgt khi bạn thêm/xóa các nút không?

Khá chắc chắn với một chút lập kế hoạch cẩn thận, bạn có thể tinh chỉnh nó để chỉ phải thực hiện các phép tính hiếm hoi. Tôi đã không actully thử nó, nhưng đã làm một số kế hoạch cho một hệ thống một lần (khách hàng didnt muốn hệ thống cuối cùng!)

Một, là nhân giá trị, bằng cách nói 1000, khi lần đầu tiên tính toán chúng. Sau đó, nếu bạn thêm một nút, bạn chỉ có thể chèn số giữa các giá trị. Chỉ khi có một số lượng lớn chèn, bạn có bắt đầu chạy ra khỏi số không. Một quy trình hàng loạt có mức độ ưu tiên thấp, có thể tính toán lại cây để giải phóng số cho chèn mới.

Việc xóa cũng có thể được lưu trữ, với thao tác số. Trong thực tế, một nút mà không có trẻ em là dễ dàng. Không có tính toán lại nào. Sẽ trở nên phức tạp hơn nếu trẻ em, nhưng tôi nghĩ là có thể làm được.

+0

+1 Joe Celko có một số bài viết hay về điều này ở đâu đó. Tôi tin rằng cuốn sách của ông "SQL của Joe Celko cho smarties" có một phần trên nó cũng có. Chắc chắn đáng để tìm kiếm trên Google. –

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