远程存储(精选6篇)
远程存储 篇1
摘要:随着信息化进程的推进,通过远程存储备份、共享数据的需求不断增长,越来越多的用户希望远程存储系统能够价廉、易用、快捷。本文提出了一种通过SMTP和POP3协议,以多个远程电子邮件服务器作为存储服务器的远程存储系统,并讨论其实现的方法。按照该方法设计实现的系统将能够提供数据的远程存储备份和数据共享能力,支持绝大多数的邮件服务器。通过数据分割重组、数据压缩、多线程传输等方式可以实现数据快速传输存储备份。
关键词:远程存储,SMTP,POP3,多线程
随着信息化进程的快速推进,许多重要的数据要求在整个信息系统中实现共享或备份。所以远程存储系统市场需求越来越大。传统远程存储系统性价比低。本文提出的基于SMTP和POP3协议的远程存储系统能够使系统成本降到最低。此种系统利用互联网上广大的免费邮件服务器作为的主要的数据存储载体,结合数据分割、压缩算法,通过SMTP和POP3邮件传送协议,将数据以电子邮件的方式分散存储于不同的电子邮件服务器中。
这种以电子邮件服务器为基础的远程存储系统采用C/S模式,分为客户机和服务器两个层次,客户机为用户使用的个人计算机,只需具备互联网连接能力,服务器无需专门配置,利用互联网络中任何可正常通过SMTP和POP3协议访问的邮件服务器作为系统服务器。
系统的工作过程主要分上传和下载两个过程。上传过程中,客户端首先获得本地要上传的目录文件列表,将该列表加入到远程虚拟目录结构中,然后对本地每个文件分割为小数据块,并记录下其在虚拟目录结构中的对应位置。随后数据块通过SMTP线程上传至服务器,为加快数据传输速度,需要同时启动多个发送线程连接服务器,最终文件就以多个邮件的形式存储在远程邮件服务器中。下载过程,客户端软件需要搜索服务器上的邮件信息列表,根据邮件主题或特定标志,对照参考本地已经下载的数据块,确定要下载的邮件,启动多个下载线程,获取邮件,然后从邮件中提取出数据块。下载同时要对已下载的数据块检测,如某个文件所有数据块均已经下载完毕,则需要将其合并重组,还原为文件,存入本地目录结构中。
由上面工作过程可见,最重要的一步是数据的分割重组,其必要性主要是因为SMTP协议中规定“文本行的最大长度,包括回车符和为透明性增加的字符不得超过1000个字符;接收缓冲区最多可以容纳100个接收者”,另外多线程发送可以把不同数据块同时传送到不同服务器上,这样可以提高效率和程序并行性。分割的大小太大,服务器将不接受;过小的数据块势必造成邮件服务器上邮件过多,从而降低了系统效率;另外,部分服务器还对服务器上一次所能POP得到的邮件数目做了限制,这也使得邮件不能太多,即数据块不能太小。通过实验程序多次模拟统计,将文件块大小限定在500KB左右是比较合适的。
采用压缩算法对数据块进行无损压缩可以使数据块变小,提高整个系统的工作效率。
系统采用多线程方式工作,由一个主线程,多个发送线程和接受线程。主线程负责用户交互、邮箱管理、数据分割重组等;接受线程通过POP3协议与POP3服务器建立连接,接受邮件,提取数据块;发送线程通过SMTP协议将包含有数据块的邮件发送到指定的邮箱。合理线程数量既能保证较快的下载速度,又不至于占用太多的内存和CPU资源。
实际应用表明,本系统可以做到屏蔽各个邮件服务器的差异,使用户像操作本地硬盘一样操作远程存储服务器上的数据文件,仅需一个客户端就可以实现可靠的数据远程备份,成本极低。但系统传输速度上由于受到复杂的用户网络环境的影响较大,能够满足小型部门或个人的需要。对譬如数据安全、数据冗余等问题还需要进一步的丰富和改进。
参考文献
[1]王月,贾卓生.网络存储技术的研究与应用[J].计算机技术与发展,2006(6):2~3.
[2]Robert Spalding[著],郭迅华,等[译].存储网络完全手册[M].北京:电子工业出版社,2004:93~97.
[3]周敬利,胡鸣,余胜生.网络存储性能改进的文件系统实现方法[J].小型微型计算机系统,2006(3):1~4.
[4]穆振海,唐建清.多线程在C++Builder中的实现[J].桂林航天工业高等专科学校学报,2004(1).
[5]Myers&Rose.Post Office Protocol-Version3,RFC1939(POP3Pro-tocol)[S].1996.
远程存储 篇2
远程文件存储技术, 也就是通常说的Remote Blob Storage (RBS) , 是一种将Blob文件纳入数据库管理的新技术。在这种技术出现之前, 管理非结构化的文件不外乎有两种方式, 其一, 将文件直接存放在数据库中, 比如存在Image或者Text数据类型中;其二, 用文件系统来存放Blob数据, 再将文件地址存放在数据库中。然而, 这两种方式都存在一定的弊端, 如果将文件直接存放在数据库中, 必然导致系统的巨大开销, 效率低下。如果只是在数据库中保持文件的地址, 那么存在数据一致性和数据保护的问题, 因为要保证数据的一致性, 就必须保证在文件系统和数据库中同时修改文件, 当然, 存放在文件系统中的数据也是不受数据库保护的, 容易出现用户误删除数据的情况。RBS技术的出现很好地解决了这一矛盾, 配合SQL Server 2008的新特性:Filestream, 可以说完美的实现了数据库对Blob文件的有效管理。
二、RBS运行模式
从Windows XP和Windows Server 2003时的IdeaWinFS开始, 将文件系统纳入数据库管理的思潮就一直在向前发展。RBS的出现, 则进一步完善了这种管理模式。RBS的本质是一个框架, 其中包含了很多基于SQL的存储过程和表, 但其核心是一个可以由用户自行开发定制的Provider程序, 这个Provider程序在其他RBS系统存储过程和表的配合下, 共同实现将Blob文件存放在文件系统中, 并由数据库统一管理的功能。通过自己开发Provider可以实现各种存储的方式, 也可以将数据存储到磁盘、磁带、数据库中。Provider的编写, 也是有章可循的, 在MSDN上, 微软提供了关于RBS Provider的开发规范, 用户只需要按照这个规范来编写能够实现自己具体的业务需求的代码即可。
根据RBS Provider的开发规范, Provider程序中应包括接收Client Library的请求, 实现文件存储和读取、删除、维护, 包括实现存储的负载均衡等工作。这些工作也是RBS的核心功能。以下是RBS的体系结构图, 可以看出RBS的大致运行过程, 首先应用程序 (Application) 调用客户端 (RBS Client Library) , 客户端发出读取或者写入命令给Provider Library, Provider根据定制好的策略通过本地Blob存储类库 (Native Library for Blob Store) 把文件最终存储到Blob Store中。其中的Blob Store是指磁盘、磁带等存储设备。
三、基于Filestream的RBS开发部署
1. 关键技术
FILESTREAM varbinary (max) 是SQL Server 2008的一个新的数据类型, 以此实现将varbinary (max) 二进制大型对象 (BLOB) 数据以文件形式存储在文件系统上, FILESTREAM使SQL Server数据库引擎和NTFS文件系统成为了一个整体。Transact-SQL语句可以插入、更新、查询、搜索和备份FILESTREAM数据。通过Win32文件系统接口可以流式方式访问数据。其中FILESTREAM数据是以FILESTREAM文件组的形式存在的, 也就是说FILESTREAM数据实际存放在文件系统上的FILESTREAM文件目录中。那么在数据库的FILESTREAM varbinary (max) 类型字段中存放的是数据的索引。
FILESTREAM varbinary (max) 数据对象, 为存储大量非结构化数据 (Blob) 提供了坚实的基础。通过分析, 不难看出RBS体系结构中的本地Blob存储类库 (Native Library for Blob Store) 完全可以通过SQL Server 2008 FileStream接口实现, 通过这一结合, 大大简化了RBS的开发定制过程, 同时也为通过数据库管理文件系统提供可靠的技术保障。这种基于Filestream的RBS开发, 实际上已经简化成了基于Filestream的Provider的开发。只要编写好符合业务需求的Provider程序, 那么在SQL Server 2008 FileStream接口的配合下, 就实现了通过数据库对大量非结构化数据的管理。
2. 部署过程
环境要求:
●SQL Server必须使用Window集成登陆
●安装.Net Framework3.5
●SQL Server 2008 RC0以上版本, 必须启用File Stream功能
1) 建立RBS信息配置数据库RemoteBlobStorage。
2) 执行RBS安装程序, 这个程序可以从微软网站下载, 包括RBS64_ENG.msi和RBS32_ENG.msi两个版本:这个安装程序可以将RBS类库安装到本地, 同时也将RBS使用的各种管理存储过程安装到数据库中。如果之前安装过RBS, 须先卸除老的文件和RemoteBlobStorage数据库, 然后安装, 注意勾上RBS Maintenance, 目的是为了增加后期安装维护RBS的功能, 如下图:
3) 启用RBS功能。
4) 根据实际环境中数据库的情况, 建立逻辑POOL, 以及每个POOL中包括哪些DB, 并将POOLid与DBid在RemoteBlobStorage数据库的DatabaseConfig表中建立起逻辑上的对应关系, 也就是建立了RBS在逻辑上的层级关系。每个Pool就是一台数据库服务器, 每个服务器下面有N个数据库, 每个数据库下面又有N张表。
5) 创建RBS文件存储数据库, 即为每个POOL所属的DB创建一个mdf主数据文件及每个DB下的若干个文件组。电子文件就是被负载到这些文件组中的。其中每个Pool中的数据库结构都是相同的, 每个数据库中表的数量和结构也都是相同的。这样便于统一管理, 实施负载策略。
注意:必须首先在磁盘上建立对应的数据库文件以及文件组的文件夹目录。
6) 注册本地RBS Provider, 执行InstallProvider.exe将Provider注册到本地。
7) 安装Services/windows服务:在服务管理器中安装RBSManagerService服务。此处需要使用操作系统的InstallUtil.exe命令来安装此服务。
8) 开启MSDTS服务。
注意:RBS数据库需要使用分布式服务完成工作。
3. RBS存在的问题
1) RBS数据存储没有加密功能, 即使启用了透明数据加密, 也不能加密FILESTREAM数据。
2) RBS没有断点续传功能。断点续传是由调用RBS的客户端保证的, RBS是使用事务的, 只接收完整的数据, 如果数据不完整则自动回滚。在这种情况下, 为了保证数据可以断点续传, 可在服务器端使用缓存技术, 当数据上传完整后再存入RBS中。
四、结论
目前RBS技术在信息系统建设中已经得到了一定的应用, 特别是在一些保存大量非结构化数据的系统中已经有了一定规模的开发部署。这都得益于RBS技术带来的好处, 在部署RBS后, 用户只需要在熟悉的数据库环境中就可以完成对Blob文件进行存储、读取操作, 更方便的是备份、维护等操作也都是在数据库中使用简单的T-SQL命令就可完成, 极大地提高了数据管理的效率, 在一定程度上也起到了保护数据的作用。随着针对各种需求而开发的RBS Provider程序, RBS技术在今后的大型Blob数据存储中一定会发挥更重要的作用。
摘要:随着信息技术的不断发展, 传统中结构化数据一统天下的局面正在发生着深刻的改变, 由于非结构化数据能更加逼真、生动的展示事务的状态, 大量的非结构化数据正越来越多的受到人们的关注、被人们使用。由此也出现一些问题, 其中如何有效的管理这些非结构化数据, 就是一个亟待解决的问题。本文通过对远程文件存储技术RBS的一些分析和研究, 试图找到一个比较好的解决方案, 来对大量非结构化数据进行有效的管理。
远程存储 篇3
存储系统的架构主要有DAS、NAS、SAN。DAS是直连式存储, 处理数据完全依赖于主机操作系统, 因此对数据进行处理的时候, 就会影响到主机的性能, 比如数据的备份与还原, 这样对业务系统影响很大;NAS是网络附加存储, 它主要通过交换机连接服务器并提供NFS或CIFS文件系统存储, 性价比高, 扩展能力也强, 但是开销高, 延迟大, 不利于高性能的集群应用;SAN是存储区域网络, 它主要是通过光缆或者以太网电缆连接服务器并提供Block存储, 价格昂贵, 但高带宽, 低延迟, 能满足电信、银行的大数据量的关键业务应用。
i SCSI属于SAN的一种, 它主要是在TCP/IP网络上传输SCSI指令, 来访问远程的Block存储。随着以太网的快速发展, i SCSI的市场销量也在快速发展, 虽然带宽和性能与FC SAN还存在一定的差距, 但是可以节约企业很多成本, 而且其基于以太网, 管理维护都变得简单。
2. 远程块存储的应用与配置
i SCSI提供存储的一端称为Target, 而访问存储的一端是Initiator。RHEL7中可以实现Target端, 在配置时与RHEL6有所差别, 在RHEL7主要是通过targetcli来进行配置, 访问存储在RHEL6与RHEL7中差不多。下面就重点介绍一下在RHEL7中, 两端具体配置。
如图1所示, Target上准备提供两个存储, 分别是300M的逻辑卷/dev/rhel/lv01, 200M的文件/diskfile, 服务器的IQN是iqn.2014-09.com.example:serverdisk1, 而只有客户端的IQN为iqn.2014-09.com.example:desktop1才可以访问Target端的存储, 服务器工作在IP为192.168.1.1的端口3260上, 具体的步骤如下:
2.1 提供存储的Target端的应用与配置
步骤1:准备存储
(1) 300M的逻辑卷
[root@localhost~]#lvcreate-n lv01-L 300M rhel
(2) 200M的文件, 文件可以不必提前创建
步骤2:安装target端的管理工具targetcli
[root@localhost~]#yum install targetcli-y
步骤3:进入targetcli模式, 对target进行配置
[root@localhost~]#targetcli
(1) 创建一个block存储
/>/backstores/block create block1/dev/rhel/lv01
(2) 创建一个文件存储
/>/backstores/fileio create file1/diskfile 200M
(3) 为target创建一个IQN (i SCSI Qualified Name) , 此步骤会创建一个TPG (Target Portal Group) 。
/>/iscsi create iqn.2014-09.com.example:serverdisk1
Created target iqn.2014-09.com.example:serverdisk1.
Created TPG 1.
(4) 为客户端配置ACL, 只有iqn.2014-09.com.example:desktop1这个客户端才可以访问此Target
/>/iscsi/iqn.2014-09.com.example:serverdisk1/tpg1/acls create iqn.2014-09.com.example:desktop1
(5) 在此TPG中创建LUN, 把之前创建的存储激活, 分别为LUN0与LUN1
/>/iscsi/iqn.2014-09.com.example:serverdisk1/tpg1/luns create/backstores/block/block1
Created LUN 0.
/>/iscsi/iqn.2014-09.com.example:serverdisk1/tpg1/luns create/backstores/fileio/file1
Created LUN 1.
(6) 使Target工作在IP地址为192.168.1.1与端口为3260上
/>/iscsi/iqn.2014-09.com.example:serverdisk1/tpg1/portals create 192.168.1.1
(7) 查看最后的结果
(8) 退出并保存配置
/>exit
(9) 关闭防火墙
[root@localhost network-scripts]#systemctl stop firewalld
2.2 访问存储Initiator端的应用与配置
步骤1:设置主机名并关闭防火墙
[root@localhost network-scripts]#hostnamectl set-hostname desktop1.example.com
[root@localhost network-scripts]#systemctl stop firewalld
步骤2:安装initiator端RPM包
[root@localhost~]#yum install iscsi-initiator-utils
步骤3:在initiator端修改IQN
[root@localhost~]#vim/etc/iscsi/initiatorname.iscsi
Initiator Name=iqn.2014-09.com.example:desktop1
步骤4:启动并启用iscsi服务
[root@localhost~]#systemctl enable iscsi
[root@localhost~]#systemctl start iscsi
步骤5:发现Target端存储
[root@localhost~]#iscsiadm-m discovery-t st-p192.168.1.1
192.168.1.1:3260, 1iqn.2014-09.com.example:serverdisk1
步骤6:登录Target端存储
[root@localhost~]#iscsiadm-m node-T iqn.2014-09.com.example:serverdisk1-p 192.168.1.1-l
步骤7:查看新添加的i SCSI设备, 发现已经多了sdb与sdc。
[root@localhost~]#lsblk
<输出省略>
步骤8:格式化/dev/sdb
[root@localhost~]#mkfs-t xfs/dev/sdb
步骤9:查看/dev/sdb的UUID号码
[root@localhost~]#blkid/dev/sdb
/dev/sdb:UUID="907fa63c-1466-4a93-9996-cefcfd3a781d"TYPE="xfs"
步骤10:写入/etc/fstab
[root@localhost~]#vim/etc/fstab
UUID=907fa63c-1466-4a93-9996-cefcfd3a781d/database
xfs_netdev 0 0
步骤11:创建挂载点
[root@localhost~]#mkdir/database
步骤12:测试挂载
[root@localhost~]#mount/database
[root@localhost~]#df-h/database
FilesystemSize Used Avail Use%Mounted on
/dev/sdb297M 16M 282M 6%/database
3. 总结
RHEL7中的Target端的配置变化比较大, 相比RHEL6中的修改文件的配置, 变得更加复杂, 但是配置思路还是非常清晰的。在实际应用中, 大部分的企业会购买相关的i SC-SI存储, 本文提供的远程块存储的应用与配置技术能够给企业的管理员和部分自学RHEL7的爱好者提供很好的参考。
摘要:最新版RHEL7中许多技术相对于RHEL6变化较大, 本文重点介绍在RHEL7下iSCSI管理中提供存储的Target端与访问存储Initiator端的原理、应用与配置。
关键词:存储,Target,Initiator
参考文献
[1]赵立权, 翟勇, 凤羽辉.高校Linux教学势在必行[J].云南师范大学学报 (自然科学版) , 2010, (05) .
远程存储 篇4
关键词:公共云,云存储,远程学习系统
1 研究内容和现状
经过多年发展, 国内外云计算服务技术已经比较成熟。国内外主要的互联网服务公司都已经推出了企业商用云计算服务。众多的云计算服务厂商提供的云计算服务各有特色, 并且还在不断地发展与细分之中。在众多的云计算细分服务中, 云存储服务应用相对更加普遍。
许多高校都建设有远程教育支持服务系统。系统主要服务于远程教学, 其中主要的知识信息载体是以视频为代表的多媒体资源。此类系统的建设和部署方案中, 视频资源的存储设备投资、点播线路费用是系统整体投入中最大的一部分。利用公有云存储服务改造系统, 降低整体运行成本, 提高系统可用性, 是一个现实可行的办法。
2 国内主要云服务提供商的云存储服务介绍
鉴于国内基础网络的情况, 本文只选取了国内互联网服务中“BAT”三家云服务商。云服务商提供的云服务多种多样, 且各有特点, 下面具体介绍选取了最适合远程教育系统中视频资源部署的云服务类型。
2.1 百度云存储[1]
百度云存储, 即BCS (Baidu Cloud Storage) , 提供object网络存储服务, 旨在利用百度在分布式以及网络方面的优势为开发者提供安全、简单、高效的存储服务。
百度云存储可以支持文本、多媒体、二进制等任何类型的数据, 支持签名认证及ACL权限设置进行资源访问控制, 开发者可以通过管理控制台直接进行页面上传、下载或通过REST API、Shell Tool、SDK、curl等方式实现上传、下载。
百度媒体云服务 (简称“媒体云”) 是构建与百度云基础价格之上的, 基于百度在视频处理、人脸识别、语音技术上的长期技术积累, 为广大开发者提供媒体相关的整体解决方案。
媒体云通过提供一系列HTTP Restful API及跨终端平台SDK, 实现包括媒体存储、编码、转码、内容保护、点播、直播、分析、广告以及人脸检测、人脸识别、语音技术等的诸项功能 (如图1) 。
2.2 腾讯云之对象存储服务 (Cloud Object Service) [2]
对象存储服务, 是腾讯云平台提供的对象存储服务, 简称COS。COS为开发者提供安全、稳定、高效及实惠的对象存储服务, 开发者可以将任意动态、静态生成的数据, 存放到COS上, 再通过HTTP的方式进行访问。COS的文件访问接口提供全国范围内的动态加速, 使开发者无需关注网络不同所带来的体验问题。
COS支持所有文件类型。开发者可以将任何类型的文件存放到COS上。COS支持超大文件。开发者可进行断点续传, 断点下载, 分片上传 (单次上传最大可达2G, 分片上传不受限制) , 可以上传存放超大文件。COS支持立即访问。开发者可以自定义返回包头, 文件上传后可立即访问。COS的文件访问接口通过全国范围分布的动态加速点, 实现请求快速解析和路由, 使开发者无需关注网络不同所带来的体验问题。
COS以阶梯价格的形式进行收费, 包括三部分:存储费用、外网出流量费用和接口请求费用。
第一, COS存储空间价格。
COS存储收费明细:单价 (GB/天) 。
<1 TB:小于1 TB的部分, 每GB单价:0.02元。
[1 TB, 10 TB) :大于等于1 TB, 小于10 TB的部分, 每GB单价:0.016元。
[10 TB, 50 TB) :大于等于10 TB, 小于50 TB的部分, 每GB单价:0.015元。
≧50 TB:大于等于50 TB的部分, 每GB单价:0.013元。
第二, COS流量价格
COS外网出流量收费明细:单价 (元/GB) 。
<1 TB:小于1 TB的部分, 每GB单价:0.7元。
[1 TB, 10 TB) :大于等于1 TB, 小于10 TB的部分, 每GB单价:0.65元。
[10 TB, 50 TB) :大于等于10 TB, 小于50 TB的部分, 每GB单价:0.6元。
≧50 TB面议。
内网入流量、内网出流量、外网入流量均免费
第三, COS数据请求价格
COS请求收费明细:单价 (元/万次) 。
PUT、POST或LIST请求0.01元。
GET及其他请求0.01元。
2.3 阿里云之开放存储服务[3]
开放存储服务 (Open Storage Service, 简称OSS) 是支持任意数据类型的存储服务, 支持任意时间、地点的数据上传和下载。OSS中每个存储对象 (object) 由名称、内容、描述三部分组成 (如表2) 。
3 几种云存储比较
3.1 存储功能对比 (如表3)
注:-表示没有明确的材料说明
可见几种云存储在主要核心功能上差别不大。
3.2 资费对比
以5TB数据和5万用户, 日均流量10GB为例计算。由于方案以存储视频为主, 文件较大, 总数较少, 点击数会很少, 在此忽略计算, 但三家服务商对此的报价基本一样 (如表4) 。
3.3 功能与资费比较总结
经过上述对比, 相对来说阿里云开放存储服务存储费用最低;腾讯对象存储服务明确说明具备通过分布全国的OC节点, 就近接入快速动态回溯到中心节点获取数据功能, 网络性能应该较好;百度云存储流量费最低, 更适合需要大量访问的应用。
4 应用公共云存储服务与传统部署方案的比较
4.1 传统部署的简单费用计算
(1) 5TB在线存储阵列约15万元。
(2) 服务器约10万元。
(3) 网络设备约10万元。
(4) 后备电源与制冷设备约10万元。
(5) 专线接入费用约30万元每年。
设备合计共45万元;按照7年使用年限来看, 年均为45/7+30=36.43万元;尚未计算人工、场地、能源和软件成本。
4.2 公共云存储与传统部署方案功能比较 (如表5)
可见应用公共云存储可以满足传统部署方案的所有需求, 还能提供更加弹性的存储空间和网络线路。且按照前述的费用计算结果, 公共云存储的费用不到传统方案的10%, 性价比非常高。当然, 也不能说公共云存储完美无缺, 主要就是在现有的机制下, 还无法令管理人员将学生学籍、成绩等关键敏感信息放到公共云存储上。此外, 就视频服务本身还是存在被盗链的可能。
5 结语
应用公共云存储服务来改造远程教育系统在功能性和经济性上的优势是显而易见的。云计算服务的产业还在快速发展中, 随着时间的推移, 公共云计算服务对传统网络服务系统部署的优势将越发明显。在未来, 随着基础网络带宽的发展, 绝大部分网络服务系统都无法拒绝云服务的诱惑, 而入住于云端。
参考文献
[1]李晨曦.加密云存储系统研究与实现[D].吉林:吉林大学, 2015 (6) .
[2]蒋莲, 王尧.云存储在腾讯中的运用[J].科技致富向导, 2012 (24) .
远程存储 篇5
随着通信技术与计算机技术的发展, 可视电话, 电视会议等以信息采集、处理为核心的图片采集与视频传输系统已得到广泛应用。而就用户使用的时间而言, “图片和视频”应用已成为增长最快的移动应用。而在目前的移动平台中, Android是一个比较活跃和最有前景的手机平台。它是谷歌公司发布的一个开源移动平台, 由Linux内核、中间件、应用程序框架和应用软件组成, 是第一个可以完全定制、免费、开放的手机平台。同时, 利用Android系统的网络通信技术, 可以使得复杂的终端数据处理转移到远程的高性能服务器上, 这使得基于Android的移动终端有了更加宽广的发展空间, 使移动终端成为移动办公、移动商务和移动监控的重要工具。
本文以移动监控应用为背景, 提出一种基于Android平台的实时图像采集与图像的远程存储方案。采用Eclipse集成开发环境和用于Eclipse的Android Developer Tools插件工具作为开发平台, 在分析Android平台上实时捕捉和存储图像数据的基础上, 结合HTTP协议实现一套基于Android平台的实时图像采集与图像的远程存储系统, 以提高实时监控系统的移动性和方便性。
2 系统平台设计
2.1 系统结构图
如图1所示, 本系统采用C/S模式。Client端分为图像数据采集模块、图像数据本地存储模块和远程存储通信模块。Server端包括图像接收模块和管理模块。
图像数据采集模块用来捕获Android图像传感器所获得的数据并存储在位图中。本地存储模块将图像采集模块的位图数据转换成IO流, 创建并写入到新图像文件中。远程存储通信模块将本地存储模块所创建的图像文件转换成IO流并通过HTTP协议发送给远程服务器。远端服务器的图像接收模块通过解析HTTP数据流获得文件IO流, 创建并写入到新图像文件中。
2.2 图像采集和存储模块详细设计
2.2.1 Android手机平台图像采集
通过Android.hardware.Camera类的open方法开始拍照, 通过take Picture方法结束拍照, 最后在相应事件处理函数中处理图像数据。显示照片预览的影像容器一般是Surface Holder对象, 在拍摄时必须实现Surface Holder.Callback接口。Surface Holder.Callback接口中已经定义了surface Created、surface Destroyed、surface Changed三种方法。可以使用A nd roid.view.Su rfa ce Holder.Callback方法来将设置Surface Holder.Callback对象。影像显示在Surface View对象里, 通过get Holder方法来获取Surface Holder对象。在拍摄中使用Camera.auto Focus方法来实现自动对焦功能。
首先, 设置预览格式和Camera参数设置。然后, 启动预览服务。拍照事件被触发时, 停止预览。最后, 拍摄照片并输出位图。
对于本地存储模块的实现, 首先需要把位图转换为JPG格式文件流。然后, 将文件流写入SD上文件中。
Ca mera拍照后所返回的是所捕获帧数据, 通过使用Android.graphics.Bitmap Factory.decode Byte Array () 方法可以把相机传回的裸数据转换成Bitmap对象。使用Android.graphics.Bitmap.compress () 方法可以将位图数据转换成文件输出流数据。具体调用为m Bitmap.compress (Bitmap.Compress Format.JPEG, 100, os) ;整个流程如图2所示。
2.2.2 图像本地存储
图像的本地sd卡文件操作需要一定的权限。权限是一种Android平台安全机制, 旨在允许或限制应用程序访问受限的API和资源。默认情况下, Android应用程序没有被授予权限, 使得它们不能访问设备上的受保护API或资源。权限在安装期间通过manifest文件由应用程序请求, 由用户授予或不授予。
2.2.3 图像远程存储
由于HTTP协议简单, 使得HTTP服务器的程序规模小, 因而通信速度快且灵活。HTTP允许传输任意类型的数据对象, 传输的类型由Content-Type加以标记。协议具有无连接和无状态的特点。无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后, 即断开连接。采用这种方式可以节省传输时间。无状态:HTTP协议是无状态协议。
本系统选用HTTP作为传输协议可以适用于2G、3G和WLAN环境。图像的发送和接受流程描述如下:
⑴客户端创建Http URLConnection, 打开数据连接。然后, 将JPG文件转换为数据流并发送流。
ds.write Bytes ("Content-Disposition:form“"na me="file1";filename=""+new Name+"""+end) , 执行上述语句即可发送参数, 其中发送文件, 用以下语句:ds.write Bytes (two Hyphens+boundary+two Hyphens+end) 。
⑵服务器接收流并还原成文件。
file Items=fu.parse Request (request) ;item write (f New) ;执行上述函数后即可将接收到的流写入文件。
2.3 系统演示
在Android手机终端运行系统后效果如图3所示。系统实时自动捕捉视频图像, 触碰屏幕或按下相机键, 程序捕获图像数据, 输入文件名并触碰保存按钮则保存图像文件至SD卡中, 同时将图像文件自动上传至远程服务器。图4是服务端程序接受图像的运行效果, 表示已成功接受图像。
3 结束语
本文重点叙述了实现基于Android平台的图像采集、处理和存储的关键实现技术。经测试, 基于Android平台的图像实时采集系统能够实时捕捉和远程存储移动终端采集的图像数据, 且图像清晰, 能够满足实时捕捉图像和处理图像应用的需求。
参考文献
[1]耿东久, 索岳, 陈渝, 等.基于Android手机的远程访问和控制系统[J].计算机应用, 2011, 31 (2) .
[2]林朋, 胡博伟.Android平台上图像数据上传及服务器接收图像的程序设计研究[J].计算机光盘软件与应用, 2011 (18) .
远程存储 篇6
这种以电子邮件服务器为基础的远程存储系统采用C/S模式, 分为客户机和服务器两个层次, 客户机为用户使用的个人计算机, 只需具备互联网连接能力, 服务器无需专门配置, 利用互联网络中任何可正常通过SMTP和POP3协议访问的邮件服务器作为系统服务器。系统整体结构如图1所示, 客户端主要包括数据的上传下载、邮箱管理、数据管理、数据传输等, 服务器端由多个邮件服务器联合组成。
系统的工作过程主要分上传和下载两个过程。上传过程中, 客户端首先获得本地要上传的录文件列表, 将该列表加入到远程虚拟目录结构中, 然后对本地每个文件分割为小数据块, 并记录下其在虚拟目录结构中的对应位置。随后数据块通过SMTP线程上传至服务器, 为加快数据传输速度, 需要同时启动多个发送线程连接服务器, 最终文件就以多个邮件的形式存储在远程邮件服务器中。下载过程, 客户端软件需要搜索服务器上的邮件信息列表, 根据邮件主题或特定标志, 对照参考本地已经下载的数据块, 确定要下载的邮件, 启动多个下载线程, 获取邮件, 然后从邮件中提取出数据块。下载同时要对已下载的数据块检测, 如某个文件所有数据块均已经下载完毕, 则需要将其合并重组, 还原为文件, 存入本地目录结构中。
系统采用多线程方式工作, 由一个主线程, 多个发送线程和接受线程。主线程负责用户交互、邮箱管理、数据分割重组等;接受线程通过POP3协议与POP3服务器建立连接, 接受邮件, 提取数据块;发送线程通过SMTP协议将包含有数据块的邮件发送到指定的邮箱。
上传线程需要与SMTP服务器建立连接, 随后使用AUTH命令进行身份验证, 验证后对邮件施行MIME编码, 编码后的邮件可以发往一个可以被POP的邮箱。如此循环发送全部待上传的数据块, 如果用户终止、连接错误、上传错误或者待上传数据块没有符合本线程邮箱规则的数据块时, 本线程终止。数据块一旦以邮件形式存储在远程邮件服务器中, 就被服务器加上UID, UID是一个邮箱中每封邮件的唯一标识, 用于标记本邮箱里的不同邮件。
下载线程工作原理如下:首先客户端与POP3服务器建立POP3连接, 通过User和Pass命令认证后, 使用LIST获取邮箱内邮件数量;使用RETR和UIDL遍历所有的邮件头和UID, 根据UID和邮件头里的信息把每封邮件与数据块对应起来;随后把对文件的操作 (下载、删除等) 映射为数据块的操作, 把服务器中邮件的UID与数据块链表每个数据块UID比较, 找到对应邮件号, 根据该数据块确定当前操作是下载还是删除, 如果该UID不在数据块链表中, 则说明是新的数据块, 下载邮件头部分, 根据邮件头有系统无标志性字符串, 决定是否追加到数据块链表中。接收邮件使用POP3命令RETR接收, 删除用DELE移除服务器上的相应邮件, 同时更新数据块链表。下载线程通过主程序创建, 每个邮箱可以创建3到5个线程, 合理线程数量既能保证较快的下载速度, 又不至于占用太多的内存和CPU资源。
按照本文研究的方法设计的系统可以做到屏蔽各个邮件服务器的差异, 使用户像操作本地硬盘一样简单的对远程存储服务器上的数据文件进行管理、维护, 文件的传输可以做到透明化, 系统仅需要一个客户端就可以实现可靠的数据远程备份, 成本极低。但是系统传输速度上由于受到复杂的用户网络环境的影响, 与用高速硬件构建的远程存储系统相比还有一定差距, 但是能够满足小型部门或个人的需要。本文只是就远程存储系统的基本功能做了探讨, 对譬如数据安全、数据冗余等问题还需要进一步的丰富和改进。
摘要:随着信息化进程的推进, 通过远程存储、备份、共享数据的需求不断增长, 越来越多的用户希望远程存储系统能够价廉、易用、快捷。本文提出了一种通过SMTP和POP3协议, 以多个远程电子邮件服务器作为存储服务器的远程存储系统, 并讨论其实现的方法。按照该方法设计实现的系统将能够提供数据的远程存储备份和数据共享能力, 支持绝大多数的邮件服务器。通过数据分割重组、数据压缩、多线程传输等方式可以实现数据快速传输存储备份。
关键词:远程存储,SMTP,POP3,多线程
参考文献
[1]王月, 贾卓生.网络存储技术的研究与应用[J].计算机技术与发展, 2006 (6) :2-3.
[2]张振宇, 胡文锦.常见存储方式介绍及比较[J].产品与技术, 2006 (9) :1-2.