项目地址:
https://github.com/ayzhouwen/zwSqliteTest
注意点:
1.下面是springboot如何配置open模式, wal模式 的代码核心代码,sqlite-jdbc创建连接的代码中会将 Hikari数据源的属性依次创建,所以要改变其他的模式只要 hikariConfig.addDataSourceProperty即可
@Configuration
public class DefaultDatasource {
@Value("${spring.datasource.driver-class-name}")
private String driverName;
@Value("${spring.datasource.url}")
private String url;
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName(driverName);
hikariConfig.setJdbcUrl(url);
//sqlite能单连接写,不能多个连接并发写,如果业务层数多线程并发写会报Cause: org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
Integer busThreadNum=Runtime.getRuntime().availableProcessors()*2;
System.out.println("数据库连接数:"+busThreadNum);
hikariConfig.setMaximumPoolSize(1);
hikariConfig.setConnectionTestQuery("SELECT 1");
//在数据源设置打开模式属性值然后在传递给jdbc
SQLiteConfig config= new SQLiteConfig();
config.setOpenMode(SQLiteOpenMode.OPEN_URI);
config.setOpenMode(SQLiteOpenMode.READWRITE);
config.setOpenMode(SQLiteOpenMode.SHAREDCACHE);
config.setOpenMode(SQLiteOpenMode.NOMUTEX);
hikariConfig.setPoolName("springHikariCP");
hikariConfig.addDataSourceProperty(SQLiteConfig.Pragma.OPEN_MODE.pragmaName, config.getOpenModeFlags());
hikariConfig.addDataSourceProperty(SQLiteConfig.Pragma.JOURNAL_MODE.pragmaName, SQLiteConfig.JournalMode.WAL );
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
}
写操作测试结果:
1.dell i5 32g内存 g3 笔记本固态下测试
执行1000条数据总耗时 7445毫秒 每条记录大概7,8毫秒,tps大概是135
执行10000条数据总耗时 :80214毫秒 每条记录大概8毫秒,tps大概是125
执行100000条数据总耗时 :80214毫秒 每条记录大概8毫秒,tps大概是125
执行100000条数据总耗时 :780002毫秒 每条记录大概7.8毫秒,tps大概是128
2.在死循环极限写入下,并发进行读取没有开启wal模式测试
随机读主键操作执行完1000个记录耗时:2541.0毫秒, 每条记录大概需要2.54毫秒,qps大概:393.55
3.在死循环极限写入下,并发进行读取开启wal模式测试
随机读主键操作执行完1000个记录耗时:513.0毫秒, 每条记录大概需要0.51毫秒,qps大概:1949.32 ,读性能直接提升4倍多
4.神舟战神i7+16g内存机械盘测试
写操作执行完1000个记录耗时:105412.0毫秒, 每条记录大概需要105.41毫秒,tps大概:9.49
5.神舟战神i7+16g内存固态测试
写操作执行完1000个记录耗时:8045.0毫秒, 每条记录大概需要8.04毫秒,tps大概:124.3
写操作执行完10000个记录耗时:83783.0毫秒, 每条记录大概需要8.38毫秒,tps大概:119.36
读操作测试结果
1.dell i5 32g内存 g3 笔记本固态下测试:
多连接随机读主键操作执行完10000个记录耗时:399毫秒, 每条记录大概需要0.0399毫秒,tps大概:25000
单连接随机读主键操作执行完10000个记录耗时:1156毫秒, 每条记录大概需要0.1156毫秒,tps大概:8000
2.神舟战神i7+16g内存固态盘测试:
单连接随机读主键操作执行完1000个记录耗时:363.0毫秒, 每条记录大概需要0.36毫秒,qps大概:2754.82
单连接随机读主键操作执行完10000个记录耗时:1681.0毫秒, 每条记录大概需要0.17毫秒,qps大概:5948.84
3.神舟战神i7+16g内存机械盘测试:
单连接随机读主键操作执行完1000个记录耗时:372.0毫秒, 每条记录大概需要0.37毫秒,qps大概:2688.17
单连接随机读主键操作执行完10000个记录耗时:1615.0毫秒, 每条记录大概需要0.16毫秒,qps大概:6191.95