Tôi đang cân nhắc việc sử dụng Ltree module của PostgreSQL trong đơn đăng ký của tôi để trợ giúp với các nhận xét theo chuỗi. Tôi đã nhìn nó một lúc để sử dụng cho các bình luận luồng. Tôi nghĩ nó sẽ giúp ích cho các trường hợp bạn cần cập nhật một nút và các nút con của nó, như khi bạn muốn ẩn một bình luận và các câu trả lời của nó.Mô-đun Ltree của PostgreSQL có phù hợp với các nhận xét được tạo luồng không?
Tôi đang nghĩ ltree (hoặc một cái gì đó giống như nó) nó sẽ hữu ích nếu nó được kết hợp với một danh sách kề kề truyền thống ("comment_id"/"parent_comment_id").
Trước khi lao vào sử dụng ltree, tôi đang tự hỏi một vài điều:
- Bạn có, hay bạn, sử dụng ltree? Có phải đó là điều mà người ta có thể gọi là "sản xuất đã sẵn sàng" không?
- Nếu có, bạn đã sử dụng vấn đề gì để giải quyết? Nó có làm tốt không?
- Bạn có cho rằng nó phù hợp với hệ thống nhận xét luồng không?
- Nếu bạn đã sử dụng nó, bạn đã sử dụng gì cho phần "văn bản" của đường dẫn? Bạn đã thiết lập một cái gì đó giống như ví dụ DMOZ họ sử dụng "Top.Astronomy.Cosmology" hoặc dựa trên một cái gì đó giống như khóa chính "1.403.29.5"?
- Có cách nào tốt hơn để thực hiện việc này không? Tôi hơi lo lắng khi sử dụng một cách tiếp cận danh sách lồng nhau - tất cả những gì tôi đã đọc cho thấy rằng nó không phải là tất cả để nóng với CẬP NHẬT hoặc INSERTS (không bạn phải sắp xếp lại toàn bộ điều?). Tôi cũng không phải là một CS lớn và cấu trúc dữ liệu đó là thứ mà tôi có thể quên trong tương lai. Có ai đang sử dụng danh sách lồng nhau cho các bình luận hoặc một cái gì đó giống như nó?
Nếu nó là của bất kỳ sự giúp đỡ, đây là lược đồ tôi đang xem xét:
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
parent_comment_id int REFERENCES comments(comment_id) ON UPDATE CASCADE ON DELETE CASCADE,
thread_id int NOT NULL REFERENCES threads(thread_id) ON UPDATE CASCADE ON DELETE CASCADE,
path ltree NOT NULL,
comment_body text NOT NULL,
hide boolean not null default false
);
Các "con đường" cột, được sử dụng bởi ltree, sẽ giống như thế:
<thread_id>.<parent_comment_id_#1>.<parent_comment_id_#2>.<my_comment_id>
Có điều gì sai khi sử dụng các khóa chính trong đường dẫn không? Tôi có nên bao gồm khóa chính của nút trong đường dẫn không? Nếu tôi đã làm, nó sẽ có ý nghĩa để đặt một chỉ số duy nhất trên nó để phục vụ như là một hạn chế?
ltree là triển khai 'đường dẫn vật chất'. xem http://www.dbazine.com/oracle/or-articles/tropashko4 để so sánh các giải pháp khả thi, bao gồm các phương thức di động (nhưng kém hiệu quả hơn) như các tập lồng nhau. – vladr
vui lòng thêm câu trả lời này làm câu trả lời. Tôi đang mở cho những ý tưởng khác. Tôi đã nhìn vào bộ lồng nhau, nhưng họ có vẻ như một nỗi đau trong ass để thực hiện và khá chậm trên các bản cập nhật/chèn (bạn không phải chuyển tất cả mọi thứ xuống?). –
oh, và tôi đã nghĩ đến việc sử dụng ltree ngoài danh sách kề. do đó "comment_id" và "parent_comment_id". những gì tôi đã có trong tâm trí là sử dụng ltree để tăng tốc hoạt động trên một chi nhánh –