背景:
新的一年开始,专栏会坚持下去,继续与大家相互交流学习。本篇博文再一次分析DCMTK自带的工具包dcmqrscp.exe(类似于一个单机版miniPACS),此次主要关注dcmqrscp.exe的数据库部分,通过使用dcmqridx.exe手动操作dcmqrscp.exe的数据库文件,直观了解数据库的记录内容;然后利用dcmqrti.exe查询dcmqrscp.exe的数据库文件,学习如何操作dcmqrscp.exe数据库。
单机版数据库:
单机版数据库就是只能运行在单机上,不提供网络功能的数据库。比如ACCESS、FORPRO等都是单机数据库(摘自百度百科“单机数据库”)其实单机数据库种类还有很多,年前分析过Orthanc的数据库——SQLite,和此次即将要分析的index.dat文件,此外甚至还有FireBird、Derby、HSql、PostgreSQL、JavaDB 、H2等。
之所以使用数据库(无论单机版还是网络版),目的是尽量减少数据的冗余、提高数据利用率、保持数据完整性和一致性,以及数据使用效率。无论哪一种数据库系统,其所建立的数据库文件都可以看做是具有想相同性质的记录的集合,更广义的说,我们常见的xml、json、ini等配置文件也是单机版的数据库。
index.dat:
原本以为index.dat可能是一种类似于xml、json等常见格式的标准文件,搜索了一下百度百科中的描述“在微软windows操作系统中,index.dat是一个由Internet Explorer和资源管理器创建的文件。这个文件的功能就像一个数据库,随系统启动。它的功能在于收集个人信息,就像网址,搜索字符串和最近打开的文件。它的职责就像数据库中的索引”。因此博文下面将index.dat看做是DCMTK中自定义的一种用于记录相关信息的索引数据库文件,主要用于dcmqrscp.exe、dcmqridx.exe、dcmqrti.exe等工具包中。
下面就会通过分析和实际使用dcmqrscp.exe、dcmqridx.exe和dcmqrti.exe工具包来分析index.dat数据库文件。
dcmqrscp.exe操作:
关于dcmqrscp.exe的相关介绍参照之前的博文DICOM医学图像处理:DCMTK的wiki资料学习之PACS调试。
dcmqridx.exe操作:
之前博文对dcmqrscp.exe的介绍侧重于DIMSE服务,如C-ECHO、C-FIND、C-STORE、C-MOVE等,并未提及内部的数据库部分。既然dcmqrscp能够响应C-FIND请求,那么其内部自然实现了数据库功能,用于存储C-STORE上传的相关记录。
重新查看DCMTK的官方说明文档,也可以发现dcmqridx、dcmqrscp、dcmqrti三个工具同属于dcmqrdb模块,DCMTK文档称之为an image database server。
如果再仔细翻看dcmqrscp.exe工具包的源码会发现,在正式处理链接请求之前,是数据库相关操作,具体代码如下:
#ifdef WITH_SQL_DATABASE
// use SQL database
DcmQueryRetrieveSQLDatabaseHandleFactory factory;
#else
// use linear index database (in