2017-03-04 181 views
1

创建虚拟表语句是否仅在RAM上创建表?如果那是真的,那么如何用较少的RAM设备来处理大数据呢?在SQLite中创建表与创建虚拟表有什么区别?

演示语句的机制 - 以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 + "));"; 
+0

FTS表忽略像UNIQUE这样的约束。 –

回答

0

虚拟表没有用通常的机制来实现;相反,其上的所有操作都会重定向到某个虚拟表模块。

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

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

0

我觉得documentation是很清楚的:

虚表是外部存储或计算 引擎的界面,似乎是一张表,但实际上并没有将 信息存储在数据库文件中。

虚拟表可能驻留在RAM中。更多的时候,它们会是某种磁盘文件或存储在另一个数据库中。

0

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

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

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