改变写入和读取延迟

时间:2015-10-26 04:58:53

标签: c sqlite

在我的C应用程序中,我将转向SQLite DB。 我正在对所述数据库进行实验。 我维护了1个编写器进程和3个阅读器进程。 我拥有的总记录是126220(这些记录不是从文件中读取的;它们是在生命周期中的某个时刻处理的。)

这些是我的观察。

  1. 当我有以下表结构(日志和同步设置为OFF)时

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

    写入和读取时间分别为25.814秒和5.806秒。

  2. 当我有以下表结构(日志和同步设置为OFF)时

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

    写入和读取时间为70秒。

    为何与众不同?我假设它取决于要写入的总字节数。

  3. 单次读取时间为5秒,但如果我进行并行读取,则会在3秒内完成。

    为什么这里有区别?

  4. 有人能告诉我如何序列化write.i尝试使用sqlite_busy_handler,但我得到了如何使用的任何好例子?有人可以帮我这个。读写操作在我的应用程序中并行执行

1 个答案:

答案 0 :(得分:0)

在内部,SQLite以完全相同的方式处理UTF-8文本和blob值,因此1.和2之间的任何差异都来自程序处理数据的方式。

并发读取没有问题(只需要序列化写入);和SQLite缓存数据(以及操作系统)。通常,执行实际I / O需要大部分时间,因此当您进行两次读取时,只需要从磁盘读取一次数据。 (只有访问特定页面的第一个线程需要等待。通过预取,情况变得更加混乱。)