Sqlite 三篇“评测”,“内存数据库”,“no transaction is act
(from: http://blog.csdn.net/mynicedream) SQLite内存数据库使用有感SQLite不仅可以把数据库放在硬盘上,还可以放在内存中(sqlite3_open(":memory:",&db)),经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。但数据库放在内存中时有如下缺陷: 1、断电或程序崩溃后数据库就会消失,你需要定期Attach到硬盘上备份; 2、在内存中的数据库不能被别的进程访问(因为没名字,以后可能支持),即使在多线程下,也得使用同一句柄; 3、不支持像在硬盘上的读写互斥处理,自己加锁吧。 看来,追求速度要付出代价啊! SQLite的 cannot commit - no transaction is active报错最近测试SQLite时遇到了一个奇怪的问题,我在大批量循环插入记录时偶然会报告“cannot commit - no transaction is active”错误,多次尝试仍然如此,代码如下: ... for (int j=0;j<100000;j++) rc = sqlite3_exec(db,"BEGIN TRANSACTION;",NULL,&errMsg); rc = sqlite3_exec(db,&errMsg); } ... 后来,我发现每当报告“cannot commit - no transaction is active”错误前,还会报告一个“database or disk is full”错误,该错误是"INSERT INTO students VALUES(%d,时报告的,但事实上,我的硬盘空间很足,SQLite不是独占数据库访问吗?疑惑之下我到网上搜索了一番,发现可能是 Window文件系统问题或杀毒软件影响^.^,看来暂时没办法解决了,只能自己写好出错处理或期待SQLite出新版解决该BUG了。 免费的实时数据库,我们该选谁?----BerkeleyDB与SQLite评测对比最近要做一个项目,需要用到实时数据库,PI太贵了,想找一个免费的,实在不行就只能自己编了。找了半天,找到了FastDB、BerkeleyDB和SQLite. FastDB是内存型数据库,据说很快,但数据库大小不能大于物理内存,不然。。。反正我看到这就走了,我可是要一秒内处理几千个数据,还要保存8小时以 上的啊!BerkeleyDB和SQLite倒没有数据库大小不能大于物理内存的限制,我对他们的性能进行了测试,结果如下: |