Tribon数据库结构研究

摘要:在世界范围内,每年有成千上百条的船舶在Tribon这个设计平台上面被”建造”出来。这些庞大的数据被限制在Tribon不开放的数据库里面。随着,船厂信息化水平的不对提高,以往简单的数据访问方式已经无法满足我们对数据的要求。对Tribon的底层数据进行分析已经很有必要。这篇文章就对Tribon的数据库做一个初步的探索。

         Tribon作为船舶行业应用最广泛的CAD/CAM设计软件,已经在船舶行业中得到广泛应用。该软件在行业内的认可度较高。对于软件本身其开发的数据接口也很多。利用其中的数据接口可以很容易的获得船型的设计数据。但是,由于在国内普遍采用Tribon自带的数据库并不是开放的数据库,想访问里面的数据必须通过软件提供的接口程序。不过,Tribon也提供了Oracle数据库可作为数据库存储的功能,它适用于Tribon中的PDI(Production Data Interface)生成信息接口。

         不过这一切都是只是提取数据,如何实现把外部的数据写入回Tribon呢?这是一个很要命的课题。因为Tribon的数据库不开放,所以研究数据库结构势在必行。

1.      数据使用的现状

现在很多企业都在上PDM(ProductData Manage)系统,并且随着互联网的发展,以及国家提出工业4.0。PDM系统很多已经基于网页开发也就是WebPDM。PDM技术中有一项就是需要把设计在Tribon中的船型信息提取出来。目前,绝大多数采用的都是利用Tribon提供的COM接口和PDI接口,对信息进行导出,导入到开放的数据库作为中间数据库,PDM系统再利用中间数据库进行数据分析。这套解决方案比较成熟,目前,暂时没想到有什么欠缺的地方。不过,信息的提取往往会受到Tribon自身接口的限制。有些功能往往很难再突破。这时发现掌握Tribon的底层数据库架构技术还是很有必要。

2.      数据库的结构

目前数据库技术已经很成熟了,对于数据库技术其中有很深的理论基础。这些高技术的问题,在这篇文章中不讨论。我们只是分析Tribon的数据库结构。由于我们大概的知道Tribon的数据库是才用索引的方式来架构的。所以我们对采用索引方式的数据架构进行研究。

2.1 dense indexes(稠密索引或是全索引)

dense indexes是通过对每一个记录在磁盘上持久保存一些额外的数据,用于提高查询的效率。假设数据文件已经存在。

让K=(k1,k2,…,kn) 作为一个key。dense indexfile是一个sequential file,它里面的记录是用K和指向数据文件中对应记录的指针组成:

   rindex=(r[k1],r[k2],…,r[kn],address(r in Data File))

在dense index file中:

 

2.2    sparse index(稀疏索引)

Sparse index结合sequential file和dense index file的优点,通过保存部分key K作为它的record,能很好的支持二分查找快速查找记录,并且能进一步减少所需的磁盘I/O。想要利用sparse index file,数据文件必须是一个sequential file,也就是说数据文件中的记录必须按K进行排序。Sparse index只保存key值和data file中每个page的第一条记录的地址:

(r[k1],r[k2],…,r[kn],address(P))

这样就减少了sparse index中的index page的数目。在sparse index中查找record r[K]=v,我们需要这样:

a)首先在sparse index中找到这样的一个recordr:

    r∗=argmaxrr[K]≤v

可以利用二分查找(上面的公式表示要在sparse index找最接近v并且不大于v的那条记录)。

b)在r∗所在的page中查找{r:r[K]=v}。

    假设:为简单起见,我们只查找第一个满足条件的record


3.      Tribon数据库结构

Tribon中的数据库大体可以分为两大类:索引数据库和顺序数据库。

1.  索引数据库

大多数数据库采用索引数据库格式,它包括三个文件,其中一个是数据文件,另外两个是索引文件。这三个文件必须存放于同一个目录下。

2. 顺序数据库

         顺序数据库包含有一个根据各部件顺序组织的文件

         下表列出了所有船体建模中用到的数据库

数据库名

Tribon环境变量

内容描述

船体型线数据库

SB_CGDB

船体外型信息 型表面,船体曲线,板缝

船体结构数据库

SB_OGDB

船体模型信息

板材数据库

SB_PLDB

从船体模型抽取的板材零件生产信息

型材数据库

SB_PROFDB

从船体模型抽取的型材零件生产数据

板材套料数据库

SB_NPL

套料的板材和切割草图

套料标准数据库

SB_NSTD

为板材套料提供标准板,引割点,切割草图图框 等

型材套料数据库

SBH_NEST_PROFDB

套料的型材

型材套料图形数据库

SB_PDB

型材套料生成的图形和草图

图形数据库

SDB_PICT

视图,板架的图形

装配计划数据库

SB_ASSDB

装配计划数据

生产数据库

Oracle databank

为用户编写提供零件的生产信息

标准数据库

SBD_STD

标准图框,等等

 

 

 

         Tribon的数据库有三个文件组成,分别为以dat结尾的索引数据库,idx结尾的索引数据库2,以及eob结尾的数据文件。数据文件存储在SB_SHIPDB环境变量所设置的目录下,如下图所示。

 

上面这么多文件就是我们的研究对象,所有数据都存储在这些文件中。按照上面分析的数据库架构方式。Tribon的数据库应该为索引方式架构。

 

3.1 索引文件(dat)的存储结构

索引文件应该记录了存储元素的名称,存储对象的时间,存储对象的在数据库中的指针,存储对象的类型等信息。

索引文件数据结构

{

         元素名称;

         元素索引地址;

         元素时间;

         元素所占空间大小;

         元素类型;

}

在进一步的分析中数据文件中,发现每一个元素的索引条数据所占的大小都是81个字节。这样固定大小的设计方式,应该是为了提高检索数据的速度。

 

3.2 数据文件(eob)的存储结构

这些数据文件也是按照顺序存储在数据空间中,通过索引文件中的地址指针就能够指向到数据文件的入口。根据研究分析数据文件有4部分组成。

3.2.1 文件头描述

文件头里面有几个关键字段,表示该数据记录的开始。

3.2.2 文件头数据描述

里面记录了元素的名称,元素的创建日期,已经元素的类型。

3.2.3 数据记录信息的开头

元素记录开始的字段信息,如修改时间等。

3.2.4 数据记录区域

这部分完全记录这Tribon中数据模型,生产图纸以及工艺信息。对于每一种数据模型,都有自己独特的记录形式。如果需要深入挖掘所包含的内容,就需要利用逆向技术的手段。把这些数据表格都分析出来。

 

4.      对套料板信息的分析

         在分析了数据库结构的基础上,下面我们那一个SB_NPL这个存储套料板子信息的数据库。试试我们的理解对不对。

4.1 解析索引数据库

         首先我们需要扫描索引数据库的信息。套料板的索引库为npl.dat文件,利用System.IO中的文件读取技术,对文件进行解析。由于每行的索引数据结构都一样,所以列出

_ TriDatabankDAT这个索引结构。里面包含了需要的所有索引信息。


4.2 解析数据数据库

         有了索引文件的指向,很容易找到我们需要的数据地址。由于npl.eob数据文件往往很大,我们需要使用局部读入技术。并对读取的数据流进行分析。正如前面分析的eob数据文件中存在四个区块,文件头描述,文件头数据描述,数据记录信息的开头以及数据记录区域。其中数据记录区域存储了我们需要的所有信息,也是我们需要重点分析的。

 

在定位到数据记录区域后,需要分析所记录套料板的信息。下面列出了套料板的数据结构。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值