Apakah ada yang menggunakan HierarchyId dalam produksi nyata dengan tabel ukuran yang masuk akal, lebih dari beberapa ribu baris? Apakah dapat diandalkan / performan? Sejauh ini saya belum menemukan orang yang berafiliasi dengan vendor merekomendasikannya, dan Paul Nielsen menyarankan untuk tidak melakukannya di sini .
Apa pengalaman Anda menggunakan HierarchyId dalam sistem produksi aktual?
Kriteria apa yang telah Anda gunakan ketika Anda memilih HierarchyId daripada alternatifnya?
Ini adalah jawaban untuk pertanyaan Kirk 'mengapa tidak menggunakannya (HierarchyId)'. Dibandingkan dengan jalur terwujud, dalam beberapa kasus penting HierarchyId tampaknya kurang berkinerja dan kurang nyaman untuk bekerja dengannya.
Alasannya sederhana: mengutip dari komentar Microsoft pada Connect , "Masalahnya adalah bahwa panggilan CLR, termasuk metode hierarkiID, tidak jelas untuk pengoptimal kueri. Ini adalah desain. Namun, itu berarti bahwa perkiraan kardinalitas untuk mereka kadang-kadang bisa sangat salah."
Di sisi lain, mengimplementasikan jalur terwujud sangat mudah saat pertama kali kita perlu melakukannya, dan lain kali pada dasarnya merupakan tugas salin dan tempel. Jadi, kami mendapatkan solusi yang lebih fleksibel dan berkinerja lebih baik dengan sedikit usaha.
Jadi saya sepenuhnya setuju dengan Paul Nielsen, yang menulis dalam bukunya yang sangat bagus yang berjudul "Microsoft® SQL Server® 2008 Bible" sebagai berikut: "HierarchyID baru bukan tanpa kontroversi. Ini baru dan mendapat banyak waktu pers dan demo, tetapi saya ' Saya tidak yakin itu masalah yang membutuhkan solusi lain. "
sumber
Perusahaan saya menggunakan HeirachyID dalam penjualan langsung, perangkat lunak pemasaran multi-level. Berhasil. Saya belum benar-benar melakukan pekerjaan dengan itu saya hanya tahu kami menggunakannya.
Masalah terbesar yang saya lihat dengan itu adalah bahwa kita melakukan iterasi melalui level-level secara looping alih-alih lebih berbasis set. Di area itu, performanya tidak terlalu bagus untuk kami, tapi saya tidak yakin apakah itu masalah dengan tipe atau implementasi kami.
sumber
Satu masalah dengan hierarki adalah Anda mendapatkan vendor lock-in. Tapi saya memang menemukan artikel hebat oleh Adam Milazzo tentang bagaimana semuanya bekerja secara internal:
http://www.adammil.net/blog/view.php?id=100
Dengan ini saya bisa menulis skrip Postgres untuk mengonversi set data saya dari MSSQL. Juga disertakan dalam skrip yang saya tulis untuk mengimpor database AdventureWorks ke Postgres:
https://github.com/lorint/AdventureWorks-for-Postgres
Cukup cari "hierarkiid" di file install.sql di sana dan Anda akan segera menemukan referensi untuk mengubahnya.
sumber
Tim kami telah menerapkannya dalam produksi, pada awalnya kinerjanya baik, setelah 2 tahun, tabel sekarang berisi 430.000 baris dan getroot dan getdecendent membutuhkan waktu 3 detik, keduanya diperlukan untuk menghitung nilai Id berikutnya untuk memasukkan catatan. Sekarang penyisipan subtree tunggal membutuhkan waktu sekitar 16 detik yang tidak dapat diterima sama sekali.
sumber