2017-03-04 179 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格式。或者應用程序可能按需計算虛擬表的內容。