---
url: /zh/data.md
description: Wow 系统提供查询的三种模型：快照、事件流和数据集，各自保存什么，以及查询怎样得知自己能问什么、能看到什么。
---

# Wow 系统中的数据

每个聚合的历史都在事件日志中，被查询的数据从日志读出。Wow 系统基于三种模型提供查询，全部使用同一种[查询语言](../reference/query-language)：

| 模型 | 一条记录是 | 路由 | 用来读取 |
| --- | --- | --- | --- |
| 快照 | 聚合的最新状态，带着它的系统字段 | `POST /<context>/<aggregate>/snapshot/query` | 事物现在是什么样：未完成的订单、按价格排列的商品 |
| 事件流 | 聚合的一次提交，带着它的事件 | `POST /<context>/<aggregate>/events/query` | 发生了什么、何时发生：上周取消的订单、某个商品的价格变化 |
| 数据集 | 数仓之上一张分析用表的一行 | `POST /wow/dataset/<context>/<name>/query` | 跨聚合、跨服务的分析：按地区和月份统计的销售额 |

快照和事件流由拥有该聚合的服务从它自己的存储提供，提交之后即可查询。数据集从 ClickHouse Sink 根据日志填充的数仓读取，比日志稍有滞后；数据集由服务声明（[从服务发布数据集](../guide/datasets)），或在分析目录中定义（[数据集与分析目录](./datasets)）。

## 模型接受什么 {#what-a-model-admits}

每个模型都描述自己。对它的查询路由发 `GET`，得到它的能力描述符：每个字段及其类型、过滤接受的操作符、能否排序、分组和聚合、查询能深入的集合，以及上限。描述符以自身的摘要作为 `ETag`，所以客户端可以缓存它，再用 `If-None-Match` 询问。查询要求模型不接受的东西时，会在运行之前被拒绝，每个违规都指明它的规则（[错误](../reference/query-language#errors)）。

## 调用方看到什么 {#what-a-caller-sees}

查询从不指明调用方的作用域，由服务来施加。每个调用方只读到自己租户的记录，在聚合保存所有者和空间时，还只读到自己所有者和空间的记录；被允许跨作用域行事的调用方，用 `Wow-Scope` 指明另一个作用域。数据集的行带着其主体的租户、所有者和空间，所以同样的规则在那里也成立。声明为敏感的字段，在每个回答中、对每个调用方都会被遮蔽：`DISPLAY` 字段仍可以过滤和排序，`CONFIDENTIAL` 字段则不能（[身份](../concepts/identity)）。

## 下一步 {#where-to-go-next}

| 任务 | 阅读 |
| --- | --- |
| 作为分析人员过滤、分组和度量 | [分析查询](./querying) |
| 在数仓之上定义数据集，审核并发布它 | [数据集与分析目录](./datasets) |
| 查找某个操作符、查询种类或错误 | [查询语言](../reference/query-language) |
| 让用户构建并保存自己的视图 | [工作台](./workbench) |
| 从 TypeScript 查询 | [读取与查询](../typescript/queries) |
| 从服务中用 Kotlin 查询 | [查询快照](../guide/queries)、[查询事件流](../guide/event-queries) |
