Hoş Geldiniz! KablosuzForum.net

Tüm özelliklerimize erişmek için şimdi bize katılın. Kaydolup giriş yaptıktan sonra konu oluşturabilir, mevcut konulara yanıt gönderebilir, diğer üyelerinize itibar kazandırabilir, kendi özel mesajlaşma programınızı edinebilir ve çok daha fazlasını yapabileceksiniz. Aynı zamanda hızlı ve tamamen ücretsizdir, peki daha ne bekliyorsunuz?

Soru Sor

Merak ettiğiniz, kafanıza takılan sorular hakkında konu açın, diğer üyelerimiz ve moderatörlerimiz cevaplasın.

Ticaret

Ticari konular açıp güven oluşturmak ve daha fazla satış rakamlarına ulaşmak için hesabını doğrula!

Bize ulaşın

Yönetim kadrosuyla iletişime geçin

Üyeliğini Yükselt!

Üyeliğinizi yükselterek birbirinden ayrıcalıklı özelliklere sahip olun!

PostgreSQL ltree Uzantısıyla Ağaç Yapılarını Akıllı Şekilde Yönetmek

Resim 1 Resim 2

erturkvolkan

Volkan Ertürk
KF Kullanıcı
Katılım
17 Eki 2024
Mesajlar
2
Tepkime puanı
0
Puanları
1

PostgreSQL ltree Uzantısıyla Ağaç Yapılarını Akıllı Şekilde Yönetmek​


Hangi Durumlarda ltree?

PostgreSQL’in ltree uzantısı, hiyerarşik verileri tek bir TEXT sütununda saklamanıza izin veren bir kütüphanedir. Ağaç, ağacının her düğümü “. ” ile ayrılmış bir yol stringi olarak temsil edilir. Bu sayede <i>SELECT, UPDATE, DELETE</i> gibi temel işlemlerle birlikte;

* Bölge hiyerarşileri (için coğrafi bölgeler)
* Kategoriler (ürün katalogları)
* Dosya sistemleri (örnek: klasör yolu yönetimi)
* İzin hiyerarşileri (RBAC)

gibi uygulama senaryolarını sıra dışı bir biçimde çözebilirsiniz.


Temel Kayıt Formatı

```
INSERT INTO kategori (id, yol) VALUES
(1, 'root'),
(2, 'root.1'),
(3, 'root.2'),
(4, 'root.1.1'),
(5, 'root.1.2'),
(6, 'root.2.1');
```

```
SELECT * FROM kategori WHERE yol <@ 'root.1';
-- root, root.1, root.1.1, root.1.2 döner
```


İşlevsel Örnek: Klasör Erişim Yetkileri

Her dosya, içinde bulunduğu klasör yolunu sakladığını düşünelim. Kullanıcı göreceği dosyaları belirlemek için aşağıdaki satır geçici olsun:

```
SELECT d.*
FROM dosya d
JOIN yetkilendirme y ON d.yol <@ y.yol
WHERE y.kullanici_id = 42;
```

Böylece yetki hiyerarşisi ve dosya yapısı tek bir sorguda çözülmüş olur.


Performans Tüyosu: İndeksleme

Soru: “Rekord sayısı meniden 10 milyon.” İndeks filtrelenebilir:<br/>

```
CREATE INDEX idx_kategori_yol ON kategori USING gin (yol gin_trgm_ops);
```

gin_trgm_ops, trigram tabanlı aramalarda eşsiz bir performans artışı sağlar.


Zorunlu Test: Örnek Sorgu

Aşağıdaki sorgu, belirli bir nokta altındaki tüm düğümleri ve onların seviyelerini listeler:

```
SELECT id, yol,
nlevel(yol) AS seviye
FROM kategori
WHERE yol <@ 'root.1';
```

Seviye numarası, “root” için 0, “root.1” için 1 ve harika bir alt hiyerarşik indeks sağlar.


Sonuç

ltree, veri tabanı tasarımında hiyerarşik yapıları yapıcı, okunabilir ve sorgulanabilir bir biçime dönüştürerek yönetim karmaşıklığını ortadan kaldırır. Şimdi geçiş zamanı: kolonunuzu TEXT’e çevirin ve ltree ile hiyerarşi kaosunu çözün!
 
Responsive GIF Layout

shape1
shape2
shape3
shape4
shape5
shape6
Geri
Üst