LOTUS Note ID剖析

本文详细描述了 note IDs,并且解释了 Domino or Notes 任务 (复制等)使用 note ID 的组件时有什么不同以及 API 程序怎么使用他们.  note ID 包括如下部分:
UNID (Universal Note ID) - 唯一地确定了文档(note), 不管它(note)是位于何处或所处何时.另一方面, 每个文档(note)的复本拥有相同的 UNID, 并且 UNID 不会因为文档的更改而变化.
OID (Originator ID) - 确定文档(note)的特殊的修订版本,不管它(note)位于何处,也就是说,每个文档(note)的复本拥有相同的 OID, 但是当文档(note)更改时OID也会随之修改.
GNID (Global Note ID) - 确定一个特殊数据库中的一个特殊文档(note),GNID 不会随文档(note)的改变而变化。一个文档(note)复本的GNID可能会不同,因为毕竟他们在数据库中的位置可能不同。
NID (Note ID) - 确定给定数据库中的一个特殊的文档(note)。NID 不包含数据库的信息(只在数据库内定位有效:译者注),并且文档(note)修改时不会变化。
IID (Instance ID) - 确定一个给定数据库中的一个文档(note)的特殊修订版本,IID 不包含数据库信息,文档(note)修改时,IID会变化。
GIID (Global Instance ID) - 确定一个特殊数据库中的一个文档(note)的特殊修订版本. GIID 包含数据库信息。The GIID 文档(note)修改时,IID会变化。
你可以从 Notes 用户界面可以检查 ID 的信息。在视图中选择一个文档并且打开它。然后选择菜单 文件 - 文档属性。Notes 显示“文档属性”信息框。在信息页,Notes 显示和这个文档相关联的数据信息,包括文档创建和修改的日期和时间以及note ID 信息。 note ID 信息显示成三行,包含关键字和16进制字符。
对于一个典型的文档,通常是这个样子:
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092
这三行包含所选文档 Originator ID (OID), Universal Note ID (UNID), Global Note ID (GID), 和 Note ID (NID) 。
The Universal Note ID (UNID) and the Originator ID (OID)
第一、二行组成了完整的 Originator ID, Originator ID 由 Universal Note ID (整个第一行)加上序列时间和序列号(第二行):
Originator ID (OID) =
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092
Universal Note ID (UNID) =
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092
Sequence Time =
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092


Sequence Number =
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092
Originator ID (或 Universal Note ID)的前两部分由文件号(File member)和文档号(note member)组成。第一行由 "OF" ("Originator ID - File"),紧跟16个16进制字符,然后是连字符 "-" ,然后是 "ON" ("Originator ID - Note"),后面又是16个16进制字符。 "OF" 后面连字符之前的16个16进制字符构成了OID的文件号(File member)。"ON" 后面连字符之前的16个16进制字符构成了OID的文档号(note member)。
OID.File =
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092
OID.Note =
ID: OF0000039D:3836C29F-ON85255DC9:0056FB94
SD00255DF4:0057B8FA-SN00000003
DB85255CD9:00567287-NT0000C092
在头文件 nsfdata.h 中包含了下面的定义 ORIGINATORID 数据结构和 UNIVERSALNOTEID 数据结构:

typedef struct {
DBID File; /* Unique (random) number */
/* (Even though this field is called "File," */
/* it doesn't have anything to do with the file!) */
TIMEDATE Note; /* Original Note Creation time/date */
/* (THE ABOVE 2 FIELDS MUST BE FIRST - UNID */
/* COPIED FROM HERE ASSUMED AT OFFSET 0) */
DWORD Sequence; /* LOW ORDER: sequence number, 1 for first version */
/* HIGH ORDER WORD: flags, as above */
TIMEDATE SequenceTime;/* time/date when sequence number was bumped */
} ORIGINATORID;
#define OID ORIGINATORID
typedef struct {
DBID File; /* Unique (random) number */
/* (Even though this field is called "File," */
/* it doesn't have anything to do with the file!) */
TIMEDATE Note; /* Original Note Creation time/date */
} UNIVERSALNOTEID;
#define UNID UNIVERSALNOTEID

文档的 Originator ID (OID) 确定了同一个文档(note)的所有复本。OID 由两部分组成:Universal Note ID (UNID) 和序列号(sequence number)、序列时间( sequence time)。 UNID 唯一的确定了同一个文档(note)的所有场合的复本。序列号(sequence number )和序列时间( sequence time) 放在一起区别同一文档(note)的不同版本。
Universal note ID (UNID) 确定了驻留在所有服务器上的同一个文档(note)。然而,UNID 缺少直接访问一个给定数据库中的文档(note)的信息。UNID 用于从一个文档来(note)引用另一个指定的文档(note)。答复文档中的"$REF" (FIELD_LINK) 域包含了其父文档的 UNID , DocLinks(参见nsfdata.h中的 NOTELINK 数据结构)包含了链接文档(note)的 UNID ,和链接视图的 UNID 以及链接文档所在数据库的 ID (ViewLinks 包含了相同的信息,不同的是链接文档的那部分全部设为0, 而 DatabaseLinks 包含的信息是链接文档和链接视图的部分全部设为0) 。UNID 的重要特征是它能总是确定同一个文档(),不论它是否更新过。
UNID, the OID, 和复制器( Replicator)
Universal Note ID (Originator ID的第一部分) 唯一的确定了同一文档(note)的所有版本和复本。如果两个文档(note)具有相同的UNID则它们互为复本。因此,相同文档(note)的所有复本的不同版本都有相同的 UNID。这就导出一个必然的结论:一个数据库中不能含有两个具有相同UNID的文档(note)。如果复制器(replicator)发现同一个数据库中两个文档(note)具有相同的UNID,它就会产生一个错误消息写到日志里,并且不对文档进行复制。
完整的 Originator ID, 从另一个方面唯一地确定了一个文档(note)的一个特殊版本。就是说,一个文档的相同版本的复本具有相同的OID。同时,一个文档(note)复本修改后,它就会有不同的OID。因为在文档(note)被编辑后, Domino 和 Notes 会增加序列号(sequence number)和序列时间(sequence)。 当文档(note)的一个复本保持不变,而另一个复本被编辑并修改,于是这两个复本具有相同的 UNID但是序列号(sequence number)和序列时间(sequence times)不同,因此OID也不同。
Domino 复制器(replicator)使用UNID 来匹配数据库中的文档(note),例如:如果数据库A和数据库B进行复制,数据库A中有个文档含有特殊的UNID,但是数据库B中没有,于是复制器(replicator)在数据库B中创建一个该文档的复本拷贝。
如果数据库A中包含一个文档(note)同时数据库B中有个文档(note)和它有相同的UNID,复制器(replicator)推断这两个文档 (note)是同一个文档的两个复本。这种情况下,复制器(replicator)继续检查两个文档的序列号(sequence number )和序列时间(sequence time),然后复制器(replicator)推断是否是同一时间更新过需不需要复制。如果序列号(sequence number )或序列时间(sequence time)其中有一个或两个都不同,复制器必须决定哪一个是最近更新的哪一个比较旧一点。
如果其中一个更新过,而另一个未更新过,这样第一个复本的序列号会比第二个复本的序列号大,复制器(replicator)根据这种情况使用第一个复本覆盖第二个复本,从而达到两个数据库同步的目的。
复制冲突
复制冲突(Replication conflicts)发生在同时编辑并保存同 一个文档(note)。如果用户修改了数据库A中的一个文档复本,而另一个数据库B中的文档复本也被修改(所作修改都在上一次成功复制之后,下一次复制之 前),于是两个文档复本具有相同的序列号()但是序列时间不同。这种情况下,复制器产生一个复制冲突,因为一个文档的两个复本在同一时期都进行了修 改。(如果把一个文档的多个复本看成是同一个文档的话,这就表示同一个文档同时被修改。)
复制器通过生成复制冲突文档处理这种复制冲突。序列时间较早的文档(document)被标志为冲突文档。两个数据库中将会具有两个文档,只不过序列时间较早的文档会成为序列时间较晚的文档的答复文档。
复制器产生复制文档冲突,会在冲突文档前标志黑色菱形标记。复制器把序列时间较晚的文档拷贝到序列时间较早的文档所在的数据库中,并完整的保持它的 OID。 然后复制器把序列时间较早的文档转成一个新的文档生成一个截然不同的 OID 并给它增加一个特殊的条目 "$Conflict" (VIEW_CONFLICT_ITEM) 。 这个 $Conflict 条目会使文档在视图的左边显示一个黑色的菱形标记,表示它是一个冲突文档。 复制器也会给这个冲突文档增加一个$REF 条目使他变成答复文档,$REF 条目中含有其父文档(序列时间较晚)的UNID。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,936评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,605评论 18 399
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 3,369评论 0 7
  • 谈到阶级,在新中国下成长的人应该不会陌生,甚至有很多人因为早已听烂这语调,而厌烦起这个略带意识形态输入的词汇了。不...
    小Q营姐阅读 752评论 0 0