sqlite是一种单文档的数据库,不需要服务器的支持,可以嵌入到程序中。sqlite提供基本的C API,支持多种语言扩展Perl、Python和Java等,支持多平台Windows、Mac、POSIX接口的平台。此外,sqlite是开源、自由和免费,可自由地用于商业用途。
sqlite支持最大数据库大小2TB,但是,其更适用于几十GB;其中,100G大小的数据库在进行事务操作时,需要月25MB的内存;
sqlite默认是多线程安全的;
sqlite默认是只增大,不减小的;这是为了减低page cache的碎片化;需要主动运行"vacuum",在创建数据库时,可以设定自动清空模式"pragma auto_cacuum=1";
sqlite配置:默认的page size = 1KB,max size=2000;对于windows系统,可以"pragma page_size=4096,提高大数据存取性能;而且,每个connection对应一个b-tree和page cache;
c core api:基本API,sqlite3_prepare(编译),sqlite3_step(执行),sqlite3_finalize(清空),还有一些辅助函数sqlite3_bind_xxx,sqlite3_collumn_xxx;封装的API,sqlite3_exec,进一步封装sqlite3_get_table;
c extent api:各种用户自定义函数,sqlite3_create_function,sqlite3_create_aggregate,sqlite3_create_collation;
sqlite每个connection对应一种状态: unlocked -> pending -> shared -> reserved -> pending -> exclusive;其中,每个数据库只能对应一个pending、reserved和exclusive状态,它们对应写入操作;而shared对应读取操作;
用户需要处理多个线程、多个连接之间的存取,导致数据库锁死和忙的问题(sqlite_busy);相应的事务注册函数,sqlite3_busy_handler,sqlite3_busy_timeout;sqlite3_commit_hook,sqlite3_update_hook,sqlite3_set_authorize,log_sql;
sqlite数据库有两种模式: shared cache mode和isolation mode;其中,shared cache mode 对应多个客户线程与一个服务器线程交互,服务器线程可以对不同的表同时进行读写操作;而isolation mode则是标准的事务模式。
原文链接:https://www.f2er.com/sqlite/202170.html