Pano Verisi ve Yenileme
Pano widget'ları birden fazla çalışma alanı koleksiyonundan toplanan verileri görüntüler. Bu sayfa, verinin veritabanından ekranınıza nasıl aktığı, önbelleklemenin nasıl çalıştığı ve büyük çalışma alanları için performansın nasıl optimize edildiği açıklar.
Veri akışı genel bakışı
Pano widget'ları için veri hattı şu yolu izler:
- Kullanıcı bir pano açar -- ön yüz, API'den widget verisini ister.
- API önbelleği kontrol eder -- Redis'te yakın zamanda hesaplanmış bir sonuç aranır.
- Önbellek isabeti -- önbelleklenmiş sonuç hemen döndürülür.
- Önbellek ıskalaması -- API, MongoDB'ye karşı bir toplama sorgusu çalıştırır.
- Sonuç önbelleklenir -- yeni sonuç bir TTL ile Redis'te depolanır.
- Veri döndürülür -- ön yüz widget'ı işler.
| Adım | Bileşen | Gecikme (tipik) |
|---|---|---|
| Önbellek kontrolü | Redis | < 1ms |
| Önbellek isabeti yanıtı | API'den ön yüze | 5-20ms |
| Toplama sorgusu | MongoDB | Veri hacmine bağlı olarak 50-500ms |
| Önbellek yazma | Redis | < 1ms |
| Tam gidiş-dönüş (önbellek ıskalaması) | Uçtan uca | 100-600ms |
Veri kaynakları
Her widget türü belirli MongoDB koleksiyonlarından veri çeker:
| Widget kategorisi | Birincil koleksiyonlar | İkincil koleksiyonlar |
|---|---|---|
| Görev dağılımı (durum, öncelik, etiket, atanan kişi) | issues | states, labels, workspace_memberships |
| Aktivite widget'ları (ısı haritası, zaman çizelgesi) | activity_log | issues, workspace_memberships |
| Döngü widget'ları (risk kartları, aktif döngüler) | cycles, cycle_issues | issues |
| Modül widget'ları | modules, module_issues | issues |
| Zaman takibi widget'ları | time_logs | issues, workspace_memberships |
| Sağlık ve risk widget'ları | issues | activity_log, cycles |
| Çalışma alanı özeti | projects, cycles, workspace_memberships, pages, modules, issues | Yok |
| Kullanıcıya özel (hoşgeldiniz, son öğeler) | activity_log, Redis son öğeler önbelleği | issues |
Çalışma alanı genelinde toplama
Varsayılan olarak, pano widget'ları tüm çalışma alanı genelinde veri toplar. Bu şu anlama gelir:
- Kullanıcının erişimi olan tüm projeler dahil edilir.
- Misafir kullanıcılar yalnızca davet edildikleri projelerin verilerini görür.
- Arşivelenmiş projeler, widget yapılandırmasında açıkça dahil edilmedikçe hariç tutulur.
Bir widget belirli bir proje veya döngüye kapsamlandırıldığında, toplama hattı sonuçları o kapsamla sınırlandıran bir filtre aşaması ekler.
Yenileme davranışı
Sayfa yüklemesinde otomatik yenileme
Bir kullanıcı her pano açtığında, tüm görünen widget'lar taze veri alır. Önbelleklenmiş veri mevcutsa ve TTL penceresi içindeyse, önbellek kullanılır.
Manuel yenileme
Tüm widget'ları önbelleği atlayarak yeni veri almaya zorlamak için pano araç çubuğundaki Yenile simgesine tıklayın.
| İşlem | Önbellek davranışı |
|---|---|
| Sayfa yükleme | Mevcutsa önbelleği kullanır |
| Manuel yenileme | Önbelleği atlar, taze veri alır |
| Otomatik yenileme aralığı | Her tikte önbelleği atlar |
| Widget yapılandırma değişikliği | O widget için taze veri alır |
Otomatik yenileme aralıkları
Bir monitörde açık kalan panolar için otomatik yenileme aralığı yapılandırın:
| Aralık | Kullanım alanı |
|---|---|
| Kapalı | Varsayılan. Veri yalnızca sayfa yüklemesinde veya manuel yenilemede yenilenir |
| 1 dakika | Yüksek frekanslı izleme (günlük toplantı ekranları) |
| 5 dakika | Sprint sırasında aktif izleme |
| 15 dakika | Arka plan farkındalığı |
| 30 dakika | Düşük öncelikli genel bakış ekranları |
Aralığı pano araç çubuğundan ... menü > Otomatik yenileme ile ayarlayın.
İPUCU
Otomatik yenileme API yükünü orantılı olarak artırır. 10 widget'lı ve her dakika yenilenen bir pano dakikada 10 API çağrısı oluşturur. Çok widget'lı panolar için daha uzun aralıklar kullanın.
Önbellekleme stratejisi
Redis önbellek yapısı
Pano verisi Redis'te şu anahtar deseni ile önbelleklenir:
setget:dashboard:{workspace_id}:{widget_type}:{config_hash}| Bileşen | Açıklama |
|---|---|
workspace_id | Bu verinin ait olduğu çalışma alanı |
widget_type | Widget tür tanımlayıcısı |
config_hash | Widget'ın filtre ve kapsam yapılandırmasının SHA-256 özeti |
Bu, aynı türde farklı yapılandırmalara sahip iki widget'ın ayrı önbellekler tutmasını sağlar.
Önbellek TTL
| Veri türü | Varsayılan TTL | Gerekçe |
|---|---|---|
| Görev sayıları ve dağılımları | 5 dakika | Tazelik ile sorgu maliyetini dengeler |
| Aktivite verisi (ısı haritası, zaman çizelgesi) | 10 dakika | Aktivite kalıpları yavaş değişir |
| Döngü ve modül ilerlemesi | 5 dakika | Sprint verisi makul ölçüde güncel olmalı |
| Sağlık puanları | 15 dakika | Bileşik puanlar daha az sık güncelleme gerektirir |
| Çalışma alanı özet sayıları | 10 dakika | Belge sayımları büyük çalışma alanlarında maliyetlidir |
| Kullanıcıya özel veri (hoşgeldiniz, son öğeler) | 2 dakika | Kişisel veri taze hissettirmeli |
Önbellek geçersiz kılma
Önbellek şu senaryolarda otomatik olarak geçersiz kılınır:
| Tetikleyici | Kapsam |
|---|---|
| Görev durum değişikliği | O projeye filtrelenmiş widget'lar |
| Görev oluşturma veya silme | Çalışma alanındaki tüm görev tabanlı widget'lar |
| Döngü başlama veya bitme | Döngüyle ilgili widget'lar |
| Manuel yenileme düğmesine tıklanma | Mevcut panodaki tüm widget'lar |
| Widget yapılandırma değişikliği | İlgili widget |
Gerçek zamanlı ve önbelleklenmiş veri karşılaştırması
SetGet panoları gerçek zamanlı kesinlik yerine güvenilirliği önceliklendirir:
| Boyut | Davranış |
|---|---|
| Veri güncelliği | Widget'lar en fazla TTL kadar eski veri gösterir (tipik olarak 5-15 dakika) |
| Tutarlılık | Bir panodaki tüm widget'lar biraz farklı zaman noktalarından veri gösterebilir |
| Gerçek zamanlı güncellemeler | Panolara WebSocket üzerinden iletilmez (bildirimlerden farklı olarak) |
| Zamanlayıcı widget'ı | Zaman takibi zamanlayıcısı Redis üzerinden gerçek zamanlıdır, ancak zaman kaydı toplamaları önbelleklenir |
UYARI
İki takım üyesi aynı panoya biraz farklı zamanlarda bakarsa, farklı sayılar görebilir. Bu beklenen bir durumdur ve bir sonraki yenileme döngüsünde çözülür.
Performans değerlendirmeleri
Büyük çalışma alanları
50.000'den fazla görevi olan çalışma alanları daha yavaş toplama sorguları yaşayabilir. Azaltma stratejileri:
| Strateji | Açıklama |
|---|---|
| Widget'ları projelere kapsamlandırın | Her sorgu için veri kümesini azaltır |
| Daha uzun yenileme aralıkları kullanın | Sorgu sıklığını azaltır |
| Liste widget'larını sınırlayın | Yaklaşan Teslim Tarihli Görevler, Sıcak Görevler, Durmuş Görevler'de daha düşük maks öğe ayarlayın |
| Çok sayıda özel sorgu widget'ından kaçının | Özel sorgular önceden optimize edilmiş toplama hatlarını atlar |
MongoDB dizinleri
Pano toplama sorguları performans için şu dizinlere dayanır:
| Koleksiyon | Dizin | Kullanan |
|---|---|---|
issues | { workspace_id: 1, state_id: 1 } | Durum dağılımı, istatistik çubuğu |
issues | { workspace_id: 1, priority: 1 } | Öncelik dağılımı |
issues | { workspace_id: 1, assignee_id: 1 } | Atanan kişi dağılımı, iş yükü |
issues | { workspace_id: 1, due_date: 1 } | Yaklaşan teslim tarihli görevler, teslim tarihi takvimi |
activity_log | { workspace_id: 1, created_at: -1 } | Aktivite zaman çizelgesi, ısı haritası |
time_logs | { workspace_id: 1, logged_date: 1 } | Zaman takibi widget'ları |
cycle_issues | { cycle_id: 1 } | Döngü ilerlemesi, risk kartları |
module_issues | { module_id: 1 } | Modül ilerlemesi |
API hız sınırlaması
Pano API uç noktaları kötüye kullanımı önlemek için hız sınırlıdır:
| Uç nokta deseni | Hız sınırı |
|---|---|
GET /api/workspaces/{slug}/dashboards/{id}/widgets | Dakikada 60 istek |
GET /api/workspaces/{slug}/dashboards/{id}/widgets/{widget_id}/data | Dakikada 120 istek |
POST /api/workspaces/{slug}/dashboards/{id}/refresh | Dakikada 10 istek |
API uç noktaları
| Metod | Uç nokta | Açıklama |
|---|---|---|
GET | /api/workspaces/{slug}/dashboards/ | Tüm panoları listele |
POST | /api/workspaces/{slug}/dashboards/ | Pano oluştur |
GET | /api/workspaces/{slug}/dashboards/{id}/ | Pano detaylarını al |
PATCH | /api/workspaces/{slug}/dashboards/{id}/ | Pano ayarlarını güncelle |
DELETE | /api/workspaces/{slug}/dashboards/{id}/ | Panoyu sil |
GET | /api/workspaces/{slug}/dashboards/{id}/widgets/ | Panodaki widget'ları listele |
POST | /api/workspaces/{slug}/dashboards/{id}/widgets/ | Widget ekle |
PATCH | /api/workspaces/{slug}/dashboards/{id}/widgets/{widget_id}/ | Widget yapılandırmasını güncelle |
DELETE | /api/workspaces/{slug}/dashboards/{id}/widgets/{widget_id}/ | Widget'ı kaldır |
GET | /api/workspaces/{slug}/dashboards/{id}/widgets/{widget_id}/data/ | Widget verisini al |
POST | /api/workspaces/{slug}/dashboards/{id}/refresh/ | Tüm widget'ları zorla yenile |
Sorun giderme
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Widget eski veri gösteriyor | Önbellek TTL'i henüz dolmadı | Manuel Yenile düğmesine tıklayın |
| Widget "Veri yok" gösteriyor | Kapsam filtresi tüm sonuçları hariç tutuyor | Widget yapılandırma kapsamını kontrol edin |
| Widget yavaş yükleniyor | Proje kapsamı olmadan büyük veri kümesi | Widget'ı belirli bir projeye kapsamlandırın |
| Pano yüklemesi uzun sürüyor | Çok fazla widget aynı anda veri alıyor | Widget sayısını azaltın veya yenileme aralığını artırın |
| Widget'lar arası sayılar farklı | Widget'lar farklı zamanlarda önbelleklenmiş | Önbellek zaman damgalarını hizalamak için panoyu yenileyin |