DB及Note属性里的ID信息

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 );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OrientDB中,节点(或顶点)和边是图数据库的基本元素。节点存储数据并可以具有属性,边表示两个节点之间的关系,并可以具有方向和属性。 节点属性是键值对,可以包含任何类型的数据,例如字符串、整数、日期等。您可以在创建节点时指定属性,也可以在之后使用UPDATE命令添加或更新属性。以下是一个示例创建节点并添加属性的代码: ``` CREATE VERTEX Person SET name = 'Alice', age = 30, gender = 'female' ``` 在这个例子中,我们使用`CREATE VERTEX`命令创建了一个名为`Person`的节点,并指定了三个属性:`name`,`age`和`gender`。属性的值分别为`'Alice'`,`30`和`'female'`。 边是两个节点之间的关系,可以有方向和属性。您可以使用`CREATE EDGE`命令创建边并指定两个节点的RID(记录标识符),也可以使用`CREATE LINK`命令在两个节点之间创建一个简单的无属性边。 以下是一个示例创建边并指定属性的代码: ``` CREATE EDGE Knows FROM #12:0 TO #13:0 SET since = '2020-01-01' ``` 在这个例子中,我们使用`CREATE EDGE`命令创建了一个名为`Knows`的边,并指定了两个节点的RID:`#12:0`和`#13:0`。我们还指定了一个名为`since`的属性,并将其值设置为`'2020-01-01'`,表示边的创建日期。 请注意,在OrientDB中,您还可以使用类(或顶点标签)来定义节点和边的模式,并为它们添加属性。这类似于关系型数据库中的表和列。在这种情况下,您需要使用`CREATE CLASS`命令创建类,并使用`CREATE VERTEX`和`CREATE EDGE`命令创建节点和边的实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值