BerkeleyDB数据库在餐饮服务系统中的应用
- 格式:pdf
- 大小:229.02 KB
- 文档页数:3
第31卷第5期 2008年10月 电子器件 Chinese Joumal Of Electron Devices v01.31 No.5 0ct.2008
Applications of Berkeley DB in Eatery Server System
ZHANG Jian-wu .L Yi—zhe。TANG Bing
(School ofCommunication Engineering,HangzhouDianzi University,Hangzhou 310018,China)
Abstract:This paper mainly introduces the application of embedded Berkeley DB in Eatery Server System.
We choose a open-sourced database named Berkeley DB to design the Eatery Server System,and database
will make the system more facile and more capable.After introducing the character of Berkely DB and the
configuration of Eatery Server System f,then the paper emphasize the usage of the Berkely DB with some
examples of designment and realization for the system database.That database makes the eatery server sys—
tern more cOnvenience.
Key words:embedded database;eatery server system;designment of database
EEACC:TN368.5
Berkeley DB数据库在餐饮服务系统中的应用
章坚武 ,刘亦哲,唐 兵
(杭州电子科技大学通信工程学院,杭州310018)
摘 要:该文提出了在餐饮服务系统中使用Berkeley DB数据库的方案。设计中为实现餐饮机的脱机消费,选用开源的嵌入
式Berkeley DB数据库,以达到小巧且高性能的目标。在介绍Berkely DB的特点和餐饮服务系统结构的基础上,以系统数据 库的设计与实现为例,着重介绍了Berkeley DB的用法。设计的数据库使餐饮服务系统更为高效、便利。
关键词:嵌入式数据库;餐饮服务系统;数据库设计
中图分类号:TP392 文献标识码:A 文章编号:lOO5—9490(2O08)05—1693-o3
UNIX/LINUX平台下的数据库种类非常多。
当应用软件管理的数据类型较少,数据管理本身不
复杂,且对数据操作要求高效率时,则由大名鼎鼎的 Berkeley(美国加州大学伯克利分校)开发的Berke-
ley DB可能是一个很明智的选择。对于本餐饮服 务系统而言,由于在嵌入式平台开发,需要采用简
易、稳定、高效的嵌入式数据库,所以在餐饮系统的 设计中选择了Berkeley DB数据库,使系统更为稳
定、数据更加可靠I1]。本次设计的餐饮服务系统采
用的是“中心服务器一s3c2410硬件平台一餐饮机” 三级结构模式,与传统的“服务器一客户机”的模式
有所不同。它提供了灵活的存款模式,可以在发卡 中心存款,也可以在食堂内通过餐饮机存款;单台电
脑最多可挂接45台消费机同时消费,采用多台电脑 联网方式最多可以挂接256台餐饮机;强大的卡管
理功能,支持卡的存取款,挂失、解挂、换卡、注销等;
餐饮机支持三种工作模式,可以以输人金额扣款、定
价扣款、菜单扣款等。用户在餐饮机上的消费信息
实时地传给s3c2410服务器,形成本地数据库,在脱
离中心服务器的状态下也可进行正常的消费活动。
1 Berkeley DB的技术特性
1.1易用
Berkeley DB是专门为在他们应用中需要可靠
嵌入,高性能数据库管理服务的开发者提供的。它
不需要掌握专门的数据库查询语言。程序员可以调
用功能函数直接操作数据库及管理的数据记录。
收稿日期:2007—10—19 作者简介:章坚武(1963一),男,教授,硕士生导师; 刘亦哲(1983一),男,在读硕士,信号与信息处理,lyzmars@sina.com; 唐兵(1984一),男,在读硕士,通信与信息系统。
维普资讯 http://www.cqvip.com 1694 电 子 器件 第31卷
一旦经过配置,Berkeley DB就可以轻易的管
理。一些数据库系统要求系统管理员接受培训去掌
握备份、恢复、性能调优及日常维护。Berkeley DB
使用标准的操作系统功能、不需要特殊的设备访问。
如备份恢复任务可以用标准的操作系统工具。
1.2开放源码
Berkeley DB是一个开源产品,也就是说可以
免费的下载源代码并可经过认可在没有商业许可证
的情况下免费使用。首先,其他的数据库厂商不会
有太多修改、性能调优及系统调试的支持,Sleepycat
提供完全的Berkeley DB支持和咨询服务。其次,
你能集成Berkeley DB到你的产品编译环境里去。 最后,源代码的广阔发布意味着有成千的软件开发
人员检测它。Berkeley DB的公共接口和内部接口
已经经过无数工程师的检查,他们的建议已经修改
为更小、更简易,更可靠和更容易使用的开发包。
2 Berkeley DB在餐饮系统中的应用
2.1餐饮机系统设计
餐饮机系统分为三级结构:发卡中心计算机、
s3c2410模块、餐饮机。系统的结构如图1所示。
用户和餐饮机在发卡中心计算机登记用户信息,形 成数据库信息,储存在中心计算机里。s3c2410通
过串口下载数据库到本地的flash里,作为本地数 据库[4]。¥3c2410模块通过RS232接口连接RS485
转换器,而每台餐饮机均连接在RS485总线上。消
费者在餐饮机上消费,消费信息便会实时地通过
RS485总线传输给s3c2410模块,s3c2410模块通过
读取本地数据库并进行相关的操作实现刷卡消费过
程。¥3c2410模块储存的信息会定时发送给发卡中
心进行处理。
图1 系统结构图 2.2数据库的设计
数据库的设计平台采用的是Linux 2.4.18版
本,程序设计语言是C语言,编译工具使用的是
arm-linux-gcc。这里首先设计创建4个数据库用于
储存用户的个人信息、卡的消费信息、餐饮机的管理 信息、个人历史消费记录信息,即User-informa—
tion.db,Card-remain.db,Device-manage.db和
Consume-detail.db。下面将分别介绍各张表的设
计原理。
(1)User—information.db
如表1所示:该表存储的是当前ID的用户信
息,包括用户ID号,卡的类型,卡的状态,卡的有效
期以及卡的消费限额等等信息。这里要特别提到的
是,卡的id是始终不变的,但是user-id可能会发生
改变,当旧的用户注销,新的用户注册的时候同一id
号对应的用户id则不同,因此,创建和查询User-
information.db都是以id做为key来进行的。
表1用户消费信息数据结构表
(2)Card-remain.db
如表2所示:该表的结构很简单,仅仅包括id
和Remain-sum两项。之所以单独设计卡余额表
Card-remain.db,而不将其做为User-informatiorL
db中的某一项,是考虑到卡余额的更新非常频繁,
每一次消费都会发生改表,而用户信息则相对固定,
所以在s3c2410服务器与发卡中心计算机进行数据
同步时,只需要传输发生变化的余额,减少了传输的
数据量,提高了系统的实时性。
表2卡余额表
(3)Device-manage.db
系统需要对餐饮机进行管理,因此设计了De—
vice-manage.db。如表3所示:该表的关键字key
为Machine-id,信息包括餐饮机的出厂序列号,辅助 消费模式,当日消费总额以及当前日期。餐饮机设
计了查看当日消费总额的功能,所以我在该表中增
添了day-total一项,在餐饮机上每消费一笔就会累
加到day-total上,当前日期date过期则day-total
清零。
维普资讯 http://www.cqvip.com 第5期 章坚武,刘亦哲等:Berkeley DB数据库在餐饮服务系统中的应用 1695
表3餐饮机管理表
(4)Consume—detail.db
餐饮消费系统中,消费或增款是最常发生的行
为,对其明细的统计显得格外重要。如表4所示:在
消费明细表Consume-detail.db中,仍然使用Card— id做为key,信息包括用户ID号,机器号,消费发生
的日期、时间和金额,以及两个标志位。其中,kind
一项是用来区别消费或者增款,kind===00表示消
费,kind=01表示增款;label用来区分该条明细是
否已经上传服务器,label一00表示已经上传,label
===01表示还未上传。 表4消费明细记录表
整个数据库程序主要由main函数和19个子函
数组成。其中,19个函数主要完成服务器的实时时
间的读取、修改,服务器的序列号的读取、修改,用户
数据的下载、上传、修改、删除,餐饮机数据的下载、
读取、删除,消费明细的读取、删除等等功能。
2.3数据库的建立、查询、修改和保存
打开数据库通常要分两步进行:首先调用db—
create()函数来创建DB结构的一个实例;然后再调
用DB->open()函数来完成真正的打开操作。 Berkeley DB将所有对数据库的操作都封装在名为
DB的结构中。db—create()函数的作用就是创建一 个该结构。
ret=db-create(&dbp,NULI ,0);
将磁盘上保存的文件作为数据库打开是由DB- >open()函数来完成的l_5J,
flags—DB—CREATE;
ret=dbp一>open(dbp,NULL,”User-informa-
tion.db”,NULI ,D BTREE,flags,O);
如此便创建了一个名为user—information.db
的数据库文件。
建立完数据库文件后,还需建立用户信息相关 的结构体,便于用户信息的管理和封存。其中包含
了用户卡信息的各类细节。结构体建立完成后,接
着是向user-information.db这个数据库文件添加
用户记录。这里向Berkeley DB数据库中添加数据 可以通过调用DB->put()函数来完成,
ret—dbp一>put(dbp,NULl ,&key,&data,
DB-NOOVERWRITE);
通过向(key/data)进行赋值再将其添加进已打
开的数据库,这里要注意的是DB->put()函数的旗