create Virtual table语句是否仅在RAM上创建表?如果那是真的,你如何用较少的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 + "));";
答案 0 :(得分:0)
我认为documentation非常明确:
虚拟表是外部存储或计算的接口 似乎是一个表但实际上没有存储的引擎 数据库文件中的信息。
虚拟表可以驻留在RAM中。更常见的是,它们将是某种磁盘文件或存储在另一个数据库中。
答案 1 :(得分:0)
您可以在此链接中看到一个很好的解释: https://sqlite.org/vtab.html
从SQL语句的角度来看,虚拟表对象看起来像任何其他表或视图。但在幕后,虚拟表上的查询和更新会调用虚拟表对象的回调方法,而不是在数据库文件上读取和写入。
虚拟表可能表示内存中的数据结构。或者它可能代表磁盘上不是SQLite格式的数据视图。或者应用程序可能会按需计算虚拟表的内容。
答案 2 :(得分:0)
虚拟表未使用常规机制实现;相反,它上面的所有操作都被重定向到某个虚拟表模块。
实际意味着什么取决于虚拟表模块选择如何实现它们。
有虚拟表模块可以访问存储在数据库外部的数据。 但是对于FTS,创建虚拟表还会在同一个数据库中创建多个shadow tables,这些数据库存储实际的表数据和全文索引的内容。这意味着您不必管理任何外部数据,并且所有操作都由通常的事务管理自动保护。