DB及Note属性里的ID信息

本文详细介绍了NSFDB中的各种ID:replicaID用于确定数据库间的复制关系;DBID是数据库的唯一标识符;NoteID和UNID用于标识文档,其中UNID确保文档的全局唯一性。文章还提供了获取这些ID的CAPI示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Relica ID:

首先来看NSF DB的replicate ID, 这个ID可以从数据库的属性里得到,如下图

 

 1. 什么是replica ID?

     NSF数据库的不同副本(replica)之间共享相同的replica ID,Notes/Domino以此来确定数据库之间的复制关系. New copy一个数据库,可以看到他的replica id和原始数据库的是不同的;但新创建一个副本,则可以发现这个ID没有变化.

        Replica ID在内部存储为一个时间戳(TIME DATE), 不过在数据库的属性里,则显示的是其两个16进制的值.

2. 使用C API得到数据库的Replica ID.

     非常简单,只需要在打开的数据库上调用NSFDbReplicaInfoGet()即可,不过要注意的是起返回的是一个replica信息的结构体,Replica ID只是其内容的一部分.示例代码如下:

   if ( error = NSFDbReplicaInfoGet( db_handle, &replInfo ) )
   {
        PrintAPIError (error);
        NSFDbClose(db_handle);
        NotesTerm();
        return (1);
   }

   printf("Replica ID is [%08X:%08X]/n", replInfo.ID.Innards[1], replInfo.ID.Innards[0] );

 

DB ID:

        和Replica ID不一样,  DB ID可以从数据库中文档属性(Data Note)中得到,如下图:

 

1. 什么是DB ID

       概念很简单,就是数据库的内部标识. 和replica ID一样,是个时间戳(TIMEDATE); 不同的是这个ID在数据库产生时被唯一分配,并且不可被修改.同一个DB的各个副本之间,虽然共享replica ID,但其DBID是不一样的.

2. 使用C API得到DB ID

    下面代码显示了如何得到数据库的DB ID,并以16进制的方式显示出来:

   if (error = NSFDbIDGet (db_handle, &dbid))
   {
        PrintAPIError (error);
        NSFDbClose(db_handle);
        NotesTerm();
        return (1);
   }

   printf("DB ID is [%08X:%08X]/n", dbid.Innards[1], dbid.Innards[0] );

 

NOTE ID & UNID:

  Note ID 和 UNID是用来标识Note的,在Notes UI中可以通过"文挡属性"获取这两个ID,如下图. 两副图分别表示了同一个数据文挡在互为replica的DB中的ID 信息

 

    ===>

 1. Note ID & UNID

      NOTE ID : 主要用来表示一条Note在当前DB中的位置. 使用Note ID,可以方便的通过NSFNoteOpen()打开一条Note记录. 这个ID在编程中非常重要.  可以注意到,Note ID仅仅表示在当前DB中的位置,在互为replica的DB中,同一条Note在不同DB中其Note ID一般是不同的.

     UNID:  全称是 Universal Note ID . 从名字即可看出,这个UNID是个全局标识. 在整个Notes的环境中, UNID相同的两条Note互为replica.除了用在replica中,这个ID 也可以被用于回复文挡(Resonse)以及文挡链接(Document Links). UNID是由两部分组成的.如图的"OF"及"ON"部分的两行数.

         另外,对于同一个UNID的文挡,Notes/Domino使用sequence number/sequence time来区分他的不同副本, 在上图中,即为,"SD"开头的一行数,他的后半部分为一个序列号;前半部分该Note最后修改的时间.通过这两部分的组合,即使同一时间打开同一个文挡,Notes也能正确标识他们的版本.

2. 使用C API取得UNID和Note ID

   NSFNoteGetInfo(note_handle, _NOTE_OID, &oid);

   printf( "OF is [%08X:%08X]/n", oid.File.Innards[1], oid.File.Innards[0] );
   printf( "ON is [%08X:%08X]/n", oid.Note.Innards[1], oid.Note.Innards[0] );
   printf( "Seq time is [%08X:%08X]/n", oid.SequenceTime.Innards[1], oid.Sequenc
eTime.Innards[0] );
   printf( "Seq number is [%08X]/n", oid.Sequence);

   NSFNoteGetInfo(note_handle, _NOTE_ID, &note_id);
   printf( "note id :[%010X]/n", note_id );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值