2009-05-27 19 views
11

Ürün katalogum var. Her kategori alt kategorilerin farklı sayılarından (derin) oluşmaktadır. Seviye sayısı (derin) bilinmemektedir, ancak 5,6 seviyesini aşmayacağından eminim. Veri değişiklikleri çok daha nadiren okur.Hiyerarşik Veri Modelleri: Kompanzasyon ve Karşılıklı Ayarlar vs

Soru şudur: Bu tür durumlar için hangi tür hiyerarşik veri modeli daha uygundur. Proje Django çerçevesine dayanıyor ve özellikleri (i-face, kullanım modelleri ...) göz önünde bulundurulmalıdır.

Çok teşekkürler! Sık güncellemeler veya hiyerarşik sıralamaya ihtiyacınız yoksa, performans için daha iyi

cevap

4

Nested sets.

Ağaç güncellemelerine veya hiyerarşik sıralamaya ihtiyacınız varsa, parent-child veri modelini kullanmak daha iyidir.

Oracle ve SQL Server 2005+'da kolayca yapılandırılabilir ve MySQL numaralı telefondan kolayca (ama yine de mümkün değildir).

4

Bu tür hiyerarşik veriler için Modified Preorder Tree Traversal, MPTT'yi kullanıyorum. Bu, yapının değişmesiyle ilgili bir ceza aldırmazsanız, ağacın üstesinden gelme ve çocukları bulma konusunda mükemmel performans sağlar.

Neyse ki bu Django harika bir kütüphaneye sahiptir, django-mptt. Bunu bir çok projede çok başarılı bir şekilde kullandım. Ayrıca birkaç alternatif algoritma sunan django-treebeard da var, ama kullanmadım (ve zaten mptt kadar popüler görünmüyor).

+4

Not: MPTT ve "İç içe Seti" Aynı kavram için farklı isimlerdir. – jwfearn

4

bu makalelere göre:

http://explainextended.com/2009/09/24/adjacency-list-vs-nested-sets-postgresql/ http://explainextended.com/2009/09/29/adjacency-list-vs-nested-sets-mysql/

"MySQL iç içe setleri için büyük dört (MySQL, Oracle, SQL Server, PostgreSQL) tek sistemdir model iyi performans gösterir ve depolanmış hiyerarşik veri olarak kabul edilebilir. "

+1

Tanrım ... ne ile karşılaştırıldığında? Nested Setler'in rakiplerini kapıdan kopardığını gördüm. İstisna, Oracle'da CONNECT BY işlevinin işlevselliği olacaktır. –

0

Komşuluk Listesini korumak çok daha kolay ve İç Kümesi Setleri sorgulamak için çok daha hızlı.

Sorun, her zaman RBAR ile yüklenen gerçekten kötü "itme yığını" yöntemi sayesinde bir Yardımcıluk Listesini İç içe kümelere dönüştürmenin çok zaman almasıydı. Bu yüzden insanlar Nested Setlerde gerçekten zor bir bakım yapıyor ya da kullanmıyorlar.

Artık pastalarınızı alabilir ve yiyebilirsiniz! Dönüşüm işlemini 100.000 düğüm üzerinde 4 saniyeden daha kısa sürede ve bir milyondan az satırda bir dakikadan daha az sürede yapabilirsiniz! T-SQL'de hepsi bu arada! Lütfen aşağıdaki makalelere bakınız.

Hierarchies on Steroids #1: Convert an Adjacency List to Nested Sets

Hierarchies on Steroids #2: A Replacement for Nested Sets Calculations

İlgili konular