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源码中有相应的单元测试用例,可以通过这些用例查看全文索引的使用方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值