`
Zhongwei_leg
  • 浏览: 545901 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

sqlite 的数据插入速度问题

 
阅读更多

文章转载自 大象笔记

 

http://www.sunzhongwei.com

 

昨天写了一个将 5000 万行数据导入 sqlite 的程序。

 

就是简单的 key, value 型数据,key 为定长字符串,同时以此列为主键,建立索引。

 

最初的做法是,直接插入单表,每一万行数据为一个事务。用了一个晚上,大概 10 个小时,只插入了 2500万行。只完成了一半。最初的10万行数据,每一万行插入耗时都在1秒内。随着表内的数据增多,插入速度越来越慢,到 400万行时,每一万行数据插入耗时已经接近 20 秒。。。

 

翻看了 sqlite 官网的 FAQ,有这样的描述,大概意思是: 

在非单行事务的情况下,sqlite 在普通 PC 上能轻松达到 5 万行每秒的插入速度; 而在单行事务的情况下,7200转的硬盘只能达到 6 条每秒(因为要保证事务性,磁头就需要来回切换写入数据)。

 

所以,这里插入慢的原因应该是建立索引的耗时。

 

由于这些数据里有重复数据,所以不方便采用先插入数据,后建立索引的方式。只能进行分表,以减小表的规模。于是,分为 256 个表,以 key 的头两个字母做散列。只用了不到半个小时就插入完毕。

 

需要注意的是,尽量控制每个分表的每次插入数据在 1 万行以上,减少事务的耗时。

分享到:
评论
3 楼 Zhongwei_leg 2011-08-30  
一块可怜的牛皮糖 写道
把数据分成256个表,然后对key的前两个字符建立散列么?

是的
2 楼 一块可怜的牛皮糖 2011-08-25  
把数据分成256个表,然后对key的前两个字符建立散列么?
1 楼 Zhongwei_leg 2011-07-18  
万行     秒数
13       1
37       2
100     4
150     6
215     10
450     20

相关推荐

    Android批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果存在上万条数据插入的话,那需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度。 ...

    Android批量插入数据到SQLite数据库的方法

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度...

    QT sqlite数据库

    利用Qt 编写的数据库文件,简单的实现数据库功能

    数据库插入速度提升的demon

    此程序demon验证了sqlit3数据插入速度的提升方法,使用事务操作大幅度提升了数据插入的效率,可以下载参考,程序可以编译运行,gcc -sqlite_master.c -lsqlite3

    SQLite生成数据例子

    使用VS2005 C#语言开发,生成数据时使用事务插入数据库,速度非常快,有简单的计时器。

    SQLite 轻型数据库

    并且,SQLite是一个用C实现的类库,它在内存消耗、文件体积、简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的。 SQLite具有以下特征: 实现多数SQL92的标准,包括事务(原子性、一致性、隔离...

    SqlIte 3.5.4 (for .net)

    查询速度超快的数据库,自己测试过插入1000条数据,不用1秒时间! 官方主页: http://sqlite.phxsoftware.com/ 演示代码: using System; using System.Collections.Generic; using System.Text; using System.Data; ...

    SQLite(SqliteDev)

     //插入数据  sql = "INSERT INTO test VALUES('a','b')";  cmd.CommandText = sql;  cmd.ExecuteNonQuery();  //取出数据  sql = "SELECT * FROM test";  cmd.CommandText = sql;  System.Data.SQLite....

    Python操作sqlite3快速、安全插入数据(防注入)的实例

    更快地插入数据 在此用time.clock()来计时,看看以下三种方法的速度。复制代码 代码如下:import sqlite3import time def create_tables(dbname): conn = sqlite3.connect(dbname) cursor = conn.cursor() cursor....

    System.Data.SQLite 数据库详细介绍

    并且,SQLite是一个用C实现的类库,它在内存消耗、文件体积、简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的。SQLite具有以下特征:实现多数SQL92的标准,包括事务(原子性、一致性、隔离性...

    Swift版SQLite ORM框架PKLormapping

    •支持1级缓存,万级数据可达到百倍速度获取 •支持c中基础类型映射,推荐使用NSNumber进行封装 •支持分页查询,排序 •支持线程池,默认为1,可自定义 •支持多线程并发处理,线程安全 •支持HQL语句 •支持多表...

    SQLite 和Access 效率比较工具

    Sqlite 和Acces 各个性能比较(包括创建数据库、新建表,大数据量插入时的速度和效率等)

    SQLite ORM框架PKLormapping

    •支持1级缓存,万级数据可达到百倍速度获取 •支持c中基础类型映射,推荐使用NSNumber进行封装 •支持分页查询,排序 •支持线程池,默认为1,可自定义 •支持多线程并发处理,线程安全 •支持HQL语句 •支持多表...

    SQLite优化方法

    例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行 sqlite3_exec(db, “insert into name values ‘lxkxf’, ‘24′; ”, 0, 0, &zErrMsg); 将会重复的打开关闭数据库文件100万次,所以速度...

    SQLite封装类的实现及附带使用说明

    插入预先准备好的数据 for int i 0;i<m GlobalPublicManager m MaxSpleedDegree;i++ { CString SQL; SQL Format T "insert into SpleedDegree values %d 0 0 0 0 " i+1 ; db execDML...

    Android SQLite操作之大数据处理与同时读写方法

    本文实例讲述了Android SQLite操作之大数据处理与同时读写方法。分享给大家供大家参考,具体如下: 1. 批量写入 采用事物方式,先缓存数据,再批量写入数据,极大提高了速度 288条,直接inset into 耗时7秒 8640条,...

    PHP+sqlite数据库操作示例(创建/打开/插入/检索)

    它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相 结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起MySQL、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理 速度比他们...

    批量操作:C#SQL批量操作用于SQL Server,SQL Azure,SQL Compact,MySQL和SQLite的高性能C#批量插入,更新,删除和合并

    基准运作方式1,000行10,000行100,000行1,000,000行插6毫秒25毫秒200毫秒2,000毫秒更新资料50毫秒80毫秒575毫秒6,500毫秒删除45毫秒70毫秒625毫秒6,800毫秒合并65毫秒160毫秒1,200毫秒12,000毫秒插入速度与...

    BigData:SQLite单表4亿订单,大数据测试

    SQLite单表4亿订单,大数据测试 SQLite作为嵌入式数据库的翘楚,广受欢迎! 新生命团队自2010年以来,投入大量精力对SQLite进行学习研究,...插入速度 5000~16000tps,依赖CPU,HDD/SSD差别不大,主要受限于SQLite.D

    史上最强全面解析SQLite

    SQLite 第三版中的数据类型............................................................ 14 1.存储类别 ....................................................................... 14 2.列之间的亲和性 ...........

Global site tag (gtag.js) - Google Analytics