多类型数据库范文

2024-05-05

多类型数据库范文(精选10篇)

多类型数据库 第1篇

2007年交通运输部海事局引进了用于海图生产的CARIS HPD海道产品数据库。CARIS HPD经过测试后已于2009年7月投入正式生产, 目前用于海事序列图和专题图的生产。CARIS HPD可从同一套源数据直接生产传统的INT 1纸海图、S-57标准电子海图和其它海图产品, 极大提高了海图产品的生产效率和质量。

HPD编辑器主要用于海图生产, 在海图编辑方面功能强大, 在数据应用等方面则较弱。受HPD软件限制, 难以实现数据交换格式的扩展, 基本没有数据分析等功能, 如不同版本之间的数据比较。要提高HPD数据利用率, 就需开发与HPD数据库相关的应用系统, 其核心基础是实现数据的有效准确读取, 在此基础上才可实现数据的输出、分析、发布等应用。

为解决上述问题, 本文在分析HPD数据库结构基础上开发HPD源数据、电子海图数据和纸海图数据的解析引擎, 尝试实现最新版本源数据、全版本电子海图、全版本纸海图三大部分数据读取、基本显示和输出, 并建立相应的专题数据库。该引擎的实现为HPD数据共享提供了新的方法, 能够导出HPD数据为用户自定义结构或其他商用数据数据格式, 显著提高了海图数据的利用率。

2. Open JUMP简介

Open JUMP是Java开源GIS项目[1]。在系统构建时使用了Java拓扑分析套件JTS、Java高级绘图库JAI、工程与科学计算库JMath Tools等已有类库。

在矢量数据源支持方面, Open JUMP支持GML2.0, WKT (Well Known Text) 、ESRI Shapefile以及JUMP自有的JML格式。

在OGC服务方面, Open JUMP已提供了WMS支持, 并且在JUMP可拓展性框架支持下, 可以很方便的添加第三方WFS和WPS插件[2]。除此之外, Open JUMP直接支持Post GIS数据集的加载、绘制和回写, 并且提供Arc SDE、Oracle Spatial以及My SQLSpatial的访问接口, 通过支持空间拓展的数据库获取空间数据。

Open JUMP内置了GIS空间分析操作, 包含Buffer缓冲区分析, Intersection叠加求交、Union叠加求和等空间分析功能, 可以用来实现特定的空间分析计算, 并可以通过插件方式为Open JUMP进行功能的定制或拓展。在拓展方面, Open JUMP提供Java API接口, 并且支持轻量级Java脚本Bean Shell和Python的API拓展开发[3]。

Open JUMP基本操作界面见图1所示。

3. CARIS HPD源数据解析

CARIS HPD进行海图生产前, 需要对生产所需的源数据完成入库、编辑、分配航海用途、检查等工作。这些数据是海图产品生产的基础。

源数据的物标存储结构见图2。

源数据存储主要分物标属性、物标关系、物标表示 (坐标) 和表示的航海用途四个部分, 物标的综合没有在图中表示。

源数据读取要求为:

(1) 经检查的最新的数据, 保证源数据正确性和时效性;

(2) 包含被删除的数据, 实现对历史读取数据的删除;

(3) 可读取不同版本HPD源数据, 实现版本兼容;

(4) 每次仅读取某一时间段内已编辑数据;

(5) 源数据按整个北方海区读取, 不分图幅范围;

(6) 可选择航海用途。

HPD源数据读取时使用表为16个, 无法通过一次查询完成, 分成四步:

(1) 读取经检查的最新属性数据, 同时读取经检查的最新航海用途数据, 主要表有rwfobject、representation、representation_usage、representation_compositesp、compositespatial、object_class、rwf_certstatus、repusage_certstatus;

(2) 分别读取物标空间类型对应坐标:水深、点、线和面, 主要表有sounding、point、compositesgeom;

(3) 读取属性值, 使用表uddattribute、attributeclass;

(4) 读取完成编辑的项目ID, 使用表save、usageedit、task。

其中属性值的存储模仿CARIS软件符号化查找表的属性值存储方式, 属性及值用双引号包括, 属性之间用逗号分割, 实现不同物标不同属性的统一格式存储, 避免属性与物标类的紧密相关造成的属性值存储复杂性。

下面为属性值字符串例子:

"BOYSHP4", "CATLAM2", "COLOUR4", "OBJNAMQingdao Port No H7", "SCAMIN499999", "NOBJNM青岛港H7"

源数据以输出时间段为目录, 按航海用途分层管理和显示, 航海用途通常按比例尺范围划分。读取时可以选择单个或全部航海用途。源数据符号化标准为IHO S-52标准。天津和黄骅港某一时间段内编辑过的源数据 (未显示删除的物标) 显示结果如下。图3 (a) 为未符号化时显示结果;图3 (b) 为符号化后显示结果。

源数据的读取结果中, 每个航海用途中物标是唯一的, 但多个航海用途之间会出现物标重复。读取源数据时, 没有读取物标的拓扑信息、物标之间的主从关系和物标的综合信息。

4. CARIS HPD电子海图数据解析

CARIS HPD的电子海图数据包括基本的数据集和更新[6,7]。

电子海图数据的物标存储结构见图4。电子海图数据的存储主要分为物标属性、物标关系、物标表示 (坐标) 和物标综合四个部分。不同的电子海图产品, 物标的表示存储于不同前缀的表中;基本数据集及其更新的物标表示使用相同的存储表。

电子海图数据基本读取方法是:首先读取电子海图的基本信息, 如范围、名称、比例尺、日期等信息, 然后根据这些信息, 选择相应的电子海图产品进行输出和显示。输出文件中有电子海图的基本信息列表文件, 每个版本电子海图产品的数据文件和数据集文件。

电子海图数据读取要求为:

(1) ENC产品的基本信息;

(2) ENC产品DSPM和DSID字段的主要信息;

(3) 可以读取不同版本HPD的电子海图数据, 实现版本的兼容;

(4) 源数据按电子海图版本自动读取, 一个版本一个文件;

(5) 可按范围查询电子海图数据。

HPD电子海图数据读取时使用的表为15个[4,5], 无法通过一次查询完成, 分成五步:

(1) 读取电子海图的一般数据, 如坐标系统、范围、版本、比例尺等, 主要的表有product、inactive、enc_source_extraction、productversion、productversionatt、object_class、attributeclass、enc_export_file、enctype;

(2) 读取电子海图的属性值, 这些属性值为S-57产品DSPM和DSID字段的主要信息, 如:DUNI、EDTN、AGEN等, 主要的表有productversion、productversionatt、attributeclass;

(3) 读取相应电子海图版本的物标, 使用表productobject、prodversionobject、object_class;

(4) 读取每个物标的坐标, 使用表Pnn_productpoint、Pnn_productsounding、Pnn_productcompgeom, Pnn为产品数据表的前缀;

(5) 读取每个物标的属性值, 使用表prodobjatt、attributeclass。

属性值的存储与源数据读取一样。读取电子海图数据时, 没有读取物标的拓扑信息和物标之间的主从关系。读取的电子海图基本数据集和更新都包含完整的数据, 可直接应用于显示。

电子海图数据的符号化标准为IHO S-52标准, 在符号化时, 按S-52标准根据坐标重建主从关系并正确显示, 显示结果见图5。

5. CARIS HPD纸海图数据解析

CARIS HPD 纸海图产品包括纸海图产品定义和纸海图产品数据两大部分[8,9]。

纸海图产品定义的数据结构见图6。海图定义了名称、图号等;页面定义了海图产品的图幅、页边距等;页面可由多个面板组成, 每个面板有自己独立的投影、范围和数据。

纸海图产品的物标存储结构见图7。纸海图数据的存储主要分为物标属性、物标关系、物标表示 (坐标) 、物标综合、使用图片五个部分。不同的纸海图产品, 物标的表示和文本数据存储于不同前缀的表中。

纸海图数据基本读取方法是:首先读取纸海图的定义和页面定义, 如名称、图幅等信息, 而范围需要读取所有面板的范围再合并得到;然后读取每个纸海图版本使用的面板信息;根据这些信息, 就可以选择相应的纸海图产品进行输出和显示。输出时, 每个版本的面板数据保存为独立的一个数据文件, 显示时再进行一张海图的所有面板的叠加显示。

纸海图数据读取要求为:

(1) 纸海图产品的基本信息, 如图号、标题、范围等;

(2) 纸海图产品使用的面板信息;

(3) 可读取不同版本HPD的电子海图数据, 实现版本的兼容;

(4) 纸海图产品数据按面板版本自动读取, 一个面板版本一个文件;

(5) 能读取历史版本的纸海图产品;

(6) 同时保存数据的图上坐标和WGS84坐标, 线和面还保存了屏蔽后的边线数据。

纸海图数据读取时使用的表为23个, 无法通过一次查询完成, 分成七步:

(1) 读取纸海图产品的基本信息, 主要的表有chart、chart_version、chart_version_status、valid_chart_status、chart_version_attribute、attributeclass, 读取范围时使用的表有chart_version_sheet、sheet_version_panel、panel_version、panel;

(2) 读取面板的信息, 如投影、投影参数、比例尺、页面偏移等。主要的表有panel、panel_version、panel_version_attribute、attributeclass、chart_version_sheet、sheet_version_panel;

(3) 读取相应电子海图版本的物标, 使用表product_feature、product_feature_version、object_class;

(4) 读取每个物标的坐标, 使用表PAnn_panelpoint、PAnn_panelsounding、product_feature_compositesspat、PAnn_panelcompsp、PAnn_paneltext, PAnn为产品数据表的前缀;

(5) 读取每个物标的属性值, 使用表product_feature_version、product_feature_attribute、attributeclass;

(6) 读取文本物标的文本, 使用表product_feature_version、PAnn_paneltextdata;

(7) 读取线和面的拓扑信息, 使用表PAnn_panelsegment、PAnn_panelline。

属性值的存储与源数据读取一样。读取纸海图数据时, 读取了物标的拓扑信息, 没有读取物标之间的主从关系。读取结果中至少包含两种坐标:图上坐标和实际坐标, 线和面还有屏蔽后的边线坐标。

纸海图数据分两种显示:

(1) 基于纸海图的页面显示, 坐标为纸面坐标, 拼图组成一张传统的纸质海图, 例子见图8 (23118, 新港船闸至二道闸) ;

(2) 按大地坐标显示, 拼图时使用实际坐标, 例子见图9 (23118, 新港船闸至二道闸) 。

目前纸海图的显示以面板为目录, 分点、线、面、水深、文本五层, 如有需要还可加上拓扑线层。显示的简单符号化使用了S-52符号化模块, 后期需要开发专用的纸海图符号化模块。

6. 结论

本文实现了CARIS HPD源数据、电子海图数据、纸海图数据解析和基本显示, 基本实现了HPD数据库数据读取、显示和导出, 构建了HPD数据结构与外部数据关联的通道, 进一步提高了海图数据的利用率。需指出的是, 本文模块仅实现了符号的基本显示。

基于解析引擎导出的源数据、电子海图数据、纸海图数据建立了相应的专题库[10]。源数据是正在建设的航标、碍航物、区域界线、地形岸线等专题库的基础数据, 电子海图数据、纸海图数据则用于海图产品发布和产品质量检查等。

下一步工作主要包括读取物标之间主从关系、继续完善S-52标准显示模块、开发纸海图显示模块、开发不同版本之间数据的比较模块、增加输出文件类型等。这些模块可扩展和改进HPD编辑器功能, 扩大HPD数据使用范围, 提高数据利用率, 提高各种海事测绘系统数据时效性。

参考文献

[1]Stefan Steiniger, Michael Michaud.The Desktop GIS Open JUMP:A hands-on introduction for Open JUMP 1.6.x[M], 2013.

[2]Open JUMP 1.6 Tutorial[S], HCU Hamburg, Geomatik, Uwe Dallüge, 2009.

[3]JUMP Developer Guide[J].Vivid Solution, 2003.

[4]Oracle R Database PL/SQL Language Reference, 11g Release 2 (11.2) [M], 2012.

[5]Oracle R Spatial, User’s Guide and Reference[M].11g Release2 (11.2) , 2012.

[6]A General Overview of CARIS HPD[M], CARIS, 2005.

[7]HPD Source Editor 2.9.2 Reference Guide[M].Service Pack2, CARIS, 2012.

[8]HPD Product Editor 2.9.2 Reference Guide[M].Service Pack2, CARIS, 2012.

[9]HPD Paper Chart Editor 2.9.2 Reference Guide[M].Service Pack2, CARIS, 2012.

多类型数据库 第2篇

-07-07mysql 常用数据库语句 小练习

-04-04MySQL复制的概述、安装、故障、技巧、工具(火丁分享)

2011-02-02MySQL 4.0 升级到mysql 5.0的方法

2011-11-11MySQL DBA 常用手册小结

-05-05解析SQLite中的常见问题与总结详解

2013-04-04跟着hsp一步步学mysql优化的方法

2013-12-12centos下mysql主从复制设置详解

-03-03不重启Mysql修改root密码的方法

测绘数据常见误差类型及处理方法 第3篇

关键词:测绘数据;误差;统计

由于测量原理的局限性或近似性、测量方法的不完善、测量仪器的精度限制、测量环境的不理想以及测量者的实验技能等诸多因素的影响,所有测量都只能做到相对准确。随着科学技术的不断发展,人们的实验知识、手段、经验和技巧不断提高,测量误差被控制得越来越小,但是绝对不可能使误差降为零。因此,作为一个测量结果,不仅应该给出被测对象的量值和单位,而且还必须对测量值的可靠性做出评价,一个没有误差评定的测量结果是没有价值的,测绘工作得到的数据也是如此。下面简单介绍一下测绘数据误差主要分类及原因:

一、系统误差

系统误差的特征是具有确定性, 它的来源主要有以下几个方面:

(一)仪器因素;

(二)理论或条件因素:由于测绘所依据的理论本身的近似性或实验条件不能达到理论公式所规定的要求而引起误差。例如,称物体质量时没有考虑空气浮力的影响,用单摆测量重力加速度时要求摆角θ →0,而实际中难以满足该条件。

(三)人员因素:由于测量人员的主观因素和操作技术而引起误差。

二、随机误差

在相同条件下,多次测量同一物理量时,即使已经精心排除了系统误差的影响,也会发现每次测量结果都不一样。测量误差时大时小,时正时负,完全是随机的。在测量次数少时,显得毫无规律,但是当测量次数足够多时,可以发现误差的大小以及正负都服从某种统计规律。这种误差称为随机误差。随机误差的特征是它的不确定性,它是由测量过程中一些随机的或不确定的因素引起的。例如,人的感受(视觉、听觉、触觉)灵敏度和仪器稳定性有限,实验环境中的温度、湿度、气流变化,电源电压起伏,微小振动以及杂散电磁场等都会导致随机误差。

三、过失误差

过失误差是由于实验者操作不当或粗心大意造成的,例如看错刻度、读错数字、记错单位或计算错误等。过失误差又称粗大误差。含有过失误差的测量结果称为“坏值”,被判定为坏值的测量结果应剔除不用。实验中的过失误差不属于正常测量的范畴,应该严格避免。

四、误差处理

(一)发现系统误差的方法

系统误差一般难于发现,并且不能通过多次测量来消除。人们通过长期实践和理论研究,总结出一些发现系统误差的方法,常用的有:

1.理论分析法:包括分析实验所依据的理论和实验方法是否有不完善的地方;检查理论公式所要求的条件是否得到了满足;量具和仪器是否存在缺陷;实验环境能否使仪器正常工作以及实验人员的心理和技术素质是否存在造成系统误差的因素等。

2.实验比对法:对同一待测量可以采用不同的实验方法,使用不同的测绘仪器,以及由不同的测量人员进行测量。对比、研究测量值变化的情况,可以发现系统误差的存在。

3.数据分析法:因为随机误差是遵从统计分布规律的,所以若测量结果不服从统计规律,则说明存在系统误差。我们可以按照规律测量列的先后次序,把偏差(残差)列表或作图,观察其数值变化的规律。比如前后偏差的大小是递增或递减的;偏差的数值和符号有规律地交替变化;在某些测量条件下,偏差均为正号(或负号),条件变化以后偏差又都变化为负号(或正号)等情况,都可以判断存在系统误差。

(二)系统误差的减小与消除

知道了系统误差的来源,也就为减小和消除系统误差提供了依据。

1.减小与消除产生系统误差的根源。对实验可能产生误差的因素尽可能予以处理。比如采用更符合实际的理论公式,保证仪器装置良好,满足仪器规定的使用条件等等。

2.利用实验技巧,改进测量方法。对于定值系统误差的消除,可以采用交换法、替代法、异号法等方法减小测绘数据系统误差。此外,用“等距对称观测法”可消除按线性规律变化的变值系统误差;用“半周期偶数测量法”可以消除按周期性变化的变值系统误差等等,这里不再详细介绍。在采取消除测绘数据系统误差的措施后,还应对其它的已定系统误差进行分析,给出修正值,用修正公式或修正曲线对测量结果进行修正。对于无法忽略又无法消除或修正的未定系统误差,可用估计误差极限值的方法进行估算。

(三)测绘随机误差处理

实验中随机误差不可避免,也不可能消除。但是,可以根据随机误差的理论来估算其大小。为了简化起见,在下面讨论随机误差的有关问题中,并假设系统误差已经减小到可以忽略的程度。采用算术平均值作为测量结果可以削弱随机误差。

(四)测绘数据坏值的剔除

在一列测量值中,有时会混有偏差很大的“可疑值”。一方面,“可疑值”可能是坏值,会影响测量结果,应将其剔除不用。另一方面,当一组正确测量值的分散性较大时,尽管概率很小,出现个别偏差较大的数据也是可能的,即“可疑值”也可能是正常值,如果人为地将它们剔除,也不合理。因此要有一个合理的准则,判定“可疑值”是否为“坏值”。一般来说,我们对于测绘数据应确定测绘数据的置信区间,一般为[-3σ, 3σ]这个区间,其置信概率为99.7%,即在1000次的重复测量中,随机误差超出[-3σ, 3σ]的平均只有3次。对于一般有限次测量来说,测量值超出这一区间的可能性非常小,因此常将±3σ称为极限误差。对于超出这个范围的误差数据应给与剔除。

五、结语

多类型数据库 第4篇

传统存储技术分为直接存储技术和网络存储技术。传统的服务器自带存储设备,这种类型的存储设备称为直接连接存储(Direct Attached Storage,DAS),通过小型计算机系统接口(Small Computer System Interface,SCSI)将存储设备连接到服务器上,不附带任何存储操作系统,体系简单易用,但设备分散,管理复杂,而且服务器性能易成为体系瓶颈,无法在服务器之间动态分配存储空间。网络存储系统(Network Attached Storage,NAS)是和网络连接的一种数据存储单元,在基本的磁盘阵列柜上搭载一套瘦服务器系统,通过TCP/IP网络存取管理数据,对硬件要求不高,但当网络上有其他大数据流量时会严重影响系统吞吐能力,也存在可靠性和安全性的问题,无法满足大规模存储应用[1]。

目前,国家电网公司的企业门户、营销监控、GIS、电网状态采集等应用系统需要存储大量视频、音频、图片等影像数据,这些非结构化数据文件对存储空间要求较高,但被调用的频率则相对较低。如果可以采用成本相对较低的非高端存储对这些非结构化数据进行存储,则可以有效地降低整体存储成本,缓解存储需求与成本之间的矛盾。借鉴互联网行业中被广泛采用的“云存储”技术,基于PC集群存储和分布式存储软件,能够实现以较低成本提供同样安全的海量存储服务。

云存储是云计算较为核心的关键技术之一,能够将广域范围的存储设备通过分布式技术有效集成,构建高吞吐量的数据存储平台,充分体现云计算以服务为核心价值的理念[2]。本文通过研究云存储技术和分布式文件系统的基本原理和实现方法,解决对不同粒度非结构化数据存储管理的需求;通过研究智能分级存储、高速数据读写等技术,提升分布式存储系统整体的吞吐量;通过研究副本管理、集群控制、数据迁移等技术,实现分布式存储系统的灾难恢复,上述研究内容可弥补已有分布式云存储系统存在的不足。

1 体系架构

本文提出的分布式云存储方案融合了云计算结构的理念和大数据处理的技术特性,将体系内的所有物理存储设备高效整合为统一的存储资源,将待管理的多类型数据源重组成物理分布、逻辑集中的数据资源池[3],为用户提供虚拟的存储资源,对外提供数据高性能存储和业务高速访问服务,实现分布式集群数据管理。系统内部从逻辑上可分为三层:分类存储层、数据管理层、数据服务层,分布式存储系统体系架构如图1所示。

1)分类存储层。由若干存储设备和网络设备协作组成,存储设备分为接入服务器、管理服务器和节点服务器。接入服务器负责接入所有需要访问存储系统的用户请求,根据访问请求性质和需求,分配请求到对应的存储管理服务器,最终完成所请求功能,接入服务器集群具备动态水平扩展能力、安全通道接入能力及多元化数据接口能力,如Web Service接口、API接口、HTTP接口、FTP接口等;管理服务器负责接收来自接入层服务器集群的存储访问请求,一方面是管理用户对数据的访问请求,认证客户权限,管理客户存储空间,满足客户弹性存储需求,根据客户使用情况进行弹性计费等;另一方面管理分布式文件系统和虚拟化的存储空间,以及实现数据分区、数据隔离、数据加密、数据压缩、冗余备份等功能[4];存储节点服务器主要负责数据的存放,由多个存储节点构成,通过统一的存储接口对外提供分布式文件系统高性能数据存取操作,存储节点根据需要支持的数据特性的不同,可能由普通商用服务器、磁盘阵列、光纤通道、交换机等硬件组成。这些存储设备分布在不同地域,数量众多,相互之间通过网络连接在一起,并且有统一的管理系统进行逻辑虚拟化管理、多链路冗余管理和状态监控、故障维护,共同构成存储层。

2)数据管理层。通过对底层存储设备的有效管理和调度,实现数据和基础层存储设备之间的通信连接,为用户提供数据的高效写入、读取和调用等服务,同时根据用户的需求,实现虚拟存储资源的弹性分配,并且根据集群的存储资源的已分配状况,合理有效地调度存储资源。

3)数据服务层。和普通网络的访问层类似,包含各式各样使用存储服务的客户端、软件系统或者业务平台,直接面向用户提供完善以及统一的访问接口,可根据实际业务,开发不同的接口,提供各类应用服务,实现与外部系统的交互,同时保证数据的安全性和服务质量。

2 关键技术

2.1 高效数据分类存储技术

针对文档类数据、图像、视频等复杂类型数据,分别设计基于文本索引和数据内容特征的数据处理执行单元,通过统一的调度引擎对用户的输入请求进行分解和下发,从而形成用户的数据访问请求与不同类数据间的对应关系[5]。高效数据分类存储逻辑图如图2所示。

系统结构内部采用了Infini Band交换网络,保证大量数据在节点间的高速传输。存储节点采用控制流和数据流分离的技术,保证系统吞吐量随着节点规模的增加呈线性增长。此外,系统采用动态伸缩架构实现在线增减存储节点,并根据节点的空间使用比例将负载自动均衡到不同的存储服务器,以支持多用户高并发以及高速访问。

2.2 按需服务的智能分级存储技术

针对用户存储需求在高性能、高安全性、高可靠、数据保存周期等方面存在的差异性,设计分级别的差异化存储服务,以更好地适应于不同应用需求。同时针对网络的动态性、用户访问的突发性等问题,通过全局数据视图及数据分片策略、负载动态均衡方法、多节点协同技术的应用,应对数据供需不平衡的问题[6]。

技术创新体现在以下方面。

1)基于角色的存储优化方法,对用户的要求、习惯等信息进行分析、处理,采用形式化、定量化分析方法,甚至是数据挖掘方法对用户的习惯、偏好进行挖掘,并预测其下一步存储需求,进行存储资源预留。通过高效缓存机制、资源预留机制和多副本机制等,针对用户需求进行性能优化,提高存储服务质量。

2)通过改进数据存放形式、数据布局等提高存储系统性能、降低能耗,结合用户访问情况、节点间负载均衡情况等进行数据的重新组织,使系统达到数据供需平衡状态。

2.3 海量分布式文件系统多粒度存储技术

分布式云存储系统主要用于解决大文件的存储和处理问题,因此数据块的默认大小机制和数据块元数据模型不适合用于小文件处理。而企业级存储需要解决各类大小文件的存储问题,此时需要分布式文件系统提供多粒度文件存储功能。

分布式文件系统存放小文件,将面临2个主要问题。

1)主结点内存的容量限制。分布式文件系统中的每个文件都需要在主结点中存放文件名和数据块相关的元数据信息。通常一个文件名和一个数据块的元数据信息不会超过64字节。假设文件的平均大小为2 M,每个小文件均占用1个数据块,则10 PB的小文件将产生640 G的元数据信息。若为小文件分配较大数据块存放,可减少每个小文件使用的数据块数量,降低元数据大小,但会增加分布式文件系统的内零头;若为小文件分配更小的数据块,虽然可以减少内零头,但会增加元数据的大小。为了解决这个矛盾,对于小文件的存放选择使用小数据块容量,同时使用分布式主结点分别存放文件系统元数据,从而达到平衡[7]。

2)分布式文件系统的响应时间。通常在企业中使用小文件的应用系统,多是低时延应用。对于这类应用,分布式文件系统需要作出快速响应。此时,可以考虑对文件的访问和使用频率进行跟踪,并针对高频率使用的小文件动态建立多个副本或进行缓存,以降低系统的响应时间。

2.4 高速数据读写结构设计

高速数据写入流程如图3所示。①客户端向元数据服务器发起数据写入请求;②元数据服务器根据其管理的存储节点的负载均衡情况,在合适存储节点上创建新数据块;③存储节点服务器建立成功后,将结果反馈给元数据服务器;④元数据服务器接收到成功信息后便开始备份和同步该元数据信息,同时将该存储节点信息返回给客户端;⑤客户端依据接收的存储节点信息,向目标存储节点发起数据写入请求,之后向该存储节点发送数据;⑥目标存储节点接收到数据并存放到相应数据块,同时也向其他存储节点发出备份请求;⑦当数据写入及备份均成功后,目标存储节点给客户端反馈成功信号;⑧客户端接收到成功信息之后,便完成整个数据的高速写入流程[8]。

高速数据读取流程如图4所示。①客户端向元数据服务器发起数据读请求;②元数据服务器根据其所要读取数据获取数据所在的存储节点;③元数据服务器依据所在存储节点的负载均衡情况,返回一个最适合的存储节点给客户端;④客户端根据提供的存储节点信息直接访问读取的数据文件;⑤存储节点信息依据用户所要读取的数据文件,读取对应的本地文件系统,并向客户端发送数据;⑥客户端收到数据后,即完成数据的读取。

2.5 一体化数据存储管理与访问接口设计

高速存储系统的控制流和数据流是分离的,客户端通过主备节点获取要读取数据的元数据信息,实现数据的寻址与访问。存储节点会定时将自身的存储信息上报给主节点,而主备节点定期上报整个系统的软硬件信息给监控节点,从而对数据信息进行汇总分析。系统逻辑结构如图5所示。

用户的数据访问请求被转换成多个成员检索组件所能识别的格式,经由管理服务器统一调度,将规范的访问请求分送到成员组件,最终把实际的数据访问操作以一定的格式返回给用户[9,10,11]。

3 工程应用

结合本文研究,形成基于分布式存储的多类型数据管理系统,在某电力公司开展工程应用验证,构建了以3台x86服务器作为数据节点(Data Node)、2台x86服务器作为索引节点(INode)、1台x86服务器作为管理节点(Name Node)的分布式存储系统,部署架构如图6所示,物理部署硬件配置见表1所列。该系统实现了分布式存储架构下高效的数据管理功能,满足多类型数据的集成与组织需求,以及面向上层应用的数据高速访问和检索服务,同时还支持数据节点的横向扩展能力。

基于上述运行环境,在不同并发用户情况下,开展系统性能测试,测试结果见表2所列。

测试结果显示:在相同网络环境下,本系统对大数据文件的读写访问速度是传统IPSAN网络的2~3倍,有效验证海量多类型数据的高速访问机制。

4 结语

现有数据存储普遍采用集中式的体系架构,这种架构很难应对当前不断增长的数据处理规模同时不能满足对多类型数据的高速存储,本文通过研究基于云计算的分布式存储技术和分布式文件系统的基本原理和实现方法,应用分布式技术以及软硬件一体化方法,解决超大数据规模、负载均衡等海量数据处理难题,实现高性能、高可靠、高可用、高容错、可扩展等特性,提出具备高速存储和高可靠性的海量存储一体机,同时满足了多类型数据的集成与存储管理,通过将文件分块存储,提升了分布式文件系统的数据吞吐量和系统稳定性,针对不同类型数据的访问和查询问题,分布构建数据检索的组件模块,通过管理服务器配置将分布式环境下的多个检索模块整合成为一个整体,实现不同数据源的一体化管理。上述研究内容可弥补已有分布式云存储系统存在的不足,通过在已有PC服务器集群上建设PB级的分布式云存储服务,实现旧设备重新利用。

未来可在分布式云存储服务基础上建设分布式计算框架,建设分布式企业搜索、海量日志存储分析、多媒体数据处理等新型应用,使建设智能电网成为可能,以期尽快为云计算技术在电网中的大规模应用做好储备。

摘要:文章针对大量非结构化数据密集型的应用,提出一个高性能、高可用、高可伸缩、易管理、安全的分布式云存储解决方案,能够解决大规模存储问题,集成了多类型数据的分布式高速存储结构、一体化的数据访问与管理、按需服务的智能分级存储等技术,同时能够与现有的集中式存储架构相融合,充分利用企业现有的各类存储型服务器,提供基于x86服务器集群的数据存储支撑服务,实现大数据环境下的多类型数据的集成与组织功能、海量数据的分布式存储和容错备份机制,以及面向上层应用的数据高速访问和检索功能。

关键词:分布式文件系统,云计算,云存储,数据管理,非结构化数据

参考文献

[1]张学红,刘志芳.云存储技术研究与探讨[C]//全国数字媒体技术专业建设与人才培养研讨会论文集,2011:126-129.

[2]罗志明,张大华,王电钢,等.电力分布式云存储关键技术研究[C]//电力通信管理暨智能电网通信技术论坛论文集,2013:314-318.

[3]员建厦.基于云存储技术的存储架构模型[J].计算机与网络,2013(7):64-67.YUAN Jian-sha.A data storage construction model based on cloud storage[J].Computer and Network,2013(7):64-67.

[4]祝建武.云存储在企业容灾备份中全新模式探析[J].现代商贸工业,2011(3):268-270.ZHU Jian-wu.Analysis of the new model in the enterprise cloud storage backup system[J].Modern Commercial Industry,2011(3):268-270.

[5]丁杰,朱力鹏,胡斌,等.面向多级调度管理的融合型搜索引擎[J].电力系统自动化,2014,38(3):150-154.DING Jie,ZHU Li-peng,HU Bin,et al.Fusion type search engine based on multi level scheduling management[J].Automation of Electric Power Systems,2014,38(3):150-154.

[6]丁杰,奚后玮,韩海韵,等.面向智能电网的数据密集型云存储策略[J].电力系统自动化,2012,36(12):66-70.DING Jie,XI Hou-wei,HAN Hai-yun,et al.Data intensive cloud storage strategy for smart grid[J].Automation of Electric Power Systems,2012,36(12):66-70.

[7]胡新海.云存储数据缩减技术研究[J].长春工程学院学报,2012,13(2):110-114.H U X i n-h a i.Research on clouds to rage data reduction technology[J].Journal of Changchun Institute of Technology,2012,13(2):110-114.

[8]谭霜,贾焰,韩伟红.云存储中的数据完整性证明研究及进展[J],计算机学报,2015,38(1):164-177.TAN Shuang,JIA Yan,HAN Wei-hong,et al.Research and development of data integrity in cloud storage[J].Journal of Computer Science,2015,38(1):164-177.

[9]王强,李雄飞,王婧.云计算中的数据放置与任务调度算法[J].计算机研究与发展,2014,51(11):2416-2426.WANG Qiang,LI Xiong-fei,WANG jing,et al.Data placement and task scheduling algorithm in cloud computing[J].Computer Research and Development,2014,51(11):2416-2426.

[10]王晟,赵壁芳.面向云计算的数据管理技术研究[J].电脑知识与技术,2012,8(13):3209-3211.WANG Cheng,ZHAO Bi-fang.Data management technology for cloud computing[J].Computer Knowledge and Technology,2012,8(13):3209-3211.

Sybase的数据类型 第5篇

1.字符类型

Char(n) VarChar(n)

2.数值类型

整数类型——Integer SmallInt TinyInt

浮点类型——Real Float Number[P,S] Decimal[P,S]

货币类型——Money SmallMoney

3.日期/时间类型

Datetime SmallDatetime

两者时间部分的精度不同,前者精确到分,后者精确到1/30秒,

4.文本和图像类型

Text Image

5.二进制数据类型

多类型数据库 第6篇

自动增长的数据类型是一种在一定条件下自动增加的数据类型,在数据库程序开发中具有广泛应用,但IB6.5数据库并没有该类型的变量。现在常用的数据库如Oracle、SQL Server、My SQL等均增加了该数据类型。本文通过使用IB6.5中的触发器和生成子的功能,实现了一种免维护的自增变量。

1 IB6.5简介

1.1 IB6.5的部分特性

Borland推出的IB有两个版本:一个是基于开放源代码的IB6.01;另一个是商业产品IB6.5。2002年底推出IB7.0,6.01版本可以免费获得而且免费使用IB7.0。

Borland将IB定位于“跨平台的嵌入式数据库”。它的跨平台性体现在:

(1)IB几乎可以完美地运行在几乎所有当今流行的操作系统上,其中包括所有的Windows平台(Windows 98、Me、NT4.0、2000、XP)、大部分Linux平台(RedHat、Mandrake、SuSe、Turbolinux)和Solaris平台。操作系统平台的独立性一方面保证了数据库的可移植性,另一方面也降低了成本。

(2)开发工具及连接的多样性和灵活性上。

1.2 触发器(Trigger)

触发器是IB数据库中非常灵活的组成部分,它由触发器头和触发器体组成。一个触发器必须和一个表或视图相关联,我们永远无法显式地调用一个触发器,这也是为什么容易犯错误的原因之一。

触发器头中包含:触发器名、表名、定义触发器何时触发的语句。

触发器体中包含:

(1)可选的局部变量列表(包括数据类型)。

(2)以IB存储过程和触发器语言写成的语句块,以BE-GINEND作为块的开始和结束标记。这些语句将在触发器触发时得到执行,语句块可以嵌套。

由于IB数据库本身的限制,它并不直接支持自动增长(Auto-Increment)数据类型,所以我们需要使用生成子配合来实现这一功能。

2 自增变量的实现方法

生成子提供了这样一种机制,可以为数据库中的表提供唯一的序列号,这一点和自动增长类型使用最广泛的地方即提供一个唯一的序列号(流水号)作为一个表的主键非常相似。IB会自动管理生成子的当前值,以保证不出现重复值,且数据库中生成子的数目是不限的。

通过创建不同的生成子,可以实现开发应用过程中各种流水号的计数功能,但生成子本身无法作为变量使用。IB6.5提供了对生成子的读取功能。在数据库提供的触发器中作一些简单的变换,就能实现各种序列号的数据格式,通过触发器本身与数据记录的相关性特性,在记录增加时,自动将新的序列号赋值给相应的字段,从而实现该字段的自动连续取值功能(自增长)。

(1)生成子的创建

Create Generator Set_SortCode;

(2)创建应用数据库表

(3)创建基于上表的触发器

以上四项工作均可在IB6.5的Interactive SQL中直接运行上述语句实现。当在DeviceBook表中进行插入操作,IB则会自动生成一个SortCode值,且不会重复。

3 测试用例

上述程序中参数ParamByName('p1').AsInteger虽然被赋值1,但在插入记录时触发器会自动取值,相应生成子自动将其修改掉,从而保证帐目分类编号与生成子的当前值一致。

但在插入过程中出现异常回滚时,笔者发现生成子仍然自动加了1,而没有回滚,这是使用IB6.5的一点遗憾。因此在异常回滚时,得重新修复一下生成子,这样才能保证编号的连续性。

4 结束语

通过生成子和触发器可以很方便地在IB6.5中实现自增长数据类型,且创建过程是一次性的,系统会自动维护,这将给程序开发和应用带来极大的便利。通过对自增变量的不同转换,可以实现诸如流水号、帐号等各种其它自动增长变量的应用。

参考文献

高空探测气象系统数据类型分析 第7篇

高空气象测报工作的主要内容和要求是为气象部门提供准确、及时、全面的气象信息。这些信息直接影响着气象部门的工作人员对气象的预测和判断情况。全面的高空探测资料的积累为气象部门的工作人员在分析高空气象特征和变化情况中占据着重要的地位, 是气象工作发展的基础和保证。高空气象测报工作的内容较为繁杂, 对工作人员来说也是一项较大的挑战。气象测报工作的开展离不开设备和数据的支撑, 所探测的结果最终都会以数据的形式存在, 全面、详细的数据积累是气象工作顺利进展的基础。邢台市气象局1953年建立, 现位于邢台市守敬北路76号, 北纬37°04′, 东经114°30′, 海拔高度76.8 m。本文通过对邢台市高空探测气象系统数据处理方法的分析, 分析其类型, 为邢台市气象工作更好的发展做出贡献。

1 高空探测气象系统数据类型分析

高空探测气象系统数据类型可分为2大类, 分别是索取数据和规定数据。其中索取数据根据其工作内容又可以分为原始数据、要素数据、记录数据、资料数据和经验数据部分。规定数据分为订正数据、固定规定数据和查询数据3部分。固定数据通常为索取数据的完成提供辅助的作用。

1.1 索取数据

索取数据时通过人工劳动来获取数据的一种方法。索取数据需要通过人工完成的观测、计算以及转化等工作。索取数据具有灵活、可变动性大等特征。人为控制因素较强。索取数据的内容主要有原始数据、要素数据、记录数据、资料数据和经验数据组成。

1.1.1 原始数据

原始数据, 是指在气象测报工作同通过感觉器官在第一时间里得到的数据。工作人员可以通过各种有效的仪器设备来估测数据。甚至可以通过听觉获取。原始数据的获取具有一定的人为控制因素。因此, 在数据获取的过程中较为灵活但是也会经常存在一些弊端。

1.1.2 要素数据

要素数据建立在原始数据的基础之上。把获取出来的原始数据通过换算和整理得出物理量的要素数值。常用的要素数值有气压、气温、湿度量及地面的气象环境的具体情况等。

1.1.3 记录数据

记录数据主要的作用是建立一个完善的探测气象信息的数据库。记录数据也需要对原始数据进行转化和处理。记录数据主要记录的内容有高空上气压、气温、湿度在规定层之间的平均符号。

1.1.4 资料数据

资料数据是气象测报工作中所有最终数据的保存, 资料数据具有一定的准确性和全面性, 可以直接为气象工作部门提供的数据参考依据。但是资料数据并不完全包含气象资料的所有信息内容。它主要包括各种数据报表等, 具有专业性和准确性。

1.1.5 经验数据

经验数据, 是指气象探测的工作人员在日常的工作中遇到的各种问题和处理问题方法的积累。经验数据完全来源于全体工作人员的工作实践, 自己从工作中学习收获创造出来的方法。经验数据完全结合现实情况对问题进行剖析和解决。

1.2 规定数据

规定数据在特性在具有一定的约束性, 没有索取数据的灵活。规定数据主要是通过人工制作的固定的表格和要求进行的数据积累。获取信息的范围不够广泛。模式相对比价单一固定。因此, 成为规定数据。规定数据有订正数据和固定数据以及查询数据几部分组成。

1.2.1 订正数据

订正数据主要内容是对设备探测出来的误差内容进行订正, 包括一些记录中的订正等。订正数据具有一定程度的范围控制, 决定着仪器是否能够使用。

1.2.2 固定数据

固定数据是工作人员在工作中建立的数据模式。如放球时间和升速控制的数据等。主要的作用是维护工作过程中的一致性和有效性。保证所获取资料的有效性等。

1.2.3 查询数据

查询数据, 是根据工作人员在工作中经常要用到的表格建立起来的一种快速查询数据的方式。查询数据的制定主要依据工作人员的具体工作情况, 数据查询的模式也有很多种。主要的作用就是为工作人员在查询数据时候提供方便。

2 数据整理的几种方法

2.1 原始数据直接成为资料数据

目前, 原始数据要经过一系列的过程之后才可变为资料数据。期间需要对原始数据进行处理变成记录数据和要素数据等过程。虽然原始数据是决定要素数据和资料数据的因素, 但他们之间并没有很大的联系。在数据转变的过程中可以省去不必要的过程来提高效率。

2.2 用计算机处理资料数据

资料数据主要的作用是为工作人员提供工作的参考依据。由于高空气象探测工作比较繁杂, 数据内容比较多。以至于这些资料形成的数据库变成了计算机行业关注的焦点。如果可以用计算机来处理这些数据, 在速度和准确性上都会有一定的跨越, 对提高工作效率和准确性来说提供了很大的帮助。规定数据对于索取数据来说, 具备较强的帮助作用。根据规定数据和订正数据具有固定性的作用, 可以将这两项数据整理首先纳入计算机程序当中去。规定数据完全是依照计算机语言来设置, 因此在操作过程中具有高效性和准确性。另外, 在不断工作实践的过程中, 应当把积累出来的经验更多的整理到表格当中去使用。

3 结语

高空气象探测在气象工作中占据着主导地位。因此必须要保证高空测报数据准确性和全面性。目前, 邢台市气象局在不断加大对高空测报工作精力的投入。使气象工作的开展顺利进行, 但在工作细节中, 还存在着较多的不足之处, 仍然需要不断努力。由于高空气象探测的特殊性质, 对工作人员的要求也随之增加。在数据处理的方面, 要不断的探索新的途径, 寻找高效, 又灵活的解决问题的渠道。关于资料数据和订正数据整理等工作, 可以采用计算机等设备来辅助完成。此外, 要有效地解决工作中的效率问题和准确性不足的问题。邢台市气象探测数据整理的工作还有很大的进步空间。各级工作人员应该加强沟通交流, 共同取得气象工作的进步。

摘要:高空气象探测工作是气象工作的基础。全面的高空探测信息和资料为后期气象业务的良好开展起着非常重要的作用。准确的高空探测信息能够反映天气的变化情况, 并对环境的特点进行分析。为气象工作更好地为民服务提供了有力的依据。基于此, 通过对邢台市高空探测气象系统数据处理的方法, 并对其类型进行了深入的分析。为高空探测气象更好的发展提出了建议。

关键词:高空气象探测,系统数据

参考文献

[1]中国气象局.高空气象探测规范[M].北京:气象出版社, 2002.

多类型数据库 第8篇

关键词:数据类型,大小端字节序,数据流,词法分析,编译

著名计算机科学家尼古拉斯.沃斯(Niklaus Wirth)提出一个公式:数据结构+算法=程序。程序主要包括两方面的内容:

1)数据的描述。程序中数据的类型和数据的组织形式(数据结构)。

2)操作的描述。操作步骤(算法)。

数据是操作的对象,操作是对数据进行加工处理,得到期望结果。算法处理的对象是数据,数据以某种特定形式存在,如整数、实数、字符等。不同数据之间还存在某些联系,如字符数组由若干字符组成等等。数据结构是指数据的组织形式,如数组就是一种数据结构。处理同一类问题,如果数据结构不同,算法也会不同,而数据结构正是以数据类型的形式出现的。

1研究内容

1.1数据类型

C语言中数据有常量和变量之分。程序中用到的所有数据都需要指定数据类型,包括基本类型,构造类型,指针类型和空类型。其中基本类型有整型、字符型、实型。构造类型是由基本类型的数据按一定规则组成的,包括数组类型、结构体类型、共用体类型,和枚举类型。这些数据类型能构成更复杂的数据结构,例如指针和结构体可以构成栈、树、图等复杂的数据结构。

C语言的数据类型如图1:

1.1.1整型

整型数据在内存中是以二进制形式存放的,任何整形类型的对象x的底层二进制都是这样的,假设有n位存储空间,dn-1dn-2…d2d1d0,其中每一个d为0或者1。对x计算等价的十进制数值,与x是有符号类型还是无符号类型相关。

如果x是无符号类型,则其十进制数值为

因此,能够用无符号整数表示的最大(正)值是:

如果x是有符号类型,则其十进制数值为

因此,能够用有符号整数表示的最大(正)值是:

根据数值范围将整型分为短整型(short)、整型(int)、长整型(long)、超长整型(long long),如表1。

1.1.2字符型

字符常量是用单引号括起来的一个字符。字符常量只能是单个字符,不能是字符串。转义字符是以斜线“”开头,后跟一个或几个字符,具有特定的含义。

字符变量用来存放字符常量,只能存放一个字符,是将字符相应的ASCII码放到存储单元中,它的存储形式与整数的存储形式类似,所以一个字符数据既能以字符形式输出,也能以整数形式输出。

1.1.3 实型

实型数据又称为浮点型数据。实型数据的存储方式是按照指数形式存储。实型数据被分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。

实型数据分为单精度型(float),双精度型(double),和长精度型(long double),常用的是单精度型和双精度型,如表2。

1.1.4数组类型

数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型,用一个统一的数组名和下标来唯一地确定数组中的元素。或者说,数组是一组连续的内存单元,这些内存单元具有相同的大小,每一个单元被称为数组元素或者数组项。

一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型,或是指针类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构体数组等各种类别。其中,字符串作为字符数组存放,字符串结束标志以字符‘’代表。系统对字符串常量自动加一个‘’结束符,作为一维数组。

数组中各元素有先后顺序,它们在内存中按照这个先后顺序连续存放在一起。

1.1.5结构体类型

在一个组合项中包含若干个类型不同或者相同的数据项,这样的一种数据类型称为结构体类型。根据不同的编译器,内存存储会有所不同,在存储结构体时会按照内存对齐进行相关处理,用户可以通过预处理命令#pragma pack(n), n=1,2,4,8,16来改变对齐系统。

1.1.6共用体类型

几种不同类型的变量存放到同一段内存单元中,也就是使用覆盖技术,几个变量互相覆盖。这种使几个不同的变量共占同一段内存的结构,称为共用体,也称之为联合体。共用体变量的地址和它的成员的地址都是同一地址,共用体的长度以成员长度中最大的为准。

1.1.7枚举类型

如果一个变量只有几种可能的值,可以定义为枚举类型。“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围。定义枚举类型后,可以声明该枚举类型的变量,然后使用该变量存储枚举元素的数值,以防止用户提供无效值,使代码更加清晰。

1.1.8指针类型

变量的指针就是变量的地址。存放变量地址的变量是指针变量,用来指向另一个变量。C语言规定所有变量在使用前都需要定义和指定类型,并按此分配内存单元,而指针变量是专门用来存放地址的,需要定义为指针类型,其基类型用来指定该指针变量指向的变量的类型。

1.1.9空类型

用void定义空类型,或者称为无类型。一般不要求返回函数值的函数,定义为void类型,保证正确调用,减少程序出错。函数的参数如果是任意类型指针,应声明为void *类型 。

1.2大小端字节序

因为在计算机系统中,以字节为单位,每个地址单元都对应着一个字节,一个字节为8bit。C语言中除了8bit的char之外,还有16bit的short型,32bit的long型等。对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,就存在如何将多个字节安排的问题,所以就有了大端存储模式和小端存储模式。

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由小向大增加,而数据从高位向低位放;

小段模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,高地址部分权值高,低地址部分权值低。

判断计算机的大小端字节序,可以使用共用体方法。union endian{ short sh; char c; }en; en.sh=1; printf( “ en.c=%dn ” ,en.c);

因为endian共用体只有一片内存,所有成员共享此片内存区域,并且大小为最大的成员所占的空间,所以endian共用体内存为2个字节。

先给短整形变量sh赋值为1,用字符型的变量c从共享内存中取数据,只能取得低字节数据。如果是小端字节序,内存中存放数据为0x0001,c取得的数据是0x01,打印结果是1,如果是大端字节序,内存中存放数据为0x0100,c取得的数据是0x00,打印结果是0。

如果数据存储的大小端字节序和计算机的大小端字节序不同,就要进行大小端转换,如果是2个字节,16位,可以使用宏定义的方法。

#define CONVERT_ENDIAN_16(x) (((x&0xff) <<8)|((x&0xff00)>>8))

如果是4个字节,32位,

#define CONVERT_ENDIAN_32(x)

(((x&0xff) <<24)|((x&0xff00) <<8)|((x&0xff0000) >>8)|((x&0xff000000)>>24))

2 数据流读取应用

2.1 需求描述

在开发人员进行系统开发时,经常遇到这样的情况,需要查看二进制数据流信息,通常采用的方法是,显示二进制数据转换后的十六进制数据,选取若干位,利用计算器进行换算,得到可读的十进制。或者通过编程实现读取该数据流,每次进行重复编译,再打印得到结果。有没有一种方法可以实现选择数据流,得到直接可读的结果呢?这样就可以大幅地提高调试效率。以32位机器,文件数据流为例,开发了应用。

首先进行用户界面设计,输入将要读取的数据流文件名和读取位置、变量名、类型,进行读取,显示结果。其中输入位置、变量名和类型的部分如图2。

2.2基本流程。

处理界面列表,以结构体方式存储列表{int位移量,char[…] 变量名,char[…] 类型名},建立结构体数组。

2.2.1打开文件

使用fopen函数。

FILE *fp=fopen (文件名,使用文件方式);

文件名为要读取的二进制流文件。

使用文件方式为读取二进制型。

2.2.2文件定位

使用fseek函数,改变文件的位置指针。

fseek (文件类型指针,位移量,起始点)

“起始点”选择“文件开始”。

“位移量”指以“起始点”为基点,向前移动的字节数。这里填写用户界面表格中的起始位置+位移量。

2.2.3读文件,并取得数据。

使用fread函数。 freadbuffer,size,count

fread(buffer,size,count,fp);

buffer:是一个指针,这里是读入数据的存放地址。size:要读取的字节数。

要进行读写多少个字节的数据项。

fp: 文件。

根据列表结构体的位置和类型,读取相应长度的字节数据,放入相应类型变量的地址。如果是char型数据读取1个字节,如果是short型读取2个字节……等等,使用sizeof(数据类型)函数,即可得到数据类型字节数量,由if…else…语句完成字段类型判断和数据读取,并转变成字符串数据,使用sprintf()函数。

char str[...]={0};

sprintf(str,”%d”,…);

将字符串与前面定义的列表结构体数组对应打印,即可得到用户界面列表的数值结果。

2.2.4关闭文件

使用fclose函数关闭文件。

fclose(文件指针)

2.3关键技术

大小端字节序。在用户界面表格中增加一列“大小端”,用户指明数据流大小端字节序,否则按照计算机的大小端字节序进行解析。

数组。针对于数组的解决方案,同样需要在用户界面表格中增加一列数组长度字段。如果是一维数组,可以采用循环方式处理,在变量名后面注明下标,按顺序处理数组长度的数据。如果是多维数组,需要记录维数,并且记录每一维度的数组长度,之后采用递归算法,打印出变量下标,和顺序处理多维数组的数据。

结构体文本文件。如果有结构体文本文件,不再需要输入用户界面表格,只要在用户界面上添加一处输入结构体文件的编辑框,选择结构体文件,就可以进行,但需要对结构体文件进行词法分析,从左至右逐个字符地对文件进行扫描,识别出单词符号,包括:

1)关键字,例如typedef,define,struct,int等。

2)标识符,如变量名,数组名等

3)常数,各种类型的常数,如2,5等

4)运算符,如+,-等

5)界符,如逗点,分号,括号等。

按照结构体文件解析结构体,需要处理以下内容:

)将注释屏蔽 。

2 )将“ define ”宏定义内容进行代换。

3 )将“ typedef ”声明的类型进行代换。 4#include

4 )包括“ #include ”所包含的文件内容,一起进行解析。

)结构体中出现结构体变量内容,采用递归算法解析。

将解析的结构体文件内容按照类似用户界面表格样式的结构体数组存储,进行顺序读取数据流。注意文件结构体的对齐方式与数据流一致。

3 结束语

不进行重复再编译的,应用数据类型进行读取,除了读取文件数据流,也可以应用于实时读取网络传输的数据流,进行校验,同时也能将例如数字文本转换成整型或实型数据用于网络数据流发送检验。本应用大幅提高了调试效率,缩短了时间,可用于开发和测试等诸多实践中。本应用没有涉及共用体内容,将在下一步工作中继续完善。

参考文献

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2010.

[2]JASMIN B,MARK S.闫锋欣,张雪敏,张君施,等译C++Qt设计模式[M].北京:电子工业出版社,2012.

[3]肖军模.程序设计语言编译方法[M].大连:大连理工大学出版社,2000.

[4]张素琴.编译原理[M].北京:清华大学出版社,2012.

[5]陈火旺.程序设计语言编译原理[M].北京:国防工业出版社,2000.

[6]梁建军.C语言数据类型转换的探讨[J].电脑知识与技术,2010,6(23):6485-6487.

[7]董鑫正.C语言教学中函数参数传递问题探讨[J].电脑知识与技术,2010,8(7):1688-1689,1701.

基于VB的参数数据类型匹配问题 第9篇

在使用Visual Basic编写应用程序时,往往要将应用按功能划分为若干个子模块,然后采用过程来实现。这就要求编程人员必须对过程调用中参数传递时,实在参数与形式参数相结合时的数据类型形式有深入的理解。有些初学者对这个知识点理解不透,使用起来非常困难,在设计程序时常常出现“ByRef参数类型不符”的错误。Visual Basic中数据类型丰富,使用起来灵活多变,在不同的场合这些数据类型之间还能相互转换。本文针对这一问题结合实例,对参数传递中数据类型的一致性进行深入的分析与阐述,这对于理解和掌握Visual Basic过程调用中的参数类型的匹配十分重要。

2 参数传递时形参与实参数据类型相结合的分析

参数传递时,要求形式参数与实在参数的个数、类型、位置一一对应,但“类型”具体如何对应?具体问题还要具体分析。

2.1 实参与形参的数据类型相同

如果形式参数与对应实在参数的数据类型完全一致,则不论是“传数值调用”还是“传地址调用”,传递时均不会出现问题。但以下两种情况很容易引起误解,要特别注意。一是实在参数未定义类型,系统自动将它定义为Variant类型;二是实在参数已定义,但定义方法不对。具体情况如下:

运行时,变量i和j均会出现“ByRef参数类型不符”的编译错误提示。这里的i未定义类型,通过赋值转换使得变量i的值为整型常量3。虽然如此,但系统自动认为i为变体型,导致与过程中的形参x类型不相同。程序中的变量说明语句,只是对k定义成了整型,并未对前面的j进行整型定义,因此变量j还是变体型,错误情况与变量i相同。

因此很多书上说,参数若按地址传递,则要求实参的数据类型与形参的数据类型完全相同,否则Visual Basic就会报告错误。这种说法有点不准确,应予以修正,详细的在2.3中再讨论。

2.2 实参与形参的数据类型相容

当按照“值传递”时,实参和形参类型可以不同,但是必须要能够由实参类型自动转换为形参类型。

如果实参和形参是相近数据类型,例如数值型,包括Integer型、Long型、Single型和Double型等,则Visual Basic能方便的完成类型转换后传递,因为容易理解,所以不作讨论。

如果实参和形参是如图1所示的一对常用数据类型,则调用时类型能够相互转化吗?

1)数值型可以自由转换为字符串型,转化规则为:数值直接加上双引号变为数字字符串。2)数字构成的字符串可以转换为数值类型,否则会出现“类型不匹配”的错误。但数字串中含有字母D或者E的,如果符合科学计数法的表示,则也可以转换。3)只有“True”或者“False”字符串可以转换为逻辑型,转化规则为:统一变为True或者False,并且不论串中“True”或者”False”大小写情况如何。4)逻辑型可以自由转换为字符串型。转换规则:True和False分别加上双引号,变为"True"和"False"。5)逻辑型可以自由转换为数值类型。转换规则:True变为-1、False变为0。3)数值类型可以自由转换为逻辑型。转化规则:0变为False、非0变为True。因此如果是传数值调用,它们之间是可以相互转化完成虚实结合的。

2.3 实参与形参的数据类型不同

如果实参与形参的数据类型不相同,也可以通过类型转换函数将其变为同一数据类型进行传递。这些函数有很多,诸如Str、Val、Chr、Asc、CBoolean、CLng、CByte、CSng、CDbl、CCur、CDate等等。如果这些函数直接用于实参变量中来传递,则实参是表达式,传递的实质是“传数值调用”;如果将变量通过函数转换后放入另一变量,将转换后的变量作为实参传递,则可实现“传地址调用”。

再来分析一下前面提到的问题,实参变量是Variant型、形参变量是Integer型,则传址调用时会出错。那么,通过传址调用实现实参与形参的同时变化,真的是要求两者数据类型完全相同吗?经过上机操作检验发现,如果反过来,实参变量是Integer型、形参变量是Variant型,可以实现传址调用。进一步上机验证可以得到如下观点,如果形参变量是Variant型,则实参变量不论是何种类型,均可实现传址调用。

下面来分析一道实例题目:在应用程序中用“Private Sub Sub1(X As Integer,Y As Single,Z As Variant)”定义了子程序过程Sub1。调用过程Sub1的实参变量I,J,K均定义为Integer型、L定义为逻辑型,能用Call正确调用过程Sub1的是哪些?

(1)实参I,J,K与形参X,Y,Z均为传地址调用。I和X均为整型可以传递;形参Z为Variant,按照前面的观点,虽然与之对应的K是整型,但可以实现传址调用;由于J为Integer、Y为Single,不能实现传地址调用,因此该答案是错误的。(2)实参3.65为值,与形参Y匹配时将按值传递,因此该答案正确;(3)虽然实参3.14对应的形参X为Integer、实参234对应的形参Y为Single、实参L对应的形参Z为Variant,但由于X和Y都是按照值传递,因此3.14将转化为3、而234可以直接赋给Y,逻辑变量L可以与Z传递,因此该答案正确;(4)由于实参“245”和“231.5”均为字符串常量,因此与其对应的形参X、Y将按照值传递,而数字字符串是可以转化为数值类型的,因此该答案正确。(5)K作为实参,与形参X和Z分别进行两次传地址调用,所以形参X和Z中的任意一个在过程中发生改变,都将影响到K的值,因此该答案也正确。(6)虽然实参True对应的形参Y为Single,但由于是传值调用,因而True将转化为-1赋给Y,最后的答案应该也是正确的。

从表面看来,这六个答案中的实参与形参的数据类型均不一致,因此会误认为所有的答案均是错误的。但是,实际上经过细致分析,得到的结论是:只有(1)是错误的,其余的均正确。

2.4 正确判定实参表达式的数据类型

假设已经定义b和c为整型变量,执行语句b=6:c=6.5:a=b=c后,将a作为实参传递,那么a是什么类型呢?执行a=b=c语句时,首先判断b=c,c赋值为6.5,由于c声明为整型,按照4舍6入5逢双的原则,c的值最后为6,比较b和c的结果为True,然后将b和c比较的结果赋值给a,a没有定义类型,赋值结果最后为逻辑型True。但如果c没有定义类型,执行c=6.5后,变量c是Single型吗?答案是否定的,经过上机验证c是Double型,不可思议吧。再来判断一下下面几个表达式的类型:

经过上机测试得到:(1)4/2结果为Double型,与36求和后,最终结果还是Double型。(2)Fix函数括号中的参数如果为实型,则运算后为Double型,因此求和后为Double型。(3)整除运算结果为长整型,与整型值57求和后还是Long型。(4)数字字符串与整型常量求和为Double型。(5)Cint(356.2)取整得到整数356,与21进行字符串连接运算,结果为String型。(6)求余运算时,要求两边均为整型,所以4.5化成4、1.5化成2,结果为Long型值0。

进一步上机验证能得到如下结论:一个实型常量值在Visual Basic中是作为Double型来运算处理的;乘“*”和除“/”的运算结果是Double型,整除“”和求余“Mod”的运算结果是Long型;字符串的“&”连接运算结果为String型,对于数字字符串的“+”连接运算来说,如果其中有一个参与运算的是数值型,则结果为Double型;Cint取整运算结果为Integer型,而Fix和Int以及Round取整函数,只有括号中的参数是整型时才返回Integer型,若括号中是实型值则结果为Double型。

3 结束语

在程序设计过程中,若遇到虚实结合,就要注意实参与形参变量的类型问题。如果两者数据类型相同,则不论是传值还是传址调用,都能够正常进行。如果两者数据类型不同,当是传值调用时,只要实参与形参的类型相容就可以调用;但若是传址调用,两者数据类型不同通常就会出错,只有一种情况例外,那就是形参为Variant型。Visual Basic中,表达式的数据类型的判定不能想当然,一定要上机慎重验证才能得出正确的结论。

摘要:阐述了在参数传递过程中,实参与形参数据类型的一致性问题,分析了不同数据类型之间的转换规则,并结合实例给出了规范化的有效结论。

关键词:参数传递,数据类型,转换规则

参考文献

[1]刘模群.Visual Basic程序设计实用教程[M].北京:电子工业出版社,2009.

[2]朱伟.C语言中三种数据类型转换之比较[J].办公自动化杂志,2008(10):24-26.

[3]牛又奇,孙建国.新编Visual Basic程序设计教程[M].苏州:苏州大学出版社,2007.

[4]侯传宇.论C语言教学中数据类型转换的问题[J].巢湖学院学报,2008,10(3):131-134.

多类型数据库 第10篇

关键词:遗传算法,层次化聚类,目标函数,优化

聚类是根据数据的不同特征,将其划分为不同的数据类。它的目的是使得属于同一类别的个体之间的距离尽可能的小,而不同类别上的个体间的距离尽可能的大。数据的特征值多种多样。二元变量只有两个状态,非此即彼;区间标度变量是一个粗略线性标度的连续变量,如温度、高度、重量等;标称变量则由多个离散值组成,如地图颜色可能有五个状态:红色、黄色、绿色、粉红色、蓝色。作聚类分析时,可能用到一种变量,也可能是多种变量的组合。传统的聚类分析是一种硬划分,它把每个待辨识的对象严格地划分到某类中,具有非此即彼的性质,因此这种类别划分的界限是分明的。而实际上大多数对象并没有严格的属性,如何对混和属性数据进行聚类分析是件极具挑战性的工作,也是目前聚类分析研究的主流[1]。

聚类算法可分为以下几类[2]:

1)划分方法:给定一个包含n个对象的数据集,将其划分为k个子集,其中每个子集均代表一个聚类;

2)层次方法:通过分解给定的数据集来创建一个层次,根据层次分解形成的方式采用自上而下或自下而上的方法进行聚类;

3)基于密度方法:实际上就是不断增长所获得的聚类,直到“临近”密度小于一定阈值为止;

4)基于网格方法:将数据集划分为有限数目的单元以形成网格结构,所有聚类操作均在这一网格结构上进行;

5)基于模型的方法:为每个聚类假设一个模型,再去发现符合相应模型的数据对象。文章主要分析划分方法。

2 聚类分析的数学模型

假设X={x1,x2,…,xn}是待分析的对象全体,也可称为论域或样本集合。X中的每个对象(也可称为样本)(1≤i≤n)常用有限个参数值来刻画,每个参数值用于刻画xi的某个特征(属性)。于是对象xi就对应着一个向量P(xi)=(xi1,xi2,…,xim),其中xij()是xi在j个特征上的值,P(xi)称为xi的特征向量或模式向量。聚类分析就是分析论域或样本集合X中的n个样本所对应的模式矢量间的空间距离及分散情况,按照各样本间的距离远近或相似程度把x1,x2,…,xn划分成k个不相交的模式子集X1,X2,…,Xk,并要求满足下列条件:

样本xj(1≤j≤n)对子集xi(1≤i≤k)的隶属度关系可用隶属度函数表示为:

其中,隶属度函数必须满足条件Wij∈Mhk。也就是说:

1)要求每一个样本能且只能隶属于某一类。

2)要求每个子类都是非空的。

在这个表达式中是用于约束每一个样本能且只能属于某一类这一条件的;用于约束"每个子类都是非空的"。如果将以上定义的隶属度函数wij扩展到[0,1]这个区间即为模糊聚类的定义。模糊聚类又称为软聚类,相应的非模糊聚类也可称为硬聚类。

3 混合类型数据聚类算法的目标函数

令X={x1,x2,…,xn},表示有n个样本的数据集,其中xi=[xi1,xi2,…,xim]T表示第i个样本的m个特征值。令K是一个正整数,那么对X进行聚类的目的就是要找到一个划分,将X中的目标分为K个类。

为了找到最好的一个划分,要求选择一个聚类难则来指导搜索划分。下面我们要寻找一个目标函数作为聚类准则。当前较为流行的目标函数有[3]:

当样本同时具有数值和类属混合特征时,样本的特征矢量用xi=[xri1,…,xril,xci,l+1,…,xcim]T表示,混合类型目标xi和xj之间的相异胜测度可由下式计算:

公式右边第一项为欧几里德距离平方,用于计算数值型属性的相似性。第二项为二值型属性特征的相似性测度。其值为0和1。权值用来调节两种特征在目标函数中的比例,以避免偏向任何其中一个特征。

4 基于遗传的混合类型数据聚类算法

利用遗传算法可以进行全局的并行搜索,避免出现局部最优以及提高搜索效率问题。

4.1 编码和初始种群的生成

编码即遗传算法中样本的表示。编码方法有很多,如二进制编码、实数编码、符号编码等等。针对本文的问题,对矩阵W进行编码。

设n个样本分属于K类,则样本空间可以表示为:

X=(x1x2…xn)

其中xi取整数值1-K中的一个,表示第i个样本属于第xi个类。

4.2 选择算子的实现

遗传算法使用选择运算来实现对群体中的个体进行择优选择操作:适应度数值高的个体被遗传到下一代群体中的概率较大;适应度低的个体被遗传到下一代群体中的概率较小。通过调节遗传选择概率数值来获得较好的遗传进度。本文采用类似锦标赛选择法,首先,随机地从种群中挑选一定数目的个体,然后将最好的个体选择作为父代个体。重复进行这个过程直到选到足够的个体。锦标赛选择的参数为竞争规模Tour。适应度函数如第3小节所示。

4.3 交叉运算

交叉运算是指在父代个体中选择两个染色体,然后对其中的部分基因按某种方式相互交换,从而形成两个新的个体。交叉运算是遗传算法区别于其他自然计算算法的重要特征,它在遗传算法中起关键作用,是产生新个体的主要方法。由于需要聚类的数目一般不会很大,染色体长度也不会很大,因此本文采用单点交叉。单点交叉又称为简单交叉,它是指在个体编码串中随机设置一个交叉点,然后在该点相互交换两个配对个体的部分基因。本文采用的是单点交叉的形式。交叉点随机选择,但介于1-K之间。

如:父代为1,5,8,9,2,3,7,6,4,10选择交叉点为7则7与10-7进行交叉。得到的子代为:1,5,6,9,2,3,7,8,4,10。

4.4 变异运算

变异运算是用来模拟生物在自然的遗传环境中由于各种偶然因素引起的基因突变现象,它以很小的概率随机地改变遗传基因的值。

在染色体以二进制编码的系统中,它随机地将染色体的某一个基因由1变成0,或由0变成1。通过变异操作,可确保群体中遗传基因类型的多样性,以使搜索能在尽可能大的空间中进行,避免丢失在搜索中有用的遗传信息而陷入局部解,获得质量较高的优化解答。遗传算法中的变异运算是产生新个体的辅助方法,它是必不可少的一个运算步骤。变异本身是一种局部随机搜索,与选择算子结合在一起,保证了遗传算法的有效性,使遗传算法具有局部的随机搜索能力,同时使得遗传算法保持种群的多样性,以防止出现过早收敛。

5 结论

我们分别用传统K均值聚类算法和基于遗传的混合类型数据聚类算法进行了实验,实验结果验证了最初的设想。基于遗传的混合类型数据聚类算法的正确率均在95%以上,比传统K均值聚类算法的正确率要高。说明基于遗传的混合类型数据聚类算法确实能达到全局最优。

参考文献

[1]郝占刚,王正欧.基于遗传算法和k-medoids算法的聚类新算法[J].现代图书情报技术,2006(5):44-46.

[2]史忠植.知识发现[M].北京:清华大学出版社,2002:137-139.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【多类型数据库】相关文章:

数据库服务器故障类型分析论文12-23

数据分析类型论文提纲10-03

论文数据分析类型论文05-16

数据分析类型论文参考文献08-18

功能类型05-09

地质类型05-09

地域类型05-13

品种类型05-16

病理类型05-17

气质类型05-24

上一篇:院内感染下一篇:企业的税收策划