有效
基于分布式数据库集群的节点通信方法、装置和设备
张铠源、贺磊
天翼云科技有限公司
张
张铠源机构 暂无
技术领域 暂无
贺
贺磊机构 暂无
技术领域 暂无
摘要
本申请涉及一种基于分布式数据库集群的节点通信方法、装置和设备。方法包括:在确定生成数据重分布算子的情况下,为数据重分布算子分配共享内存,根据数据重分布算子确定需发送至第一其他节点的发送数据,向共享内存中与第一其他节点对应的发送分区写入发送数据;根据第一其他节点的节点标识、数据重分布算子的算子标识及发送分区的分区标识生成发送记录,将发送记录添加到当前节点中当前辅助进程对应的路由表;在当前辅助进程处理路由表中当前发送记录的过程中,确定当前发送记录中分区标识对应的目标发送分区,读取目标发送分区中数据得到第一数据包,向当前发送记录中节点标识代表的其他节点发送第一消息。采用本方法能够降低资源消耗。
1.一种基于分布式数据库集群的节点通信方法,其特征在于,由分布式数据库集群中当前节点执行,所述方法包括:在确定生成数据重分布算子的情况下,为所述数据重分布算子分配共享内存,根据所述数据重分布算子确定需发送至第一其他节点的发送数据,向所述共享内存中与第一其他节点对应的发送分区写入所述发送数据;根据所述第一其他节点的节点标识、所述数据重分布算子的算子标识及所述发送分区的分区标识,生成发送记录,将所述发送记录添加到当前节点中当前辅助进程对应的路由表;根据所述第一其他节点的节点标识及所述算子标识生成接收记录,将所述接收记录添加到当前辅助进程对应的接收队列;在当前辅助进程处理所述路由表中当前发送记录的过程中,确定当前发送记录中分区标识对应的目标发送分区,读取所述目标发送分区中数据得到第一数据包,向当前发送记录中节点标识代表的其他节点发送第一消息,所述第一消息携带所述第一数据包;接收第二其他节点发送的第二消息,所述第二消息中携带所述算子标识、所述第二其他节点的节点标识及第二数据包;根据所述第二其他节点的节点标识及所述算子标识,从所述接收队列中确定对应的目标接收记录,将所述第二数据包写入所述目标接收记录,在当前辅助进程处理所述接收队列中当前接收记录时,从所述共享内存中确定对应的目标接收分区,将所述当前接收记录中接收数据写入所述目标接收分区。
2.根据权利要求1所述的方法,其特征在于,所述发送记录中还包含所述发送记录的状态,当前发送记录是遍历所述路由表时遍历到的发送记录,所述第一数据包是在当前发送记录的状态为活跃状态、且从所述目标发送分区中读取到数据的情况下生成的,所述方法还包括:在所述当前发送记录的状态为活跃状态且从所述目标发送分区中未读取到数据的情况下,生成所述当前发送记录对应的沉默状态更新指令;在所述当前发送记录的状态为沉默状态的情况下,跳过所述当前发送记录,生成所述当前发送记录对应的活跃状态更新指令;其中,所述沉默状态更新指令用于在完成当前一轮遍历后将所述当前发送记录的状态更新为沉默状态,所述活跃状态更新指令用于在完成当前一轮遍历后将所述当前发送记录的状态更新为活跃状态。
3.根据权利要求2所述的方法,其特征在于,所述路由表与辅助进程中发送线程对应,所述方法还包括:在遍历所述路由表的过程中,将为所述路由表中发送记录生成的状态更新指令写入到状态队列中;在当前一轮遍历完成的情况下,根据所述状态队列中状态更新指令更新所述路由表中对应发送记录的状态。
4.根据权利要求2所述的方法,其特征在于,所述辅助进程中存在多个发送线程,发送线程与路由表一一对应,所述方法还包括:在所述路由表中全部发送记录的状态均为沉默状态的情况下,将所述路由表对应的发送线程的状态设置为休眠状态。
5.根据权利要求1至4中任一所述的方法,其特征在于,所述从所述共享内存中确定对应的目标接收分区,将所述当前接收记录中接收数据写入所述目标接收分区,包括:根据当前接收记录中算子标识及节点标识从分区映射表中查询对应的目标分区标识,所述目标分区标识代表所述共享内存中一个接收分区;将当前接收记录中接收数据写入所述目标分区标识代表的目标接收分区。
6.根据权利要求1至4中任一所述的方法,其特征在于,所述方法还包括:将基于所述算子标识与第一其他节点的节点标识生成的第一算子注册指令,添加到所述辅助进程对应的发送算子队列,其中,生成发送记录是在执行所述发送算子队列中所述第一算子注册指令的情况下执行的;在将所述发送记录添加到当前节点中当前辅助进程对应的路由表后,将所述第一算子注册指令从所述发送算子队列中移除;将基于所述算子标识与第一其他节点的节点标识生成的第二算子注册指令,添加到所述辅助进程对应的接收算子队列,其中,生成接收记录及向接收队列中添加接收记录,是在执行所述接收算子队列中所述第二算子注册指令的情况下执行的;在将所述接收记录添加到当前辅助进程对应的接收队列后,将所述第二算子注册指令从所述接收算子队列中移除。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:在向所述共享内存中与第一其他节点对应的发送分区写入所述发送数据的步骤执行完毕的情况下,向所述发送算子队列中添加所述发送记录对应的第一反注册指令;在遍历到所述发送算子队列中所述第一反注册指令的情况下,从所述路由表中移除所述发送记录,并从所述发送算子队列中移除所述第一反注册指令;从所述目标接收分区中读取数据,在将所述目标接收分区中数据读取完毕的情况下,向接收算子队列中添加所述当前接收记录对应的第二反注册指令;在遍历到所述接收算子队列中所述第二反注册指令的情况下,从所述接收队列中移除所述当前接收记录,并从接收算子队列中移除所述第二反注册指令。
8.根据权利要求7所述的方法,其特征在于,所述辅助进程还包含清理线程,所述方法还包括:在遍历到所述发送算子队列中所述第一反注册指令的情况下,向所述清理线程对应的发送清理队列中添加所述发送记录对应的发送清理记录;在遍历到所述接收算子队列中所述第二反注册指令的情况下,向所述清理线程对应的接收清理队列中添加所述当前接收记录对应的接收清理记录;在所述发送清理队列中包含为所述数据重分布算子生成的全部发送记录分别对应的发送清理记录、且所述接收清理队列中包含为所述数据重分布算子生成的全部接收记录分别对应的接收清理记录的情况下,释放为所述数据重分布算子分配的共享内存。
9.一种基于分布式数据库集群的节点通信装置,其特征在于,所述装置包括:共享内存管理模块,用于在确定生成数据重分布算子的情况下,为所述数据重分布算子分配共享内存,根据所述数据重分布算子确定需发送至第一其他节点的发送数据,向所述共享内存中与第一其他节点对应的发送分区写入所述发送数据;发送记录处理模块,用于根据所述第一其他节点的节点标识、所述数据重分布算子的算子标识及所述发送分区的分区标识,生成发送记录,将所述发送记录添加到当前节点中当前辅助进程对应的路由表;接收记录处理模块,用于根据所述第一其他节点的节点标识及所述算子标识生成接收记录,将所述接收记录添加到当前辅助进程对应的接收队列;数据发送模块,用于在当前辅助进程处理所述路由表中当前发送记录的过程中,确定当前发送记录中分区标识对应的目标发送分区,读取所述目标发送分区中数据得到第一数据包,向当前发送记录中节点标识代表的其他节点发送第一消息,所述第一消息携带所述第一数据包;数据接收模块,用于接收第二其他节点发送的第二消息,所述第二消息中携带所述算子标识、所述第二其他节点的节点标识及第二数据包;数据处理模块,用于根据所述第二其他节点的节点标识及所述算子标识,从所述接收队列中确定对应的目标接收记录,将所述第二数据包写入所述目标接收记录,在当前辅助进程处理所述接收队列中当前接收记录时,从所述共享内存中确定对应的目标接收分区,将所述当前接收记录中接收数据写入所述目标接收分区。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。



