李 原
(西安石油大学计算机学院,陕西西安710065)
嵌入式数据库Sqlite在油田监控系统中的应用
李 原
(西安石油大学计算机学院,陕西西安710065)
为了能方便利用互联网资源实现对油田生产设备的远程监控,提出了一种采用嵌入式数据库Sqlite管理下位机采集到的视频数据的解决方案。该方案使采用B/S架构,远程用户可以通过客户端浏览器远程访问嵌入式数据库Sqlite以及服务器上的视频监控数据。最后,结合油田监控系统的实际开发,给出采用Visual C#开发的Asp.net操作Sqlite数据库的后台程序代码和测试运行结果。实践表明:开源的Sqlite数据库作为油田监控系统的数据存储解决方案明显的降低系统成本,缩短开发周期,获得了良好的经济效益。
嵌入式数据库;Sqlite;B/S;Visual C#
随着油田工业的发展以及现代计算机网络技术的提高,实现油田生产的远程监控是油田生产管理的必然趋势。利用现在的计算机网络技术实现油田生产过程中各个环节的监控不但有利于提高生产效率、降低油田的生产管理成本,而且实现恶劣生产环境下的无人检测与控制,实现油田工作状态的远程监控,减少用工人数。此外油田监控系统通过远程对井场生产设备的监控还可以有效的防止不法分子对生产设备的破坏,有效的保护国有资产,确保油田生产作业的安全运行。本文介绍了一种嵌入式数据库Sqlite在油田监控系统中的设计方法。该油田监控系统采用了基于B/S架构的ASP.Net技术开发,实现了生产现场的实时监控以及将监控数据的实时存储,用户可以通过浏览器看到远程摄像头拍摄的现场视频画面,而且实时的对的监控设备进行远程控制,另外用户还可以通过Web浏览器查看存放在服务器上的历史监控的数据。经过测试将大的视频文件放在数据库中会大大的降低数据库的性能,所以将大的视频监控文件放在数据库中是一种不好的方式,因此使用大型的商业数据库如Oracle或SQL Server不会提升整个系统的性能,其实际意义不大。本文结合油田监控系统的设计给出了一种采用Sqlite数据库的服务器端数据存储解决方案,具体通过将大的视频数据文件存储在服务器的硬盘上,在Sqlite数据库中保存视频文件的路径的方式实现了油田监控数据的高效管理。实践表明油田监控系统中应用Sqlite嵌入式数据库解决了传统商业数据库价格昂贵、使用复杂、体积大、不便于管理和移植的缺点。
由于油田的实际监控中通常摄像头采集到的视频数据非常大,为了便于数据的远程访问以及更快的在以太网中传输,因此对采集到的视频数据进行视频压缩,减少数据冗余是十分必要的。在该设计中使用ARM9的下位机控制摄像头负责视频数据的采集,然后将采集到的数据进行压缩编码,最后通过以太网传送到油田监控中心。监控中心负责数据的实时解码显示以及监控数据的存储并将存储的地址以及文件名存放在Sqlite数据库中。当远程的用户需要通过WEB访问监控程序时,服务器端根据浏览器提交的查询信息,在Sqlite数据库中检索出结果,查找出符合要求的数据文件,通过TCP/IP协议发送到客户端的浏览器上,视频可以在嵌入在网页中的Windows Media Player的Activex容器中播放。图1是油田监控系统的设计框图,整个油田监控系统采用B/S架构,粗略可以分为负责视频采集的端摄像头、负责视频采集和编码以及传输的下位机,负责数据存储以及提供Web服务的IIS服务器,以及各个用户终端浏览器4大部分组成。下位机由一个ARM9芯片为核心的小型数据处理器构成,每个下位机对应一个IP和一个端口,在远程通过IP地址和端口对下位机上的资源进行控制。
图1 油田监控系统框图
数据库负责整个油田监控系统的数据存储管理工作,是整个油田监控系统的主要组成部分。通常情况下商业数据库需要专业的数据库管理系统进行管理而且非常庞大,非常占用系统资源,这使得整个系统的设计和管理变的复杂以及昂贵[1,2]。综合考虑油田监控系统的设计需求以及整个系统的性能,没有必要使用商业的数据库管理监控数据。在油田监控系统中需要进行的是仅仅是监控数据的存储,检索功能。将视频监控文件存储在服务器的硬盘上的方式,将视频监控文件的地址存在数据库中的方式,Sqlite嵌入式数据库已经完全可以满足设计需求。不需要使用商业数据库提供的触发器、存储过程、数据备份恢复等高级功能,而且在油田监控系统中使用这些大型商业数据库会使整个系统显得特别臃肿,因此在此种情况下使用Sqlite嵌入式数据库是很有优势的。
Sqlite是一种开源的易于管理、易于使用、易于维护和配置的嵌入式数据库。该数据库不需要进行安装和管理,整个数据库存储在一个单一的文件中,支持大多数计算机语言,以及支持Windows/Linux/Unix/Mac OS等主流的操纵系统[3]。此外Sqlite是一款完全免费的数据库,可以在商业性的产品无任何限制的应用而没有版权限制。用户可以在Sqlite的官方网站上免费下载到编译后的Sqlite程序以及编译好的包含应用程序接口的dll文件。Sqlite可以被为数众多的编程语言绑定使用并且支持多个系统平台,Sqlite的官方网站称,Sqlite是目前使用最广泛的数据库系统,Sqlite有1.25亿份随Firefox发放、2千万份随Mac机发放、2千万随内建Sqlite的PHP发放、3亿份随Skype发放、1千万份随AOL邮件客户端发放、2千万份随Symbian发放、1千万份随Solaris 10发放、还有数百万份的 Sqlite随 McAfee、iPhones和众多手机厂商发放[4]。由此看来 Sqlite在已经被广泛的应用。
相比于流行的Oracle,SQL Server数据库,Sqlite数据库无须独立运行的数据库驱动程序,它可以直接调用相关的API函数来实现数据的存取操作,无须安装和管理配置。Sqlite数据库非常小,仅仅有几百K,但是它的数据存储性能较优异,其存取运行速度比Mysql快1—2倍,数据存储量大,支持2TB的数据存储。它不但可以作为ASP.Net的服务器端数据的存储方案,而且同样适用于桌面应用程序以及嵌入式移动设备的的数据存储。Sqlite不仅体积小、存储速度快,而且操作简单、运行可靠。相对于商业的数据库引擎提供的复杂应用,Sqlite更容易管理维护,因此Sqlite数据库是一个很好的选择。
Sqlite库包括一个简单的命令行工具,该工具名称对应Sqlite3版本叫做Sqlite3,用户使用这个工具可以对一个Sqlite数据库手工输入和执行SQL命令[5]。一般的可以使用如下的方式建立Sqlite数据库:首先从Sqlite的官方网站下载好Sqlite的最新版本并将其解压出Sqlite3.exe放在某一目录下,然后打开cmd窗口将路径移动到Sqlite3.exe所在的目录,然后输入Sqlite3即可进入Sqlite3的命令提示符,在该提示符下输入abc.db3然后回车就可以在当前目录下建立一个名叫abc.db3的Sqlite数据库。数据表的创建可以在Sqlite3提示符下通过create table命令来实现。如油田监控系统中的Video-Index数据表可以由以下方式创建:
Sqlite>create table VideoIndex(id integer primary key,filename varchar(50),locaion varchar(100));
Sqlite> insert into VideoIndex(‘Moni_2011-9-20_9 -44 -10.mpeg,’d:webmonitor’);
Sqlite> insert into VideoIndex(‘Moni_2011-9-20_10 -30 -23.mpeg,’d:webmonitor);
在Sqlite命令行下查询VideoIndex库中所有的数据记录可以在Sqlite提示符下输入如下SQL语句实现:Sqlite> select* from VideoIndex;
另外当数据需要频繁保存时可以使用Sqlite提供的Transaction事务批量执行多条SQL语句以提升存取的运行速度,因为多条语句一起提交给数据库的速度会比一条一条的提交方式更快[6]。
在油田监控系统的实际开发中使用上述Sqlite3.exe建立数据库以及数据表的方式需要在命令行方式下手动创建,这给Asp.net开发带来了一些不便。实际油田监控系统采用Visual Studio 2008中的Visual C#作为编程开发工具,由于Sqlite官方提供的Sqlite3.dll是用适用于C语言以及C++语言使用的动态链接库,开发中需要在项目中添加Sqlite3.h的引用,该动态链接库中封装的函数在使用Visual C#作为开发工具的Asp.net环境下不适用[7]。为了解决这个问题,我们可以从 http://sqlite.phxsoftware.com/下载 Visual C#可以使用的封装好了的Ado.net驱动,下载完成后进行安装,在安装目录中存在 System.Data.Sqlite.dll文件,我们只需要拷贝这个文件到引用目录,并添加引用即可直接在 ASP.net中利用引用 System.Data.Sqlite.dll文件新建数据库即可。例如在桌面程序下可以通过以下语句在d盘根目录下自动创建一个名为aaa.db3的数据库。
String datasource= “d:\aaa.db3”;//数据库文件的地址
System.Data.Sqlite.SqliteConnection.CreateFile(datasource);//创建数据库文件
在具体的油田监控系统的Asp.net项目中不能使用以上桌面程序中绝对路径的引用方式,添加System.Data.Sqlite的引用之后,首先应该在配置文件web.config中添加如下配置,代码如下:
<system.data>
<DbProvider>
< remove invariant="System.Data.Sqlite"/>
<add name="Sqlite Data Provider"invariant="System.Data.Sqlite"description=".Net Framework Data Provider for Sqlite"type="System.Data.Sqlite.SqliteFactory,System.Data.Sqlite,Version=1.0.66.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139"/>
</DbProvider>
< /system.data>
<configuration>
<appSettings>
<! -Sqlite- >
<add key="SQLString"value="~App_Dataaaa.db3"/>
</appSettings>
<connectionStrings/>
学生核心素养的不断提高,还需要不断地从多个方面进行努力,比如培养学生总结和反思的能力等等.相信,通过在高中数学课堂中不断地对学生的这些能力的培养,学生的核心素养必将得到显著的提高.
然后应该在Visual C#中通过添加一个DbProvider的创建源,在代码中就可以使用DbProvider类来创建Sqlite的数据访问对象了。以下是在具体应用中使用 SQL语句在 Sqlite数据库 aaa.db3的VideoIndex数据表中查询有多少条监控数据记录的操作方法。
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Data.Sqlite;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.Web Controls;
Db Provider fact=Db Provider.Get Factory("System.Data.Sqlite");
using(Db Connection conn=fact.Create-Connection())
{
conn.Connection String=System.Configuration.Configuration Manager.Connection Strings["Sqlite"].Connection String;
conn.Open();
Db Command comm=conn.CreateCommand();
comm.Command Text="select* from VideoIndex";
comm.Command Type=Command Type.Text;
using(IData Reader reader=comm.Execute Reader())
{
while(reader.Read())
{
Response.Write(reader[0]);
}
}
}
将使用Visual C#.Net开发好的网站连通Sqlite数据库挂载到IIS服务器上,通过添加虚拟目录以及设置网站别名以及配置好网站位于服务器的物理路径,再设置好用户访问权限,定义好MIME类型,最后将IIS服务器重新启动。其他用户就可以通过浏览器访问到该网站的内容了[8](见图2)。
图2 远程Sqlite数据库管理入口
图3描述了客户端通过远程浏览器访问ASP.net服务器完成油田远程监控的整个交互处理过程。
图3 服务器端响应客户端请求并实现数据处理的流程
嵌入式数据库Sqlite在油田监控系统中的应用克服了使用传统商业数据库时系统开发难度大,使用维护不方便,价格昂贵等诸多不便。由于Sqlite数据库使用简单,不需要专门的数据库管理引擎,存取速度快,性能稳定,完全满足了油田监控系统管理监控数据的需求,使得整个项目的开发周期缩短,节约了开发成本。目前应用嵌入式Sqlite数据库管理油田监控数据的方案已经成功的运用在基于asp.net开发的B/S模式下的油田监控系统中,实践证明采用Sqlite数据库作为Asp.net服务器端的数据管理工具具有良好的工程实用性以及应用前景。
[1] 黄东.基于Sqlite的移动嵌入式数据库同步系统的研究和开发[D].武汉:华中师范大学,2009.
[2] 史震宇.基于嵌入式数据库Sqlite的交通信息采集单元[D].天津:天津大学,2007.
[3] 陈晓东,曹奇英.嵌入式数据库Sqlite的远程可视化维护管理工具的设计与实现[J].计算机应用与软件,2011(8).
[4] 李蔚,陈亚峰.嵌入式数据库Sqlite及其应用研究[J].沿海企业与科技,2010(10).
[5] 习振华,刘映杰,陶维维,王强.Sqlite在无线数据采集系统中的应用[J].电子测量技术,2011(3).
[6] 路旋.嵌入式数据库管理系统Sqlite的设计与实现[D].西安:西安电子科技大学,2009.
[7] 孙高毅.基于.NET的ASP.NET MVC框架研究[D].长沙:中南大学,2009.
[8] 李盛欣.基于ASP.NET远程教育系统设计与实现[D].长沙:湖南大学,2009.
Application of Sqlite embedded database in the oil field monitoring system
LI Yuan
(School of Computer Science,Xi'an Shiyou University,Xi'an 710065,China)
In order to realize the remote surveillance of the production equipments in oil field through Internet,this paper presents a data management solution enploying Sqlite embedded database.?The data management solution makes use of a B/S architecture,and remote users can remotely access both the data base on the IIS server and the video surveillance data files through a web browser in a remote place.Finally,integrated with the actual development of the remote oil field monitoring system project,the running result as well as the background source programs are given.These visual c#sources are developed for how to operate the Sqlite database in the asp.net project.Practical testing results indicate that using the Sqlite database as the data storage solution for oil field monitoring system can significantly reduce system cost,shorten development cycles,and obtain good economic benefit.
embedded database;Sqlite;B/S;visual C#
TP 311
B
1009-4881(2011)04-0049-04
10.3969/j.issn.1009-4881.2011.04.013
2011-10-09.
李原(1987 -),男,硕士研究生,E -mail:ly80068006@163.com.