분석 리포지토리 인덱싱
1) iGaming 플랫폼을 색인화하는 이유
분석 속도: SLA에 적합한 GGR/NET, 변환, RG/AML 및 A/B 실험에 대한보고.
비용: 스캔 할 바이트 수 → 계산/창고 청구서 감소.
신뢰성: 안정적인 p95/p99 대시 보드 대기 시간 및 API 지표.
규모: "전체 스캔" 지옥 가치가없는 수십 개의 브랜드/마켓/PSP/제공 업체.
2) 로드 모델 (인덱싱 전)
지불: '지불', '게임 _ 라운드', '세션', '보너스 _ 이벤트'.
차원: 'dim _ user' (PII 제외), 'dom _ provider', 'dom _ psp', 'dom _ country'.
요청: "마지막 N 일", '브랜드/국가/공급자/psp' 별 집계, 상태 필터 별 필터, 대리 키 참여, JSON 속성 (결제 방법, 장치) 검색, 상위 K/백분위 수.
선택성, 카디널리티 및 사용 빈도에 따라 인덱스를 선택합니다.
3) 지수의 종류와시기
3. 1 클래식
B- 트리: 매우 선택적인 열에 대한 동등성/범위 ('user _ surrogate _ id', 'ursed _ at', 'amount').
해시: 순수한 평등; 분석에서 덜 자주 (약한 범위에 대해).
비트 맵: 낮은 카디널리티 및 빈번한 연결 필터 ('country', 'kyc _ level', 'rg _ state', 'brand'). 마스크 합산에 따라 다릅니다.
3. 2 열 특이성
Min-max (데이터 건너 뛰기): parquet strips/parts의 자동 통계 "최소/최대" → 엔진이 블록을 건너 뛰고 있습니다. 필터링 된 필드별로 정렬 할 때 더 잘 작동합니다.
블룸 인덱스: 블록의 값에 속하는 빠른 확률 테스트 ('user _ id', 'travelance _ id', 'psp' 에 유용).
BRIN (블록 범위 지수): 데이터가 자연스럽게 정렬 된 경우 범위를 차단하기위한 저렴한 "포인터" (시간). 싸지 만 시계열에 효과적입니다.
3. 3 고급/전문
GiST/GIN (반전): JSON/어레이/텍스트, 중첩 된 속성 별 필터 ('메타 데이터). 메소드 = 'Papara', '장치. os in [...] ').
Join/Projection (ClickHouse/MPP): 조인/agg를 가속화하기위한 재료 (사전 조인 키는 사실 예비 집계 옆에 저장됩니다).
벡터 (ANN): 유사한 임베딩 (권장 사항/사기 방지 동작) -IVF/HNSW/Flat을 "가장 가까운 이웃 인덱스" 로 검색하십시오.
Z-order/Z-order (lakehouse/Databricks )/Cluster key (Snowflake )/ORDER Ł( ClickHouse): 더 나은 데이터 건너 뛰기를 위해 디스크에서 데이터의 다차원 클러스터링.
4) 파티션, 정렬, 클러스터링
당사자 (날짜/국가/브랜드): "작은 파일의 저주를 피하기위한 큰 (일/주). "우리는 WHERE/액세스 권한에서 선택성이 높은 필드를 선택합니다.
파티 내에서 정렬: 'ORDER Ły (ressed _ at, brand, psp)' 또는 Z-order by '(브랜드, 국가, 공급자) -최소 및 개화가 더 잘 작동하는 방식입니다.
클러스터/재 클러스터: 지역성을 유지하기위한주기적인 재 분류.
TTL 및 보존: 오래된 부품/세그먼트의 자동 삭제.
5) 재료보기 및 프로젝션
핫 슬라이스 용 MV: 'payment _ 7d _ by _ brand _ psp', 'rounds _ 1d _ by _ provider'. 우리는 스트리밍 업저트를 지원합니다.
ClickHouse/Aggregate 테이블-Presets, 롤업 레벨 (chas → den → nedelya).
결과 캐시: 반복 가능한 대시 보드에 대한 쿼리 결과 캐시/창고 결과 캐시 (쿼리 토큰 및 데이터 신선도에 의해 검증 됨).
6) 반 구조 데이터 (JSON/VARIANT)
경로 별 색인: json 경로의 역/GIN 색인 ('$ .device. os ',' $ .psp. 세부 사항. 방법 ').
열에서 중요한 속성의 재료화: 안정적인 필터 (결제 방법, 장치, 응용 프로그램 버전).
주요 통계: 선택적 계획에 대한 분포 수집.
7) 데이터 레이크: Iceberg/Delta/Hudi
매니페스트 인덱스: parquet 파일 (min-max, null-count, bloom) → 파티션 가지 치기 + 파일 건너 뛰기에 대한 메타 데이터.
파일 압축/병합: 작은 파일을 "최적" 크기 (128-1024MB) 로 정기적으로 병합합니다.
클러스터링/Z- 주문: 상관 필드를위한 재 포장 파일 (예: '브랜드, 국가, 발생 _ at').
인덱스 삭제/업데이트: 델타 위치와 블룸으로 합병 속도를 높입니다.
8) 인덱스 선택 방법: 실제 점검표
1. 상위 N 요청 (부하의 90%) 을 수집하십시오. → 조인/그룹 필터 필드.
2. 각 필드에 대해 선택성 'sel = 1-별개의 (값 )/행' 및 카디널리티를 평가하십시오.
3. 안정적인 필터/액세스를 사용하여 시간별 배치 + 1-2 측정.
4. 필터와 일치하도록/클러스터 키를 정렬합니다.
5. 포인트 ID의 경우 블룸, 낮은 카디널리티의 경우 비트 맵을 추가하십시오.
6. 뜨거운 집계 → MV/투영.
7. JSON 경로 → 역 색인 + 구체화.
8. 호수에서-일정에 따라 압축 및 클러스터링.
9. SLO 입력: p95 대기 시간, 바이트 스캔/요청, 데이터 속도 건너 뛰기.
9) 지원 및 유지 보수
분석/통계: 카디널리티 및 히스토그램 업데이트; 그렇지 않으면 최적화기는 "맹인" 입니다.
VACUM/OPTIMIZE/RECLUSTER: 디플래그먼트 및 재 분류.
인덱스 사용 모니터링: "커버링 속도", "사용되지 않은 인덱스 목록", "바이트 스캔/바이트 건너 뛰기".
자동 고문: 클러스터 키에 대한 정기적 인 권장 사항 및 쿼리 로그를 기반으로 정렬.
회귀 테스트: 새로운 키를 고갈시키기 전에 요청 프로파일과 비용을 비교합니다.
10) 측정 및 SLO 색인
기술: p95/p99 대기 시간, 스캔 된 바이트/쿼리, 바이트% 건너 뛰기, 만진 파일, 캐시 적중률.
경제: $/요청, $/대시 보드, $/TB 스캔.
작업: 압축 시간, 재 분류 대기열, "작은 파일" 공유.
계획의 질: 지수/예측을 사용한 쿼리의 비율, 카디널리티의 정확성.
11) iGaming 케이스 (기성품 레시피)
11. 지불/PSP 1 개: 삭제/거부
파티: '매일'. 정렬 '(브랜드, 국가, 발생 _ at)'.
블룸: 'trange _ id', 'user _ id'. 비트 맵: 'psp', '상태'.
MV: 'payment _ 7d _ by _ brand _ psp (상태, 감소)'.
결과: p95 (8). 2 대 1 1 초, 스캔 된 바이트 ° не87%.
11. 2 게임 라운드: 공급자/게임
Z-order/ORDER 확인: '(제공자, game _ id, where _ at)'.
프로젝션/agg: 'rounds _ 1d _ by _ provider _ game'.
BRIN (Postgres 유사 스토리지 인 경우): 'arsed _ at'.
결과: 최고 K 게임/시간-핫 캐시에서 초 미만.
11. 3 RG/AML 제한/자체 제외 이벤트
비트맵: 'rg _ state', 'kyc _ level'. JSON-path GIN: '$ .reason'.
MV: "30 일 동안의 활성 제한" + PII없이 사용자 수준의 구체화.
결과: 전체 스캔 수십억 이벤트없이 규정 준수를위한 빠른 샘플.
11. 4 사기 방지: 경로 및 장치
JSON → kolonki 재료: '장치. os ',' 장치. 모델 ',' 결제. 방법 '.
블룸: 'graph _ diche _ id'. 클러스터: '(브랜드, 국가, 장치. os) '.
벡터 인덱스: 유사한 이상에 대해 "7d 예금 동작" → 빠른 k-NN 포함.
12) 보안 및 개인 정보 보호
색인 된 필드 및 계획 로그에서 Zero-PII.
디스크 내 암호화: 인덱스/통계는 데이터와 같은 방식으로 암호화됩니다.
집계의 K- 익명 성: MV/프로젝션은 10N 그룹에 의해서만 게시됩니다.
Geo/테넌트 격리: 당사자/키에는 '브랜드/국가/라이센스' 가 포함됩니다.
법적 보류: 지수/매니 베스트도 "동결" 에 속합니다.
13) 반 패턴
"모두 연속" → 볼륨 폭발 및 쓰기 증폭 색인.
소규모 파티 (시간/분) → 판자와 "작은 파일" 의 폭풍.
제로 데이터 건너 뛰기 → 필터와 일치하지 않는 키를 정렬하십시오.
통계 부족 → 나쁜 계획, 전체 스캔.
경로 인덱스가없고 핫 속성을 구체화하지 않은 JSON.
2-4 주 안에 압축 및 재 클러스터 → 분해를 무시하십시오.
14) 템플릿 (사용할 준비)
14. 1 클러스터링/인덱싱 정책 (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 호수 추적 계획 (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. JSON 필드 인덱스 3 개
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 지수 모니터링 SLO
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) 구현 로드맵
0-30 일 (MVP)
1. 최고 N 요청 및 스캔 프로필을 수집합니다.
2. 필터와 일치하는 날짜 + 정렬 별 파티션.
3. 데이터 건너 뛰기 (min-max) 를 사용하고 id 필드에 대해 블룸합니다.
4. 핫 메트릭을위한 하나의 MV (지불 7d).
5. 대시 보드 SLI: p95, 스캔 바이트, 건너 뛰기, 작은 파일.
30-90 일
1. JSON 경로: 역 인덱스 + 구체화.
2. 호수: 2-3 키로 계산 및 Z 주문/클러스터링.
3. 키/투영 자동 고문; 정기적 인 분석.
4. "작은 파일" 인 배치 (일 → 주) 의 개정.
3-6 개월
1. 버전 지정 및 SLA가 포함 된 MV/프로젝션 카탈로그.
2. 권장 사항/사기 방지에 대한 벡터 지수.
3. 통합 SLO 정책 및 예산 $/요청; 열화 경고.
4. 인덱스 개인 정보 보호 감사, 지리/테넌트 격리.
16) RACI
데이터 플랫폼 (R): 당사자/색인/압축, 자동 고문, 모니터링.
분석/BI (R): 대시 보드에 대한 MV/프로젝션, 쿼리 프로파일 링.
도메인 소유자 (C): 핫 슬라이스 및 필터 기준.
보안/DPO (A/R): 개인 정보 보호, PII 정책, 지리/테넌트 키.
SRE/관찰 가능성 (C): SLO/경고, 압축을위한 kapasiti.
금융 (C): 예산 $/쿼리 및 지수 절약.
17) 관련 섹션
데이터 스키마 및 진화, 데이터 유효성 검사, DataOps 관행, 변칙적 및 상관 분석, 분석 및 메트릭 API, 데이터 클러스터링, 치수 감소, MLops: 모델 탐색.
합계
분석 스토리지 인덱싱은 "모든 것에 대한 인덱스를 생성하는 것이 아니라 전략입니다. "정확한 파티션 및 정렬, 데이터 건너 뛰기 및 블룸, 신중한 MV/프로젝션 및 정기적 인 압축은 통제 된 비용으로 개인 정보 보호 위험없이 빠르고 예측 가능한 쿼리를 제공합니다. iGaming의 경우 이는 SLA 및 예산 내에서 지불, 공급자 및 RG/AML을위한 운영 솔루션을 의미합니다.