在我的C应用程序中,我将迁移到SQLite DB。
我在说的数据库上做实验。
我维护了一个写程序和三个读程序。
我总共有126220条记录(这些记录不是从文件中读取的,而是在生命周期中的某个时间点进行处理的)。
这些是我的观察结果。
当我具有下表结构(journal和synchronous设置为OFF)时

create table if not exists table1(
    col1 int primary key,
    col2 text,col3 text ,col4 text,
    col5 BLOB
)

读写时间分别为25.814秒和5.806秒。
当我具有下表结构(journal和synchronous设置为OFF)时
create table if not exists table1(
    col1 int primary key,
    col2 text,col3 text ,col4 text,
    col5 text
)

读写时间为70秒。
为什么这里有区别?我假设它取决于要写入的总字节数。
当单次读取完成时,所需时间为5秒,但如果我进行并行读取,则相同的操作将在3秒内完成。
再说一遍为什么这里有区别?
有人能告诉我如何序列化写操作吗?我试过使用sqlite_busy_handler,但是没有任何好的例子说明如何使用它?有人能帮我一下吗。读写操作在我的应用程序中并行执行

最佳答案

在内部,SQLite以完全相同的方式处理UTF-8文本和blob值,因此1之间的任何差异。和2。来自于程序处理数据的方式。
并发读取没有问题(只需要序列化写操作);SQLite缓存数据(以及操作系统)。通常,大部分时间都需要执行实际的I/O操作,因此当您进行两次读取时,只需要从磁盘读取一次数据。(只有访问特定页的第一个线程需要等待。通过预取,情况变得更加混乱。)

09-06 19:57