大量数据查询超时及未来集群规划咨询

  • nebula 版本:3.5
  • 部署方式:单机
  • 安装方式:RPM
  • 是否上生产环境:N
  • 硬件信息

内存:64G

  • 问题的具体描述

一天数据大概有四百万条,导入三天的数据量,能查询出来结果,但是导入一个月的数据后查询不出来了,一直超时,同时发现随着导入的数据量增加storagd内存占用比越来越高,后来尝试减小write_buffer_size和block_size,其内存占用率还是很高

问题:
1:当数据量非常大的时候像这种聚合统计再过滤的操作有什么办法能加速下吗?nebula是否适合做这种查询,是不是我的用法有问题,希望得到各位大佬指点
2:未来我希望导入并统计半年数据,这种数据量的情况下,像这种统计语句能计算的出来吗?集群的资源配置应该如何如何估算?
3:storagd内存占用高的原因?有什么办法能让他降低一些吗?

查询语句:

match_pid_tid = "match (s:securityop)-[ov:overring]->(o:`order`)-[re:refund]-(t:tender) " + \
                    "with id(s) as sid, collect(id(o)) as list_order_number, o.`order`.store_code as " + \
                    "store_code, t,count(re) as over_count, id(t) as tid, collect(distinct " + \
                    "o.`order`.business_day) as business_day " + \
                    "where over_count > " + str(min_over_count) + " " + \
                    "return sid, list_order_number, store_code, over_count, tid,business_day " + \
                    "order by over_count desc "

当前一个月的数据量:

内存使用情况:

image

graphd日志:

storaged配置:

能大致介绍你的场景吗?
从现在你发的语句来看,会比较偏向于图计算的场景。用图数据库来实现并不是很高效。

您好,感谢回复 :pray:

1关于查询:我现在的计算思路是通过聚合统计在过滤的方式先找到异常数据的vid,然后再根据vid去逐条的进行查询,我理解的我这个查询语句是全扫描把,当点和边的数量达到上亿级别的时候,我这种查询是否就不适用了?或是有什么优化查询的方法能够实现在这种数据量级下的聚合统计?

2关于内存 :昨天我尝试将enable_partitioned_index_filter参数打开了,重启后storage的内存占用率确实下降了,但是到今天早上又升到了30多g的一个内存占用,想知道storage的内存会随着写入数据量的增加越来越大吗?

昨天刚打开enable_partitioned_index_filter参数的时候:

image

今天早上的内存占用情况:

image

看起来前面的聚合统计偏向于离线计算的场景,可能可以用大数据或者图计算来做。后面根据VID去查找异常联系,用图数据库会比较合适。

你现在的逻辑是通过全局找到异常的vid,然后拿到这个vid去验证是不是的确异常。这种的话,在前面这个找异常vid的步骤,可能用一些大数据引擎或者用图计算框架来实现会比较合适。这种往往是事后分析的逻辑。
事后分析会带来的问题包括:

  1. 计算量大,所需要的资源多,但计算完的结果可能后面却用不上;
  2. 偏事后,无法拦截异常;
  3. 数据不是实时最新数据;

其实如果可能的话,你也可以考虑做成一个实时的场景,你可以把图数据库系统集成到在线系统里去,当在线系统有事件发生(比如某个vid做了某个事情),你拿这个vid来校验有没有异常。这样实效性更高,计算量也相对比较小,对资源的开销也比较小。

关于内存的问题,可能需要研发同学check下

明白了,十分感谢 :pray:

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。