2013-08-07 30 views
2

我正在處理基於SQLite數據庫的字典應用程序,其數據量超過300,000行。如何在第一次運行時填充大型sqlite數據庫

問題是數據庫文件的最終形式包含全文索引表,並且重量超過150Mb

我已經設法通過創建一個無內容的fts4表將.db文件大小降到最低。 數據庫不能小於。我還設法將預填充的數據庫放入應用程序中,並且工作正常。

問題是我不能將最終的.db文件保存在/ assets中,並在第一次運行時將其複製到sdcard,因爲它太大了。我也不想在第一次運行時下載它。

散裝INSERT荷蘭國際集團的數據,即使在開始交易和SQLite優化,沒有索引需要永遠所以它也不是一個選項。

的好處是用來建立數據庫,以CSV格式和壓縮的原始數據,是30MB和SQLite的命令行選項.import非常快(10萬行〜1秒)。但它可以」無需root權限即可從應用程序訪問。

我很想將應用程序與/ assets中的壓縮CSV文件捆綁在一起,解壓縮它們,在SD卡上創建數據庫,然後導入CSV,但是似乎對我來說是不可能的。雖然有許多字典應用程序似乎正在做這個。 (下載的應用程序是十幾兆字節,首次運行時建立數據庫,並且在SD卡上佔用數百兆字節的空間)。

我該如何做到這一點?

我一直在爲此工作過去兩週,只是用完了想法。我是新開發的Android開發人員,所以我們將非常感謝您的幫助。

+0

交易** **或交易?只對所有插入使用單個事務很快。 –

+0

我的意思是單筆交易。這確實需要幾分鐘時間。 – MarshallBananas

+0

您是否使用PRAGMA語句(在所有其他語句之前調用,在sqlite數據庫上執行第一個命令之前調用)關閉sqlite同步模式(synchronous = off)並僅依賴於操作系統來描述應用程序?還要將日記模式更改爲內存:http://www.sqlite.org/pragma.html#pragma_synchronous –

回答

2
  • 計劃A:發佈壓縮的SQLite數據庫文件並在安裝後解壓縮;你應該能夠省略索引並在以後重建它們。
  • 計劃B:將CSV導入器的相關部分複製到您的應用程序中,發送一個壓縮的CSV文件並將其加載到像命令行工具那樣的空數據庫中。 Official documentation page.
+0

我發佈這個問題後,我實際上正在實施_Plan A_。但_Plan B_聽起來好多了。謝謝!完成後我會發布結果。 – MarshallBananas

+0

原來_Plan A_減少了必要數據的大小,就像_Plan B_一樣多。並且不需要使用csv插件來編譯sqlite。 _Plan A_是最好的選擇。再一次,謝謝你。 – MarshallBananas

0

將整個內容創建爲csv文件,可能包含多個csv文件並壓縮爲zip。在壓縮文件成爲482KB後,我檢查了32 MB csv文件。

對於實例

data1.csv data2.csv data3.csv data4.csv data5.csv

將文件壓縮到data.zip和導入時把文件放到資源文件夾, - 從zip中一個接一個地提取文件並插入到sqlite數據庫中。

+1

但是,如何導入csv文件?隨時將它們轉換爲SQL,批量插入需要數小時並使應用程序崩潰。唯一可行的選擇是使用'.import data.csv' sqlite命令,但不能從應用程序內訪問。 – MarshallBananas

相關問題