在我的C应用程序中,我将转向SQLite DB。 我正在对所述数据库进行实验。 我维护了1个编写器进程和3个阅读器进程。 我拥有的总记录是126220(这些记录不是从文件中读取的;它们是在生命周期中的某个时刻处理的。)
这些是我的观察。
当我有以下表结构(日志和同步设置为OFF)时
create table if not exists table1(
col1 int primary key,
col2 text,col3 text ,col4 text,
col5 BLOB
)
写入和读取时间分别为25.814秒和5.806秒。
当我有以下表结构(日志和同步设置为OFF)时
create table if not exists table1(
col1 int primary key,
col2 text,col3 text ,col4 text,
col5 text
)
写入和读取时间为70秒。
为何与众不同?我假设它取决于要写入的总字节数。
单次读取时间为5秒,但如果我进行并行读取,则会在3秒内完成。
为什么这里有区别?
有人能告诉我如何序列化write.i尝试使用sqlite_busy_handler,但我得到了如何使用的任何好例子?有人可以帮我这个。读写操作在我的应用程序中并行执行
答案 0 :(得分:0)
在内部,SQLite以完全相同的方式处理UTF-8文本和blob值,因此1.和2之间的任何差异都来自程序处理数据的方式。
并发读取没有问题(只需要序列化写入);和SQLite缓存数据(以及操作系统)。通常,执行实际I / O需要大部分时间,因此当您进行两次读取时,只需要从磁盘读取一次数据。 (只有访问特定页面的第一个线程需要等待。通过预取,情况变得更加混乱。)