sqlite3数据库最大可以是多大?可以存放多少数据?读写性能怎么样?

sqlite是款不错的数据库,使用方便,不需要事先安装软件,事先建表。很多人担心它的性能和数据存储量问题。

比如有的网友问:Sqlite数据库最大可以多大呀?会不会像acc数据库那样,几十MB就暴掉了?
不会的,放心用SQLite, 这是两个数量级的东西, 看下面的说明。
Access不能算真正意义上的数据库,但是Access是前台和后台在一起,对小用户还是有其优点。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有14个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

根据SQLite的官方提示:http://www.sqlite.org/limits.html
SQLIte数据库最大支持128TiB(140 terabytes, or 128 tebibytes, or 140,000 gigabytes or 128,000 gibibytes).

此外,关于性能。本人也在网上查了大量资料:

在2011年,有网友发表观点:
“不得了了,在7G文件大小下,6千万条记录的有索引某个表中,查询条件如果是索引字段,不管什么位置,查询都不要1ms时间。”
“但如果查询条件不是索引字段的话,最后一条记录的查询竟然需要589秒啊,不是ms啊。在1千万条记录前插入1百万条记录需要120秒,在6千万条记录后插入1百万条记录需要156秒。“

SQLite极致性能提升方法:
关闭同步,Synchronous=Off,提升性能。添删改操作时不必同步等待写入磁盘,操作系统会延迟若干毫秒批量写入
设置WAL模式,Journal Mode=WAL,减少锁定。写入向前日志模式,避免多线程访问时锁定数据库,写入时不必使用排它锁影响其它线程读取,而是把事务操作写入到WAL文件中,延迟合并
加大缓存,Cache Size=5000,提升性能。操作系统通过文件映射MapFile把整个数据库文件映射进入内存,实际查询时会把用到数据所在附近页预先加载进入缓存,极大提升查询性能
插入速度 5000~16000tps,依赖CPU,HDD/SSD差别不大,主要受限于SQLite.Data.dll的Prepare
查询速度 非首次查询,缓存命中以后,索引查询基本上都是毫秒级。数据库较大则相应加大缓存,速度不变。
查记录数 单表数据超过一千万行以后,尽量不要使用Select Count,否则可能需要十几秒到半分钟的样子才能返回。NewLife.XCode封装了‘Meta.Count‘

当然,SQLite不适合多线程高并发写入,多线程高并发读取倒是非常不错。
因为数据库就在进程内,高并发读取一般比其它RDS要快一大截。
总的来说,SQLite数据库甭管多少数据多大库文件,只要配置得当,内存管够,性能不是太大问题!

SQLite大数据测试
为了验证SQLite的性能巅峰,我们来做一个大数据测试。
模拟每天4亿票销售订单,分表分库,每天一个数据库文件,有订单号、部门节点、时间等。
1, Test项目生成4亿行订单数据,主键自增ID,订单号建立索引,文件大小26.5G
2, Web项目,魔方+XCode,首次查询较慢,约427毫秒,需要预热
不同机器的首次查询时间偏差比较大,最大可能达到几秒钟
本机第一次启动该项目时,魔方需要从公网下载SQLite驱动文件以及样式资源文件
3, 第二页,99毫秒,操作系统文件映射缓存生效
4, 第20000页,147毫秒,系统缓存依然生效
5, 第200000页,32021毫秒,距离太远,文件系统缓存没有命中
6, 第200001页,867毫秒,缓存命中
7, 查询一个中间订单号000199999980,20毫秒,索引命中
显然,只要有索引,多大数据都不怕。
8, 本地内存占用150M。虽然整个数据库26.5G,但操作系统只会加载需要部分
对于重要程度不是特别高的场合,可以大量使用SQLite库保存历史数据,平时用不到的时候只占硬盘,不占内存
9, 记录数Select Count(select count(*)from xxx),362058毫秒,约6分钟,超级慢,这建议进行这种操作。

原文地址:https://www.cnblogs.com/derekhan/p/10897421.html

时间: 2024-10-12 08:18:24

sqlite3数据库最大可以是多大?可以存放多少数据?读写性能怎么样?的相关文章

【阿里云产品公测】利用PTS服务优化网站数据库读写性能

[阿里云产品公测]利用PTS服务优化网站数据库读写性能 作者:阿里云用户千鸟 写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时候产生故障,于是简单分析了一下数据库读写的性能优化以及利用PTS的测试结果,整理出来和大家分享一下,顺便参加一下这个活动.        几乎所有的网站都需要数据库来存储网站中的相关信息,因此在网站应用与数据库的交互过程中,数据库数据读取的性能对网站整体的性能是至关重要的. ?      通常我们在

iOS sqlite3数据库解析

看来从版本3.3.1基本上已经支持线程句柄的传递功能.具体限制我标记了一下.(6) Is SQLite threadsafe?SQLite is threadsafe. We make this concession since many users choose to ignore the advice given in the previous paragraph. But in order to be thread-safe, SQLite must be compiled with th

Cocos移植到Android的一些问题-SQLite3数据库移植问题

首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一种是从SQLite官网下载源代码拷贝的工程中.第一种方法配置起来比较麻烦,关键是Cocos2d-x提供的SQLite3库只是Win32没有其它平台的,目录结构如下所示.<游戏工程目录>\cocos2d\external\sqlite3│  Android.mk│├─include│      sq

sqlite3数据库的简要应用

Sqlite3数据库升级方案的变化. 1,  若是讲要升级的数据库版本更高,则从低版本数据库中拷贝与新数据库相同字段的内容,其他字段按照默认值创建.A->B->C这样逐个版本升级,每个版本升级对应一段代码.若是升级到更低版本数据库,则将数据库全部删掉重建. 2,  直接比对当前运行的数据库版本,和将要升级的最新的数据库版本(A->C),把相同的字段保存下来,不同的字段直接按照默认值方式升级.这样可以来回升级,尽量保存了更多的字段的内容. //创建一个table表,在insert语句(按照

python sqlite3 数据库操作

SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 2. python sqlite3模块的API """ sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的链接.您可以使用 ":memory:" 来在 RA

Unity3d在各个平台读取Sqlite3数据库

这也是我第一次在Unity3d中使用Sqlite来作为配置表文件,当然了,SQLite有优秀的读写性能. 如果这个项目用着稳定的话,我会一直使用下去. Android平台: 1,下载libsqlite3.so到assets-plugins-android下面 2,在Unity目录下找到Mono.Data.Sqlite.dll,这样便可以在Android真机上读到数据库文件 PC-Mac-iOS平台: 1,在Unity目录下找到Mono.Data.Sqlite.dll,sqlite3.dll这两个

iOS SQLite3数据库操作

iOS中数据持久化分为四种:属性列表.对象归档.SQLite3和Core Data,SQLite3数据库操作是一个必不或缺的技术. SQLite3简介 SQLite3数据库是移动端(iOS.Android.嵌入式)上认定的关系型数据库,与MySQL.Oracle等数据库相比,具有轻量级的优势,这就造成了体积小.迅速.简单功能依旧强大等优势. SQLite3语句特点 不区分大小写 每一句以:结尾 SQLite字段类型 integer:整型 real:浮点值 text:文本字符串 blob:二进制类

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

如何在PHP5中通过PDO连接SQLite3数据库

通过PHP跟PDO配置SQLite数据库是一件很繁琐的事情,经过一下午的研究,终于理清了里面的思路.现在拿出来跟大家共享.初学,错误请指出. 首先我们先选择要使用的web server 软件,由于从兼容性跟性能方面的需求,我选择了目前来说最新版的apache. 第二步,我们要使用目前最新版本的PHP zip package .这里提示大家一下,经过我痛苦的反复的实验跟查看资料,如果大家想要使用PDO扩展连接到SQLite数据库的话,请你一定不要选择安装包,因为它不支持很多PHP的扩展库文件. 第