在perl中连接和使用sqlite做数据存储
Perl使用sqlite和使用mysql一样容易.非常喜欢这种风格.
perl使用sqlite
SQLite模块定义的“数据库”是存在于单个文件中的,把单个文件仿真为一个数据库。这个还是相当方便的.
当我们在使用perl的DBI连接时,dbname参数指定为该文件名。不像大多数的关系型数据库,在DBD::SQLite定义的数据库不是服务器/客户短架构,没有服务器,它直接与文件交换数据。
多个进程可以同时从一个文件中读取数据(此时用SELECTs命令),但是只有一个进程能向文件中写数据(当一个进程写数据的时候其它的进程被挂起)。SQLite支持事务功能,也就是,你可以向多个表做出一系列改动,但是只要你不向SQLite提交这些改动,更新就不会写到文件中。
SQLite定义的数据库里面没有数据类型这个概念。不管你在创建一个表的时候指定的是什么数据类型,以后你可以在其中放入任何类型的数值(包括字符型,数字型,日期型,二进制对象/blob)。实际上,创建表的时候你甚至可以不指定数据类型。
CREATE TABLE people ( id, name, age);
SQLite只有在要比较数据的时候,如用WHERE 子句或对某些值进行排序,才会考虑数据类型。SQLite在比较数据的时候,只考虑被比较对象的类型,而不管被比较对象所在列的其它数据是什么类型。像 Perl一样,SQLite只能识别字符型和数字型。两个数值总是以浮点类型进行比较,两个字符串直接比较。当不同类型的数据比较的时候,数字总是比字符小。只有一种情况SQLite才会关心你为某一列申明的数据类型(需要创建一个值自增加的列的时候)。你可以把这列的类型指定为:“INTEGER PRIMARY KEY”。
CREATET ABLE people( id INTEGER PRIMARY KEY, name, age);
SQLite支持8位长的字符编码,但是不识别ASCII中的NULL符“\\0”。唯一的变通方法就是在你存储数据之前自行编码,然后在取出数据之后再手工解码,就象URL编码或Base64编码方式一样。这甚至可以用在BLOB字段里面。
以下是代码片段: use DBI; $dbh=DBI->connect(“dbi:SQLite:dbname=./info.db”,”",”",{RaiseError=>1,AutoCommit=>0}); # 在perl中,sqlite建表 my $sql = “create table ip (id int null, name int null)”; $dbh->do( $sql); # 使用perl来更新sqlite的表内容 my $sql = “alter table ip add column age varchar(1024) null”; $dbh->do( $sql); # 插入数据 my $sql = “insert into name values( 1, 2, ‘myname’)”; $dbh->do( $sql ); if ( $dbh->err() ) { die “$DBI::errstr\n”; } $dbh->commit(); # 查询数据 $sql = “select * from ip”; my $dbconn = $dbh->prepare($sql); $dbconn->execute(); while ( my @row_ary = $dbconn->fetchrow_array ){ my ($cc,$bb,$dd) = @row_ary; } $dbh->disconnect(); |
SQLite插入时使用事件
SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度。如果写入大量的数据时,记的要使用事件,我插入6W条数据。不使用事件要用10分钟,使用事件只有3秒.
BEGIN;.READ ip.sqlCOMMIT;
对sqlite速度进行了一下简单的测试
查5k日志中的ip地址信息
1.建表后默认的速度
sqlite的查找速度用时
real 3m53.812s
2.建索引后
sqlite> create index ipbegin_index on ip(ipbegin);sqlite> create index ipend_index on ip(ipend);
sqlite的查找速度用时(这个太奇怪了反到慢了)
real 9m53.663s
2.使用sqlite来建复合索引
sqlite的查找速度用时(这个太奇怪了反到慢了)
2m8.845s
建议继续学习:
- HFile存储格式 (阅读:14521)
- 我对技术方向的一些反思 (阅读:9851)
- 淘宝图片存储架构 (阅读:9810)
- perl更新/修改/删除文本文件内容 (阅读:9424)
- 海量小文件存储 (阅读:7541)
- HBase技术介绍 (阅读:6738)
- perl大牛flw传说 (阅读:6506)
- 存储基础知识之——硬盘接口简述 (阅读:6123)
- perl模块Getopt::Std用法及实例-从命令行读取参数模块 (阅读:5867)
- [Perl] Template::Toolkit 模板技术. (阅读:5361)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶凯 来源: 扶凯
- 标签: perl sqlite 存储
- 发布时间:2009-12-21 23:31:21
- [66] Go Reflect 性能
- [65] Oracle MTS模式下 进程地址与会话信
- [64] 如何拿下简短的域名
- [59] android 开发入门
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 图书馆的世界纪录
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则