SQLite虚表介绍

虚表

虚表是一种自定义的扩展,允许用户通过代码定制表的数据结构和数据内容;对于数据库引擎,它和普通表一样,允许进行大多数的sql操作。

  • 虚表和普通表的主要不同在于,其表中的数据的来源;对于普通表,来源于数据库的行列值;而对于虚表,来源于用户自定义函数,可以使数据库中的数据,也可以使其他的外部数据,如:磁盘文件(csv,excel)等;
  • 虚表是sqlite的一种高级特性,它的实现基于sqlite module;
  • 虚表被用于连接数据库引擎和可变的数据源,分为两种:internals and externals;
  • internal modules的数据来自于数据库文件本身,它的主要目的并不是做普通表不能做的,而是作为智能视图,更具扩展性的、更方便的、更快速的处理一些特定格式的数据;sqlite本身带有两个modules:FTS3和R*Tree,用于全文检索;
  • external modules的数据来自于数据库文件外部,如cvs、excel文件等;这样,在不导入外部数据到数据库的情况下,用户能够以sql的方式访问和处理外部数据源 (对于10万条记录,速度可以是秒级的);

Module APIs:

  • int sqlite3_create_module(sqlite3 *db,const char *name,const sqlite3_module *module,void*udp)
  • CREATE VIRTUAL TABLE table_name USING module_name(arg)
表操作:
  • xCreate,xConnect,xdisConnect,xDestroy
  • xBestIndex,xFindFunction,xUpdate,xRename
表扫描:
  • xOpen,xClose,xFilter,xNext,xEof
  • xRowid,xColumn
事务处理:
  • xBegin,xSync,xCommit,xRollback

全文检索

全文检索是internals module的一种应用,使用了fts3或fts4 module。
  • 该模块优化了对全文索引的插入和查询,减少了用户的工作量;
  • 该虚表对应了3~6个影子表,其存储实际的数据;当向虚表中插入文本内容时,相应的数据和索引会被插入到各影子表中
  • 对应若干种关键字查询方式;
  • 涉及多种toknizer,用户也可以定制词法分析器;
  • 索引表采取B-tree的存储方式,每插入一行,都会生成一个新的索引表,这可以降低索引表更新的效率,但是占用了大量的存储空间,因此,需要定期的merge索引表。
可以到sqlite官方网站上查询对虚表的解释( http://www.sqlite.org/vtab.html),而对与全文索引,sqlite源码中有相应的单元测试用例,可以通过这些用例查看全文索引的使用方法

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能