文章转载自 大象笔记
昨天写了一个将 5000 万行数据导入 sqlite 的程序。
就是简单的 key, value 型数据,key 为定长字符串,同时以此列为主键,建立索引。
最初的做法是,直接插入单表,每一万行数据为一个事务。用了一个晚上,大概 10 个小时,只插入了 2500万行。只完成了一半。最初的10万行数据,每一万行插入耗时都在1秒内。随着表内的数据增多,插入速度越来越慢,到 400万行时,每一万行数据插入耗时已经接近 20 秒。。。
翻看了 sqlite 官网的 FAQ,有这样的描述,大概意思是:
在非单行事务的情况下,sqlite 在普通 PC 上能轻松达到 5 万行每秒的插入速度; 而在单行事务的情况下,7200转的硬盘只能达到 6 条每秒(因为要保证事务性,磁头就需要来回切换写入数据)。
所以,这里插入慢的原因应该是建立索引的耗时。
由于这些数据里有重复数据,所以不方便采用先插入数据,后建立索引的方式。只能进行分表,以减小表的规模。于是,分为 256 个表,以 key 的头两个字母做散列。只用了不到半个小时就插入完毕。
需要注意的是,尽量控制每个分表的每次插入数据在 1 万行以上,减少事务的耗时。
相关推荐
在本文中,我们将深入探讨如何使用C#进行SQLite的基本操作,特别是关注批量插入功能,这在处理大量数据时尤其有用,如标题所述,可以实现百万级数据的秒级插入。SQLite是一个轻量级的数据库引擎,它允许在无需服务器...
- 使用高速SSD硬盘,而非传统的机械硬盘,可以显著提高SQLite的读写速度,尤其是在大量数据插入时。 以上是关于“SQLite高性能插入数据”的一些关键知识点。实际应用中,需要结合具体业务场景,通过测试和调优找到...
每次调用该函数都会引发一次数据库事务,涉及I/O操作,这在大量数据插入时会显著降低性能。 相比之下,批量插入能显著提升性能,因为它减少了数据库事务的次数。一种常见的批量插入策略是构建一个包含多个`INSERT`...
在本文中,我们将深入探讨如何通过优化SQLite3的源代码来提高数据插入性能,尤其是如何利用事务和执行准备来实现每秒百万条数据的写入速度。 首先,了解SQLite3的事务机制是至关重要的。在SQLite3中,事务用于确保...
Android 系统下的 App 程序对运行中用到的数据源提供了多种存取方式,当对数据进行频繁增加、删除、改写、插入等操作时,SQLite 数据库成为主要存储方式。SQLite 数据库是一种轻量级的关系数据库管理系统,它具有...
SQLite支持SQL标准,包括创建表、插入数据、更新数据、删除数据以及查询数据等基本操作。对于大数据量的处理,SQLite提供了一些关键特性和策略: 1. **批量操作**:在处理大量数据时,一次性插入或更新大量记录比...
在C#/.Net环境中,对SQLite数据库进行快速批量插入测试数据是常见的开发需求,尤其是在测试、性能优化或者数据初始化时。下面将详细讲解如何利用C#/.Net的特性以及SQLite数据库API来实现这一目标。 首先,SQLite是...
"SQLite数据导入工具"是为了帮助用户方便地将数据批量导入到SQLite数据库中而设计的实用程序。这样的工具通常支持多种数据格式,如CSV、Excel、XML或者JSON,以便于从不同来源的数据源进行迁移或整合。通过使用这类...
本“sqlite数据加密demo程序”提供了一个完整的解决方案,帮助开发者了解并实现Android平台上SQLite数据库的加解密功能。 在Android应用开发中,SQLite数据库通常用于存储应用程序的数据。然而,这些数据以明文形式...
Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果存在上万条数据插入的话,那需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度。 ...
虚拟列表读取Sqlite数据的核心在于实现CListCtrl的LVN_GETDISPINFO通知处理。这个通知会在控件需要显示某个项时发送,这时你需要根据传入的参数获取对应的数据并填充。通过Sqlite的API,你可以编写查询语句,动态从...
通过SQLiteODBC,开发人员可以利用ODBC标准API来访问SQLite数据库,从而在不同平台上实现对SQLite数据的操作。 #### 二、SQLiteODBC的关键作用 1. **平台兼容性**:SQLiteODBC支持Windows、Linux、macOS等多种操作...
QT sqlite数据库是一个重要的主题,尤其对于使用Qt框架进行软件开发的程序员来说。Qt是一个流行的开源C++库,它提供了一整套工具,用于构建跨平台的桌面和移动应用程序。SQLite则是一个轻量级、文件式的数据库引擎,...
在使用SQLite与Entity Framework时,还需要注意一些兼容性和配置问题,例如设置正确的连接字符串、确保SQLite驱动程序已正确安装并注册到GAC(全局程序集缓存),以及处理特定于SQLite的数据类型和功能。 总之,...
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度...
总结一下,这个例子展示了如何在VS2005和C#环境中利用SQLite数据库进行数据插入,特别是在大量数据处理时,使用事务能显著提高性能并保证数据一致性。同时,通过计时器我们可以评估不同策略对插入速度的影响,从而...
SQLite是一个轻量级的数据库引擎,它被广泛应用于移动设备和嵌入式系统中,因为它的体积小、速度快且无需服务器进程。在Android系统中,SQLite是默认的数据库解决方案,用于应用程序的数据存储。本篇文章将深入探讨...
4. **优化数据库设计**:确保目标表有良好的索引和分区策略,可以进一步提高插入速度。 5. **减少数据库往返**:尽量减少不必要的数据库查询,例如,通过一次性获取所有需要的数据库对象,而不是在循环中多次查询。...
5. 性能优化:ODBC驱动程序通常会包含一些性能优化策略,比如缓存机制,以提高数据读写速度。 6. 安全性:ODBC驱动还可能提供安全特性,如用户认证、权限控制等,以确保数据的安全。 在压缩包文件“sqlite3数据库 ...
SQLite是Android系统中内置的一种轻型关系型数据库,它无需单独的服务器进程,不依赖网络,可以直接嵌入到应用程序中,非常适合存储和管理应用程序中的结构化数据。在Android开发中,SQLite是处理本地数据的主要方式...