【问题标题】:Whats difference between create table vs create virtual table in SQLite?在 SQLite 中创建表与创建虚拟表有什么区别?
【发布时间】:2017-07-24 07:24:43
【问题描述】:

create Virtual table 语句是否仅在 RAM 上创建表?如果这是真的,你怎么能用更少的内存设备处理大数据?

演示语句的机制-在sqllite中创建虚拟表。

如果你想要一个比这里简单的例子:

   //Create a FTS3 Virtual Table
    private static final String DATABASE_CREATE =
        "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" +
        KEY_CUSTOMER + "," +
        KEY_NAME + "," +
        KEY_ADDRESS1 + "," +
        KEY_ADDRESS2 + "," +
        KEY_CITY + "," +
        KEY_STATE + "," +
        KEY_ZIP + "," +
        KEY_SEARCH + "," +
        " UNIQUE (" + KEY_CUSTOMER + "));";

【问题讨论】:

  • FTS 表会忽略 UNIQUE 等约束。

标签: sqlite full-text-search create-table


【解决方案1】:

虚拟表不是用通常的机制实现的;相反,它的所有操作都被重定向到某个虚拟表模块。

这实际上意味着什么取决于虚拟表模块选择如何实现它们。

有一些虚拟表模块可以访问存储在数据库之外的数据。 但是在FTS的情况下,创建虚拟表也会在同一个数据库中创建几个shadow tables,这些shadow tables存储了实际的表数据和全文索引的内容。这意味着您不必管理任何外部数据,并且所有操作都受到常规事务管理的自动保护。

【讨论】:

    【解决方案2】:

    我觉得documentation很清楚:

    虚拟表是与外部存储或计算的接口 看起来是一个表但实际上并不存储的引擎 数据库文件中的信息。

    虚拟表可以驻留在 RAM 中。更多情况下,它们是某种磁盘文件或存储在另一个数据库中。

    【讨论】:

      【解决方案3】:

      您可以在此链接中看到一个很好的解释: https://sqlite.org/vtab.html

      从 SQL 语句的角度来看,虚拟表对象看起来像任何其他表或视图。但在幕后,对虚拟表的查询和更新会调用虚拟表对象的回调方法,而不是对数据库文件进行读写。

      虚拟表可能表示内存中的数据结构。或者它可能代表磁盘上非 SQLite 格式的数据视图。或者应用程序可能会按需计算虚拟表的内容。

      【讨论】:

        猜你喜欢
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多