Skip to content

Commit

Permalink
TTL-opts
Browse files Browse the repository at this point in the history
Update ttl-options.md
  • Loading branch information
abby-cyber committed Sep 22, 2023
1 parent 0612df9 commit 279a478
Showing 1 changed file with 35 additions and 31 deletions.
66 changes: 35 additions & 31 deletions docs-2.0/3.ngql-guide/8.clauses-and-options/ttl-options.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# TTL

TTL(Time To Live)指定属性的存活时间,超时后,该属性就会过期
TTL(Time To Live)是一个定义数据生存期的机制。当数据达到其预设的生存时间后,它会被自动从图数据库中删除。这种功能尤其适合于只需要暂时存储的数据,例如临时会话或缓存数据

## openCypher 兼容性

Expand All @@ -22,45 +22,19 @@ nGQL 支持的 TTL 选项如下。

|选项|说明|
|:---|:---|
|`ttl_col`|指定要设置存活时间的属性。属性的数据类型必须是`int`或者`timestamp`|
|`ttl_col`|指定一个现有的要设置存活时间的属性。属性的数据类型必须是`int`或者`timestamp`|
|`ttl_duration`|指定时间戳差值,默认单位:秒。时间戳差值必须为 64 位非负整数。属性值和时间戳差值之和如果小于当前时间戳,属性就会过期。如果`ttl_duration``0`,属性永不过期。<br/>可在配置文件`nebula-storaged.conf`(默认路径`/usr/local/nightly/etc/`)中设置`ttl_use_ms``true`将默认单位设为毫秒。|

!!! caution

- 在设置`ttl_use_ms`为`true`前,请确保没有为属性设置 TTL,否则会因为过期时间缩短,导致数据被错误地删除。
- 在设置`ttl_use_ms`为`true`后,即设置`ttl_duration`的默认单位为毫秒后,`ttl_col`的默认单位仍然为秒,它的数据类型必须是`int`,并且需要手动转换属性值为毫秒。例如设置`ttl_col`为`a`,则需要将`a`的值转换为毫秒,如当`a`的值为`now()`,则需要将`a`的值设置为`now() * 1000`。

## 属性过期

!!! caution

- 当为一个 Tag 或 Edge type 的属性设置 TTL 并该属性的值为`NULL`时,TTL 功能不会生效,即该属性永不过期。
- 如果为一个 Tag 或 Edge type 新增默认值为`now()`的属性并且该属性设置了 TTL,该 Tag 或 Edge type 相关的历史数据不会过期,因为历史数据的该属性值为当前时间戳。

### 点属性过期

点属性过期有如下影响:

- 如果一个点仅有一个 Tag,点上的一个属性过期,点也会过期。

- 如果一个点有多个 Tag,点上的一个属性过期,和该属性相同 Tag 的其他属性也会过期,但是点不会过期,点上其他 Tag 的属性保持不变。

### 边属性过期

因为一条边仅有一个 Edge type,边上的一个属性过期,边也会过期。

## 过期处理

属性过期后,对应的过期数据仍然存储在硬盘上,但是查询时会过滤过期数据。

{{nebula.name}}自动删除过期数据后,会在下一次 [Compaction](../../8.service-tuning/compaction.md) 过程中回收硬盘空间。

!!! Note
## 使用 TTL 选项

如果[关闭 TTL 选项](#ttl_1),上一次 Compaction 之后的过期数据将可以被查询到
在使用 TTL 功能之前,必须先创建一个时间戳或整数属性,并在 TTL 选项中指定了它。数据库不会自动为您创建或管理这个时间戳属性

## 使用 TTL 选项
在插入时间戳或整数属性的值时,建议使用`now()`函数或者当前时间戳来代表当前时间。

### Tag 或 Edge type 已存在

Expand Down Expand Up @@ -89,6 +63,36 @@ nebula> CREATE TAG IF NOT EXISTS t2(a int, b int, c string) TTL_DURATION= 100, T
nebula> INSERT VERTEX t2(a, b, c) VALUES "102":(1648197138, 30, "Hello");
```

## 属性过期

!!! caution

- 当为一个 Tag 或 Edge type 的属性设置 TTL 并该属性的值为`NULL`时,TTL 功能不会生效,即该属性永不过期。
- 如果为一个 Tag 或 Edge type 新增默认值为`now()`的属性并且该属性设置了 TTL,该 Tag 或 Edge type 相关的历史数据不会过期,因为历史数据的该属性值为当前时间戳。

### 点属性过期

点属性过期有如下影响:

- 如果一个点仅有一个 Tag,点上的一个属性过期,点也会过期。

- 如果一个点有多个 Tag,点上的一个属性过期,和该属性相同 Tag 的其他属性也会过期,但是点不会过期,点上其他 Tag 的属性保持不变。

### 边属性过期

因为一条边仅有一个 Edge type,边上的一个属性过期,边也会过期。

## 过期处理

属性过期后,对应的过期数据仍然存储在硬盘上,但是查询时会过滤过期数据。

{{nebula.name}}自动删除过期数据后,会在下一次 [Compaction](../../8.service-tuning/compaction.md) 过程中回收硬盘空间。

!!! Note

如果[关闭 TTL 选项](#ttl_1),上一次 Compaction 之后的过期数据将可以被查询到。

## 删除存活时间

删除存活时间可以使用如下几种方法:
Expand Down

0 comments on commit 279a478

Please sign in to comment.