今天上午,2016年8月21日,巴西里约奥运会,女排3:1胜对手,打出一场拼搏的精神。
----------------------------------------------
本节内容介绍 谓词锁相关的结构体以及他们之间的关系 ,谓词锁相关的结构体之间的关系可参见图 X-XX 。
图 X-XX 谓词锁相关数据结构图
SIReadLocks (谓词锁)
使用“ PREDICATELOCKTARGET ”表示一个加谓词锁的对象,然后在此对象上施加“ PREDICATELOCK ”表示的谓词锁。
// The PREDICATELOCKTARGET struct represents a database object on which there are predicate locks.
typedef struct PREDICATELOCKTARGET // 在一个“对象”上的谓词锁
{
/* hash key ,一个标志,唯一表示一个对象 */
PREDICATELOCKTARGETTAG tag ; /* unique identifier of lockable object */
/* 谓词锁对象列表 */
SHM_QUEUE predicateLocks ; // “ PREDICATELOCK ”对象的列表,其结构体如下
} PREDICATELOCKTARGET;
“ PREDICATELOCK ”对象的定义如下,一个谓词锁对象有一个唯一的使用“ PREDICATELOCKTAG ”定义的标识 tag ,然后包括两个列表(一个是表示某数据库的存在谓词锁对象的“ PREDICATELOCKTARGET ”,一个是表示事务间冲突关系的“ SERIALIZABLEXACT ”,之后,):
typedef struct PREDICATELOCK // 谓词锁
{
PREDICATELOCKTAG tag ; // 谓词锁的唯一的标识,被当作 hash key 以唯一标识谓词锁
SHM_QUEUE targetLink; /* list link in PREDICATELOCKTARGET's list of predicate locks */
SHM_QUEUE xactLink; /* list link in SERIALIZABLEXACT's list of predicate locks */
SerCommitSeqNo commitSeqNo; /* only used for summarized predicate locks */
} PREDICATELOCK ;
当一个谓词锁对象有一个唯一的使用“ PREDICATELOCKTAG ”定义的标识 tag ,此 tag 则由两个结构体构成:
谓词锁的标识
{
PREDICATELOCKTARGET *myTarget;
SERIALIZABLEXACT *myXact;
} PREDICATELOCKTAG;
所以, PostgreSQL 使用“ PREDICATELOCK ”结构体表示一个谓词锁,然后用一个对象和事务作为此谓词锁的标识( tag)来标识一个谓词锁,这表明谓词锁是数据库对象和事务间的一个特定关系,只是这样的关系是用以表示读写冲突的。