在本节中,我们将讨论以下每个操作在数据节点和 API 节点之间进行的消息传递序列:
主键查找
唯一键查找
表扫描或索引扫描
显式提交事务
回滚事务
事务记录处理(获取和释放)
**主键查找。** 使用主键查找的操作按以下图表所示执行:
* 和 + 在此处分别表示 “零个或多个” 和 “一个或多个”。
构成此过程的步骤在此处列出并进行了更详细的说明:
API 节点向数据节点发送
TCKEYREQ
消息。如果要使用的键的必要信息太大而无法包含在TCKEYREQ
中,则该消息可以伴随任意数量的KEYINFO
消息,这些消息携带剩余的键信息。如果操作中使用了其他属性,并且超出了TCKEYREQ
中可用的空间,或者如果数据将作为写入操作的一部分发送到数据节点,则这些属性将与TCKEYREQ
一起作为任意数量的ATTRINFO
消息发送。-
数据节点根据操作是成功还是失败发送响应消息:
如果操作成功,则数据节点向 API 节点发送
TCKEYCONF
消息。如果请求是读取操作,则TCKEYCONF
伴随一个TRANSID_AI
消息,该消息包含实际结果数据。如果数据量超过单个TRANSID_AI
可以携带的数据量,则可以发送多个此类消息。如果操作失败,则数据节点向 API 节点发送
TCKEYREF
消息,并且在 API 节点发出新请求之前不再进行任何信号传递。
**唯一键查找。** 这以与主键查找中执行的方式类似的方式执行:
API 节点使用
TCINDXREQ
消息发出请求,该消息可以伴随零个或多个KEYINFO
消息、零个或多个ATTRINFO
消息,或两者兼有。-
数据节点返回响应,具体取决于操作是否成功:
如果操作成功,则消息为
TCINDXCONF
。对于成功的读取操作,此消息可以伴随一个或多个携带结果数据的TRANSID_AI
消息。如果操作失败,则数据节点返回
TCINDXREF
消息。
下图说明了唯一键查找中涉及的消息交换:
**表扫描和索引扫描。** 这些在许多方面类似于主键和唯一键查找,如下所示:
API 节点使用
SCAN_TABREQ
消息以及零个或多个ATTRINFO
消息发出请求。如果使用边界,则索引扫描也会使用KEYINFO
消息。-
数据节点返回响应,具体取决于操作是否成功:
**提交和回滚事务。** 执行显式提交的过程遵循与前面所示相同的通用模式。API 节点向数据节点发送 TC_COMMITREQ
消息,数据节点以 TC_COMMITCONF
(成功时)或 TC_COMMITREF
(提交失败时)进行响应。这在下图中显示:
某些操作会自动执行 COMMIT
,因此并非每个事务都需要这样做。
回滚事务也遵循此模式。但是,在这种情况下,API 节点向数据节点发送 TCROLLBACKTREQ
消息。将发送 TCROLLACKCONF
或 TCROLLBACKREF
作为响应,如下所示:
**事务记录的处理。** 当 API 节点向数据节点发送 TCSEIZEREQ
消息并接收 TCSEIZECONF
或 TCSEIZEREF
作为响应时(取决于请求是否成功),即可获取事务记录。这在此处描述:
事务记录的释放也使用请求-响应模式进行处理。在这种情况下,API 节点的请求包含 TCRELEASEREQ
消息,而数据节点的响应使用 TCRELEASECONF
(指示记录已释放)或 TCRELEASEREF
(指示释放尝试未成功)。这一系列事件在下图中进行了说明: