专栏首页智能大石头每天4亿行SQLite订单大数据测试(源码)

每天4亿行SQLite订单大数据测试(源码)

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

SQLite作为嵌入式数据库的翘楚,广受欢迎! 新生命团队自2010年以来,投入大量精力对SQLite进行学习研究,成功应用于各系统非致命数据场合。

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,362058毫秒,约6分钟,超级慢

SQLite在云端

http://bigdata.newlifex.com/Admin admin/admin

  • 租用阿里云最低配置ECS,单核1G,1M带宽,每年300块,每天九毛钱
  • 部署BigData项目到ECS,访问正常

源码及数据库

大数据源码 http://git.newlifex.com/Stone/BigData 大数据镜像 https://github.com/nnhy/BigData 4亿订单数据 http://pan.baidu.com/s/1skZJ2ih 2亿订单数据 http://pan.baidu.com/s/1bo9NFFx 数据库下载后,解压缩得到Data.db,拷贝到Web并排的Data里面,Data里面还有一个Membership.db

C#/.Net大数据讨论群:1600800

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 充血模型的ORM能做什么?——ORM组件XCode(十八般武艺)

    ORM组件XCode(十八般武艺) 之前,XCode总是若隐若现,耐性好的同学想知道它还有啥特点,沉不住气的则认为不过是CURD耳! XCode开发模式是灵魂,...

    大石头
  • [NewLife.XCode]百亿级性能

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCo...

    大石头
  • [NewLife.XCode]高级查询(化繁为简、分页提升性能)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCo...

    大石头
  • Flask 入门系列教程(五)

    既然是应用程序,那么数据库就是必不可少的一部分。数据库按照一定规则保存程序数据,程序再发起查询取回所需的数据。Web 程序最常用基于关系模型的数据库,这种数据库...

    周萝卜
  • 干货 | Python+MySQL数据库操作

    本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍:

    用户1621951
  • JDBC 规范回顾

    JDBC 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。java 提供了jdbc的接口...

    码农小胖哥
  • 如何设计出高可用、高性能的接口

    当我们设计接口,我们或多或少都会有上面列举的一些考虑,我们只有想的更多才能让让我们的接口更加完善,我个人觉得100%完美的接口是不存在,只有适合才是最重要。

    IT小马哥
  • 旅游业“十宗罪”最佳解决方案,VR带你提前踩点

    VRPinea
  • 灰色产业链成病毒传播最大渠道 流量生意或迎来最后的疯狂

    【快讯】劫持浏览器、刷取流量等行为是流氓软件常见行为,而随着安全厂商持续打击、普通用户的安全意识提升,让病毒团伙、流氓软件厂商的获利空间被逐渐压缩。近期,“火绒...

    用户6477171
  • 11.11 VR圈大事件: 双十一不要只顾淘宝 ,看看今日VR圈发什么了哪些事

    VRPinea

扫码关注云+社区

领取腾讯云代金券