技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 在perl中连接和使用sqlite做数据存储

在perl中连接和使用sqlite做数据存储

浏览:4915次  出处信息

    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

建议继续学习:

  1. HFile存储格式    (阅读:14407)
  2. 淘宝图片存储架构    (阅读:9643)
  3. 我对技术方向的一些反思    (阅读:9677)
  4. perl更新/修改/删除文本文件内容    (阅读:9315)
  5. 海量小文件存储    (阅读:7373)
  6. HBase技术介绍    (阅读:6574)
  7. perl大牛flw传说    (阅读:6445)
  8. 存储基础知识之——硬盘接口简述    (阅读:5915)
  9. perl模块Getopt::Std用法及实例-从命令行读取参数模块    (阅读:5748)
  10. [Perl] Template::Toolkit 模板技术.    (阅读:5311)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1