Analitik Arşivlerin İndekslenmesi
1) Neden bir iGaming platformunu endeksleme
Analiz hızı: GGR/NET raporları, dönüşümler, RG/AML ve A/B deneyleri SLA'ya uygundur.
Maliyet: taramak için daha az bayt - daha düşük hesaplama/depo faturası.
Güvenilirlik: Kararlı p95/p99 pano gecikmesi ve API metrikleri.
Ölçek: "Tam tarama" cehennemi değeri olmayan düzinelerce marka/pazar/PSP/sağlayıcı.
2) Yük modeli (indekslemeden önce)
Факты: 'payments', 'game _ rounds', 'sessions', 'bonus _ events'.
Boyutlar:'dim _ user '(PII olmadan),' dim _ provider ',' dim _ psp ',' dim _ country '.
İstekler: "Son N gün", 'marka/ülke/sağlayıcı/psp'ye göre toplamalar, durum alanına göre filtreler, vekil anahtarlarla katılma, JSON özelliklerine göre arama (ödeme yöntemi, cihaz), üst-K/yüzdelik.
Seçicilik, kardinalite ve kullanım sıklığına göre endeksler seçiyoruz.
3) Endeks türleri ve ne zaman alınacağı
3. 1 Klasikler
B-tree: equality/ranges for highly selective columns ('user _ surrogate _ id', 'occured _ at', 'amount').
Hash: saf eşitlik; Analitikte daha az sıklıkla (zayıf aralıklara karşı).
Bitmap: Düşük kardinalite ve sık bağlı filtreler ('ülke', 'kyc _ level','rg _ state ',' marka '). Maskeleri toplamak için farklıdır.
3. 2 Sütun özgüllüğü
Min-max (veri atlama): Parke şeritlerinde/parçalarında otomatik istatistik "minimum/maksimum" - motor blokları atlar. Filtrelenmiş alanlara göre sıralandığında daha iyi çalışır.
Bloom indeksleri: bir bloktaki bir değere ait olmanın hızlı olasılıksal testleri ('user _ id', 'transaction _ id', 'psp' için kullanışlıdır).
BRIN (Blok Aralığı Endeksi): Veriler doğal olarak sipariş edilirse (zaman) aralıkları engellemek için ucuz "işaretçiler". Ucuz ama zaman serisi için etkili.
3. 3 Gelişmiş/Uzmanlaşmış
GiST/GIN (ters çevrilmiş): JSON/diziler/metin, iç içe niteliklere göre filtreler ('meta veriler. Method = 'Papara', 'aygıtı. os [...] ').
Join/Projection (ClickHouse/MPP): join/agg'yi hızlandırmak için malzemeler (ön birleştirme anahtarı, ön toplamaların yanında saklanır).
Vektör (ANN): benzer gömme (öneriler/dolandırıcılık karşıtı davranış) için arama -'en yakın komşu endeksi'olarak IVF/HNSW/Flat.
Z-ordering/Z-order (lakehouse/Databricks )/Cluster tuşları (Snowflake )/ORDER BY (ClickHouse): Daha iyi veri atlama için diskteki verilerin çok boyutlu kümelenmesi.
4) Bölümleme, sıralama, kümeleme
Taraflar (tarih/ülke/marka): "Küçük dosyaların lanetinden" kaçınmak için büyük (gün/hafta). "WHERE/erişim haklarında yüksek seçiciliğe sahip alanları seçiyoruz.
Bir taraf içinde sıralama: 'ORDER BY (occurred_at, marka, psp)' veya Z-order by '(marka, ülke, sağlayıcı)' - min-max ve bloom bu şekilde daha iyi çalışır.
Cluster/Recluster: Lokaliteyi korumak için periyodik yeniden sınıflandırma.
TTL ve saklama: Eski parçaların/segmentlerin otomatik olarak silinmesi.
5) Materyalize görüşler ve projeksiyonlar
Sıcak dilimler için MV: 'payments _ 7d _ by _ brand _ psp', 'rounds _ 1d _ by _ provider'. Upserts akışını destekliyoruz.
ClickHouse/Aggregate tablolar-Hazır ayarlar, roll-up düzeyleri (chas ^ den ^ nedelya).
Sonuç önbelleği: Tekrarlanabilir panolar için sorgu sonuç önbelleği/depo sonuç önbelleği (sorgu belirteci ve veri tazeliği ile doğrulanır).
6) Yarı yapılandırılmış veriler (JSON/VARIANT)
Yola göre dizinler: json yollarında ters/GIN dizini ('$ .device. Os ',' $ .psp. ayrıntılar. Yöntem ').
Önemli özelliklerin sütunlarda maddeleştirilmesi: kararlı filtreler için (ödeme yöntemi, cihaz, uygulama sürümü).
Anahtar istatistikler: Seçici bir plan için dağıtımların toplanması.
7) Veri Gölleri: Buzdağı/Delta/Hudi
Manifest indeksleri: parke dosyaları hakkında meta veriler (min-max, null-count, bloom) - bölüm budama + dosya atlama.
Dosya sıkıştırma/birleştirme: Küçük dosyaların "optimal" boyutta (128-1024 MB) düzenli olarak birleştirilmesi.
Kümeleme/Z-sırası: Korelasyon alanları için dosyaları yeniden paketleme (örn. 'marka, ülke, oluştu _ at').
Dizinleri Sil/Güncelleştir: okumada birleşmeyi hızlandırmak için deltaları ve bloom'u konumlandırın.
8) Endeksler nasıl seçilir: pratik kontrol listesi
1. En üstteki N isteklerini toplayın (yükün %90'ı) -/join/group filtre alanları.
2. Her alan için,'sel = 1 - farklı (değer )/satırlar've kardinalite seçiciliğini değerlendirin.
3. Zamana göre toplu işlem + kararlı filtreler/erişimler ile 1-2 ölçüm.
4. Filtreleri eşleştirmek ve tuşlara katılmak için sıralama/küme tuşları.
5. Point id için bloom, düşük kardinalite için bitmap ekleyin.
6. Sıcak agregasyonlar - MV/projeksiyonlar.
7. JSON yolları - ters dizinler + materyalizasyon.
8. Göllerde - bir programda sıkıştırma ve kümeleme.
9. SLO girin: p95 gecikme, bayt taranmış/istek, atlanan veri hızı.
9) Destek ve bakım
ANALYZE/statistics: kardinaliteleri ve histogramları güncelle; Aksi takdirde, iyileştirici "kör'dür.
VAKUM/OPTIMIZE/RECLUSTER: birleştirme ve yeniden sınıflandırma.
Dizinlerin kullanımını izleme: "kaplama oranı", "kullanılmayan dizin listesi", "taranan baytlar/atlanan baytlar".
Otomatik danışmanlar: küme anahtarları için periyodik öneriler ve sorgu günlüğüne göre sıralama.
Regresyon testleri: yeni anahtarları tüketmeden önce - istek profilini ve maliyetini karşılaştırır.
10) Metrikler ve SLO indeksleme
Teknik: p95/p99 gecikme, taranan bayt/sorgu, atlanan bayt %, dokunulan dosyalar, önbellek isabet oranı.
Ekonomi: $/request, $/dashboard, $/TB tarama.
İşlemler: sıkıştırma süresi, yeniden sınıflandırma kuyruğu, "küçük dosyaların" paylaşımı.
Planların kalitesi: Endeksleri/projeksiyonları kullanan sorguların oranı, kardinalitelerin doğruluğu.
11) iGaming kılıfları (hazır tarifler)
11. 1 Ödemeler/PSP'ler: Düşmeler/Reddetmeler
Parti: "Gündüz". Sıralama '(marka, ülke, occurred_at)'.
Bloom: 'transaction _ id', 'user _ id'. Bitmap: 'psp', 'durum'.
MV: 'Payments _ 7d _ by _ brand _ psp (durum, düşüşler)'.
Sonuç: 8 ile p95 ↓. 2'den 1'e. 1s, taranmış bayt ↓ на %87.
11. 2 Oyun Turları: Sağlayıcı/Oyun
Z-order/ORDER BY: '(sağlayıcı, game_id, occurred_at)'.
Projeksiyon/agg: 'Rounds _ 1d _ by _ provider _ game'.
BRIN (if Postgres-like storage): tarafından 'occurred _ at'.
Sonuç: En iyi K oyunları/saat - sıcak önbellekte saniyenin altı.
11. 3 RG/AML Kısıtlaması/Kendini Dışlama Olayları
Bitmap:'rg _ state ',' kyc _ level '. JSON-yolu CIN: '$ .reason'.
MV: "30 gün boyunca aktif kısıtlamalar" + kullanıcı düzeyinin PII olmadan gerçekleşmesi.
Sonuç: tam tarama milyar olay olmadan uyumluluk için hızlı örnekler.
11. 4 Antifraud: yollar ve cihazlar
JSON maddeleştirilmesi - kolonki: 'cihazı. Os ',' cihazı. Model ',' ödeme. Yöntem '.
Bloom: 'graph _ device _ id'. Küme: '(marka, ülke, cihaz. os) '.
Vektör indeksi: "7d deposit behavior" gömmeleri - benzer anomaliler için hızlı k-NN.
12) Güvenlik ve gizlilik
Dizinlenmiş alanlarda ve plan günlüklerinde sıfır PII.
Disk üzerinde şifreleme: İndeksler/istatistikler verilerle aynı şekilde şifrelenir.
Kümelerin K-anonimliği: MV/projeksiyonlar sadece ≥N gruplar tarafından yayınlanır.
Coğrafi/kiracı izolasyonu: taraflar/anahtarlar 'marka/ülke/lisans' içerir.
Yasal Bekletme: Endeksler/manivestler de "dondurmaya" girer.
13) Anti-desenler
Dizin "all in a row" - hacim patlaması ve yazma-amplifikasyon.
Küçük partiler (saat/dakika) - tahtalar ve "küçük dosyalar" fırtınası.
Sıfır veri atlama ile eşleşmeyen anahtarları sıralayın - filtreler.
İstatistik eksikliği - kötü planlar, tam tarama.
Yol indeksleri olmadan ve sıcak nitelikleri gerçekleştirmeden JSON.
Sıkıştırma ve recluster görmezden gelin - 2-4 hafta içinde bozulma.
14) Şablonlar (kullanıma hazır)
14. 1 Kümeleme/Dizinleme Politikası (YAML)
yaml dataset: gold. payments partition_by: ["date"]
order_by: ["brand","country","occurred_at"]
indexes:
bloom: ["transaction_id","user_surrogate_id"]
bitmap: ["psp","status","rg_state"]
materialized_views:
- name: mv_payments_7d_brand_psp group_by: ["brand","psp","status"]
window: "7d"
slo:
p95_latency_ms: 1200 scanned_bytes_per_query_max_mb: 256 maintenance:
compact_small_files: true recluster_cron: "0 /6 "
privacy:
pii_in_index: false
14. 2 Göl Sıkıştırma Planı (Iceberg/Delta)
yaml compaction:
target_file_size_mb: 512 small_file_threshold_mb: 64 zorder_by: ["brand","country","occurred_at"]
run_every: "PT6H"
max_concurrency: 4
14. 3 JSON alanları için dizinler
sql
-- GIN/inverted index on device attributes
CREATE INDEX idx_device_json ON gold. sessions
USING GIN ((device_json));
-- Materialization of critical pathways
ALTER TABLE gold. sessions ADD COLUMN device_os TEXT;
UPDATE gold. sessions SET device_os = device_json->>'os';
CREATE BITMAP INDEX idx_device_os ON gold. sessions(device_os);
14. 4 Dizin İzleme SLO'ları
yaml monitoring:
skipped_bytes_share_min: 0. 70 index_usage_rate_min: 0. 85 stats_freshness_max_hours: 24 small_files_share_max: 0. 10
15) Uygulama Yol Haritası
0-30 gün (MVP)
1. Üst N isteklerini toplama ve profilleri tarama.
2. Tarihe göre bölümleme + filtrelerle eşleşen sıralama.
3. Id alanları için veri atlama (min-max) ve bloom özelliğini etkinleştirin.
4. Sıcak metrik için bir MV (ödemeler 7d).
5. Dashboard SLI: p95, taranan baytlar, atlanan paylaşım, küçük dosyalar.
30-90 gün
1. JSON yolları: ters indeksler + materyalizasyon.
2. Göl: 2-3 tuşla sıkıştırma ve Z sırası/kümeleme.
3. Anahtar/Projeksiyon Otomatik Danışmanı; Düzenli analiz.
4. "Küçük dosyalar" olan partilerin (gün - hafta) gözden geçirilmesi.
3-6 ay
1. Sürüm oluşturma ve SLA ile MV/projeksiyon kataloğu.
2. Öneriler/dolandırıcılıkla mücadele için vektör endeksleri.
3. Birleşik SLO politikası ve bütçeleri $/istek; bozulma uyarıları.
4. İndeks gizliliği denetimi, coğrafi/kiracı izolasyonu.
16) RACI
Veri Platformu (R): taraflar/endeksler/kompaktlar, otomatik danışmanlar, izleme.
Analytics/BI (R): Gösterge tabloları için MV/projeksiyonlar, sorgu profili oluşturma.
Etki Alanı Sahipleri (C): sıcak dilimler ve filtreler için ölçütler.
Güvenlik/DPO (A/R): gizlilik, PII politikaları, coğrafi/kiracı anahtarları.
SRE/Gözlenebilirlik (C): SLO/uyarı, sıkıştırmalar için kapasiti.
Finans (C): $/sorgu bütçeleri ve endekslerden tasarruf.
17) İlgili bölümler
Veri Şemaları ve Evrimi, Veri Doğrulama, DataOps Uygulamaları, Anomali ve Korelasyon Analizi, Analitik ve Metrikler API, Veri Kümeleme, Boyut Azaltma, MLOps: Model Sömürü.
Toplam
Analitik depolama indeksleme bir stratejidir,'her şey hakkında bir indeks oluşturmak'değil. Doğru bölümler ve sıralama, veri atlama ve çiçek açma, düşünceli MV/projeksiyonlar ve düzenli sıkıştırma, kontrollü bir maliyetle ve gizlilik riski olmadan hızlı ve öngörülebilir sorgular sağlar. IGaming için bu, SLA ve bütçe dahilinde ödemeler, sağlayıcılar ve RG/AML için operasyonel çözümler anlamına gelir.