2026-04-10 12:22:20 -04:00
# GraphRAG Performans Optimizasyonu Teknik Özellikleri
## Genel Bakı ş
Bu özellik, TrustGraph'taki GraphRAG (Graf Çı karı m Destekli Üretim) algoritması için kapsamlı performans iyileştirmelerini açı klamaktadı r. Mevcut uygulama, ölçeklenebilirliği ve yanı t sürelerini sı nı rlayan önemli performans darboğazları na sahiptir. Bu özellik, dört birincil optimizasyon alanı nı ele almaktadı r:
1. **Graf Gezinme Optimizasyonu** : Verimsiz yinelemeli veritabanı sorguları nı ortadan kaldı rı n ve toplu grafik keşfi uygulayı n.
2. **Etiket Çözümleme Optimizasyonu** : Sı ralı etiket alma işlemlerini, paralel/toplu işlemlere dönüştürün.
3. **Önbellekleme Stratejisi İyileştirmesi** : LRU (En Son Kullanı lmayan) çı karma ve ön yükleme ile akı llı bir önbellekleme uygulayı n.
4. **Sorgu Optimizasyonu** : İyileştirilmiş yanı t süreleri için sonuç memoizasyonu ve gömme önbelleği ekleyin.
## Hedefler
**Veritabanı Sorgusu Hacmini Azaltı n**: Toplu işleme ve önbellekleme yoluyla toplam veritabanı sorguları nda %50-80'lik bir azalma elde edin.
**Yanı t Sürelerini İyileştirin**: Alt grafik oluşturma için 3-5 kat daha hı zlı ve etiket çözümleme için 2-3 kat daha hı zlı hedefleyin.
**Ölçeklenebilirliği Artı rı n**: Daha iyi bellek yönetimi ile daha büyük bilgi grafiklerini destekleyin.
**Doğruluğu Koruyun**: Mevcut GraphRAG işlevselliğini ve sonuç kalitesini koruyun.
**Eşzamanlı lı ğı Etkinleştirin**: Çoklu eşzamanlı istekler için paralel işleme yeteneklerini iyileştirin.
**Bellek Ayak İzini Azaltı n**: Verimli veri yapı ları ve bellek yönetimi uygulayı n.
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
**Gözlemlenebilirliği Ekleyin**: Performans ölçümleri ve izleme yetenekleri ekleyin.
2026-04-11 01:08:44 +00:00
=======
**Gözlenebilirliği Ekleyin**: Performans ölçümleri ve izleme yetenekleri ekleyin.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
**Güvenilirliği Sağlayı n**: Uygun hata işleme ve zaman aşı mı mekanizmaları ekleyin.
## Arka Plan
`trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py` içindeki mevcut GraphRAG uygulaması , sistem ölçeklenebilirliğini önemli ölçüde etkileyen çeşitli kritik performans sorunları sergilemektedir:
### Mevcut Performans Sorunları
**1. Verimsiz Graf Gezinme (`follow_edges` fonksiyonu, 79-127 satı rlar)**
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Her varlı k için her derinlik seviyesinde 3 ayrı veritabanı sorgusu yapar.
Sorgu kalı bı : Her varlı k için konu tabanlı , öznelik tabanlı ve nesne tabanlı sorgular.
Toplu işleme yok: Her sorgu yalnı zca bir varlı ğı işler.
Döngü algı lama yok: Aynı düğümlere birden çok kez geri dönülebilir.
Memoizasyon olmadan yinelemeli uygulama, üstel karmaşı klı ğa yol açar.
Zaman karmaşı klı ğı : O(varlı klar × max_path_length × triple_limit³)
**2. Sı ralı Etiket Çözümleme (`get_labelgraph` fonksiyonu, 144-171 satı rlar)**
Her üç bileşenli (konu, öznelik, nesne) üçlü öğeyi sı rası yla işler.
Her `maybe_label` çağrı sı potansiyel olarak bir veritabanı sorgusu tetikler.
Etiket sorguları nı n paralel yürütülmesi veya toplu işlenmesi yoktur.
subgraph_size × 3 adet ayrı veritabanı çağrı sı na yol açar.
**3. Basit Önbellekleme Stratejisi (`maybe_label` fonksiyonu, 62-77 satı rlar)**
Boyut sı nı rları veya TTL (Yaşam Süresi) olmadan basit bir sözlük önbelleği.
Önbellek çı karma politikası olmaması , sı nı rsı z bellek büyümesine yol açar.
Önbellek hataları , ayrı veritabanı sorguları nı tetikler.
Ön yükleme veya akı llı önbellek önleme yoktur.
**4. Alt Optimum Sorgu Kalı pları **
Benzer istekler arası nda varlı k vektör benzerliği sorguları önbelleğe alı nmaz.
Tekrarlayan sorgu kalı pları için sonuç memoizasyonu yoktur.
Yaygı n erişim kalı pları için sorgu optimizasyonu eksiktir.
2026-04-11 01:08:44 +00:00
=======
Her varlı k için 3 ayrı veritabanı sorgusu yapar.
Sorgu kalı bı : her varlı k için konu tabanlı , öznelik tabanlı ve nesne tabanlı sorgular.
Toplu işleme yok: Her sorgu yalnı zca bir varlı ğı işler.
Döngü algı lama yok: Aynı düğümlere birden çok kez geri dönülebilir.
Memoizasyon olmadan yinelemeli uygulama, üstel karmaşı klı ğa yol açar.
Zaman karmaşı klı ğı : O(varlı klar × maks_yol_uzunluğu × üçlü_sı nı rı ³)
**2. Sı ralı Etiket Çözümleme (`get_labelgraph` fonksiyonu, 144-171 satı rlar)**
Her üç bileşenli (konu, öznelik, nesne) sı rayla işler.
Her `maybe_label` çağrı sı potansiyel olarak bir veritabanı sorgusu tetikler.
Etiket sorguları nı n paralel yürütülmesi veya toplu işlenmesi yok.
subgraph_size × 3 adet ayrı veritabanı çağrı sı na yol açar.
**3. Basit Önbellekleme Stratejisi (`maybe_label` fonksiyonu, 62-77 satı rlar)**
Boyut sı nı rları veya TTL (Yaşam Süresi Sonu) olmadan basit bir sözlük önbelleği.
Önbellek çı karma politikası olmaması , sı nı rsı z bellek büyümesine yol açar.
Önbellek hataları , ayrı veritabanı sorguları nı tetikler.
Ön yükleme veya akı llı önbellek önleme yok.
**4. Alt Optimum Sorgu Kalı pları **
Benzer istekler arası nda varlı k vektör benzerliği sorguları önbelleğe alı nmaz.
Tekrarlayan sorgu kalı pları için sonuç memoizasyonu yok.
Yaygı n erişim kalı pları için sorgu optimizasyonu eksik.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
**5. Kritik Nesne Ömrü Sorunları (`rag.py:96-102` )**
**GraphRag nesnesi her istek için yeniden oluşturulur**: Her sorgu için yeni bir örnek oluşturulur, böylece tüm önbellek avantajları kaybolur.
**Sorgu nesnesi son derece kı sa ömürlüdür**: Tek bir sorgu yürütmesi içinde oluşturulur ve yok edilir (201-207 satı rlar).
**Etiket önbelleği her istek için sı fı rlanı r**: Önbellek önleme ve birikmiş bilgi istekler arası nda kaybolur.
**İstemci yeniden oluşturma ek yükü**: Veritabanı istemcileri potansiyel olarak her istek için yeniden oluşturulur.
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
**İstekler arası optimizasyon yok**: Sorgu kalı pları ndan veya sonuç paylaşı mı ndan yararlanamaz.
2026-04-11 01:08:44 +00:00
=======
**Çapraz istek optimizasyonu yok**: Sorgu kalı pları ndan veya sonuç paylaşı mı ndan yararlanamaz.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
### Performans Etki Analizi
Tipik bir sorgu için mevcut en kötü senaryo:
**Varlı k Alma**: 1 vektör benzerliği sorgusu.
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
**Graf Gezinme**: varlı klar × max_path_length × 3 × triple_limit sorgusu.
2026-04-11 01:08:44 +00:00
=======
**Graf Gezinme**: varlı klar × maks_yol_uzunluğu × 3 × üçlü_sı nı rı sorguları .
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
**Etiket Çözümleme**: subgraph_size × 3 adet ayrı etiket sorgusu.
Varsayı lan parametreler için (50 varlı k, yol uzunluğu 2, 30 üçlü sı nı rı , 150 alt grafik boyutu):
**Minimum sorgular**: 1 + (50 × 2 × 3 × 30) + (150 × 3) = **9.451 veritabanı sorgusu**
**Yanı t süresi**: Orta büyüklükteki grafikler için 15-30 saniye
**Bellek kullanı mı **: Zamanla sı nı rsı z önbellek büyümesi
**Önbellek etkinliği**: %0 - her istekte önbellekler sı fı rlanı r
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
**Nesne oluşturma ek yükü**: Her istek için oluşturulan/silinen GraphRag + Sorgu nesneleri
2026-04-11 01:08:44 +00:00
=======
**Nesne oluşturma ek yükü**: Her istek için GraphRag + Sorgu nesneleri oluşturulur/silinir
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
Bu özellik, toplu sorguları , akı llı önbelleği ve paralel işleme uygulayarak bu eksiklikleri giderir. Sorgu kalı pları nı ve veri erişimini optimize ederek TrustGraph şunları yapabilir:
Milyonlarca varlı ğa sahip kurumsal ölçekli bilgi grafiklerini destekleyin
Tipik sorgular için saniyeden daha kı sa yanı t süreleri sağlayı n
Yüzlerce eşzamanlı GraphRAG isteğini işleyin
Grafik boyutu ve karmaşı klı ğı yla verimli bir şekilde ölçeklendirin
## Teknik Tasarı m
### Mimari
GraphRAG performans optimizasyonu, aşağı daki teknik bileşenleri gerektirir:
#### 1. **Nesne Ömrü Mimari Yeniden Düzenlemesi**
**GraphRag'i uzun ömürlü hale getirin** : GraphRag örneğini, istekler arası nda süreklilik sağlamak için İşlemci seviyesine taşı yı n
**Önbellekleri koruyun** : Etiket önbelleğini, gömme önbelleğini ve sorgu sonucu önbelleğini istekler arası nda koruyun
**Sorgu nesnesini optimize edin** : Sorguyu, veri kapsayı cı sı değil, hafif bir yürütme bağlamı olarak yeniden düzenleyin
**Bağlantı sürekliliği** : Veritabanı istemci bağlantı ları nı istekler arası nda koruyun
Modül: `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` (değiştirildi)
#### 2. **Optimize Edilmiş Grafik Gezinme Motoru**
Özyinelemeli `follow_edges` 'ı yinelemeli genişlik öncelikli arama ile değiştirin
Her gezinme seviyesinde toplu varlı k işleme uygulayı n
Ziyaret edilen düğüm takibi kullanarak döngü algı lama ekleyin
Sı nı rlar aşı ldı ğı nda erken sonlandı rma ekleyin
Modül: `trustgraph-flow/trustgraph/retrieval/graph_rag/optimized_traversal.py`
#### 3. **Paralel Etiket Çözümleme Sistemi**
Birden çok varlı k için etiket sorguları nı aynı anda toplu olarak sorgulayı n
Eşzamanlı veritabanı erişimi için asenkron/bekle kalı pları nı uygulayı n
Yaygı n etiket kalı pları için akı llı ön yükleme ekleyin
Etiket önbelleği ı sı tma stratejileri ekleyin
Modül: `trustgraph-flow/trustgraph/retrieval/graph_rag/label_resolver.py`
#### 4. **Muhafazakar Etiket Önbelleği Katmanı **
Performans ve tutarlı lı k dengesini sağlamak için yalnı zca etiketler için kı sa TTL'ye sahip LRU önbelleği (5 dakika)
Önbellek metriklerini ve isabet oranı nı izleme
**Gömme önbelleği yok** : Zaten her sorgu için önbelleğe alı nmı ştı r, sorgular arası bir fayda yoktur
**Sorgu sonucu önbelleği yok** : Grafik mutasyon tutarlı lı ğı endişeleri nedeniyle
Modül: `trustgraph-flow/trustgraph/retrieval/graph_rag/cache_manager.py`
#### 5. **Sorgu Optimizasyon Çerçevesi**
Sorgu kalı bı analizi ve optimizasyon önerileri
Veritabanı erişimi için toplu sorgu koordinatörü
Bağlantı havuzu ve sorgu zaman aşı mı yönetimi
Performans izleme ve ölçüm toplama
Modül: `trustgraph-flow/trustgraph/retrieval/graph_rag/query_optimizer.py`
### Veri Modelleri
#### Optimize Edilmiş Grafik Gezinme Durumu
Gezinme motoru, gereksiz işlemleri önlemek için durumu korur:
```python
@dataclass
class TraversalState:
visited_entities: Set[str]
current_level_entities: Set[str]
next_level_entities: Set[str]
subgraph: Set[Tuple[str, str, str]]
depth: int
query_batch: List[TripleQuery]
```
Bu yaklaşı m şunları sağlar:
Ziyaret edilen varlı kları takip ederek verimli döngü tespiti
Her gezinme seviyesinde toplu sorgu hazı rlama
Bellek verimli durum yönetimi
Boyut limitlerine ulaşı ldı ğı nda erken sonlandı rma
#### Gelişmiş Önbellek Yapı sı
```python
@dataclass
class CacheEntry:
value: Any
timestamp: float
access_count: int
ttl: Optional[float]
class CacheManager:
label_cache: LRUCache[str, CacheEntry]
embedding_cache: LRUCache[str, CacheEntry]
query_result_cache: LRUCache[str, CacheEntry]
cache_stats: CacheStatistics
```
#### Toplu Sorgu Yapı ları
```python
@dataclass
class BatchTripleQuery:
entities: List[str]
query_type: QueryType # SUBJECT, PREDICATE, OBJECT
limit_per_entity: int
@dataclass
class BatchLabelQuery:
entities: List[str]
predicate: str = LABEL
```
### API'ler
#### Yeni API'ler:
**GraphTraversal API'si**
```python
async def optimized_follow_edges_batch(
entities: List[str],
max_depth: int,
triple_limit: int,
max_subgraph_size: int
) -> Set[Tuple[str, str, str]]
```
**Toplu Etiket Çözümleme API'si**
```python
async def resolve_labels_batch(
entities: List[str],
cache_manager: CacheManager
) -> Dict[str, str]
```
**Önbellek Yönetimi API'si**
```python
class CacheManager:
async def get_or_fetch_label(self, entity: str) -> str
async def get_or_fetch_embeddings(self, query: str) -> List[float]
async def cache_query_result(self, query_hash: str, result: Any, ttl: int)
def get_cache_statistics(self) -> CacheStatistics
```
#### Değiştirilmiş API'ler:
**GraphRag.query()** - Performans optimizasyonları yla geliştirildi:
Önbellek kontrolü için `cache_manager` parametresi eklendi.
Performans metriklerini içeren `performance_metrics` dönüş değeri eklendi.
Güvenilirlik için `query_timeout` parametresi eklendi.
**Query sı nı fı ** - Toplu işleme için yeniden düzenlendi:
Bireysel varlı k işleme yerine toplu işlemler kullanı ldı .
Kaynak temizliği için asenkron bağlam yöneticileri eklendi.
Uzun süren işlemler için ilerleme geri çağı rmaları eklendi.
### Uygulama Detayları
#### Aşama 0: Kritik Mimari Yaşam Döngüsü Yeniden Düzenlemesi
**Mevcut Sorunlu Uygulama:**
```python
# INEFFICIENT: GraphRag recreated every request
class Processor(FlowProcessor):
async def on_request(self, msg, consumer, flow):
# PROBLEM: New GraphRag instance per request!
self.rag = GraphRag(
embeddings_client = flow("embeddings-request"),
graph_embeddings_client = flow("graph-embeddings-request"),
triples_client = flow("triples-request"),
prompt_client = flow("prompt-request"),
verbose=True,
)
# Cache starts empty every time - no benefit from previous requests
response = await self.rag.query(...)
# VERY SHORT-LIVED: Query object created/destroyed per request
class GraphRag:
async def query(self, query, user="trustgraph", collection="default", ...):
q = Query(rag=self, user=user, collection=collection, ...) # Created
kg = await q.get_labelgraph(query) # Used briefly
# q automatically destroyed when function exits
```
**Optimize Edilmiş, Uzun Ömürlü Mimari:**
```python
class Processor(FlowProcessor):
def __init__ (self, **params):
super().__init__(**params)
self.rag_instance = None # Will be initialized once
self.client_connections = {}
async def initialize_rag(self, flow):
"""Initialize GraphRag once, reuse for all requests"""
if self.rag_instance is None:
self.rag_instance = LongLivedGraphRag(
embeddings_client=flow("embeddings-request"),
graph_embeddings_client=flow("graph-embeddings-request"),
triples_client=flow("triples-request"),
prompt_client=flow("prompt-request"),
verbose=True,
)
return self.rag_instance
async def on_request(self, msg, consumer, flow):
# REUSE the same GraphRag instance - caches persist!
rag = await self.initialize_rag(flow)
# Query object becomes lightweight execution context
response = await rag.query_with_context(
query=v.query,
execution_context=QueryContext(
user=v.user,
collection=v.collection,
entity_limit=entity_limit,
# ... other params
)
)
class LongLivedGraphRag:
def __init__ (self, ...):
# CONSERVATIVE caches - balance performance vs consistency
self.label_cache = LRUCacheWithTTL(max_size=5000, ttl=300) # 5min TTL for freshness
# Note: No embedding cache - already cached per-query, no cross-query benefit
# Note: No query result cache due to consistency concerns
self.performance_metrics = PerformanceTracker()
async def query_with_context(self, query: str, context: QueryContext):
# Use lightweight QueryExecutor instead of heavyweight Query object
executor = QueryExecutor(self, context) # Minimal object
return await executor.execute(query)
@dataclass
class QueryContext:
"""Lightweight execution context - no heavy operations"""
user: str
collection: str
entity_limit: int
triple_limit: int
max_subgraph_size: int
max_path_length: int
class QueryExecutor:
"""Lightweight execution context - replaces old Query class"""
def __init__ (self, rag: LongLivedGraphRag, context: QueryContext):
self.rag = rag
self.context = context
# No heavy initialization - just references
async def execute(self, query: str):
# All heavy lifting uses persistent rag caches
return await self.rag.execute_optimized_query(query, self.context)
```
Bu mimari değişiklik şunları sağlar:
**Ortak ilişkileri olan grafikler için veritabanı sorgu sayı sı nda %10-20'lik bir azalma** (şu anda %0'a kı yasla)
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Her istek için **ortadan kaldı rı lan nesne oluşturma ek yükü**
2026-04-11 01:08:44 +00:00
=======
Her istek için **oluşturulan nesnelerin getirdiği ek yükün ortadan kaldı rı lması **
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
**Sürekli bağlantı havuzu** ve istemci yeniden kullanı mı
Önbellek TTL (Yaşam Süresi) aralı kları içinde **istemler arası optimizasyon**
**Önemli Önbellek Tutarlı lı k Sı nı rlaması :**
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Uzun süreli önbellekleme, temel grafikteki varlı kları n/etiketlerin silindiği veya değiştirildiği durumlarda, güncelliği kaybetme riski oluşturur. LRU (En Son Kullanı lmayan) önbelleği, performans kazanı mları ile veri tazeliği arası nda bir denge sağlarken, gerçek zamanlı grafik değişikliklerini tespit edemez.
2026-04-11 01:08:44 +00:00
=======
Uzun süreli önbellekleme, temel grafikteki varlı kları n/etiketlerin silindiği veya değiştirildiği durumlarda, verilerin güncelliğini yitirme riski oluşturur. LRU (En Son Kullanı lmayan) önbelleği, performans artı şları ve veri tazeliği arası nda bir denge sağlar, ancak gerçek zamanlı grafik değişikliklerini tespit edemez.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
#### 1. Aşama: Grafik Gezinme Optimizasyonu
**Mevcut Uygulama Sorunları :**
```python
# INEFFICIENT: 3 queries per entity per level
async def follow_edges(self, ent, subgraph, path_length):
# Query 1: s=ent, p=None, o=None
res = await self.rag.triples_client.query(s=ent, p=None, o=None, limit=self.triple_limit)
# Query 2: s=None, p=ent, o=None
res = await self.rag.triples_client.query(s=None, p=ent, o=None, limit=self.triple_limit)
# Query 3: s=None, p=None, o=ent
res = await self.rag.triples_client.query(s=None, p=None, o=ent, limit=self.triple_limit)
```
**Optimize Edilmiş Uygulama:**
```python
async def optimized_traversal(self, entities: List[str], max_depth: int) -> Set[Triple]:
visited = set()
current_level = set(entities)
subgraph = set()
for depth in range(max_depth):
if not current_level or len(subgraph) >= self.max_subgraph_size:
break
# Batch all queries for current level
batch_queries = []
for entity in current_level:
if entity not in visited:
batch_queries.extend([
TripleQuery(s=entity, p=None, o=None),
TripleQuery(s=None, p=entity, o=None),
TripleQuery(s=None, p=None, o=entity)
])
# Execute all queries concurrently
results = await self.execute_batch_queries(batch_queries)
# Process results and prepare next level
next_level = set()
for result in results:
subgraph.update(result.triples)
next_level.update(result.new_entities)
visited.update(current_level)
current_level = next_level - visited
return subgraph
```
#### 2. Aşama: Paralel Etiket Çözümlemesi
**Mevcut Sı ralı Uygulama:**
```python
# INEFFICIENT: Sequential processing
for edge in subgraph:
s = await self.maybe_label(edge[0]) # Individual query
p = await self.maybe_label(edge[1]) # Individual query
o = await self.maybe_label(edge[2]) # Individual query
```
**Optimize Edilmiş Paralel Uygulama:**
```python
async def resolve_labels_parallel(self, subgraph: List[Triple]) -> List[Triple]:
# Collect all unique entities needing labels
entities_to_resolve = set()
for s, p, o in subgraph:
entities_to_resolve.update([s, p, o])
# Remove already cached entities
uncached_entities = [e for e in entities_to_resolve if e not in self.label_cache]
# Batch query for all uncached labels
if uncached_entities:
label_results = await self.batch_label_query(uncached_entities)
self.label_cache.update(label_results)
# Apply labels to subgraph
return [
(self.label_cache.get(s, s), self.label_cache.get(p, p), self.label_cache.get(o, o))
for s, p, o in subgraph
]
```
#### 3. Aşama: Gelişmiş Önbellekleme Stratejisi
**TTL ile LRU Önbelleği:**
```python
class LRUCacheWithTTL:
def __init__ (self, max_size: int, default_ttl: int = 3600):
self.cache = OrderedDict()
self.max_size = max_size
self.default_ttl = default_ttl
self.access_times = {}
async def get(self, key: str) -> Optional[Any]:
if key in self.cache:
# Check TTL expiration
if time.time() - self.access_times[key] > self.default_ttl:
del self.cache[key]
del self.access_times[key]
return None
# Move to end (most recently used)
self.cache.move_to_end(key)
return self.cache[key]
return None
async def put(self, key: str, value: Any):
if key in self.cache:
self.cache.move_to_end(key)
else:
if len(self.cache) >= self.max_size:
# Remove least recently used
oldest_key = next(iter(self.cache))
del self.cache[oldest_key]
del self.access_times[oldest_key]
self.cache[key] = value
self.access_times[key] = time.time()
```
#### 4. Aşama: Sorgu Optimizasyonu ve İzleme
**Performans Metrikleri Toplama:**
```python
@dataclass
class PerformanceMetrics:
total_queries: int
cache_hits: int
cache_misses: int
avg_response_time: float
subgraph_construction_time: float
label_resolution_time: float
total_entities_processed: int
memory_usage_mb: float
```
**Sorgu Zaman Aşı mı ve Devre Kesici:**
```python
async def execute_with_timeout(self, query_func, timeout: int = 30):
try:
return await asyncio.wait_for(query_func(), timeout=timeout)
except asyncio.TimeoutError:
logger.error(f"Query timeout after {timeout}s")
raise GraphRagTimeoutError(f"Query exceeded timeout of {timeout}s")
```
## Önbellek Tutarlı lı k Hususları
**Veri Güncelliği Dengesi:**
**Etiket önbelleği (5 dakika TTL):** Silinmiş/yeniden adlandı rı lmı ş varlı k etiketlerini sunma riski.
**Gömme önbelleği yok:** Gerekli değil - gömmeler zaten her sorgu için önbelleğe alı nmı ştı r.
**Sonuç önbelleği yok:** Silinmiş varlı klar/ilişkilerden kaynaklanan eski alt grafik sonuçları nı önler.
**Azaltma Stratejileri:**
**Muhafazakar TTL değerleri:** Performans kazanı mları (10-20%) ile veri güncelliği arası ndaki denge.
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
**Önbellek geçersiz kı lma kancaları :** İsteğe bağlı olarak grafik mutasyon olayları yla entegrasyon.
2026-04-11 01:08:44 +00:00
=======
**Önbellek geçersiz kı lma mekanizmaları :** Grafik mutasyon olayları yla isteğe bağlı entegrasyon.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
**İzleme panoları :** Önbellek isabet oranları nı , veri güncelliği sorunları yla karşı laştı rarak izleyin.
**Yapı landı rı labilir önbellek politikaları :** Mutasyon sı klı ğı na göre dağı tı ma özel ayarlamalar yapı lması na izin verir.
**Grafik Mutasyon Oranı na Göre Önerilen Önbellek Yapı landı rması :**
**Yüksek mutasyon (>100 değişiklik/saat):** TTL=60s, daha küçük önbellek boyutları .
**Orta mutasyon (10-100 değişiklik/saat):** TTL=300s (varsayı lan).
**Düşük mutasyon (< 10 değişiklik / saat ) : * * TTL = 600s, daha büyük önbellek boyutları .
## Güvenlik Hususları
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
**Sorgu Enjeksiyonunu Önleme:**
2026-04-11 01:08:44 +00:00
=======
**Sorgu Enjeksiyonu Önleme:**
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
Tüm varlı k tanı mlayı cı ları nı ve sorgu parametrelerini doğrulayı n.
Tüm veritabanı etkileşimleri için parametreli sorgular kullanı n.
DoS saldı rı ları nı önlemek için sorgu karmaşı klı ğı limitleri uygulayı n.
**Kaynak Koruması :**
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Maksimum alt grafik boyutları limitlerini uygulayı n.
Kaynak tükenmesini önlemek için sorgu zaman aşı mları nı uygulayı n.
2026-04-11 01:08:44 +00:00
=======
Maksimum alt grafik boyutları için limitler uygulayı n.
Kaynak tükenmesini önlemek için sorgu zaman aşı mları uygulayı n.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
Bellek kullanı mı izleme ve limitleri ekleyin.
**Erişim Kontrolü:**
Mevcut kullanı cı ve koleksiyon izolasyonunu koruyun.
Performansı etkileyen işlemler için denetim kaydı ekleyin.
Pahalı işlemler için hı z sı nı rlaması uygulayı n.
## Performans Hususları
### Beklenen Performans İyileştirmeleri
**Sorgu Azaltma:**
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Mevcut: Tipik bir istek için ~9.000+ sorgu.
2026-04-11 01:08:44 +00:00
=======
Mevcut: Tipik bir istek için ~9.000'den fazla sorgu.
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
Optimize edilmiş: ~50-100 toplu sorgu (98% azalma).
**Yanı t Süresi İyileştirmeleri:**
Grafik geçişi: 15-20s → 3-5s (4-5 kat daha hı zlı ).
Etiket çözümü: 8-12s → 2-4s (3 kat daha hı zlı ).
Genel sorgu: 25-35s → 6-10s (3-4 kat iyileşme).
**Bellek Verimliliği:**
Sı nı rlı önbellek boyutları , bellek sı zı ntı ları nı önler.
Verimli veri yapı ları , bellek ayak izini yaklaşı k %40 azaltı r.
Uygun kaynak temizliği sayesinde daha iyi çöp toplama.
**Gerçekçi Performans Beklentileri:**
**Etiket önbelleği:** Ortak ilişkilere sahip grafikler için sorgu azaltmada %10-20.
**Toplu optimizasyon:** %50-80 sorgu azaltma (birincil optimizasyon).
**Nesne ömrü optimizasyonu:** Her istekte oluşturma ek yükünü ortadan kaldı rı r.
**Genel iyileşme:** Toplu işlemden kaynaklanan 3-4 kat yanı t süresi iyileşmesi.
**Ölçeklenebilirlik İyileştirmeleri:**
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
3-5 kat daha büyük bilgi grafiklerini destekler (önbellek tutarlı lı k ihtiyaçları ile sı nı rlı dı r).
2026-04-11 01:08:44 +00:00
=======
3-5 kat daha büyük bilgi grafiklerini destekler (önbellek tutarlı lı k gereksinimleriyle sı nı rlı dı r).
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
3-5 kat daha yüksek eşzamanlı istek kapasitesi.
Bağlantı yeniden kullanı mı sayesinde daha iyi kaynak kullanı mı .
### Performans İzleme
**Gerçek Zamanlı Metrikler:**
İşlem türüne göre sorgu yürütme süreleri.
Önbellek isabet oranları ve etkinliği.
Veritabanı bağlantı havuzu kullanı mı .
Bellek kullanı mı ve çöp toplama etkisi.
**Performans Karşı laştı rması :**
Otomatik performans gerileme testi
Gerçekçi veri hacimleriyle yük testi
Mevcut uygulamaya karşı karşı laştı rma testleri
## Test Stratejisi
### Birim Testi
Gezinme, önbellekleme ve etiket çözümleme için bireysel bileşen testi
Performans testi için sahte veritabanı etkileşimleri
Önbellek temizleme ve TTL (Yaşam Süresi) sonlandı rma testi
Hata işleme ve zaman aşı mı senaryoları
### Entegrasyon Testi
Optimizasyonlarla uçtan uca GraphRAG sorgu testi
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Gerçek verilerle veritabanı etkileşim testi
2026-04-11 01:08:44 +00:00
=======
Gerçek verilerle veritabanı etkileşimi testi
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
Eşzamanlı istek işleme ve kaynak yönetimi
Bellek sı zı ntı sı tespiti ve kaynak temizleme doğrulaması
### Performans Testi
Mevcut uygulamaya karşı karşı laştı rma testi
Farklı grafik boyutları ve karmaşı klı klarla yük testi
Bellek ve bağlantı limitleri için stres testi
Performans iyileştirmeleri için regresyon testi
### Uyumluluk Testi
Mevcut GraphRAG API uyumluluğunu doğrulayı n
Çeşitli grafik veritabanı arka uçları yla test yapı n
Mevcut uygulamaya kı yasla sonuç doğruluğunu doğrulayı n
## Uygulama Planı
### Doğrudan Uygulama Yaklaşı mı
API'lerin değişmesine izin verildiğinden, geçiş karmaşı klı ğı olmadan doğrudan optimizasyonları uygulayı n:
1. ** `follow_edges` yöntemini değiştirin**: Yinelemeli toplu işleme ile yeniden yazı n
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
2. ** `get_labelgraph` 'ı optimize edin**: Paralel etiket çözümlemeyi uygulayı n
3. **Uzun ömürlü GraphRag ekleyin** : Kalı cı bir örnek tutmak için İşlemci'yi değiştirin
4. **Etiket önbelleğini uygulayı n** : GraphRag sı nı fı na TTL ile LRU (En Son Kullanı lan) önbelleği ekleyin
2026-04-11 01:08:44 +00:00
=======
2. ** `get_labelgraph` 'ı optimize edin**: Paralel etiket çözümlemesini uygulayı n
3. **Uzun ömürlü GraphRag ekleyin** : Kalı cı bir örnek tutmak için İşlemci'yi değiştirin
4. **Etiket önbelleklemesini uygulayı n** : GraphRag sı nı fı na TTL ile LRU (En Son Kullanı lan) önbelleği ekleyin
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
### Değişiklik Kapsamı
**Sorgu sı nı fı **: `follow_edges` içinde ~50 satı rı değiştirin, toplu işleme için ~30 satı r ekleyin
**GraphRag sı nı fı **: Önbellekleme katmanı ekleyin (~40 satı r)
**İşlemci sı nı fı **: Kalı cı bir GraphRag örneği kullanmak için değiştirin (~20 satı r)
**Toplam**: Odaklanmı ş değişikliklerin ~140 satı rı , çoğunlukla mevcut sı nı fları n içinde
## Zaman Çizelgesi
**1. Hafta: Temel Uygulama**
`follow_edges` 'ı toplu yinelemeli gezinmeyle değiştirin
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
`get_labelgraph` içinde paralel etiket çözümlemeyi uygulayı n
2026-04-11 01:08:44 +00:00
=======
`get_labelgraph` içinde paralel etiket çözümlemesini uygulayı n
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
İşlemci'ye uzun ömürlü GraphRag örneği ekleyin
Etiket önbellekleme katmanı uygulayı n
**2. Hafta: Test ve Entegrasyon**
Yeni gezinme ve önbellekleme mantı ğı için birim testleri
Mevcut uygulamaya karşı performans karşı laştı rması
Gerçek grafik verileriyle entegrasyon testi
Kod incelemesi ve optimizasyon
**3. Hafta: Dağı tı m**
Optimize edilmiş uygulamayı dağı tı n
Performans iyileştirmelerini izleyin
2026-04-11 01:08:44 +00:00
< < < < < < < HEAD
2026-04-10 12:22:20 -04:00
Gerçek kullanı m temelinde önbellek TTL'sini ve toplu boyutları ayarlayı n
2026-04-11 01:08:44 +00:00
=======
Gerçek kullanı m bazı nda önbellek TTL'sini ve toplu boyutları ayarlayı n
>>>>>>> 82edf2d (New md files from RunPod)
2026-04-10 12:22:20 -04:00
## Açı k Sorular
**Veritabanı Bağlantı Havuzu**: Özel bir bağlantı havuzu mu uygulamalı yı z yoksa mevcut veritabanı istemci havuzuna mı güvenmeliyiz?
**Önbellek Kalı cı lı ğı **: Etiket ve gömme önbellekleri hizmet yeniden başlatmaları nda kalı cı mı olmalı ?
**Dağı tı lmı ş Önbellekleme**: Çok örnekli dağı tı mlar için Redis/Memcached ile dağı tı lmı ş önbellekleme mi uygulamalı yı z?
**Sorgu Sonucu Formatı **: Daha iyi bellek verimliliği için dahili üçlü gösterimi optimize etmeli miyiz?
**İzleme Entegrasyonu**: Hangi ölçümler mevcut izleme sistemlerine (Prometheus, vb.) maruz bı rakı lmalı dı r?
## Referanslar
[GraphRAG Orijinal Uygulaması ](trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py )
[TrustGraph Mimari Prensipleri ](architecture-principles.md )
[Koleksiyon Yönetimi Özellikleri ](collection-management.md )