如何在首次运行时填充大型sqlite数据库

我正在开发一个基于SQLite数据库的字典应用程序,其中包含超过300,000行。

问题是最终forms的数据库文件由全文索引表组成,重量超过150Mb

我已经设法通过创建无内容的fts4表将.db文件大小降到最低。 数据库不能小一些 。 我还设法将预先填充的数据库放在应用程序中,它运行正常。

问题是我不能将最终的.db文件保存在/ assets中并在第一次运行时将其复制到sdcard,因为它太大了。 我也不想在第一次运行时下载它。

批量INSERT数据,即使对事务和sqlite进行了优化,并且启动时没有索引,因此它也不是一个选项。

好处是用于构建数据库的原始数据,以CSV格式和压缩,是30Mb和sqlite的命令行.import选项非常快(100,000行~1s)但是…它无法从没有root权限的应用。

我很乐意将应用程序与/ assets中的压缩CSV文件捆绑在一起,解压缩,在SD卡上创建数据库,然后导入CSV,但在我看来这是不可能的。 虽然有很多字典应用程序似乎正在这样做。 (下载的应用程序是十几兆字节,首次运行时构建数据库,并在SD卡上占用数百兆字节的空间)。

我该如何做到这一点?

过去两周我一直在研究这个问题,而且只是没有想法。 我是Android开发的新手,所以任何帮助都会非常感激。

  • 计划A:发送压缩的SQLite数据库文件并在安装后解压缩; 您应该能够省略索引并在以后重建它们。
  • 计划B:将CSV导入程序的相关部分复制到您的应用程序中,发送压缩的CSV文件并将其加载到空数据库中,就像命令行工具一样。 官方文档页面。

将整个内容创建到csv文件中,可能是多个csv文件并压缩成zip。 我在压缩后检查了32 MB的csv文件,文件变为482KB。

例如

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

将文件压缩为data.zip并将文件放入资产文件夹,导入时 – 逐个从zip中提取文件并插入到sqlite db中。