Üretimde Hiyerarşi Kimliği kullanan var mı? Güvenilir mi?


21

Hiyerarşi kimliğini gerçek ebatta, makul büyüklükteki tablolarla, birkaç binden fazla satır kullanan biri var mı? Güvenilir mi / performans mı? Şimdiye kadar satıcı ile bağlantısı olmayan herkes bunu tavsiye bulamadı ve Paul Nielsen buna karşı tavsiyede burada .

HierarchyId ürününü gerçek üretim sistemlerinde kullanma deneyiminiz nedir?

Alternatifleri üzerinde Hiyerarşi kimliği seçerken hangi kriterleri kullandınız?

Yanıtlar:


8

HierarchyID'i uyguladım ve iyi performans sağlaması ve kullanımı kolay buldum.

Hiyerarşiye kadar 10 dal derinliğinde göreceli olarak küçük veri kümelerinde (onbinlerce satır) kullandım.

Neden kullanmalısın? HierarchyID türü, IsDescendantOfişinizi kendi maddi yolunuzu yuvarlamaktan daha kolay hale getiren bir dizi yardımcı yöntem (örneğin ) sağlar.

StackOverflow'daki üzerinde Paul Nielsen comment bana kafa karıştırıcı - HierarchyID olan bir materialized yolu. Cevabının altındaki bu yorumu kabul etmeye daha meyilliyim .

Daha iyi bir soru 'neden kullanmıyorsun' olabilir. Kullanımı kolaydır, aksi takdirde kendiniz için yazacağınız birçok işlevsellik sunar ve iyi performans gösterir (sınırlı testlerimde).


+1 Verilerinizin bütünlüğünü nasıl sağlıyorsunuz? Yetim olmadığından emin olmak için kısıtlamaları kullanabilir misiniz?
AK,

3
Bellekten yapabilirsin. Ana değeri belirlemek, bu değer için kalıcı bir hesaplanmış sütun oluşturmak ve ardından bu değer ile ana arasında bir FK kısıtı uygulamak için HierarchyID'de bir işlev kullanırsınız.
Kirk Broadhurst

5

Bu, Kirk'ün 'neden kullanmıyorsun (Hiyerarşi Kimliği)' sorusuna bir cevaptır. Maddileştirilmiş yolla karşılaştırıldığında, bazı önemli durumlarda Hiyerarşi Kimliği hem daha az performans gösterir hem de çalışmak için daha az uygun görünmektedir.

Nedeni basit: Microsoft’tan Connect’ten alıntı yapmak , "Sorun hiyerarşi kimliği yöntemleri de dahil olmak üzere CLR çağrılarının sorgu iyileştiricisine opak olmalarıdır. Bu, tasarım gereğidir. yanlış."

Öte yandan, maddeleştirilmiş yolu uygulamak, ilk yapmamız gereken zaman çok kolaydır ve bir dahaki sefere aslında kopyala ve yapıştır görevidir. Böylece çok az çabayla daha çok yönlü ve daha iyi performans gösteren bir çözüm elde ediyoruz.

Bu nedenle, "Microsoft® SQL Server® 2008 İncil" başlıklı mükemmel kitabında şöyle yazan Paul Nielsen ile tamamen aynı fikirdeyim: "Yeni Hiyerarşi Kimliği tartışmasız değil. Yeni ve çok fazla baskı ve demo zamanı alıyor, ama ben ' Başka bir çözüme ihtiyaç duyan bir sorun olduğundan emin değilim. ”


3

Şirketim HeirachyID'i doğrudan satış, çok düzeyli pazarlama yazılımı olarak kullanıyor. İşe yarıyor. Gerçekten onunla bir iş yapmadım, sadece kullandığımızı biliyorum.

Gördüğüm en büyük sorun, daha set bazlı olmak yerine, döngüsel bir döngü içinde seviyelerde yinelememizdir. Bu alanda bizim için pek iyi bir performans göstermiyor, ancak bunun türü veya uygulanmasında bir sorun olup olmadığından emin değilim.


Jack, masaların ne kadar büyük? Hiyerarşi kimliğini alternatifleri üzerinde kullanmayı nasıl seçtin?
AK,

E-posta bildirimi etkin olmadığından, bu yorumu hiç görmedim. Masalarımız şu anda milyonlarca değil yüzbinlerce. HierarchyID kullanma kararı verildiğinde şirkette değildim, o yüzden neden yeni seçildiğinden başka neden seçildiğinden emin değilim.
Jack Corbett,

1

Hiyerarşi ile ilgili bir sorun, satıcıya kilitlenmenizdir. Ancak Adam Milazzo tarafından her şeyin dahili olarak nasıl çalıştığı hakkında harika bir yazı buldum:

http://www.adammil.net/blog/view.php?id=100

Bu sayede MSSQL'den veri setimi dönüştürmek için Postgres betiği yazabildim. Ayrıca, AdventureWorks veritabanını Postgres'e aktarmak için yazdığım bir komut dosyasına dahil etti:

https://github.com/lorint/AdventureWorks-for-Postgres

Orada sadece install.sql dosyasında "hierarchyid" arayın ve yakında dönüştürülmesi için referanslar bulacaksınız.


0

Ekibimiz bunu üretimde uyguladı, ilk önce performans iyi, 2 yıl sonra, tablo şimdi 430.000 satır içeriyor ve getroot ve getdendendent 3 saniye sürüyor, her ikisi de kayıt eklemek için bir sonraki Id değerini hesaplamak için gerekli. Şimdi tek bir alt ağaç eklemesi yaklaşık 16 saniye sürer ve bu da kabul edilemez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.