compact后数据变少了

版本 nebula-1.0.0
未执行SUBMIT JOB COMPACTt前:

执行SUBMIT JOB COMPACT后:

count数量变少了,这是什么原因呢?

您好,有些无效数据是通过compact来删除的,有兴趣的话可以看下代码,这里有具体的数据清理逻辑:
src/storage/CompactionFilter.h

首先谢谢您的回复
但是按理来说点或边不应该是无效数据。如果点或者边是无效数据,一开始也不应该包括在统计中。
假设我导入100个点,然后compact后统计只有98个点,这种情况感觉有点说不过去。

有些数据是定时清理的,例如有TTL属性的数据、schema已经被删除的数据、Key version无效了的数据等。

也许下边的例子能为你解惑:

  • 例子1

INSERT VERTEX tag1(col1) VALUES 1:(1);
INSERT VERTEX tag1(col1) VALUES 1:(2);
compact 前db_dump会返回2,compact 后会返回 1,其原因是compact把老version的 “INSERT VERTEX tag1(col1) VALUES 1:(1);” 清理掉了。

  • 例子2:

CREATE TAG tag1(row_timestamp timestamp) ttl_duration = 100, ttl_col = “row_timestamp”";
INSERT VERTEX tag1(row_timestamp) VALUES 1:(now());
当超过这个“ttl_duration = 100”时间后,compact后这一行数据会被删除。

  • 例子2我理解

  • 针对例子1,我刚才做了测试

    1. 首先把disable_auto_compactions设为true

    2. 创建一个空间,然后insert vertex tag1(col1) values 1:(“name1”); insert vertex tag1 values 1:(“name2”), 然后compact前db_dump 返回1。

如果我不进行compact,并且disable_auto_compactions设为true。然后我刚才测试删除一个vertex,然后db_dump还是返回1。然后我把disable_auto_compactions设为false, 在文档中说disable_auto_compactions修改为false后立即生效是指统计得时候不会把已经删除得点给统计在内吗?

经过测试显示当disable_auto_compactions设为false,需要过一段时间才不会把已经删除得点统计在内。

确实,我试验的结论和你一样,可能是我记错了,稍后找到原因后再答复你,很抱歉。。。

您好,您的测试结果是正确的,因为storaged中有个默认配置参数 “FLAGS_enable_multi_versions”,此参数默认值为false,意味之不支持多version的vertex,version默认是0,所以在插入相同的数据时,后入的会覆盖先入的,数据库里永远只有一条数据。

尝试 SUBMIT JOB FLUSH; 呢?

我在测试环境执行SUBMIT JOB FLUSH, 然后SHOW JOBS 显示failed,并且我在日志中没找到执行该命令的错误日志信息,是不是我的使用姿势有问题?

https://docs.nebula-graph.com.cn/manual-CN/3.build-develop-and-administration/5.storage-service-administration/job-manager/