> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Bu özellik, TrustGraph Cassandra bilgi tabanı uygulamasındaki performans sorunlarına değinmekte ve RDF üçlü depolama ve sorgulama için optimizasyonlar önermektedir.
## Mevcut Uygulama
### Şema Tasarımı
Mevcut uygulama, `trustgraph-flow/trustgraph/direct/cassandra_kg.py`'da tek bir tablo tasarımı kullanmaktadır:
```sql
CREATE TABLE triples (
collection text,
s text,
p text,
o text,
PRIMARY KEY (collection, s, p, o)
);
```
**İkincil İndeksler:**
`triples_s` ON `s` (özne)
`triples_p` ON `p` (yüklem)
`triples_o` ON `o` (nesne)
### Sorgu Desenleri
Mevcut uygulama, 8 farklı sorgu desenini desteklemektedir:
1.**get_all(collection, limit=50)** - Bir koleksiyon için tüm üçlüleri getirir.
```sql
SELECT s, p, o FROM triples WHERE collection = ? LIMIT 50
```
2.**get_s(collection, s, limit=10)** - Konuya göre sorgulama
```sql
SELECT p, o FROM triples WHERE collection = ? AND s = ? LIMIT 10
```
3.**get_p(collection, p, limit=10)** - Öznitelik kullanarak sorgulama
```sql
SELECT s, o FROM triples WHERE collection = ? AND p = ? LIMIT 10
```
4.**get_o(collection, o, limit=10)** - Nesneye göre sorgulama
```sql
SELECT s, p FROM triples WHERE collection = ? AND o = ? LIMIT 10
```
5.**get_sp(collection, s, p, limit=10)** - Konu + yüklem ile sorgulama
```sql
SELECT o FROM triples WHERE collection = ? AND s = ? AND p = ? LIMIT 10
```
6.**get_po(collection, p, o, limit=10)** - Öznitelik + nesneye göre sorgulama ⚠️
```sql
SELECT s FROM triples WHERE collection = ? AND p = ? AND o = ? LIMIT 10 ALLOW FILTERING
```
7.**get_os(collection, o, s, limit=10)** - Nesne + konu ile sorgulama ⚠️
```sql
SELECT p FROM triples WHERE collection = ? AND o = ? AND s = ? LIMIT 10 ALLOW FILTERING
```
8.**get_spo(collection, s, p, o, limit=10)** - Tam üçlü eşleşme
```sql
SELECT s as x FROM triples WHERE collection = ? AND s = ? AND p = ? AND o = ? LIMIT 10
Tek `triples` tablosunu, belirli sorgu kalıpları için optimize edilmiş dört özel amaçlı tabloyla değiştirin. Bu, ikincil dizinlere ve ALLOW FILTERING'e olan ihtiyacı ortadan kaldırırken, tüm sorgu türleri için optimum performans sağlar. Dördüncü tablo, bileşik bölüm anahtarlarına rağmen verimli koleksiyon silme olanağı sağlar.
### Yeni Şema Tasarımı
**Tablo 1: Konu Odaklı Sorgular (triples_s)**
```sql
CREATE TABLE triples_s (
collection text,
s text,
p text,
o text,
PRIMARY KEY ((collection, s), p, o)
);
```
**Optimize eder:** get_s, get_sp, get_os
**Bölüm Anahtarı:** (collection, s) - Yalnızca collection'dan daha iyi dağılım sağlar
**Kümeleme:** (p, o) - Bir konu için verimli öznelik/nesne aramalarını sağlar
**Tablo 2: Öznelik-Nesne Sorguları (triples_p)**
```sql
CREATE TABLE triples_p (
collection text,
p text,
o text,
s text,
PRIMARY KEY ((collection, p), o, s)
);
```
**Optimize eder:** get_p, get_po (ALLOW FILTERING özelliğini ortadan kaldırır!)
**Bölüm Anahtarı:** (collection, p) - Öznitelik yoluyla doğrudan erişim
**Kümeleme:** (o, s) - Verimli nesne-özne geçişi
**Tablo 3: Nesne Odaklı Sorgular (triples_o)**
```sql
CREATE TABLE triples_o (
collection text,
o text,
s text,
p text,
PRIMARY KEY ((collection, o), s, p)
);
```
**Optimize eder:** get_o
**Bölüm Anahtarı:** (collection, o) - Nesneye doğrudan erişim
**Kümeleme:** (s, p) - Verimli özne-yüklem geçişi
**Tablo 4: Koleksiyon Yönetimi ve SPO Sorguları (triples_collection)**
```sql
CREATE TABLE triples_collection (
collection text,
s text,
p text,
o text,
PRIMARY KEY (collection, s, p, o)
);
```
**Optimize eder:** get_spo, delete_collection
**Bölüm Anahtarı:** sadece koleksiyon - Verimli koleksiyon seviyesindeki işlemleri sağlar.
**Kümeleme:** (s, p, o) - Standart üçlü sıralama
**Amaç:** Hem tam SPO aramaları için hem de silme indeksi olarak çift amaçlı kullanım.
### Sorgu Eşlemesi
| Orijinal Sorgu | Hedef Tablo | Performans İyileştirmesi |
**Geçiş karmaşıklığı** - Büyük veri kümeleri için veri geçişi
**Tutarlılık sorunları** - Tüm tabloların senkronize olduğundan emin olmak
**İzleme eksiklikleri** - Çok tablolu işlemler için yeni metrikler gereklidir
### Azaltma Stratejileri
1.**Aşamalı dağıtım** - Küçük koleksiyonlarla başlayın
2.**Kapsamlı izleme** - Tüm performans metriklerini takip edin
3.**Otomatik doğrulama** - Sürekli tutarlılık kontrolü
4.**Hızlı geri alma yeteneği** - Ortam tabanlı tablo seçimi
## Başarı Kriterleri
### Performans İyileştirmeleri
[ ] **ALLOW FILTERING'i ortadan kaldırın** - get_po ve get_os sorguları filtreleme olmadan çalışır
[ ] **Sorgu gecikmesi azaltma** - Sorgu yanıt sürelerinde %50 veya daha fazla iyileşme
[ ] **Daha iyi yük dağılımı** - Hiçbir "sıcak" bölüm yok, küme düğümleri arasında eşit yük dağılımı
[ ] **Ölçeklenebilir performans** - Sorgu süresi, toplam veri miktarı yerine sonuç büyüklüğüne orantılı
### Fonksiyonel Gereksinimler
[ ] **API uyumluluğu** - Tüm mevcut kod, herhangi bir değişiklik olmadan çalışmaya devam eder
[ ] **Veri tutarlılığı** - Tüm üç tablo senkronize kalır
[ ] **Sıfır veri kaybı** - Geçiş, tüm mevcut üçlüleri korur
[ ] **Geriye dönme uyumluluğu** - Eski şemaya geri dönme yeteneği
### İşletim Gereksinimleri
[ ] **Güvenli geçiş** - Geri alma yeteneği olan mavi-yeşil dağıtım
[ ] **İzleme kapsamı** - Çok tablolu işlemler için kapsamlı metrikler
[ ] **Test kapsamı** - Tüm sorgu kalıpları, performans kıyaslamalarıyla test edilmiştir
[ ] **Belgeleme** - Güncellenmiş dağıtım ve işletim prosedürleri
## Zaman Çizelgesi
### 1. Aşama: Uygulama
[ ] `cassandra_kg.py`'ı çok tablolu şemayla yeniden yazın
[ ] Toplu yazma işlemlerini uygulayın
[ ] Hazırlanmış ifade optimizasyonunu ekleyin
[ ] Birim testlerini güncelleyin
### 2. Aşama: Entegrasyon Testi
[ ] Entegrasyon testlerini güncelleyin
[ ] Performans kıyaslaması
[ ] Gerçekçi veri hacimleriyle yük testi
[ ] Veri tutarlılığı için doğrulama betikleri
### 3. Aşama: Geçiş Planlaması
[ ] Mavi-yeşil dağıtım betikleri
[ ] Veri geçiş araçları
[ ] İzleme panosu güncellemeleri
[ ] Geri alma prosedürleri
### 4. Aşama: Üretim Dağıtımı
[ ] Üretime aşamalı dağıtım
[ ] Performans izleme ve doğrulama
[ ] Eski tabloların temizlenmesi
[ ] Belgeleme güncellemeleri
## Sonuç
Bu çok tablolu normalleştirme stratejisi, doğrudan iki kritik performans darboğazını ele almaktadır:
1.**Pahalı ALLOW FILTERING'i ortadan kaldırır** ve her sorgu kalıbı için optimum tablo yapıları sağlar.
2.**Kompozit bölüm anahtarları aracılığıyla kümeleme etkinliğini artırır** ve yükü düzgün bir şekilde dağıtır.
Bu yaklaşım, Cassandra'nın güçlü yönlerinden yararlanırken, mevcut kodun performans iyileştirmelerinden otomatik olarak yararlanmasını sağlayan tam API uyumluluğunu korur.