`

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

相关推荐

    c# 对sqlite基本操作,带批量插入(百万级秒插)

    在本文中,我们将深入探讨如何使用C#进行SQLite的基本操作,特别是关注批量插入功能,这在处理大量数据时尤其有用,如标题所述,可以实现百万级数据的秒级插入。SQLite是一个轻量级的数据库引擎,它允许在无需服务器...

    sqlite高性能插入数据

    - 使用高速SSD硬盘,而非传统的机械硬盘,可以显著提高SQLite的读写速度,尤其是在大量数据插入时。 以上是关于“SQLite高性能插入数据”的一些关键知识点。实际应用中,需要结合具体业务场景,通过测试和调优找到...

    C语言实现SQLite的批量插入及性能对比

    每次调用该函数都会引发一次数据库事务,涉及I/O操作,这在大量数据插入时会显著降低性能。 相比之下,批量插入能显著提升性能,因为它减少了数据库事务的次数。一种常见的批量插入策略是构建一个包含多个`INSERT`...

    sqlite3性能优化源代码 数据插入 开启事务 执行准备 性能提升 每秒百万条数据写入

    在本文中,我们将深入探讨如何通过优化SQLite3的源代码来提高数据插入性能,尤其是如何利用事务和执行准备来实现每秒百万条数据的写入速度。 首先,了解SQLite3的事务机制是至关重要的。在SQLite3中,事务用于确保...

    Android手机App程序中SQLite数据存储应用.pdf

    Android 系统下的 App 程序对运行中用到的数据源提供了多种存取方式,当对数据进行频繁增加、删除、改写、插入等操作时,SQLite 数据库成为主要存储方式。SQLite 数据库是一种轻量级的关系数据库管理系统,它具有...

    sqlite数据库 大数据量处理demo

    SQLite支持SQL标准,包括创建表、插入数据、更新数据、删除数据以及查询数据等基本操作。对于大数据量的处理,SQLite提供了一些关键特性和策略: 1. **批量操作**:在处理大量数据时,一次性插入或更新大量记录比...

    C#/.Net 中快速批量给SQLite数据库插入测试数据

    在C#/.Net环境中,对SQLite数据库进行快速批量插入测试数据是常见的开发需求,尤其是在测试、性能优化或者数据初始化时。下面将详细讲解如何利用C#/.Net的特性以及SQLite数据库API来实现这一目标。 首先,SQLite是...

    sqlite数据导入工具

    "SQLite数据导入工具"是为了帮助用户方便地将数据批量导入到SQLite数据库中而设计的实用程序。这样的工具通常支持多种数据格式,如CSV、Excel、XML或者JSON,以便于从不同来源的数据源进行迁移或整合。通过使用这类...

    sqlite数据加密demo程序

    本“sqlite数据加密demo程序”提供了一个完整的解决方案,帮助开发者了解并实现Android平台上SQLite数据库的加解密功能。 在Android应用开发中,SQLite数据库通常用于存储应用程序的数据。然而,这些数据以明文形式...

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

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

    MFC CListCtrl虚表读取Sqlite数据

    虚拟列表读取Sqlite数据的核心在于实现CListCtrl的LVN_GETDISPINFO通知处理。这个通知会在控件需要显示某个项时发送,这时你需要根据传入的参数获取对应的数据并填充。通过Sqlite的API,你可以编写查询语句,动态从...

    sqliteodbc驱动sqlite3

    通过SQLiteODBC,开发人员可以利用ODBC标准API来访问SQLite数据库,从而在不同平台上实现对SQLite数据的操作。 #### 二、SQLiteODBC的关键作用 1. **平台兼容性**:SQLiteODBC支持Windows、Linux、macOS等多种操作...

    QT sqlite数据库

    QT sqlite数据库是一个重要的主题,尤其对于使用Qt框架进行软件开发的程序员来说。Qt是一个流行的开源C++库,它提供了一整套工具,用于构建跨平台的桌面和移动应用程序。SQLite则是一个轻量级、文件式的数据库引擎,...

    SQLite数据库创建EntityFramework数据模型支持程序

    在使用SQLite与Entity Framework时,还需要注意一些兼容性和配置问题,例如设置正确的连接字符串、确保SQLite驱动程序已正确安装并注册到GAC(全局程序集缓存),以及处理特定于SQLite的数据类型和功能。 总之,...

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

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

    SQLite生成数据例子

    总结一下,这个例子展示了如何在VS2005和C#环境中利用SQLite数据库进行数据插入,特别是在大量数据处理时,使用事务能显著提高性能并保证数据一致性。同时,通过计时器我们可以评估不同策略对插入速度的影响,从而...

    SQLite数据库存储数据代码

    SQLite是一个轻量级的数据库引擎,它被广泛应用于移动设备和嵌入式系统中,因为它的体积小、速度快且无需服务器进程。在Android系统中,SQLite是默认的数据库解决方案,用于应用程序的数据存储。本篇文章将深入探讨...

    C#.NET中如何批量插入大量数据到数据库中

    4. **优化数据库设计**:确保目标表有良好的索引和分区策略,可以进一步提高插入速度。 5. **减少数据库往返**:尽量减少不必要的数据库查询,例如,通过一次性获取所有需要的数据库对象,而不是在循环中多次查询。...

    sqlite3 驱动 for odbc

    5. 性能优化:ODBC驱动程序通常会包含一些性能优化策略,比如缓存机制,以提高数据读写速度。 6. 安全性:ODBC驱动还可能提供安全特性,如用户认证、权限控制等,以确保数据的安全。 在压缩包文件“sqlite3数据库 ...

    sqlite数据的使用例子(android)

    SQLite是Android系统中内置的一种轻型关系型数据库,它无需单独的服务器进程,不依赖网络,可以直接嵌入到应用程序中,非常适合存储和管理应用程序中的结构化数据。在Android开发中,SQLite是处理本地数据的主要方式...

Global site tag (gtag.js) - Google Analytics