我正在开发一个基于SQLite数据库的字典应用程序,其中包含超过300,000行。
问题是最终形式的数据库文件由全文索引表组成,并且重量超过 150Mb 。
我设法通过创建无内容的fts4表将.db文件大小降到最低。 数据库不能是任何小的。我还设法将预先填充的数据库放在应用程序中,它运行正常。
问题是我不能将最终的.db文件保存在/ assets中并在第一次运行时将其复制到sdcard,因为它太大了。我也不想在第一次运行时下载它。
批量INSERT
数据,即使事务和sqlite已优化且开始时没有索引永远,所以它也不是一个选项。
好处是用于构建数据库的原始数据(CSV格式并且已压缩) 30Mb 且sqlite的命令行.import
选项非常快(~1s中100,000行) )但是......没有root权限就无法从应用程序访问它。
我希望将应用程序与/ assets中的压缩CSV文件捆绑在一起,解压缩,在SD卡上创建数据库,然后导入CSV,但似乎对我来说是不可能的。虽然有很多字典应用程序似乎正在做这件事。 (下载的应用程序是十几兆字节,首次运行时构建数据库,并在SD卡上占用数百兆字节的空间)。
我如何做到这一点?
过去两周我一直在研究这个问题,而且我的想法已经用完了。我是Android开发的新手,所以任何帮助都会非常感激。
答案 0 :(得分:2)
答案 1 :(得分:0)
将整个内容创建到csv文件中,可能是多个csv文件并压缩成zip。我在压缩后检查了32 MB的csv文件,文件变为482KB。
例如
data1.csv data2.csv data3.csv data4.csv data5.csv
将文件压缩成data.zip并将文件放入资产文件夹,导入时 - 逐个从zip中提取文件并插入到sqlite db中。