加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite 三篇“评测”,“内存数据库”,“no transaction is act

发布时间:2020-12-12 23:37:20 所属栏目:百科 来源:网络整理
导读:(from: http://blog.csdn.net/mynicedream) SQLite内存数据库使用有感 SQLite不仅可以把数据库放在硬盘上,还可以放在内存中(sqlite3_open(":memory:",db)),经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。但数据库放在内存
Berkeley DB Sqlite 插入 10000 条记录耗时 0.08 0.42 插入 100000 条记录耗时 2.31 3.81 插入 7200000 条记录耗时 1024.34 249 插入 57600000 条记录耗时 12860.78 2155.14 插入 172800000 条记录耗时 48039.64 6352.06 10000 条记录查 1 记录耗时 少于 0.01 少于 0.01 100000 条记录查 1 记录耗时 少于 0.01 少于 0.01 7200000 条记录查 1 记录耗时 少于 0.01 少于 0.01 57600000 条记录查 1 记录耗时 0.03 0.16 172800000 条记录查 1 记录耗时 0.03 0.09 10000 条记录数据库大小 0.628M 0.527M 100000 条记录数据库大小 5.29M 5.32M 7200000 条记录数据库大小 516M 405M 57600000 条记录数据库大小 3087.13M 3925.8M 172800000 条记录数据库大小 11890.7M 10621.2M * 机器配置: Core2 E4500CPU 2G 内存

上表为两种数据库只建一个索引, Berkeley DB 不支持事务、 Sqlite 支持事务情况下的数据,如果 Berkeley DB 打开事务支持,速度会下降很大的数量级,根本不能满足需求。另外在程序崩溃后 Berkeley DB 数据库不可用, Sqlite 数据库仍可正常使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

(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);
for (int i=0;i<1000;i++)
{
strSQL.Format("INSERT INTO students VALUES(%d,%d,'%30d');",j,i,j*10000+i);
rc = sqlite3_exec(db,strSQL,&errMsg);
}
strSQL = "COMMIT TRANSACTION;";

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倒没有数据库大小不能大于物理内存的限制,我对他们的性能进行了测试,结果如下:

    推荐文章
      热点阅读