当前位置: 首页 > 网络应用技术

GaussDB(DWS)共享消息队列实施的三个主要功能

时间:2023-03-08 02:10:41 网络应用技术

  摘要:本文将在本文中详细介绍消息队列的实现。

  在上一篇文章中,我们解释了SYSCACHE的实现原则。GaussDB(DWS)通过了SYSCACHE CACE TABLE元数据以加速查询。修复以下语句执行过程:

  一种。创建表ABC(会话1)

  b。从ABC选择 * *(会议1)

  C。Drop Table ABC(会议2)

  d。从ABC选择 * *(会议1)

  在会话1中,选择表操作(B和D)将连续两次执行。执行B语句后,会话1将缓存ABC的元数据并将其缓存到SYSCACHE以准备后续使用。会议1将在执行D语句的过程中发生,并读取已删除的数据。

  那么,会话2“通知”会话1的哪些数据?答案是共享消息队列。

  如图所示,共享消息队列的数据结构

  该图主要包括两个部分。以下部分是螺纹局部结构。主要记录是每个线程中的数据。线程之间的数据是独立的,无法访问彼此。以上部分是共享消息队列中的数据。在共享内存中,可以同时通过多个线程访问您。共享队列的访问场景是一个典型的阅读场景。

  在共享消息队列中,有三个核心变量,NextMsgnum,Minmsgnum,MaxMsgnum,其中NextMsgnum记录了每个线程消息的位置,Minmsgnum记录了共享消息队列的最早消息。maxmsgnum记录共享消息队列。对于最新新闻,对于每个线程,它需要是常规的(锁定/事务表的触发器/接收信号时触发)从共享消息queue.news中进行了更新线。同时,如果在线程内生成故障消息(通常DDL语句在交易时会产生大量故障),则需要在共享消息队列中插入故障数据以使其读取其他线程。此外,有两个参数,即hasmessages,ResetState,其中hasMessages用于标记相应线程的相应失败消息。RESETSTATE用于标记相应的线程是否需要失败所有消息。

  注意:有什么故障数据?有六个类别(源自PG)。有兴趣的学生可以研究PG源代码。我们不再在这里扩展。我们只需要知道线程需要从共享消息队列中读取/插入消息才能实现数据同步。

  共享消息队列仅需要为外部接口提供三个功能:在共享消息队列中读取消息,将消息写入共享消息队列,然后清理共享消息队列。

  如图所示,这是阅读的过程。在同步线程的过程中,有几个关键点:

  注意:在阅读共享消息队列时,每个线程都会促进自己的NextMsgnum位置,以促进数据追求和增加的记录。

  如图所示,写入失败的过程。有以下关键点:

  注意:写入失败的过程实际上是促进maxmsgnum的过程。同时,可以得知其他线程将读取新的失败消息。

  如图所示,在清理共享队列的过程中,有几个关键点:

  注意:清理共享消息队列过程,这实际上是促进Minmsgnum的过程,同时,所有不追求时间失败的线程的线程执行将完全无效。

  根据上面提到的共享消息队列界面,可以知道读取共享队列主要负责促进每个线程本身的NextMsgnum;消息传递消息主要负责促进Maxmsgnum;清洁共享消息队列主要负责促进minmsgnum。通过共享消息队列,可以有效地实现各种线程之间的数据同步。

  自华为云社区以来,本文分享了作者:疯狂。

猜你喜欢