WinUpGo
搜索
CASWINO
SKYSLOTS
BRAMA
TETHERPAY
777 FREE SPINS + 300%
加密货币赌场 加密赌场 Torrent Gear是您的通用洪流搜索! Torrent Gear

统计和分析API:事件,聚合,重组

文章全文

💡 18+.用于平台/操作员,工作室(RGS/live)和BI/CRM命令的工程和分析材料。不打电话。

1)为什么外部API分析

合作伙伴/提供商:监视SLA内容、RTP、参与。

营销/CRM:基于指标的触发活动(DAU,存款漏斗)。

运营/财务:近实时GGR/NGR、支付成功、webhook泻湖。

产品:应用内统计小部件,A/B面板。

目标是安全和可预测地以清晰的语义和SLA提供事件和集合。


2)手指上的建筑


Producers (PAM/Wallet/RGS/Payments/Kafka/CDC)
│
Ingestion API ──Stream (Kafka/Pulsar) ──Lakehouse (Delta/Iceberg)
│                 └─OLAP (ClickHouse/BigQuery/Trino)
└────────────────────────────────────Aggregation/Query API
(cache, RBAC/RLS, rate limits)

事件:on-least-once,"event_id/idempotency_key"的去世。

聚合物:赛前滚动(1m/5m/1h/1d)+上飞。

Retenchen:在Gold Marts之上的cohort引擎。

Кэш: CDN/edge + ETag/`Cache-Control`, server-side TTL.


3)事件模型: 最低标准

3.1常见字段

json
{
"event_id":"uuid",  "event_type":"bet.settled",  "occurred_at":"2025-10-23T16:21:05Z",  "ingested_at":"2025-10-23T16:21:06Z",  "tenant_id":"brand-7",  "region":"EU",  "player_id":"p_19f3",   // псевдо-ID
"trace_id":"tr_a1b2c3",  "schema_version":"1.3.0",  "payload":{...}
}

规则:UTC timestamps,"player_id"是别名,货币在小单位中。

3.2个关键类型

`session.startedended`
`bet.placedsettled` (stake_minor, win_minor, in_bonus, game_id, provider_id)
`wallet.debitcredit` (reason, reference_id)
`payment.intentauthorized
`bonus.issuedconsumed
`rg.limit.hitreality_check`
转化-semver;仅添加选项。

4) Ingestion API(适用于第三方来源)

发送事件包


POST /v1/events:batch
Headers: X-Idempotency-Key: ev_20251023_001
[
{"event_id":"...","event_type":"bet.placed",...},  {"event_id":"...","event_type":"bet.settled",...}
]
→ 202 { "accepted":2, "duplicates":0, "trace_id":"tr_a1b2" }

保障措施:在保障之下;通过"event_id"在Silver中过滤重复。


5) Aggregation API: 时间系列和切片

5.1时间表(时间度量)


GET /v1/analytics/timeseries
?metric=ggr    // ggr, ngr, dau, deposits_success, rtp
&granularity=5m  // 1m/5m/1h/1d
&from=2025-10-22T00:00:00Z&to=2025-10-23T00:00:00Z
&filters=region:EU,brand_id:brand-7,provider_id:studio_x
&group_by=brand_id
→ 200 {
"metric":"ggr",  "granularity":"5m",  "series":[
{"ts":"2025-10-22T00:00:00Z","brand_id":"brand-7","value_minor":120030},   {"ts":"2025-10-22T00:05:00Z","brand_id":"brand-7","value_minor":98020}
],  "next_cursor":null
}

5.2切片/上衣(按组)


GET /v1/analytics/slice
?metric=rtp &dim=game_id &from=2025-10-22&to=2025-10-23
&limit=50&order=-value
→ 200 { "items":[{"game_id":"g_01","value":0.956},...] }

5.3漏斗(funnel)


POST /v1/analytics/funnel
{
"steps":[
{"event":"payment.intent"},   {"event":"payment.authorized"},   {"event":"payment.captured"},   {"event":"wallet.credit", "reason":"deposit"}
],  "window_sec": 3600,  "filters":{"region":"EU","brand_id":"brand-7"}
}
→ 200 {
"total": 12450,  "steps": [
{"name":"intent", "count":12450, "rate":1.0},   {"name":"authorized", "count":11020, "rate":0.885},   {"name":"captured", "count":10110, "rate":0.811},   {"name":"credited", "count":10050, "rate":0.807}
]
}

5.4限制和缓存

Rate limit per token/brand/region.

"ETag"的回应;支持"If-None-Match"。

TTL缓存取决于"granularity"(例如5m → TTL 60-120 s)。


6)重生和队列: 规则和API

6.1定义(公约)

DAU/WAU/MAU:如果是'bet,则处于活动状态。placed'或'wallet。credit (deposit)` или `session.started '≥ N分钟。

Cohort by first deposit(通常用于LTV)或registration(用于参与)。

Retention D1/D7/D30:队列中的份额又回到了白天窗口+/-品牌超时区的入场券。

根据窗口中唯一的"player_id"来重新访问。

6.2个API队列


POST /v1/analytics/retention
{
"cohort":"first_deposit",  "start_date":"2025-09-01",  "end_date":"2025-09-30",  "return_event":"bet.placed",  "days":[1,7,14,30],  "filters":{"region":"EU","brand_id":"brand-7"}
}
→ 200 {
"cohort":"first_deposit",  "rows":[
{"cohort_date":"2025-09-01","size":1820,"d1":0.36,"d7":0.22,"d14":0.18,"d30":0.12},   {"cohort_date":"2025-09-02","size":1714,"d1":0.35,"d7":0.23,"d14":0.19,"d30":0.13}
]
}

6.3 LTV/累积量


GET /v1/analytics/ltv?cohort=first_deposit&currency=EUR&horizon=90d
→ 200 { "cohorts":[{"date":"2025-09-01","ltv_minor":[0,150,230,280,...]}] }

7)语义指标(不争论)

度量标准定义(简述)
GGRsum(stake) − sum(win) по `bet.在期内/货币中设置的
NGRGGR −奖金费用−奖金−佣金
RTPsum(win) / sum(stake)
Deposit successcaptured/intent(因子)
Settle lagt(定位)− t(定位),percentile p95
Webhook lagt(ingested) − t(occurred), p95
DAU/WAU/MAU活动规则的独特活跃参与者

所有内容均在UTC中,指定货币和次要单位;通过将固定的FX转换为Data Lake来解决多元货币性。


8)验证、过滤和兼容性

路径:'/v1/……';新度量/字段-选择性。

Фильтры: `brand_id, region, provider_id, game_id, method, currency, device, geo`.

分离:基于cursor("next_cursor")。

Breaking只→ '/v2'+Deprecation/Sunset头条新闻和changelog。


9)安全和准入

OAuth2 Client Credentials(短寿命令牌),用于B2B的mTLS。

RBAC/ABAC:度量/切片权限;通过"品牌/地区"的RLS过滤器。

PII:API不提供PII,仅在需要时提供聚合/伪ID。

驻地:将请求路由到区域;跨区域数据-禁止。

利率极限和配额,反赤字;WORM可用性审核。


10)SLO和可观察性

SLO地标:
  • 'GET/timeseries gran=5 m'p95 ≤ 500-800毫秒,'GET/slice' p95 ≤ 1-2 s(最高可达50-100个位置),'POST/retention'(队列月份)p95 ≤ 3-5 s,rollup的新鲜度:p95 ≤ 2-5分钟来自'occurred_at'。
  • 度量标准:latency p50/p95/p99,error-rate(4xx/5xx),cache-hit,查询/扫描字节(OLAP),每个滚动的"freshness lag"。
  • Logs:结构化的'trace_id'、查询过滤器(没有PII),扫描计数。

11)现金,初步计算,成本

滚动表:1m/5m/1h/1d按关键指标→快速"时间序列"。

重型切片/cohort的材料化视图。

ETag + max-age;后期事件中的残疾是增量发生的。

"热/冷"策略:在OLAP-warehouse中进行热门查询;档桉在湖里。

对查询的"扫描字节"限制;给调度员的提示。


12)嵌入(嵌入)和导出

通过带有RLS令牌的签名URL/iFrame内置小部件。

按任务(job API)导出CSV/Parquet(具有大小限制和时间参考)。

Webhook上载就绪通知。


13)支票单

体系结构

  • 单一事件图,semver, registry;"event_id"的祖先。
  • Rollup's和materialized views为顶级桉例。
  • RLS/RBAC/ABAC,居住权,令牌寿命短。
  • Cash (ETag/TTL), rate limits,配额。

语义学

  • GGR/NGR/RTP/DAU/retention定义已记录在案。
  • 货币-小单位;FX是在事件发生时捕获的。
  • UTC Retention,考虑到显示中的品牌时间段。

业务活动

  • SLO/dashbords新鲜和潜伏。
  • WORM可用性/出口审核。
  • DR/xaoc演习:积压的滚动,一连串的查询,迟到的事件。

14)反模式(红旗)

"原始"OLTP表直接放入API中。

命令之间的度量定义不一致。

没有重复数据消除和水厂→双/丢失事件。

没有缓存/配额的无限制飞行聚合→昂贵且缓慢的请求。

没有居住策略的跨区域聚合。

将PII/玩家的详细信息返回到公共响应中。

没有"/v2"和Deprecation的安静突破变化。


15)Mini-Spec(TL;DR)

事件:'/v1/事件:batch'(在least-once上,在'event_id'上删除)。

时间: '/v1/analytics/timeseries?metric=...&granularity=...` (rollup + кэш).

切片: '/v1/analytics/slice?metric=...&dim=...`.

漏斗:'/v1/analytics/funnel'(窗口、步骤、过滤器)。

再生/再生:'/v1/analytics/retion'(+LTV)。

安全性:OAuth2+mTLS,RLS,按品牌/区域代币,WORM审核。

SLO: p95 ≤ 0.5-2 c;新鲜度≤ 2-5分钟。


统计和分析的API不是"SELECT FROM big_table",而是合同度量:稳定事件,预读和可缓存单元,严格定义的重构和队列,安全性(RLS/RBAC)和居住性,SLO可以理解。因此,您可以快速、廉价和可预测地将数据提供给合作伙伴,产品和BI,而无需有争议的解释,并且不会泄漏或存储过载的风险。

× 按游戏搜索
请输入至少 3 个字符以开始搜索。