为什么计算引擎中的各计算节点间无通信?

初次接触NebulaGraph,看文档里指出各计算节点间无任何通信。那么是否意味着同一个查询的所有的计算都要在一个计算进程内执行?
或者,多个计算进程分别获取部分DAG,然后分别计算?但是这样一来,有前后依赖算子的算子间并行就不能利用了,会不会影响计算效率?
求指教

1 个赞

计算引擎引擎目前是单进程多线程异步的。

您可能没理解我的意思。我想说的是,假设有两个算子A和B,其中A算子的输出是B算子的输入。然后这两个算子需要的内存都极大,导致必须放到两台不同的物理计算节点上。
这种时候,如果计算节点间无任何通信,那么B算子该如何拿到A算子的结果呢?这是第一个问题。
然后,如果说这两个算子间可以形成局部流水线,那么计算节点间无任何通信就使得这两个算子间的并行不可用。这是第二个问题。

1 个赞

目前的设计主要面向的OLTP场景,并不支持一个query分布式执行。

那如果有一台物理机放不下的事务怎么办?直接报错就完事儿了吗?

自己顶一下,求指教?

nebula 目前的执行引擎并没有做分布式的计算,这里面有一些考虑是分布式的计算的收益,如果数据量不大的情况下分布式计算还要徒增网络的开销。

目前如果计算时的数据超过了内存,应该是会 OOM。

针对过滤的话,目前可以下推到存储层,这里可以执行部分分布式的过滤,但主要的目的是为了减少网络传输的数据。查询层不会把计算密集的任务全都交给存储层。

2 个赞

好的,谢谢。Nebula Graph还是给了我很多启示,祝以后可以发展的更好。

1 个赞