注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Linux >> 数据库 >> MYSQL >> Linux正文

Sqlite 数据库在Media NAS 系统中的应用

文章来源:ChinaITLab收集整理 作者:余 涛 更新时间:2006-9-20 【 】 【加入收藏
      本文阐述在一个基于 Linux 的 Media NAS 系统中,如何使用了 Sqlite 数据库作为 NAS 系统中 Media 数据的存储数据库,来完成 Media 文件的共享,从而能使 Digital Media Player 播放设备通过 UPnP AV Server 服务对NAS 上的 Media 文件进行播放。

用 Sqlite 实现此 Media NAS 系统后,系统运行性能高,而且程序也具有很好的跨平台性。

此 Media NAS 服务系统是基于通用即插即用(UPnP)协议的系统。

    网络附属存储(NAS:Network Attached Storage)设备是一种专用数据存储设备,它以数据为中心,其上存储了大量的视频、音频、图象文件。NAS 服务器本身对数据有较好存储、保护机制,从而保证其提供多媒体服务的稳定性。为了便于对其上的海量媒体文件的有效共享,我们使用了 UpnP 协议来作为网络访问协议。

    UpnP 网络系统是针对智能家电、无线设备以及个人电脑网络连接而设计的一种架构。它旨在为家庭、小型企业、公共场所中的网络提供易于使用、灵活且基于标准的连接。UpnP 是一个充分利用 TCP/IP 和 Web 技术的分布式开放型网络体系结构,除能够在家中、办公室和公共场所联网设备之间的完整控制和数据传输之外,还可建立无缝紧密的连接网络。

    UpnP 设备的特点是它不需要使用设备驱动程序,取而代之的是通用协议,一个设备就是一个完整的小系统,直接通过网口将其接入 UpnP 网络中即可。UpnP 网络不依赖于任何特定的操作系统、编程语言或物理媒体。UPnP 并未指定应用程序应该使用哪种 API(应用程序接口),UpnP 装置开发者可以按用户的需求创建自己的 API。UpnP 设备可以在任何操作系统上采用任何编程语言来实现。这就意味着,一台设备能够动态加入一个网络,获取一个 IP 地址,"零"配置,即插即用,它自动通报其能提供的功能服务,以及了解其它设备的存在和功能。在 UpnP 网络中的设备都向外提供自身服务的描述,外部其他设备通过调用这些服务来控制这些 UpnP 设备。

    UpnP 充分利用了包括 IP、TCP、UDP、HTTP 和 XML 在内的互联网组件。它以 XML 来表达内容,并通过HTTP 进行传输。在 UpnP 网络中的消息通过采用简单服务发现协议(SSDP)、通用事件通知架构(GENA)和简单对象访问协议(SOAP)来进行格式化。然后消息通过运行于 UDP 上的多播或单播类 HTTP,或是运行于TCP 上的标准 HTTP 进行传输。最终,所有消息均通过 IP 进行传输。

    UpnP 的可应用范围非常广,可被应用于诸如家庭自动化、打印和图像处理、音频/视频娱乐、厨房设备、汽车网络等各种各样的应用场合。

    Digital Media Player 播放器是连接电脑、电视或音响系统的无线桥梁,它也是基于 UpnP 协议的设备。它使用标准的音频/视频线缆连接电视和立体声音响系统,可通过无线网络与电脑进行通讯,将电脑处理后的数字信息传输到电视和音响系统上。这样你的数字文件就不再是只能在电脑上播放,而是可以和电视、音响系统连接,可以想象,这样的播放效果将是 PC 电脑所无法比拟的。

 

数据库结构的设计

    在 Media NAS 系统中涉及的媒体文件类型有三类:Video,Audio,Image。基于这三类文件,我们对数据库做了结构设计。

VideoTable 的设计:

显示标题(100字节),Video 时长(整数型),Video 长、宽(整数型),文件全路径名(1024 字节),所在目录名(260 字节);

AudioTable 的设计:

显示标题(100 字节),Audio 时长(整数型),流派(100 字节),歌唱者(100 字节),专辑(100字节),文件全路径名(1024 字节),所在目录名(260 字节);

ImageTable 的设计:

显示标题(100 字节),Image 长、宽(整数型),专辑(100 字节),文件全路径名(1024 字节),所在目录名(260 字节);

对应的 sqlite 操作命令为:


CREATE TABLE VideoTable (titlename VARCHAR(100), time INTEGER,

videowidth INTEGER, videoheight INTEGER, filename VARCHAR(1024), 

dir VARCHAR(260));

CREATE TABLE AudioTable(titlename VARCHAR(100), time INTEGER, 

genre VARCHAR(100), artist VARCHAR(100), album VARCHAR(100), 

filename VARCHAR(1024), dir VARCHAR(260));

CREATE TABLE ImageTable (titlename VARCHAR(100), time INTEGER,

imagewidth INTEGER, imageheight INTEGER, genre VARCHAR(100), 

filename VARCHAR(1024), dir VARCHAR(260));

                  

需要说明的几点:

1、存储在 Sqlite 中的记录内容,最好采用 UTF8 编码的文本内容。这样就不会丢失记录信息,否则的话,有些多国语言的内容做了 Unicode 转换后将会丢失。

2、在设计中要考虑到播放请求时,并不是一次请求全部的数据,而是请求一部分,即从某位置开始,请 求若干条记录,并且是需要按一定的规则排序。对记录中某项的查询语句,如: select * from AudioTable order by titlename limit startindex, requestcount ;其中需要 加上查询时启始位置与需要查询的个数。还要包括以 titlename 作为排序的依据。

3、在需要一次得到某种媒体类型的记录的全部条数的地方,需要进行优化,可以使用类似下面的语句:


select count(*) from AudioTable;

                  

它会直接返回全部的 audio 类型的记录的总条数。这样查询的速度,和对系统资源的占用率会有较大改善。

4、在对 audio 的流派,专辑,歌唱者进行查询时,需要使用类似如下的命令:

select artist from AudioTabel group by artist order by artist;

                  

这样得到的记录内容就是经过排序了的 artist 类型。

5、数据的动态改变

    在应用中,将涉及到需要在系统运行期间动态扫描新添加的媒体,这个时候就需要将已有的数据库文件拷贝一份,并将新添加的媒体文件使用拷贝后新的数据库做为扫描时使用的数据库文件。扫描完成后,再将旧的数据库文件用新的文件替换,从而保证在系统运行期间,旧的数据依然是能被访问到的。在这个过程中,需要对数据库进行同步,使用 sem_t 即可,涉及到的操作函数包括 sem_init,sem_destroy,sem_wait,sem_post。在需要对数据库进行替换前,使用 sem_wait,替换后使用 sem_post 进行释放。从而可以防止多个线程对数据库的操作所引起的错误。

 

Sqlite 与应用的结合

    Sqlite 的特点决定了它与应用结合时将会是非常便捷的。作为数据的存储介质,Sqlite 文件将被保存成一个普通的文本文件,它无须一个 server 进程来提供服务,对 Sqlite 数据文件的直接操作即可以完成我们想要的工作。

    在应用层,编写了一个对 Sqlite 操作的简单的封装。而且在这个过程中,可以体会到对 Sqlite 的操作是如此的便捷。

如:


DBInitial;    定义 Sqlite 操作时的回调函数

DBRelease;    释放 Sqlite 数据文件

DBOpen;     调用 sqlite_open 打开数据库文件

DBClose;    调用 sqlite_close 来关闭数据库

DBExecute;    执行 SQL 命令

DBRecordsetInit;  执行 select,得到记录集

DBRecordsetRelease;  调用 sqlite_free_table 来释放结果集

DBGetCharacterField  得到记录集中的一个域

                  

在应用层,使用上面的包装,即可以完成对 Sqlite 数据库的操作,使用简洁,执行效率高。

总结

在整个系统开发过程中,感觉到用 Sqlite 数据库来开发,系统性能高,充分地体现了展示了轻量型数据库在开发应用中的便捷。

你在自己的项目中使用哪种类型的数据库呢,不防也将这个小巧的数据库应用到自己的项目中,你会体会到它给你带来的巨大优势。

关于作者

余涛,高级软件工程师,现从事 linux 嵌入式系统的开发工作,主要研究方向嵌入系统,UPNP 多媒体播放系统。您可以通过电子邮件 yut616@21cn.com 和他联系。希望能与更多的朋友交流关于 Linux 方面的知识。

  • 上一篇Linux:

  • 下一篇Linux:
  • 最 新 热 门
     VMware下Linux与真实主机共享上网
     Linux系统安全隐患及加强安全管理方法
     各类Unix和Linux密码丢失解决方法
     配置Linux操作系统的环境变量
     在Linux系统下刷新主板BIOS的好方法
     删除文件提示:Operation not permitted
     Linux系统下硬盘挂载详细说明
     Linux文本模式下如何发送带附件的Email
     在Linux自动生成一个保险密码的方法
     Linux商业电影动画制作软件列表
    最 新 推 荐
     MySQL出现1067错误如何解决?
     MySQL数据库复位根用户的密码
     MySQL记录未知错误的发生的方法
     MySQL存储程序、函数以及复制的相关问题
     数据从MySQL迁移到Oracle的注意事项
     远程使用MySQL GUI工具
     mysqld_multi单机环境下启动多个mysql
     MySQL数据库所支持的操作系统
     掌握MaxDB和MySQL之间的特性差异
     MaxDB和MySQL之间的协同性
    相 关 文 章

    VMware下Linux与真实主机共享上网
    Linux系统安全隐患及加强安全管理方法
    各类Unix和Linux密码丢失解决方法
    配置Linux操作系统的环境变量
    在Linux系统下刷新主板BIOS的好方法
    Linux系统下硬盘挂载详细说明
    Linux文本模式下如何发送带附件的Email
    在Linux自动生成一个保险密码的方法
    Linux商业电影动画制作软件列表
    通过硬盘上的镜像文件安装Linux系统

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用