# 创建 Schema

本案例 Schema 部分非常简单，图中只有 Account 这一种节点，只考虑 IP 地址作为上下文的共现边:

![Schema](https://1656677449-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M1BFTVoHs6Zt802887O%2F-M3AgN2xVpTjvIBA_FG4%2F-M3Ao-8FHnstKvFM8I3x%2FScreen%20Shot%202020-03-24%20at%205.11.50%20PM.png?alt=media\&token=439298d2-219e-4ace-bdce-9aca29e5eb18)

{% code title="create\_schema.gsql" %}

```sql
/* Vertices */
CREATE VERTEX Account (PRIMARY_ID id STRING, cc_size INT, cc_update_time DATETIME)

/* Edges */
CREATE UNDIRECTED EDGE co_ip (FROM Account, TO Account, ip STRING, create_time DATETIME, time_diff INT)

/* Graph */
CREATE GRAPH MyGraph (*)
```

{% endcode %}

其中，为 Account 节点添加了 `cc_size` 与 `cc_update_time` 这两个属性。这里 cc 的含义和上一个案例是一样的，即 Connected Component。

为了实现更快的响应速度，更高的查询吞吐量，需要将 cc 的发现，与 cc 的查询分离开。譬如想查询某个账号所在的 cc 的大小，不能在接到查询请求的时候，从该账号出发去做深度遍历，而是应该提前将 cc 的信息计算好缓存在节点上，在接到查询请求的时候直接返回结果。

`cc_size` 用来存储该账号所在的 cc 的大小，`cc_update_time` 记录的是 `cc_size` 的最后更新时间，更新脚本判断如果当前账号的更新时间与当前时间距离很短，可以选择不更新。
