文章转载自 大象笔记
昨天写了一个将 5000 万行数据导入 sqlite 的程序。
就是简单的 key, value 型数据,key 为定长字符串,同时以此列为主键,建立索引。
最初的做法是,直接插入单表,每一万行数据为一个事务。用了一个晚上,大概 10 个小时,只插入了 2500万行。只完成了一半。最初的10万行数据,每一万行插入耗时都在1秒内。随着表内的数据增多,插入速度越来越慢,到 400万行时,每一万行数据插入耗时已经接近 20 秒。。。
翻看了 sqlite 官网的 FAQ,有这样的描述,大概意思是:
在非单行事务的情况下,sqlite 在普通 PC 上能轻松达到 5 万行每秒的插入速度; 而在单行事务的情况下,7200转的硬盘只能达到 6 条每秒(因为要保证事务性,磁头就需要来回切换写入数据)。
所以,这里插入慢的原因应该是建立索引的耗时。
由于这些数据里有重复数据,所以不方便采用先插入数据,后建立索引的方式。只能进行分表,以减小表的规模。于是,分为 256 个表,以 key 的头两个字母做散列。只用了不到半个小时就插入完毕。
需要注意的是,尽量控制每个分表的每次插入数据在 1 万行以上,减少事务的耗时。
相关推荐
Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果存在上万条数据插入的话,那需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度。 ...
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度...
利用Qt 编写的数据库文件,简单的实现数据库功能
此程序demon验证了sqlit3数据插入速度的提升方法,使用事务操作大幅度提升了数据插入的效率,可以下载参考,程序可以编译运行,gcc -sqlite_master.c -lsqlite3
使用VS2005 C#语言开发,生成数据时使用事务插入数据库,速度非常快,有简单的计时器。
并且,SQLite是一个用C实现的类库,它在内存消耗、文件体积、简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的。 SQLite具有以下特征: 实现多数SQL92的标准,包括事务(原子性、一致性、隔离...
查询速度超快的数据库,自己测试过插入1000条数据,不用1秒时间! 官方主页: http://sqlite.phxsoftware.com/ 演示代码: using System; using System.Collections.Generic; using System.Text; using System.Data; ...
//插入数据 sql = "INSERT INTO test VALUES('a','b')"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); //取出数据 sql = "SELECT * FROM test"; cmd.CommandText = sql; System.Data.SQLite....
更快地插入数据 在此用time.clock()来计时,看看以下三种方法的速度。复制代码 代码如下:import sqlite3import time def create_tables(dbname): conn = sqlite3.connect(dbname) cursor = conn.cursor() cursor....
并且,SQLite是一个用C实现的类库,它在内存消耗、文件体积、简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的。SQLite具有以下特征:实现多数SQL92的标准,包括事务(原子性、一致性、隔离性...
•支持1级缓存,万级数据可达到百倍速度获取 •支持c中基础类型映射,推荐使用NSNumber进行封装 •支持分页查询,排序 •支持线程池,默认为1,可自定义 •支持多线程并发处理,线程安全 •支持HQL语句 •支持多表...
Sqlite 和Acces 各个性能比较(包括创建数据库、新建表,大数据量插入时的速度和效率等)
•支持1级缓存,万级数据可达到百倍速度获取 •支持c中基础类型映射,推荐使用NSNumber进行封装 •支持分页查询,排序 •支持线程池,默认为1,可自定义 •支持多线程并发处理,线程安全 •支持HQL语句 •支持多表...
例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行 sqlite3_exec(db, “insert into name values ‘lxkxf’, ‘24′; ”, 0, 0, &zErrMsg); 将会重复的打开关闭数据库文件100万次,所以速度...
插入预先准备好的数据 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操作之大数据处理与同时读写方法。分享给大家供大家参考,具体如下: 1. 批量写入 采用事物方式,先缓存数据,再批量写入数据,极大提高了速度 288条,直接inset into 耗时7秒 8640条,...
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相 结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起MySQL、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理 速度比他们...
基准运作方式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毫秒插入速度与...
SQLite单表4亿订单,大数据测试 SQLite作为嵌入式数据库的翘楚,广受欢迎! 新生命团队自2010年以来,投入大量精力对SQLite进行学习研究,...插入速度 5000~16000tps,依赖CPU,HDD/SSD差别不大,主要受限于SQLite.D
SQLite 第三版中的数据类型............................................................ 14 1.存储类别 ....................................................................... 14 2.列之间的亲和性 ...........