SQLite使用日志

最近又测试了一下内存数据库SQLite,发现功能增强了好多,比如多线程支持(用文件锁的方式实现的),并且也可以全内存化(用":memory:"的方式打开即可)了。

 

由于多线程的支持是通过操作系统文件锁的方式实现的,所以当以全内存数据库(即无磁盘文件)的方式打开SQLite时,就不支持多线程了,必须自行实现读写锁以互斥,推荐使用ACE读写锁。

 

由于SQLite的锁是文件锁的方式实现,所以它不能实现表级锁,而只能是全数据库文件锁。另外,线程间不能以共享数据库指针的方式实现共享,而要分别打开一个SQLite实例,互斥机制才能正确的工作。所以,如果你使用":memory:"的方式打开SQLite,不同线程之间很难共享一个数据库(每一个线程都打开了一个全新的实例),如果你简单的通过指针来共享,又会造成互斥机制不能正常工作,这个矛盾我还没有找到解决办法。


经过测试,发现SQLite和自己实现的数据结构(比如STL)的性能还是有一定差距,比如我遍历一个query的结果集的时间通常在几十毫秒(时间主要和记录集大小有关,几十毫秒是几十到几百条记录的结果),不过考虑到方便的存储和实现索引﹑事务等功能,这个开销还是值得的。

 

使用时注意如果你要使用显示事务(默认的DML语句操作使用autocommit模式),要自行控制重试,而不能像一般的网络数据库那样,由数据库连接进行阻塞等待,SQLite在你申请事务时会直接返回,不管成功与否;但你可以用下面的方法自行控制:

  1.     int iRet;
  2.     do 
  3.     {
  4.         iRet = CppSQLite3DB::exeDML("begin IMMEDIATE;");
  5.         if (iRet == SQLITE_BUSY)
  6.             Sleep(20);
  7.     } while(iRet == SQLITE_BUSY);

测试时,我用到了几个CodeProject网站上发表的封装类:
1)ODBC的封装类CODBCDatabase,CODBCRecordset
2)SQLite的封装类CppSQLite
3)对象池的封装类PoolMgr

这些类都是比较好的封装类,可以轻易地集成进自己的应用。我还特地实现了几个直接通过ODBC把网络数据库的内容转到SQLite的通用函数,这样,可以轻易地进行本地应用的数据初始化(特别当这些初始数据来自于网络数据库时),还可以用几句话就为这些数据建立合适的索引,起到真正的内存数据库的作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite 是一个轻量级的嵌入式关系型数据库引擎,被广泛应用于各种应用程序中。以下是几个 SQLite使用案例: 1. 移动应用程序:SQLite 在移动应用程序中被广泛使用。它可以用于存储和管理应用程序内的数据,如用户信息、设置、日志等。许多流行的移动应用程序框架,如Android和iOS,都支持 SQLite。 2. 桌面应用程序:SQLite 可以作为桌面应用程序的本地数据库。它可以用于存储和检索数据,如个人信息管理、笔记、日历等。SQLite 的轻量级特性使得它成为了许多桌面应用程序的理想选择。 3. Web 应用程序:SQLite 可以作为 Web 应用程序的后端数据库。它可以存储用户信息、文章、评论等数据,并提供查询和更新功能。在一些小型规模的 Web 项目中,SQLite 可以替代更重量级的数据库系统,提供简单而高效的数据管理。 4. 嵌入式设备:由于其轻量级和低资源消耗,SQLite 在嵌入式设备中得到广泛应用。它可以嵌入到诸如智能家居、物联网设备、嵌入式系统等小型设备中,用于存储和处理设备相关的数据。 5. 数据分析和报告生成:SQLite 可以用于数据分析和报告生成。通过将数据加载到 SQLite 数据库中,可以使用 SQL 查询语言进行数据分析和统计,生成各种报告和图表。 总之,SQLite 在各种应用场景中都提供了简单、快速和可靠的数据存储和管理功能,使得它成为了许多开发者的首选数据库引擎之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值