我在ArangoDB上有一个图形数据库,该数据库的节点深度约为100个级别,某些用户约为205k。对于正常使用,用于遍历图形的AQL效果很好。但是在某些情况下,图遍历会花费太多时间,
- 计算某些用户的最大深度
- 计算节点深度约为50+且子节点200k +的根节点的权重。这里的权重是通过将每个子节点的权重相加得出的。
- 为某个节点在特定级别上获取所有节点。
我尝试的解决方案如下:
- 对于#1和#2,我正在计算后台的最大深度和权重,并将其保留在缓存中以避免实时处理。如果图形有任何变化,这些值也会重新计算。
- 对于#3,我尝试将图形放置在实际上使性能变差的分片上(并且可以预料,因为图形无法利用分片的好处)
我需要以下建议:
- 预先计算每个级别上的用户ID并将其放入每个用户的缓存中是个好主意吗?
- 是否有一种方法可以将图拆分为不同的碎片(更好的方法),以便我的查询可以并行运行以完成提早获取节点数据的任务?
- Elastic search或Spark之类的工具能否有助于提高Graph查询的性能?
谢谢