SQLite内存数据库
2014年01月19日 编程语言 评论关闭 被围观 425 次+SQLite内存数据库的创建SQLite数据库通常是存储在磁盘文件中,然而在有些情况下我们可以让数据库始终驻留在内存中,经测试同样条件下SQLite内存数据库插入速度比文件数据库快差不多3倍。
实现SQLite内存数据库的方法有:1、用内存虚拟一个磁盘,把SQLite的数据库文件放到这个虚拟磁盘中
2、利用Memcached实现SQLite内存数据库
3、在调用sqlite3_open()的时候,数据库文件名参数传递":memory:"
上述方法3是最常用的一种方式,如下:
sqlite3* memory_db;
int rc = sqlite3_open(":memory:", &memory_db); 在调用完以上函数后,一个新的数据库在内存中创建了,由于没有持久化,该数据库在当前连接关闭后就会立刻消失,而且没有数据库文件产生。需要注意的是,尽管多个数据库连接都可以通过上面的方法创建多个内存数据库,但它们却是不同的数据库,相互之间没有任何关系
,只能通过数据库连接来区分。
SQLite内存数据库的操作
可以通过如下方式把内存数据库持久化到文件中,也可以把文件数据库加载到内存数据库中:int SQLite3Backup(sqlite3* src_db, sqlite3* dest_db)
{ int rc = SQLITE_ERROR; sqlite3_backup* db_backup = sqlite3_backup_init(dest_db, "main", src_db, "main"); if(NULL !=db_backup) { rc = sqlite3_backup_step(db_backup, -1); rc = sqlite3_backup_finish(db_backup); } return rc;}// Open memory database
sqlite3* memory_db;rc = sqlite3_open(":memory:", &memory_db);// Open file database
sqlite3* file_db;rc = sqlite3_open(file_name, &file_db);// Dump memory database to file
SQLite3Backup(memory_db, file_db);// Load file database to memory
SQLite3Backup(file_db, memory_db);同样,也可以用Attach命令将内存数据库像其他普通数据库一样,附加到当前数据库连接中:ATTACH DATABASE ':memory:' AS cdb;
SQLite内存数据库的不足
在获得SQLite内存数据库操作方便、速度快的同时,也必须注意它有如下缺陷:1、当前数据库连接被关闭(或断电或程序崩溃)后就会立刻消失,需要定期Attach到文件中备份
2、内存数据库没有名字,不能直接地被别的进程访问
3、不支持读写互斥,需要手动加锁